// This file is part of the happyDomain (R) project. // Copyright (c) 2020-2026 happyDomain // Authors: Pierre-Olivier Mercier, et al. package checker import sdk "git.happydns.org/checker-sdk-go/checker" // EvalAggregateByScheme runs fn on the subset of probes matching scheme. // If no probe was attempted, returns a single Unknown state with // code+".no_probes". Otherwise it returns the per-probe states emitted by // fn, falling back to a single OK state (code+".ok" with okMsg) when fn // emitted nothing — the conventional "everything is fine" shape used by // reachability and redirect rules. func EvalAggregateByScheme(data *HTTPData, scheme, code, okMsg string, fn func(p HTTPProbe, emit func(sdk.CheckState))) []sdk.CheckState { probes := probesByScheme(data.Probes, scheme) if len(probes) == 0 { return []sdk.CheckState{unknownState(code+".no_probes", "No probes were attempted.")} } var states []sdk.CheckState emit := func(s sdk.CheckState) { states = append(states, s) } for _, p := range probes { fn(p, emit) } if len(states) == 0 { return []sdk.CheckState{passState(code+".ok", okMsg)} } return states } // EvalPerHTTPS calls fn for each successful HTTPS probe and returns the // concatenated states. If no HTTPS probe succeeded, returns a single // Unknown state with code+".no_https". // // Use this for rules that emit one CheckState per probe — the most common // shape. Rules that need access to all probes at once (aggregation, // cross-probe comparisons) should call successfulHTTPSProbes directly. func EvalPerHTTPS(data *HTTPData, code string, fn func(p HTTPProbe) sdk.CheckState) []sdk.CheckState { probes := successfulHTTPSProbes(data.Probes) if len(probes) == 0 { return []sdk.CheckState{unknownState(code+".no_https", "No successful HTTPS probe to evaluate.")} } out := make([]sdk.CheckState, 0, len(probes)) for _, p := range probes { out = append(out, fn(p)) } return out }