From 53c6fda9c206019bad5c1f535ec09a78323d32d8 Mon Sep 17 00:00:00 2001 From: Riccardo Di Nuzzo Date: Sun, 15 Sep 2019 19:02:42 +0100 Subject: [PATCH] implemented loading, configuring, starting multiple links with filters reading from appsettings.env.json; use ASPNETCORE_ENVIRONMENT to load your specific setting file (and set in your .gitignore) (#3) --- src/LinkerConsoleApp/LinkerConsoleApp.csproj | 3 + src/LinkerConsoleApp/LinkerSettings.cs | 15 ++++- src/LinkerConsoleApp/Program.cs | 60 +++++++++++++------- src/LinkerConsoleApp/appsettings.json | 36 +++++++----- 4 files changed, 78 insertions(+), 36 deletions(-) diff --git a/src/LinkerConsoleApp/LinkerConsoleApp.csproj b/src/LinkerConsoleApp/LinkerConsoleApp.csproj index 9ba7c13..35d4bf9 100644 --- a/src/LinkerConsoleApp/LinkerConsoleApp.csproj +++ b/src/LinkerConsoleApp/LinkerConsoleApp.csproj @@ -24,6 +24,9 @@ PreserveNewest + + PreserveNewest + diff --git a/src/LinkerConsoleApp/LinkerSettings.cs b/src/LinkerConsoleApp/LinkerSettings.cs index de85834..f8c81cf 100644 --- a/src/LinkerConsoleApp/LinkerSettings.cs +++ b/src/LinkerConsoleApp/LinkerSettings.cs @@ -1,5 +1,18 @@ -namespace LinkerConsoleApp +using System.Collections.Generic; +using Linker; + +namespace LinkerConsoleApp { + public class LinkerSettings + { + public Link[] Links { get; set; } + } + public class Link + { + public Origin Origin { get; set; } + public Destination Destination { get; set; } + public IEnumerable Filters { get; set; } + } public class Origin { public string ConnectionString { get; set; } diff --git a/src/LinkerConsoleApp/Program.cs b/src/LinkerConsoleApp/Program.cs index 1cb1610..84746f1 100644 --- a/src/LinkerConsoleApp/Program.cs +++ b/src/LinkerConsoleApp/Program.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; +using System.Threading.Tasks; using EventStore.ClientAPI; using EventStore.ClientAPI.SystemData; using Linker; @@ -11,37 +13,51 @@ namespace LinkerConsoleApp { class Program { - private static Logger Log = LogManager.GetCurrentClassLogger(); + private static readonly Logger Log = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { Log.Info("Building services..."); + var config = BuildConfig(); + var links = config.GetSection("links").Get>(); + var services = new List(); + foreach (var link in links) + { + var filters = link.Filters.Select(linkFilter => new Filter + { + FilterOperation = linkFilter.FilterOperation, FilterType = linkFilter.FilterType, + Value = linkFilter.Value + }).ToList(); + var filterService = new FilterService(filters); + var service = new LinkerService(new LinkerConnectionBuilder(new Uri(link.Origin.ConnectionString), + ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(link.Origin.User, link.Origin.Pass)), + link.Origin.ConnectionName), new LinkerConnectionBuilder(new Uri(link.Destination.ConnectionString), + ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(link.Destination.User, link.Destination.Pass)), + link.Destination.ConnectionName), filterService, Settings.Default(), new NLogger()); + services.Add(service); + } + StartServices(services); + Log.Info("Press enter to exit the program"); + Console.ReadLine(); + } + + private static async Task StartServices(IEnumerable services) + { + foreach (var linkerService in services) + { + Log.Info($"Starting {linkerService.Name}"); + await linkerService.Start(); + } + } - var env = Environment.GetEnvironmentVariable("CORE_ENVIRONMENT"); + private static IConfigurationRoot BuildConfig() + { + var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false) .AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: false) .AddEnvironmentVariables(); - var config = builder.Build(); - - var origin = config.GetSection("origin").Get(); - var destination = config.GetSection("destination").Get(); - var filterService = new FilterService(new List - { - new Filter { FilterOperation = FilterOperation.Exclude, FilterType = FilterType.Stream, Value = "diary-*" }, - new Filter { FilterOperation = FilterOperation.Include, FilterType = FilterType.Stream, Value = "*" } - }); - - var service = new LinkerService(new LinkerConnectionBuilder(new Uri(origin.ConnectionString), - ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(origin.User, origin.Pass)), - origin.ConnectionName), new LinkerConnectionBuilder(new Uri(destination.ConnectionString), - ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(destination.User, destination.Pass)), - destination.ConnectionName), filterService, Settings.Default(), new NLogger()); - service.Start().Wait(); - - Log.Info("Replica Service started"); - Log.Info("Press enter to exit the program"); - Console.ReadLine(); + return builder.Build(); } } } diff --git a/src/LinkerConsoleApp/appsettings.json b/src/LinkerConsoleApp/appsettings.json index babea9f..5999266 100644 --- a/src/LinkerConsoleApp/appsettings.json +++ b/src/LinkerConsoleApp/appsettings.json @@ -1,15 +1,25 @@ { - "Environment": "local", - "origin": { - "connectionString": "tcp://localhost:1112", - "user": "admin", - "pass": "changeit", - "connectionName": "origin-01" - }, - "destination": { - "connectionString": "tcp://localhost:2112", - "user": "admin", - "pass": "changeit", - "connectionName": "destination-01" - } + "links": [ + { + "origin": { + "connectionString": "tcp://localhost:1112", + "user": "admin", + "pass": "changeit", + "connectionName": "origin-01" + }, + "destination": { + "connectionString": "tcp://localhost:2112", + "user": "admin", + "pass": "changeit", + "connectionName": "destination-01" + }, + "filters": [ + { + "filterType": "stream", + "value": "diary-input", + "filterOperation": "exclude" + } + ] + } + ] } \ No newline at end of file