Repository navigation
Expand file tree
/
Copy pathServiceControlErrorInstanceEnvironmentDataProvider.cs
More file actions
79 lines (66 loc) · 4 KB
/
Copy pathServiceControlErrorInstanceEnvironmentDataProvider.cs
File metadata and controls
79 lines (66 loc) · 4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
namespace Particular.ServiceControl;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using global::ServiceControl.Infrastructure;
using global::ServiceControl.Persistence;
using Microsoft.Extensions.Configuration;
using Particular.LicensingComponent.Contracts;
using ServiceBus.Management.Infrastructure.Settings;
using static Particular.LicensingComponent.Contracts.EnvironmentDatum;
class ServiceControlErrorInstanceEnvironmentDataProvider(Settings settings, INotificationsDataStore notificationsDataStore, IConfiguration configuration) : IEnvironmentDataProvider
{
public IEnumerable<EnvironmentDatum> GetData() =>
[
Value("Features.IntegratedServicePulse", () => Toggle(settings.EnableIntegratedServicePulse)),
Value("Features.MessageEditing", () => Toggle(settings.AllowMessageEditing)),
Value("Features.ExternalIntegrationsPublishing", () => Toggle(settings.EnableExternalIntegrationsPublishing)),
Value("Features.ForwardErrorMessages", () => Toggle(settings.ForwardErrorMessages)),
Value("Features.ErrorIngestion", () => Toggle(settings.IngestErrorMessages)),
Value("Features.ConfigurationValidation", () => Toggle(settings.ValidateConfiguration)),
Deferred("Features.EmailNotifications", EmailNotifications),
Value("ServicePulse.MonitoringUrl", ServicePulseMonitoringUrl),
Value("ServicePulse.DefaultRoute", () => WhenServicePulseIntegrated(() => EnvironmentVariableSet(ServicePulseDefaultRouteVariable) ? "Custom" : "Default")),
Value("ServicePulse.ShowPendingRetry", () => WhenServicePulseIntegrated(() => Toggle(settings.ServicePulseSettings.ShowPendingRetry))),
Value("Host.VirtualDirectory", () => string.IsNullOrEmpty(settings.VirtualDirectory) ? "None" : "Configured"),
Value("Logging.Providers", LoggingProviders),
Value("Logging.Level", () => settings.LoggingSettings.LogLevel.ToString()),
Value("Telemetry.OtlpMetrics", () => Toggle(OtlpEndpoint.Read(configuration) is not null)),
Value("Retention.ErrorHours", () => Hours(settings.ErrorRetentionPeriod)),
Value("Retention.EventsHours", () => Hours(settings.EventsRetentionPeriod))
];
static string Toggle(bool enabled) => enabled ? "Enabled" : "Disabled";
static string Hours(TimeSpan retentionPeriod) =>
Math.Round(retentionPeriod.TotalHours, MidpointRounding.AwayFromZero).ToString("F0", CultureInfo.InvariantCulture);
async ValueTask<string> EmailNotifications(CancellationToken cancellationToken)
{
var notificationsSettings = await notificationsDataStore.LoadSettings(cancellationToken);
if (notificationsSettings.Email.Enabled)
{
return "Enabled";
}
return string.IsNullOrWhiteSpace(notificationsSettings.Email.SmtpServer) ? "NotConfigured" : "Disabled";
}
string ServicePulseMonitoringUrl() => WhenServicePulseIntegrated(() =>
{
if (settings.ServicePulseSettings.MonitoringUrl is null)
{
return "Disabled";
}
return EnvironmentVariableSet(ServicePulseMonitoringUrlVariable) || EnvironmentVariableSet(ServicePulseLegacyMonitoringUrlsVariable) ? "Custom" : "Default";
});
string WhenServicePulseIntegrated(Func<string> readValue) => settings.EnableIntegratedServicePulse ? readValue() : NotApplicable;
static bool EnvironmentVariableSet(string name) => Environment.GetEnvironmentVariable(name) is not null;
static string LoggingProviders()
{
var providers = new[] { Loggers.NLog, Loggers.Seq, Loggers.Otlp }.Where(LoggerUtil.IsLoggingTo).ToArray();
return providers.Length == 0 ? "None" : string.Join(",", providers);
}
const string NotApplicable = "NotApplicable";
const string ServicePulseMonitoringUrlVariable = "MONITORING_URL";
const string ServicePulseLegacyMonitoringUrlsVariable = "MONITORING_URLS";
const string ServicePulseDefaultRouteVariable = "DEFAULT_ROUTE";
}