The SDK split the HTTP server scaffolding into the new checker-sdk-go/checker/server subpackage and CheckRule.Evaluate now returns []CheckState. Update main.go to import server and call server.New, switch the rule and the package-level Evaluate helper to the new slice return type, and isolate the interactive form code behind the standalone build tag so plugin/builtin builds skip net/http and html/template entirely.
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package checker
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
sdk "git.happydns.org/checker-sdk-go/checker"
|
|
)
|
|
|
|
// Evaluate folds findings into a single CheckState. The status is the
|
|
// highest severity observed: any Crit makes the whole result Crit, any Warn
|
|
// makes it Warn, otherwise OK.
|
|
func Evaluate(data *DelegationData) []sdk.CheckState {
|
|
status := sdk.StatusOK
|
|
var crit, warn, info int
|
|
for _, f := range data.Findings {
|
|
switch f.Severity {
|
|
case SeverityCrit:
|
|
crit++
|
|
status = sdk.StatusCrit
|
|
case SeverityWarn:
|
|
warn++
|
|
if status != sdk.StatusCrit {
|
|
status = sdk.StatusWarn
|
|
}
|
|
case SeverityInfo:
|
|
info++
|
|
if status == sdk.StatusOK {
|
|
status = sdk.StatusInfo
|
|
}
|
|
}
|
|
}
|
|
|
|
var msg string
|
|
if len(data.Findings) == 0 {
|
|
msg = fmt.Sprintf("Delegation of %s is healthy", data.DelegatedFQDN)
|
|
} else {
|
|
msg = fmt.Sprintf("Delegation of %s: %d critical, %d warning, %d info", data.DelegatedFQDN, crit, warn, info)
|
|
}
|
|
|
|
return []sdk.CheckState{{
|
|
Status: status,
|
|
Message: msg,
|
|
Code: "delegation_result",
|
|
Meta: map[string]any{
|
|
"findings": data.Findings,
|
|
"delegated_fqdn": data.DelegatedFQDN,
|
|
"parent_zone": data.ParentZone,
|
|
"advertised_ns": data.AdvertisedNS,
|
|
"parent_ds": data.ParentDS,
|
|
"child_serials": data.ChildSerials,
|
|
},
|
|
}}
|
|
}
|