feat(observability): add diagnostic dashboards (#27)
This commit is contained in:
@@ -4,6 +4,7 @@ using FinalFactory.Rendezvous.Server.Abuse;
|
||||
using FinalFactory.Rendezvous.Server.Browser;
|
||||
using FinalFactory.Rendezvous.Server.ConnectionOutcomes;
|
||||
using FinalFactory.Rendezvous.Server.Deployment;
|
||||
using FinalFactory.Rendezvous.Server.Diagnostics;
|
||||
using FinalFactory.Rendezvous.Server.Http;
|
||||
using FinalFactory.Rendezvous.Server.JoinAttempts;
|
||||
using FinalFactory.Rendezvous.Server.Observability;
|
||||
@@ -251,6 +252,37 @@ if (!builder.Environment.IsDevelopment() && !isOpenApiGeneration)
|
||||
}
|
||||
|
||||
builder.Services.AddSingleton(Microsoft.Extensions.Options.Options.Create(deploymentOptions));
|
||||
DiagnosticDashboardOptions diagnosticDashboardOptions = builder.Configuration
|
||||
.GetSection(DiagnosticDashboardOptions.SectionName)
|
||||
.Get<DiagnosticDashboardOptions>() ?? new DiagnosticDashboardOptions();
|
||||
IReadOnlyList<string> diagnosticErrors = diagnosticDashboardOptions.Validate();
|
||||
if (diagnosticErrors.Count > 0)
|
||||
{
|
||||
throw new DeploymentConfigurationException(diagnosticErrors);
|
||||
}
|
||||
builder.Services.AddSingleton(
|
||||
Microsoft.Extensions.Options.Options.Create(diagnosticDashboardOptions));
|
||||
PrometheusMetricsOptions metricsOptions = builder.Configuration
|
||||
.GetSection(PrometheusMetricsOptions.SectionName)
|
||||
.Get<PrometheusMetricsOptions>() ?? new PrometheusMetricsOptions();
|
||||
IReadOnlyList<string> metricsErrors = metricsOptions.Validate();
|
||||
if (metricsErrors.Count > 0)
|
||||
{
|
||||
throw new DeploymentConfigurationException(metricsErrors);
|
||||
}
|
||||
builder.Services.AddSingleton(Microsoft.Extensions.Options.Options.Create(metricsOptions));
|
||||
MetricsAccessCredential? metricsCredential = null;
|
||||
if (metricsOptions.Enabled && !isOpenApiGeneration)
|
||||
{
|
||||
EnvironmentSecretProvider metricsSecrets = new();
|
||||
if (!MetricsAccessCredential.TryCreate(metricsOptions, metricsSecrets, out metricsCredential)
|
||||
|| metricsCredential is null)
|
||||
{
|
||||
throw new DeploymentConfigurationException(
|
||||
[$"{PrometheusMetricsOptions.SectionName}:BearerTokenSecretReference did not resolve to 32-128 visible ASCII bytes."]);
|
||||
}
|
||||
builder.Services.AddSingleton(metricsCredential);
|
||||
}
|
||||
builder.Services.Configure<HostOptions>(options =>
|
||||
options.ShutdownTimeout = TimeSpan.FromSeconds(deploymentOptions.DrainDeadlineSeconds + 10));
|
||||
|
||||
@@ -349,6 +381,8 @@ app.MapOpenApi();
|
||||
app.MapRendezvousContractEndpoints();
|
||||
app.MapOperatorEndpoints();
|
||||
app.MapRendezvousHealthEndpoints();
|
||||
app.MapDiagnosticDashboardEndpoints();
|
||||
app.MapPrometheusMetricsEndpoint(metricsOptions, metricsCredential);
|
||||
|
||||
await app.RunAsync();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user