fix: gateway reflects configured forced provider mode into gauge/feed (#2)
This commit is contained in:
@@ -157,19 +157,48 @@ public sealed class GatewayAlarmMonitor : BackgroundService, IGatewayAlarmServic
|
||||
private async Task RunMonitorAsync(string subscription, CancellationToken stoppingToken)
|
||||
{
|
||||
_state = GatewayAlarmMonitorState.Starting;
|
||||
|
||||
// Derive the lifecycle baseline from the configured forced mode so a
|
||||
// ForceSubtag / ForceAlarmManager start advertises the correct mode even
|
||||
// though no OnAlarmProviderModeChanged event is raised in those modes
|
||||
// (only Auto/failover produces that event). ForceSubtag starts degraded.
|
||||
AlarmProviderMode initialMode;
|
||||
bool initialDegraded;
|
||||
string initialReason;
|
||||
switch (MapForcedMode(_options.Fallback.Mode))
|
||||
{
|
||||
case AlarmProviderMode.Subtag:
|
||||
initialMode = AlarmProviderMode.Subtag;
|
||||
initialDegraded = true;
|
||||
initialReason = "Forced subtag mode (configuration)";
|
||||
break;
|
||||
case AlarmProviderMode.Alarmmgr:
|
||||
initialMode = AlarmProviderMode.Alarmmgr;
|
||||
initialDegraded = false;
|
||||
initialReason = string.Empty;
|
||||
break;
|
||||
default:
|
||||
// Unspecified (Auto): the failover consumer starts on the
|
||||
// alarm-manager primary and only degrades to subtag on failure.
|
||||
initialMode = AlarmProviderMode.Alarmmgr;
|
||||
initialDegraded = false;
|
||||
initialReason = string.Empty;
|
||||
break;
|
||||
}
|
||||
|
||||
lock (_sync)
|
||||
{
|
||||
// Re-baseline the provider status for this lifecycle so a restarted
|
||||
// monitor advertises alarm-manager/not-degraded until told otherwise.
|
||||
_providerMode = AlarmProviderMode.Alarmmgr;
|
||||
_providerDegraded = false;
|
||||
_providerReason = string.Empty;
|
||||
// monitor advertises the configured mode until told otherwise.
|
||||
_providerMode = initialMode;
|
||||
_providerDegraded = initialDegraded;
|
||||
_providerReason = initialReason;
|
||||
_providerSince = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
// Align the observable gauge with the Alarmmgr baseline without recording
|
||||
// Align the observable gauge with the lifecycle baseline without recording
|
||||
// a switch — the gauge was 0 (unknown) from construction until now.
|
||||
_metrics.SetAlarmProviderMode(ModeToInt(AlarmProviderMode.Alarmmgr));
|
||||
_metrics.SetAlarmProviderMode(ModeToInt(initialMode));
|
||||
|
||||
GatewaySession session = await _sessionManager.OpenSessionAsync(
|
||||
new SessionOpenRequest(BackendName, MonitorClientName, Guid.NewGuid().ToString("N"), CommandTimeout: null),
|
||||
@@ -256,6 +285,10 @@ public sealed class GatewayAlarmMonitor : BackgroundService, IGatewayAlarmServic
|
||||
|
||||
AlarmProviderMode forcedMode = MapForcedMode(_options.Fallback.Mode);
|
||||
|
||||
_logger.LogInformation(
|
||||
"Alarm subscribe: forcedMode={ForcedMode} configMode={ConfigMode} watchList={WatchListCount}.",
|
||||
forcedMode, _options.Fallback.Mode, watchList.Count);
|
||||
|
||||
// When the forced mode is Unspecified (the "Auto" case) and the resolved
|
||||
// watch-list is empty — the common alarmmgr-only deployment — the command
|
||||
// is identical-in-effect to the historical SubscribeAlarms (wnwrap only):
|
||||
|
||||
Reference in New Issue
Block a user