Initial commit
This commit is contained in:
commit
542ebdea34
40 changed files with 4592 additions and 0 deletions
48
checker/iter.go
Normal file
48
checker/iter.go
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
// 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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue