package checker import ( "context" "fmt" sdk "git.happydns.org/checker-sdk-go/checker" ) // One rule per concern so each failure is individually visible rather than buried in a single rule's Code field. func Rules() []sdk.CheckRule { return []sdk.CheckRule{ RulePresent(), RuleNullTarget(), RuleTargetNotCNAME(), RuleTargetsResolve(), RuleTCPReachable(), RuleUDPReachable(), RulePortValid(), RulePriorityWeightSanity(), RuleRedundancy(), } } func getData(ctx context.Context, obs sdk.ObservationGetter) (*SRVData, *sdk.CheckState) { var d SRVData if err := obs.Get(ctx, ObservationKeySRV, &d); err != nil { return nil, &sdk.CheckState{ Status: sdk.StatusError, Message: fmt.Sprintf("Failed to load SRV observation: %v", err), Code: "srv_obs_error", } } return &d, nil } func countProbeResults(d *SRVData, proto string) (total, ok int, failed []string) { for _, r := range d.Records { if r.IsNullTarget || r.Proto != proto { continue } for _, pr := range r.Probes { total++ if pr.Connected { ok++ } else { failed = append(failed, fmt.Sprintf("%s: %s", pr.Address, pr.Error)) } } } return }