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,
|
|
},
|
|
}
|
|
}
|