checker-resolver-propagation/checker/rules.go

59 lines
1.8 KiB
Go

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{},
&regionalSplitRule{},
&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}
}