using ZB.MOM.WW.LmxOpcUa.Host.Domain; using ZB.MOM.WW.LmxOpcUa.Host.Metrics; namespace ZB.MOM.WW.LmxOpcUa.Host.Status { /// /// Determines health status based on connection state and operation success rates. (DASH-003) /// public class HealthCheckService { public HealthInfo CheckHealth(ConnectionState connectionState, PerformanceMetrics? metrics) { // Rule 1: Not connected → Unhealthy if (connectionState != ConnectionState.Connected) { return new HealthInfo { Status = "Unhealthy", Message = $"MXAccess not connected (state: {connectionState})", Color = "red" }; } // Rule 2: Success rate < 50% with > 100 ops → Degraded if (metrics != null) { var stats = metrics.GetStatistics(); foreach (var kvp in stats) { if (kvp.Value.TotalCount > 100 && kvp.Value.SuccessRate < 0.5) { return new HealthInfo { Status = "Degraded", Message = $"{kvp.Key} success rate is {kvp.Value.SuccessRate:P0} ({kvp.Value.TotalCount} ops)", Color = "yellow" }; } } } // Rule 3: All good return new HealthInfo { Status = "Healthy", Message = "All systems operational", Color = "green" }; } public bool IsHealthy(ConnectionState connectionState, PerformanceMetrics? metrics) { var health = CheckHealth(connectionState, metrics); return health.Status != "Unhealthy"; } } }