- CheckPorts now runs all port checks concurrently using errgroup - Added port number validation (1-65535) with ErrInvalidPort sentinel error - Updated PortChecker interface to use *PortResult return type - Added tests for invalid port numbers (0, negative, >65535) - All checks pass (make check clean)
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
// Package watcher provides the main monitoring orchestrator.
|
|
package watcher
|
|
|
|
import (
|
|
"context"
|
|
|
|
"sneak.berlin/go/dnswatcher/internal/portcheck"
|
|
"sneak.berlin/go/dnswatcher/internal/tlscheck"
|
|
)
|
|
|
|
// DNSResolver performs iterative DNS resolution.
|
|
type DNSResolver interface {
|
|
// LookupNS discovers authoritative nameservers for a domain.
|
|
LookupNS(
|
|
ctx context.Context,
|
|
domain string,
|
|
) ([]string, error)
|
|
|
|
// LookupAllRecords queries all record types for a hostname,
|
|
// returning results keyed by nameserver then record type.
|
|
LookupAllRecords(
|
|
ctx context.Context,
|
|
hostname string,
|
|
) (map[string]map[string][]string, 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,
|
|
)
|
|
}
|