check / check (push) Canceled after 0s
When a domain's parent zone's servers answer NXDOMAIN, LookupNS returns ErrNXDomain. The watcher then saves the domain with no nameservers and nxdomain set, shown on the dashboard and in /api/v1/status, asks for none of its records and removes those saved, so its old nameservers go in one NS Change. A domain with no delegation of its own gets an empty set and its records are still asked at the zone it is in. FindAuthoritativeNameservers moves to a parent name only on one of those two answers; when the servers do not answer, it returns the error. After an upgrade, a domain without its own delegation that was saved with its parent zone's nameservers gets one NS Change; the README says so. Model: opus-5-5
65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
// Package watcher provides the main monitoring orchestrator.
|
|
package watcher
|
|
|
|
import (
|
|
"context"
|
|
|
|
"sneak.berlin/go/dnswatcher/internal/portcheck"
|
|
"sneak.berlin/go/dnswatcher/internal/resolver"
|
|
"sneak.berlin/go/dnswatcher/internal/tlscheck"
|
|
)
|
|
|
|
// DNSResolver performs iterative DNS resolution.
|
|
type DNSResolver interface {
|
|
// LookupNS returns a domain's NS record set, as its parent zone's
|
|
// servers delegate it: empty when they answer that it has none, and
|
|
// resolver.ErrNXDomain when they answer that it does not exist.
|
|
LookupNS(
|
|
ctx context.Context,
|
|
domain string,
|
|
) ([]string, error)
|
|
|
|
// LookupAllRecords queries all record types for a hostname,
|
|
// returning each nameserver's response keyed by nameserver.
|
|
LookupAllRecords(
|
|
ctx context.Context,
|
|
hostname string,
|
|
) (map[string]*resolver.NameserverResponse, error)
|
|
|
|
// ResolveIPAddresses resolves a hostname to all IP addresses.
|
|
ResolveIPAddresses(
|
|
ctx context.Context,
|
|
hostname string,
|
|
) ([]string, error)
|
|
}
|
|
|
|
// PortChecker tests TCP port connectivity.
|
|
type PortChecker interface {
|
|
// CheckPort tests TCP connectivity to an address and port.
|
|
CheckPort(
|
|
ctx context.Context,
|
|
address string,
|
|
port int,
|
|
) (*portcheck.PortResult, error)
|
|
}
|
|
|
|
// TLSChecker inspects TLS certificates.
|
|
type TLSChecker interface {
|
|
// CheckCertificate connects via TLS and returns cert info.
|
|
CheckCertificate(
|
|
ctx context.Context,
|
|
ip string,
|
|
hostname string,
|
|
) (*tlscheck.CertificateInfo, error)
|
|
}
|
|
|
|
// Notifier delivers notifications to configured endpoints.
|
|
type Notifier interface {
|
|
// SendNotification sends a notification with the given
|
|
// details.
|
|
SendNotification(
|
|
ctx context.Context,
|
|
title, message, priority string,
|
|
)
|
|
}
|