Initial commit
This commit is contained in:
commit
67c955129d
20 changed files with 2203 additions and 0 deletions
85
checker/rule.go
Normal file
85
checker/rule.go
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
package checker
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
sdk "git.happydns.org/checker-sdk-go/checker"
|
||||
)
|
||||
|
||||
// Rules returns the full list of CheckRules exposed by the PTR checker.
|
||||
// Each rule covers one concern so callers can see at a glance which checks
|
||||
// passed and which did not.
|
||||
func Rules() []sdk.CheckRule {
|
||||
return []sdk.CheckRule{
|
||||
&reverseArpaRule{},
|
||||
&ownerDecodeRule{},
|
||||
&reverseZoneRule{},
|
||||
&queryOutcomeRule{},
|
||||
&ptrPresentRule{},
|
||||
&singlePTRRule{},
|
||||
&declaredMatchRule{},
|
||||
&targetSyntaxRule{},
|
||||
&genericHostnameRule{},
|
||||
&targetResolvesRule{},
|
||||
&fcrdnsMatchRule{},
|
||||
&ipv6PTRRule{},
|
||||
&ttlHygieneRule{},
|
||||
}
|
||||
}
|
||||
|
||||
// loadPTR fetches the raw observation. On error, the returned CheckState is
|
||||
// what the caller should emit to short-circuit.
|
||||
func loadPTR(ctx context.Context, obs sdk.ObservationGetter) (*PTRData, *sdk.CheckState) {
|
||||
var data PTRData
|
||||
if err := obs.Get(ctx, ObservationKeyPTR, &data); err != nil {
|
||||
return nil, &sdk.CheckState{
|
||||
Status: sdk.StatusError,
|
||||
Code: "ptr.observation_error",
|
||||
Message: fmt.Sprintf("failed to get PTR 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 withHint(st sdk.CheckState, hint string) sdk.CheckState {
|
||||
if hint != "" {
|
||||
st.Meta = map[string]any{"hint": hint}
|
||||
}
|
||||
return st
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue