@@ -111,24 +111,76 @@ func (a *Aggregator) CheckAll(ctx context.Context) (*AggregatedStatus, error) {
111111 a .lastResults [name ] = result
112112 }
113113
114- // TODO: Apply worst-state logic and readiness exclusion
114+ // Apply worst-state logic and calculate summaries
115+ summary := & StatusSummary {
116+ TotalChecks : len (results ),
117+ }
118+
119+ // Calculate overall status using worst-case logic
120+ overallStatus := StatusHealthy
121+ readinessStatus := StatusHealthy
122+ livenessStatus := StatusHealthy
123+
124+ for _ , result := range results {
125+ // Update summary counts
126+ switch result .Status {
127+ case StatusHealthy :
128+ summary .PassingChecks ++
129+ case StatusWarning :
130+ summary .WarningChecks ++
131+ case StatusCritical :
132+ summary .CriticalChecks ++
133+ summary .FailingChecks ++
134+ case StatusUnknown :
135+ summary .UnknownChecks ++
136+ }
137+
138+ // Apply worst-case logic for overall status
139+ if result .Status == StatusCritical {
140+ overallStatus = StatusCritical
141+ } else if result .Status == StatusWarning && overallStatus != StatusCritical {
142+ overallStatus = StatusWarning
143+ } else if result .Status == StatusUnknown && overallStatus == StatusHealthy {
144+ overallStatus = StatusUnknown
145+ }
146+
147+ // Separate aggregation for readiness and liveness
148+ if result .CheckType == CheckTypeReadiness || result .CheckType == CheckTypeGeneral {
149+ if result .Status == StatusCritical {
150+ readinessStatus = StatusCritical
151+ } else if result .Status == StatusWarning && readinessStatus != StatusCritical {
152+ readinessStatus = StatusWarning
153+ } else if result .Status == StatusUnknown && readinessStatus == StatusHealthy {
154+ readinessStatus = StatusUnknown
155+ }
156+ }
157+
158+ if result .CheckType == CheckTypeLiveness || result .CheckType == CheckTypeGeneral {
159+ if result .Status == StatusCritical {
160+ livenessStatus = StatusCritical
161+ } else if result .Status == StatusWarning && livenessStatus != StatusCritical {
162+ livenessStatus = StatusWarning
163+ } else if result .Status == StatusUnknown && livenessStatus == StatusHealthy {
164+ livenessStatus = StatusUnknown
165+ }
166+ }
167+ }
168+
115169 status := & AggregatedStatus {
116- OverallStatus : StatusUnknown ,
117- ReadinessStatus : StatusUnknown ,
118- LivenessStatus : StatusUnknown ,
170+ OverallStatus : overallStatus ,
171+ ReadinessStatus : readinessStatus ,
172+ LivenessStatus : livenessStatus ,
119173 Timestamp : time .Now (),
120174 CheckResults : results ,
121- Summary : & StatusSummary {
122- TotalChecks : len (results ),
123- },
175+ Summary : summary ,
176+ Metadata : make (map [string ]interface {}),
124177 }
125178
126- return status , ErrCheckAllNotImplemented
179+ return status , nil
127180}
128181
129182// CheckOne runs a specific health check by name
130183func (a * Aggregator ) CheckOne (ctx context.Context , name string ) (* CheckResult , error ) {
131- // TODO: Implement single check execution
132184 a .mu .RLock ()
133185 checker , exists := a .checkers [name ]
134186 a .mu .RUnlock ()
@@ -151,7 +203,7 @@ func (a *Aggregator) CheckOne(ctx context.Context, name string) (*CheckResult, e
151203 a .lastResults [name ] = result
152204 a .mu .Unlock ()
153205
154- return result , ErrCheckOneNotImplemented
206+ return result , nil
155207}
156208
157209// GetStatus returns the current aggregated health status without running checks
0 commit comments