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 }