package monitor import "time" type AggregationStrategy string const ( AggAnyDown AggregationStrategy = "any-down" AggMajorityDown AggregationStrategy = "majority-down" AggAllDown AggregationStrategy = "all-down" ) type NodeResult struct { NodeID string IsUp bool LatencyNs int64 CheckedAt time.Time ErrorReason string } func AggregateStatus(results []NodeResult, strategy AggregationStrategy) (isUp bool, avgLatencyNs int64) { if len(results) == 0 { return true, 0 } upCount := 0 var totalLatency int64 for _, r := range results { if r.IsUp { upCount++ } totalLatency += r.LatencyNs } avgLatencyNs = totalLatency / int64(len(results)) switch strategy { case AggMajorityDown: isUp = upCount > len(results)/2 case AggAllDown: isUp = upCount > 0 default: isUp = upCount == len(results) } return }