mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-28 15:40:56 +01:00
Adds a setup wizard + more tweaks
This commit is contained in:
@@ -120,7 +120,6 @@ namespace Tgstation.Server.Host.Core
|
||||
services.UseStandardConfig<UpdatesConfiguration>(Configuration);
|
||||
services.UseStandardConfig<ControlPanelConfiguration>(Configuration);
|
||||
services.UseStandardConfig<SwarmConfiguration>(Configuration);
|
||||
services.UseStandardConfig<ElasticsearchConfiguration>(Configuration);
|
||||
|
||||
// enable options which give us config reloading
|
||||
services.AddOptions();
|
||||
@@ -179,7 +178,8 @@ namespace Tgstation.Server.Host.Core
|
||||
flushToDiskInterval: TimeSpan.FromSeconds(2),
|
||||
rollingInterval: RollingInterval.Day,
|
||||
rollOnFileSizeLimit: true);
|
||||
}, postSetupServices.ElasticsearchConfiguration);
|
||||
},
|
||||
postSetupServices.ElasticsearchConfiguration);
|
||||
|
||||
// configure bearer token validation
|
||||
services
|
||||
|
||||
@@ -60,13 +60,13 @@ namespace Tgstation.Server.Host.Extensions
|
||||
/// <param name="serviceCollection">The <see cref="IServiceCollection"/> to configure.</param>
|
||||
/// <param name="configurationAction">Additional configuration for a given <see cref="LoggerConfiguration"/>.</param>
|
||||
/// <param name="sinkConfigurationAction">Additional configuration for a given <see cref="LoggerSinkConfiguration"/>.</param>
|
||||
/// <param name="esc">Configuration for a given <see cref="ElasticsearchConfiguration"/>.</param>
|
||||
/// <param name="elasticsearchConfiguration">Configuration for a given <see cref="ElasticsearchConfiguration"/>.</param>
|
||||
/// <returns>The updated <paramref name="serviceCollection"/>.</returns>
|
||||
public static IServiceCollection SetupLogging(
|
||||
this IServiceCollection serviceCollection,
|
||||
Action<LoggerConfiguration> configurationAction,
|
||||
Action<LoggerSinkConfiguration> sinkConfigurationAction = null,
|
||||
ElasticsearchConfiguration esc = null)
|
||||
ElasticsearchConfiguration elasticsearchConfiguration = null)
|
||||
=> serviceCollection.AddLogging(builder =>
|
||||
{
|
||||
builder.ClearProviders();
|
||||
@@ -89,18 +89,18 @@ namespace Tgstation.Server.Host.Extensions
|
||||
sinkConfigurationAction?.Invoke(sinkConfiguration);
|
||||
});
|
||||
|
||||
if (esc != null)
|
||||
if (elasticsearchConfiguration != null)
|
||||
{
|
||||
if (esc.Enable)
|
||||
if (elasticsearchConfiguration.Enable)
|
||||
{
|
||||
if (esc.Host == null)
|
||||
if (elasticsearchConfiguration.Host == null)
|
||||
throw new InvalidOperationException("Elasticsearch endpoint is null!");
|
||||
|
||||
configuration.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(esc.Host))
|
||||
configuration.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticsearchConfiguration.Host))
|
||||
{
|
||||
// Yes I know this means they cannot use a self signed cert unless they also have authentication, but lets be real here
|
||||
// No one is going to be doing one of thsoe but not the other
|
||||
ModifyConnectionSettings = x => (!string.IsNullOrEmpty(esc.Username) && !string.IsNullOrEmpty(esc.Password)) ? x.BasicAuthentication(esc.Username, esc.Password).ServerCertificateValidationCallback((o, certificate, arg3, arg4) => { return true; }) : null,
|
||||
ModifyConnectionSettings = x => (!string.IsNullOrEmpty(elasticsearchConfiguration.Username) && !string.IsNullOrEmpty(elasticsearchConfiguration.Password)) ? x.BasicAuthentication(elasticsearchConfiguration.Username, elasticsearchConfiguration.Password).ServerCertificateValidationCallback((o, certificate, arg3, arg4) => { return true; }) : null,
|
||||
CustomFormatter = new EcsTextFormatter(),
|
||||
AutoRegisterTemplate = true,
|
||||
AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
|
||||
|
||||
@@ -740,6 +740,51 @@ namespace Tgstation.Server.Host.Setup
|
||||
return fileLoggingConfiguration;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Prompts the user to create a <see cref="ElasticsearchConfiguration"/>.
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation.</param>
|
||||
/// <returns>A <see cref="Task{TResult}"/> resulting in the new <see cref="ElasticsearchConfiguration"/>.</returns>
|
||||
async Task<ElasticsearchConfiguration> ConfigureElasticsearch(CancellationToken cancellationToken) {
|
||||
var elasticsearchConfiguration = new ElasticsearchConfiguration();
|
||||
await console.WriteAsync(null, true, cancellationToken).ConfigureAwait(false);
|
||||
elasticsearchConfiguration.Enable = await PromptYesNo("Enable logging to an external ElasticSearch server? (y/n): ", cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (elasticsearchConfiguration.Enable)
|
||||
{
|
||||
do
|
||||
{
|
||||
await console.WriteAsync("ElasticSearch server endpoint (Include protocol and port, leave blank for http://127.0.0.1:9200): ", false, cancellationToken).ConfigureAwait(false);
|
||||
elasticsearchConfiguration.Host = await console.ReadLineAsync(false, cancellationToken).ConfigureAwait(false);
|
||||
if (!String.IsNullOrWhiteSpace(elasticsearchConfiguration.Host))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (true);
|
||||
|
||||
do
|
||||
{
|
||||
await console.WriteAsync("Enter Elasticsearch username: ", false, cancellationToken).ConfigureAwait(false);
|
||||
elasticsearchConfiguration.Username = await console.ReadLineAsync(false, cancellationToken).ConfigureAwait(false);
|
||||
if (!String.IsNullOrWhiteSpace(elasticsearchConfiguration.Username)) {
|
||||
break;
|
||||
}
|
||||
} while (true);
|
||||
|
||||
do
|
||||
{
|
||||
await console.WriteAsync("Enter password: ", false, cancellationToken).ConfigureAwait(false);
|
||||
elasticsearchConfiguration.Password = await console.ReadLineAsync(true, cancellationToken).ConfigureAwait(false);
|
||||
if (!String.IsNullOrWhiteSpace(elasticsearchConfiguration.Username)) {
|
||||
break;
|
||||
}
|
||||
} while (true);
|
||||
}
|
||||
|
||||
return elasticsearchConfiguration;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Prompts the user to create a <see cref="ControlPanelConfiguration"/>.
|
||||
/// </summary>
|
||||
@@ -834,6 +879,7 @@ namespace Tgstation.Server.Host.Setup
|
||||
/// <param name="databaseConfiguration">The <see cref="DatabaseConfiguration"/> to save.</param>
|
||||
/// <param name="newGeneralConfiguration">The <see cref="GeneralConfiguration"/> to save.</param>
|
||||
/// <param name="fileLoggingConfiguration">The <see cref="FileLoggingConfiguration"/> to save.</param>
|
||||
/// <param name="elasticsearchConfiguration">The <see cref="ElasticsearchConfiguration"/> to save.</param>
|
||||
/// <param name="controlPanelConfiguration">The <see cref="ControlPanelConfiguration"/> to save.</param>
|
||||
/// <param name="swarmConfiguration">The <see cref="SwarmConfiguration"/> to save.</param>
|
||||
/// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation.</param>
|
||||
@@ -844,6 +890,7 @@ namespace Tgstation.Server.Host.Setup
|
||||
DatabaseConfiguration databaseConfiguration,
|
||||
GeneralConfiguration newGeneralConfiguration,
|
||||
FileLoggingConfiguration fileLoggingConfiguration,
|
||||
ElasticsearchConfiguration elasticsearchConfiguration,
|
||||
ControlPanelConfiguration controlPanelConfiguration,
|
||||
SwarmConfiguration swarmConfiguration,
|
||||
CancellationToken cancellationToken)
|
||||
@@ -857,6 +904,7 @@ namespace Tgstation.Server.Host.Setup
|
||||
{ DatabaseConfiguration.Section, databaseConfiguration },
|
||||
{ GeneralConfiguration.Section, newGeneralConfiguration },
|
||||
{ FileLoggingConfiguration.Section, fileLoggingConfiguration },
|
||||
{ ElasticsearchConfiguration.Section, elasticsearchConfiguration },
|
||||
{ ControlPanelConfiguration.Section, controlPanelConfiguration },
|
||||
{ SwarmConfiguration.Section, swarmConfiguration },
|
||||
};
|
||||
@@ -931,6 +979,8 @@ namespace Tgstation.Server.Host.Setup
|
||||
|
||||
var fileLoggingConfiguration = await ConfigureLogging(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var elasticSearchConfiguration = await ConfigureElasticsearch(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var controlPanelConfiguration = await ConfigureControlPanel(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var swarmConfiguration = await ConfigureSwarm(cancellationToken).ConfigureAwait(false);
|
||||
@@ -943,6 +993,7 @@ namespace Tgstation.Server.Host.Setup
|
||||
databaseConfiguration,
|
||||
newGeneralConfiguration,
|
||||
fileLoggingConfiguration,
|
||||
elasticSearchConfiguration,
|
||||
controlPanelConfiguration,
|
||||
swarmConfiguration,
|
||||
cancellationToken)
|
||||
|
||||
Reference in New Issue
Block a user