checker-reverse-zone/checker/rule.go

61 lines
1.7 KiB
Go

package checker
import (
"context"
"fmt"
sdk "git.happydns.org/checker-sdk-go/checker"
)
func Rules() []sdk.CheckRule {
return []sdk.CheckRule{
&isReverseZoneRule{},
&hasPTRsRule{},
&fcrdnsRule{},
&targetResolvesRule{},
&singlePTRRule{},
&targetSyntaxRule{},
&genericHostnameRule{},
&ttlHygieneRule{},
&truncationRule{},
}
}
func loadData(ctx context.Context, obs sdk.ObservationGetter) (*ReverseZoneData, *sdk.CheckState) {
var data ReverseZoneData
if err := obs.Get(ctx, ObservationKey, &data); err != nil {
return nil, &sdk.CheckState{
Status: sdk.StatusError,
Code: "reverse_zone.observation_error",
Message: fmt.Sprintf("failed to get reverse-zone data: %v", err),
}
}
return &data, nil
}
func passState(code, message, subject string) sdk.CheckState {
return sdk.CheckState{Status: sdk.StatusOK, Code: code, Message: message, Subject: subject}
}
func skipState(code, message string) sdk.CheckState {
return sdk.CheckState{Status: sdk.StatusUnknown, Code: code, Message: message}
}
func critState(code, message, subject, hint string) sdk.CheckState {
return withHint(sdk.CheckState{Status: sdk.StatusCrit, Code: code, Message: message, Subject: subject}, hint)
}
func warnState(code, message, subject, hint string) sdk.CheckState {
return withHint(sdk.CheckState{Status: sdk.StatusWarn, Code: code, Message: message, Subject: subject}, hint)
}
func infoState(code, message, subject string) sdk.CheckState {
return sdk.CheckState{Status: sdk.StatusInfo, Code: code, Message: message, Subject: subject}
}
func withHint(st sdk.CheckState, hint string) sdk.CheckState {
if hint != "" {
st.Meta = map[string]any{"hint": hint}
}
return st
}