63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package checker
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
sdk "git.happydns.org/checker-sdk-go/checker"
|
|
)
|
|
|
|
// Evaluate turns an AliasData into one CheckState per finding. When the run
|
|
// produced no findings, it returns a single StatusOK state describing the
|
|
// healthy alias.
|
|
func Evaluate(data *AliasData) []sdk.CheckState {
|
|
if len(data.Findings) == 0 {
|
|
msg := fmt.Sprintf("Alias chain for %s is healthy", data.Owner)
|
|
if data.FinalTarget != "" && data.FinalTarget != data.Owner {
|
|
msg = fmt.Sprintf("%s → %s resolves cleanly", data.Owner, data.FinalTarget)
|
|
}
|
|
return []sdk.CheckState{{
|
|
Status: sdk.StatusOK,
|
|
Message: msg,
|
|
Subject: data.Owner,
|
|
Meta: map[string]any{
|
|
"owner": data.Owner,
|
|
"apex": data.Apex,
|
|
"final_target": data.FinalTarget,
|
|
"final_a": data.FinalA,
|
|
"final_aaaa": data.FinalAAAA,
|
|
"chain_length": len(data.Chain),
|
|
},
|
|
}}
|
|
}
|
|
|
|
out := make([]sdk.CheckState, 0, len(data.Findings))
|
|
for _, f := range data.Findings {
|
|
subject := f.Subject
|
|
if subject == "" {
|
|
subject = data.Owner
|
|
}
|
|
state := sdk.CheckState{
|
|
Status: severityToStatus(f.Severity),
|
|
Code: f.Code,
|
|
Message: f.Message,
|
|
Subject: subject,
|
|
}
|
|
if f.Hint != "" {
|
|
state.Meta = map[string]any{"hint": f.Hint}
|
|
}
|
|
out = append(out, state)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func severityToStatus(s Severity) sdk.Status {
|
|
switch s {
|
|
case SeverityCrit:
|
|
return sdk.StatusCrit
|
|
case SeverityWarn:
|
|
return sdk.StatusWarn
|
|
case SeverityInfo:
|
|
return sdk.StatusInfo
|
|
}
|
|
return sdk.StatusOK
|
|
}
|