Configuration for Broker.

This commit is contained in:
2025-07-05 08:46:30 +02:00
parent 5534b00097
commit f96de8936d
9 changed files with 195 additions and 0 deletions

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\subm\messengerapi\code\MessengerApi.Configuration\MessengerApi.Configuration.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,51 @@
using MessengerApi.Configuration.Model.Persistence.Base;
using MessengerApi.Configuration.Parsers;
using MessengerApi.Configuration.Sources.Environment;
using MessengerBroker.Configuration.Model.Servers;
using MessengerBroker.Configuration.Parsers;
using MessengerBroker.Configuration.Sources.Environment;
namespace MessengerBroker.Configuration.Model
{
public class BrokerConfiguration
{
public PersistenceConfiguration ApiPersistenceConfiguration { get; set; }
public PersistenceConfiguration BrokerPersistenceConfiguration { get; set; }
/// <summary>
/// List of proxies that are trusted to provide forwarding headers.
/// </summary>
public string[] Proxies { get; set; }
public Guid BrokerId { get; set; }
public MasterServer[] MasterServers { get; set; }
public SlaveServer[] SlaveServers { get; set; }
public BrokerConfiguration(
PersistenceConfiguration apiPersistenceConfiguration,
PersistenceConfiguration broPersistenceConfiguration,
Guid brokerId,
MasterServer[] masters,
SlaveServer[] slaves)
{
this.ApiPersistenceConfiguration = apiPersistenceConfiguration;
this.BrokerPersistenceConfiguration = broPersistenceConfiguration;
this.BrokerId = brokerId;
this.MasterServers = masters;
this.SlaveServers = slaves;
this.Proxies = [];
}
public BrokerConfiguration(IEnvironmentConfigurationSource config):this(
ApiEnvironmentPersistenceConfigurationParser.Parse(config),
EnvironmentPersistenceConfigurationParser.Parse(config),
config.GetValue<Guid>(Constants.EnvironmentVariables.BROKER_ID),
MasterServerParser.Parse(config.GetValue<string>(Constants.EnvironmentVariables.MASTER_SERVERS)),
SlaveServerParser.Parse(config.GetValue<string>(Constants.EnvironmentVariables.SLAVE_SERVERS)))
{
}
}
}

View File

@ -0,0 +1,9 @@
namespace MessengerBroker.Configuration.Model.Servers.Base
{
public class Server
{
public Guid BrokerId { get; set; }
public string Name { get; set; }
}
}

View File

@ -0,0 +1,15 @@
using MessengerBroker.Configuration.Model.Servers.Base;
namespace MessengerBroker.Configuration.Model.Servers
{
/// <summary>
/// Server that we have to pull data from and provide alternate service for.
/// </summary>
public class MasterServer : Server
{
/// <summary>
/// Url of the Broker API we use to download the data.
/// </summary>
public string BrokerUrl { get; set; }
}
}

View File

@ -0,0 +1,11 @@
using MessengerBroker.Configuration.Model.Servers.Base;
namespace MessengerBroker.Configuration.Model.Servers
{
/// <summary>
/// Server that is pulling data from us and has to provide alternate service for us.
/// </summary>
public class SlaveServer : Server
{
}
}

View File

@ -0,0 +1,27 @@
using MessengerApi.Configuration.Model.Persistence;
using MessengerApi.Configuration.Model.Persistence.Base;
using MessengerApi.Configuration.Parsers;
using MessengerApi.Configuration.Sources.Environment;
using MessengerBroker.Configuration.Sources.Environment;
namespace MessengerBroker.Configuration.Parsers
{
public class ApiEnvironmentPersistenceConfigurationParser
{
public static PersistenceConfiguration Parse(IEnvironmentConfigurationSource config)
{
var type = PersistenceTypeParser.Parse(config.GetValue<string>(Constants.EnvironmentVariables.API_PERSISTENCE_TYPE));
if (type == MessengerApi.Configuration.Enums.PersistenceTypes.Sql)
{
return new SqlPersistenceConfiguration(config);
}
else if (type == MessengerApi.Configuration.Enums.PersistenceTypes.PostgreSql)
{
return new NpgPersistenceConfiguration(config);
}
throw new InvalidOperationException("Unrecognized persistence type.");
}
}
}

View File

@ -0,0 +1,27 @@
using MessengerBroker.Configuration.Model.Servers;
namespace MessengerBroker.Configuration.Parsers
{
public class MasterServerParser
{
public static MasterServer[] Parse(string value)
{
var servers = new List<MasterServer>();
var values = value.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
foreach(var v in values)
{
var props = v.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
servers.Add(new MasterServer
{
BrokerId = Guid.Parse(props[0]),
BrokerUrl = props[1],
Name = props[2]
});
}
return servers.ToArray();
}
}
}

View File

@ -0,0 +1,26 @@
using MessengerBroker.Configuration.Model.Servers;
namespace MessengerBroker.Configuration.Parsers
{
public static class SlaveServerParser
{
public static SlaveServer[] Parse(string value)
{
var servers = new List<SlaveServer>();
var values = value.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
foreach (var v in values)
{
var props = v.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
servers.Add(new SlaveServer
{
BrokerId = Guid.Parse(props[0]),
Name = props[1]
});
}
return servers.ToArray();
}
}
}

View File

@ -0,0 +1,16 @@

namespace MessengerBroker.Configuration.Sources.Environment
{
public class Constants
{
public static class EnvironmentVariables
{
public const string API_PERSISTENCE_TYPE = nameof(API_PERSISTENCE_TYPE);
public const string API_SQL_CONNECTIONSTRING = nameof(API_SQL_CONNECTIONSTRING);
public const string API_NPG_CONNECTIONSTRING = nameof(API_NPG_CONNECTIONSTRING);
public const string BROKER_ID = nameof(BROKER_ID);
public const string MASTER_SERVERS = nameof(MASTER_SERVERS);
public const string SLAVE_SERVERS = nameof(SLAVE_SERVERS);
}
}
}