111 lines
3.7 KiB
Go
111 lines
3.7 KiB
Go
package checker
|
|
|
|
import (
|
|
"time"
|
|
|
|
sdk "git.happydns.org/checker-sdk-go/checker"
|
|
)
|
|
|
|
// Version is the checker version reported in CheckerDefinition.Version.
|
|
var Version = "built-in"
|
|
|
|
// Definition returns the CheckerDefinition for the resolver-propagation
|
|
// checker.
|
|
func (p *resolverPropagationProvider) Definition() *sdk.CheckerDefinition {
|
|
return &sdk.CheckerDefinition{
|
|
ID: "resolver-propagation",
|
|
Name: "Worldwide DNS propagation",
|
|
Version: Version,
|
|
Availability: sdk.CheckerAvailability{
|
|
ApplyToService: true,
|
|
LimitToServices: []string{
|
|
"abstract.Origin",
|
|
"abstract.NSOnlyOrigin",
|
|
},
|
|
},
|
|
ObservationKeys: []sdk.ObservationKey{ObservationKeyResolverPropagation},
|
|
HasHTMLReport: true,
|
|
HasMetrics: true,
|
|
Options: sdk.CheckerOptionsDocumentation{
|
|
UserOpts: []sdk.CheckerOptionDocumentation{
|
|
{
|
|
Id: "recordTypes",
|
|
Type: "string",
|
|
Label: "Record types to probe",
|
|
Description: "Comma-separated list of RR types. The checker probes every listed type at the zone apex (and at each 'subdomains' entry).",
|
|
Default: "SOA,NS,A,AAAA,MX,TXT,CAA",
|
|
},
|
|
{
|
|
Id: "subdomains",
|
|
Type: "string",
|
|
Label: "Extra subdomains to probe",
|
|
Description: "Comma-separated list of owner names to probe in addition to the zone apex (e.g. \"www,mail,@\"). Leave empty to only probe the apex.",
|
|
Default: "www",
|
|
},
|
|
{
|
|
Id: "includeFiltered",
|
|
Type: "bool",
|
|
Label: "Include filtered resolvers",
|
|
Description: "Probe filtering resolvers (malware/family/adblock). Their answers routinely disagree with the consensus by design; enable only when diagnosing a blocklist hit.",
|
|
Default: false,
|
|
},
|
|
{
|
|
Id: "region",
|
|
Type: "string",
|
|
Label: "Restrict to region",
|
|
Description: "Only probe resolvers from the given region. Use 'all' for a worldwide run.",
|
|
Choices: []string{"all", "global", "na", "eu", "asia", "ru", "me"},
|
|
Default: "all",
|
|
},
|
|
{
|
|
Id: "transports",
|
|
Type: "string",
|
|
Label: "Transports",
|
|
Description: "Comma-separated list of transports to probe. 'udp' is the baseline; 'tcp', 'dot' and 'doh' add coverage. Encrypted transports are only used for resolvers that publish an endpoint.",
|
|
Default: "udp",
|
|
},
|
|
{
|
|
Id: "resolverAllowlist",
|
|
Type: "string",
|
|
Label: "Resolver allowlist (advanced)",
|
|
Description: "Comma-separated list of resolver IDs or IPs to probe exclusively. Leave empty to use the catalog selection. Example: \"cloudflare,google,9.9.9.9\".",
|
|
Default: "",
|
|
},
|
|
{
|
|
Id: "latencyThresholdMs",
|
|
Type: "uint",
|
|
Label: "Latency warning threshold (ms)",
|
|
Description: "Resolvers averaging above this value produce an info finding.",
|
|
Default: float64(500),
|
|
},
|
|
{
|
|
Id: "runTimeoutSeconds",
|
|
Type: "uint",
|
|
Label: "Run timeout (seconds)",
|
|
Description: "Hard wall-clock budget for one propagation run. Slow resolvers beyond this simply report as unreachable.",
|
|
Default: float64(30),
|
|
},
|
|
},
|
|
DomainOpts: []sdk.CheckerOptionDocumentation{
|
|
{
|
|
Id: "domain_name",
|
|
Label: "Zone name",
|
|
AutoFill: sdk.AutoFillDomainName,
|
|
},
|
|
},
|
|
ServiceOpts: []sdk.CheckerOptionDocumentation{
|
|
{
|
|
Id: "service",
|
|
Label: "Origin service",
|
|
AutoFill: sdk.AutoFillService,
|
|
},
|
|
},
|
|
},
|
|
Rules: Rules(),
|
|
Interval: &sdk.CheckIntervalSpec{
|
|
Min: 5 * time.Minute,
|
|
Max: 24 * time.Hour,
|
|
Default: 30 * time.Minute,
|
|
},
|
|
}
|
|
}
|