package checker import ( "context" "fmt" sdk "git.happydns.org/checker-sdk-go/checker" ) // Rules returns every CheckRule exposed by the resolver-propagation checker. // Each rule covers one concern so the UI and metrics consumers can reason // about them independently. func Rules() []sdk.CheckRule { return []sdk.CheckRule{ &resolverSelectionRule{}, &resolversReachableRule{}, &consensusRule{}, &authoritativeMatchRule{}, &nxdomainRule{}, &servfailRule{}, ®ionalSplitRule{}, &serialDriftRule{}, &staleCacheRule{}, &dnssecRule{}, &resolverLatencyRule{}, &filteredHitRule{}, } } // loadData fetches the observation and returns an error state on failure. // It also runs deriveView so every rule sees a ready-to-use consensus. func loadData(ctx context.Context, obs sdk.ObservationGetter) (*ResolverPropagationData, *sdk.CheckState) { var data ResolverPropagationData if err := obs.Get(ctx, ObservationKeyResolverPropagation, &data); err != nil { return nil, &sdk.CheckState{ Status: sdk.StatusError, Message: fmt.Sprintf("failed to load resolver-propagation observation: %v", err), Code: "resolver_propagation_error", } } deriveView(&data) return &data, nil } func passState(code, message string) sdk.CheckState { return sdk.CheckState{Status: sdk.StatusOK, Message: message, Code: code} } func infoState(code, subject, message string) sdk.CheckState { return sdk.CheckState{Status: sdk.StatusInfo, Message: message, Code: code, Subject: subject} } func warnState(code, subject, message string) sdk.CheckState { return sdk.CheckState{Status: sdk.StatusWarn, Message: message, Code: code, Subject: subject} } func critState(code, subject, message string) sdk.CheckState { return sdk.CheckState{Status: sdk.StatusCrit, Message: message, Code: code, Subject: subject} }