diff --git a/src/ZB.MOM.WW.MxGateway.Server/Dashboard/DashboardSnapshotService.cs b/src/ZB.MOM.WW.MxGateway.Server/Dashboard/DashboardSnapshotService.cs index 290879c..15852aa 100644 --- a/src/ZB.MOM.WW.MxGateway.Server/Dashboard/DashboardSnapshotService.cs +++ b/src/ZB.MOM.WW.MxGateway.Server/Dashboard/DashboardSnapshotService.cs @@ -195,6 +195,7 @@ public sealed class DashboardSnapshotService : IDashboardSnapshotService new("mxgateway.workers.exited", snapshot.WorkerExits), new("mxgateway.heartbeats.failed", snapshot.HeartbeatFailures), new("mxgateway.grpc.streams.disconnected", snapshot.StreamDisconnects), + new("mxgateway.alarms.provider_switches", snapshot.AlarmProviderSwitchCount), ]; metrics.AddRange(snapshot.CommandFailuresByMethod diff --git a/src/ZB.MOM.WW.MxGateway.Tests/Gateway/Dashboard/DashboardSnapshotServiceTests.cs b/src/ZB.MOM.WW.MxGateway.Tests/Gateway/Dashboard/DashboardSnapshotServiceTests.cs index a50b374..a2e15ef 100644 --- a/src/ZB.MOM.WW.MxGateway.Tests/Gateway/Dashboard/DashboardSnapshotServiceTests.cs +++ b/src/ZB.MOM.WW.MxGateway.Tests/Gateway/Dashboard/DashboardSnapshotServiceTests.cs @@ -94,6 +94,24 @@ public sealed class DashboardSnapshotServiceTests Assert.Equal("worker pipe disconnected", fault.Message); } + /// + /// Verifies snapshot metrics include the cumulative alarm provider switch count. + /// + [Fact] + public void GetSnapshot_IncludesAlarmProviderSwitchCountMetric() + { + SessionRegistry registry = new(); + using GatewayMetrics metrics = new(); + metrics.AlarmProviderSwitched(1, 2, AlarmProviderSwitchReason.Failover); + DashboardSnapshotService service = CreateService(registry, metrics); + + DashboardSnapshot snapshot = service.GetSnapshot(); + + Assert.Contains( + snapshot.Metrics, + metric => metric.Name == "mxgateway.alarms.provider_switches" && metric.Value == 1); + } + /// /// Verifies snapshot redacts sensitive values from client identity, session name, and fault messages. ///