Skip to content

Commit

Permalink
implemented loading, configuring, starting multiple links with filter…
Browse files Browse the repository at this point in the history
…s reading from appsettings.env.json; use ASPNETCORE_ENVIRONMENT to load your specific setting file (and set in your .gitignore) (#3)
  • Loading branch information
riccardone authored Sep 15, 2019
1 parent a0e66e1 commit 53c6fda
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 36 deletions.
3 changes: 3 additions & 0 deletions src/LinkerConsoleApp/LinkerConsoleApp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
<None Update="appsettings.prod.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="NLog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>
15 changes: 14 additions & 1 deletion src/LinkerConsoleApp/LinkerSettings.cs
Original file line number Diff line number Diff line change
@@ -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<Filter> Filters { get; set; }
}
public class Origin
{
public string ConnectionString { get; set; }
Expand Down
60 changes: 38 additions & 22 deletions src/LinkerConsoleApp/Program.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<IEnumerable<Link>>();
var services = new List<LinkerService>();
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<LinkerService> 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<Origin>();
var destination = config.GetSection("destination").Get<Destination>();
var filterService = new FilterService(new List<Filter>
{
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();
}
}
}
36 changes: 23 additions & 13 deletions src/LinkerConsoleApp/appsettings.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
}
]
}

0 comments on commit 53c6fda

Please sign in to comment.