Skip to content

Commit 53c6fda

Browse files
authored
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)
1 parent a0e66e1 commit 53c6fda

File tree

4 files changed

+78
-36
lines changed

4 files changed

+78
-36
lines changed

src/LinkerConsoleApp/LinkerConsoleApp.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
<None Update="appsettings.prod.json">
2525
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2626
</None>
27+
<None Update="NLog.config">
28+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
29+
</None>
2730
</ItemGroup>
2831

2932
</Project>

src/LinkerConsoleApp/LinkerSettings.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
1-
namespace LinkerConsoleApp
1+
using System.Collections.Generic;
2+
using Linker;
3+
4+
namespace LinkerConsoleApp
25
{
6+
public class LinkerSettings
7+
{
8+
public Link[] Links { get; set; }
9+
}
10+
public class Link
11+
{
12+
public Origin Origin { get; set; }
13+
public Destination Destination { get; set; }
14+
public IEnumerable<Filter> Filters { get; set; }
15+
}
316
public class Origin
417
{
518
public string ConnectionString { get; set; }

src/LinkerConsoleApp/Program.cs

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System;
22
using System.Collections.Generic;
33
using System.IO;
4+
using System.Linq;
5+
using System.Threading.Tasks;
46
using EventStore.ClientAPI;
57
using EventStore.ClientAPI.SystemData;
68
using Linker;
@@ -11,37 +13,51 @@ namespace LinkerConsoleApp
1113
{
1214
class Program
1315
{
14-
private static Logger Log = LogManager.GetCurrentClassLogger();
16+
private static readonly Logger Log = LogManager.GetCurrentClassLogger();
1517
static void Main(string[] args)
1618
{
1719
Log.Info("Building services...");
20+
var config = BuildConfig();
21+
var links = config.GetSection("links").Get<IEnumerable<Link>>();
22+
var services = new List<LinkerService>();
23+
foreach (var link in links)
24+
{
25+
var filters = link.Filters.Select(linkFilter => new Filter
26+
{
27+
FilterOperation = linkFilter.FilterOperation, FilterType = linkFilter.FilterType,
28+
Value = linkFilter.Value
29+
}).ToList();
30+
var filterService = new FilterService(filters);
31+
var service = new LinkerService(new LinkerConnectionBuilder(new Uri(link.Origin.ConnectionString),
32+
ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(link.Origin.User, link.Origin.Pass)),
33+
link.Origin.ConnectionName), new LinkerConnectionBuilder(new Uri(link.Destination.ConnectionString),
34+
ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(link.Destination.User, link.Destination.Pass)),
35+
link.Destination.ConnectionName), filterService, Settings.Default(), new NLogger());
36+
services.Add(service);
37+
}
38+
StartServices(services);
39+
Log.Info("Press enter to exit the program");
40+
Console.ReadLine();
41+
}
42+
43+
private static async Task StartServices(IEnumerable<LinkerService> services)
44+
{
45+
foreach (var linkerService in services)
46+
{
47+
Log.Info($"Starting {linkerService.Name}");
48+
await linkerService.Start();
49+
}
50+
}
1851

19-
var env = Environment.GetEnvironmentVariable("CORE_ENVIRONMENT");
52+
private static IConfigurationRoot BuildConfig()
53+
{
54+
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
2055
var builder = new ConfigurationBuilder()
2156
.SetBasePath(Directory.GetCurrentDirectory())
2257
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
2358
.AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: false)
2459
.AddEnvironmentVariables();
25-
var config = builder.Build();
26-
27-
var origin = config.GetSection("origin").Get<Origin>();
28-
var destination = config.GetSection("destination").Get<Destination>();
29-
var filterService = new FilterService(new List<Filter>
30-
{
31-
new Filter { FilterOperation = FilterOperation.Exclude, FilterType = FilterType.Stream, Value = "diary-*" },
32-
new Filter { FilterOperation = FilterOperation.Include, FilterType = FilterType.Stream, Value = "*" }
33-
});
34-
35-
var service = new LinkerService(new LinkerConnectionBuilder(new Uri(origin.ConnectionString),
36-
ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(origin.User, origin.Pass)),
37-
origin.ConnectionName), new LinkerConnectionBuilder(new Uri(destination.ConnectionString),
38-
ConnectionSettings.Create().SetDefaultUserCredentials(new UserCredentials(destination.User, destination.Pass)),
39-
destination.ConnectionName), filterService, Settings.Default(), new NLogger());
40-
service.Start().Wait();
41-
42-
Log.Info("Replica Service started");
43-
Log.Info("Press enter to exit the program");
44-
Console.ReadLine();
60+
return builder.Build();
4561
}
4662
}
4763
}

src/LinkerConsoleApp/appsettings.json

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
{
2-
"Environment": "local",
3-
"origin": {
4-
"connectionString": "tcp://localhost:1112",
5-
"user": "admin",
6-
"pass": "changeit",
7-
"connectionName": "origin-01"
8-
},
9-
"destination": {
10-
"connectionString": "tcp://localhost:2112",
11-
"user": "admin",
12-
"pass": "changeit",
13-
"connectionName": "destination-01"
14-
}
2+
"links": [
3+
{
4+
"origin": {
5+
"connectionString": "tcp://localhost:1112",
6+
"user": "admin",
7+
"pass": "changeit",
8+
"connectionName": "origin-01"
9+
},
10+
"destination": {
11+
"connectionString": "tcp://localhost:2112",
12+
"user": "admin",
13+
"pass": "changeit",
14+
"connectionName": "destination-01"
15+
},
16+
"filters": [
17+
{
18+
"filterType": "stream",
19+
"value": "diary-input",
20+
"filterOperation": "exclude"
21+
}
22+
]
23+
}
24+
]
1525
}

0 commit comments

Comments
 (0)