Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrDnstapMinimiserRunning is returned when Run is called concurrently. ErrDnstapMinimiserRunning = errors.New("dnstap minimiser is already running") // ErrDnstapMinimiserAlreadyRun is returned when Run is called after a prior run. ErrDnstapMinimiserAlreadyRun = errors.New("dnstap minimiser has already run") // ErrNilConfigProvider is returned when a nil ConfigProvider is supplied. ErrNilConfigProvider = errors.New("nil config provider") // ErrNilLogger is returned when a nil logger is supplied. ErrNilLogger = errors.New("nil logger") // ErrNilRunContext is returned when Run is called with a nil context. ErrNilRunContext = errors.New("nil run context") )
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
ConfigFile string `mapstructure:"config-file" validate:"required"`
DisableSessionFiles bool `mapstructure:"disable-session-files"`
DisableHistogramSender bool `mapstructure:"disable-histogram-sender" reload:"true"`
DisableMQTT bool `mapstructure:"disable-mqtt"`
DisableMQTTFilequeue bool `mapstructure:"disable-mqtt-filequeue"`
EnableManualParquetRotation bool `mapstructure:"enable-manual-parquet-rotation"`
PebbleSync bool `mapstructure:"pebble-sync" reload:"true"`
InputUnix string `mapstructure:"input-unix" validate:"required_without_all=InputTCP InputTLS,excluded_with=InputTCP InputTLS"`
InputTCP string `mapstructure:"input-tcp" validate:"required_without_all=InputUnix InputTLS,excluded_with=InputUnix InputTLS"`
InputTLS string `mapstructure:"input-tls" validate:"required_without_all=InputUnix InputTCP,excluded_with=InputUnix InputTCP"`
InputTLSCertFile string `mapstructure:"input-tls-cert-file" validate:"required_with=InputTLS"`
InputTLSKeyFile string `mapstructure:"input-tls-key-file" validate:"required_with=InputTLS"`
InputTLSClientCAFile string `mapstructure:"input-tls-client-ca-file"`
CryptopanKey string `mapstructure:"cryptopan-key" validate:"required" reload:"true"`
CryptopanKeySalt string `mapstructure:"cryptopan-key-salt" validate:"required" reload:"true"`
WellKnownDomainsFile string `mapstructure:"well-known-domains-file" validate:"required"`
HistogramHLLExplicitThreshold int `mapstructure:"histogram-hll-explicit-threshold" validate:"required,gte=0"`
IgnoredClientIPsFile string `mapstructure:"ignored-client-ips-file" reload:"true"`
IgnoredQuestionNamesFile string `mapstructure:"ignored-question-names-file" reload:"true"`
DataDir string `mapstructure:"data-dir" validate:"required"`
MinimiserWorkers int `mapstructure:"minimiser-workers"`
MQTTSigningKeyFile string `mapstructure:"mqtt-signing-key-file" validate:"required_without=DisableMQTT"`
MQTTClientKeyFile string `mapstructure:"mqtt-client-key-file" validate:"required_without=DisableMQTT" reload:"true"`
MQTTClientCertFile string `mapstructure:"mqtt-client-cert-file" validate:"required_without=DisableMQTT" reload:"true"`
MQTTServer string `mapstructure:"mqtt-server" validate:"required_without=DisableMQTT"`
MQTTCAFile string `mapstructure:"mqtt-ca-file"`
MQTTKeepalive uint16 `mapstructure:"mqtt-keepalive" validate:"required_without=DisableMQTT"`
MQTTSignWorkers int `mapstructure:"mqtt-sign-workers"`
QnameSeenEntries int `mapstructure:"qname-seen-entries"`
CryptopanAddressEntries int `mapstructure:"cryptopan-address-entries" validate:"gte=0"`
NewQnameBuffer int `mapstructure:"newqname-buffer"`
HTTPCAFile string `mapstructure:"http-ca-file"`
HTTPSigningKeyFile string `mapstructure:"http-signing-key-file" validate:"required_without=DisableHistogramSender"`
HTTPClientKeyFile string `mapstructure:"http-client-key-file" validate:"required_without=DisableHistogramSender" reload:"true"`
HTTPClientCertFile string `mapstructure:"http-client-cert-file" validate:"required_without=DisableHistogramSender" reload:"true"`
HTTPURL string `mapstructure:"http-url" validate:"required_without=DisableHistogramSender"`
Debug bool `mapstructure:"debug"`
DebugDnstapFilename string `mapstructure:"debug-dnstap-filename"`
DebugEnableBlockProfiling bool `mapstructure:"debug-enable-blockprofiling"`
DebugEnableMutexProfiling bool `mapstructure:"debug-enable-mutexprofiling"`
}
Config contains all runtime configuration for DnstapMinimiser.
The struct tags are part of the Viper-backed CLI contract and stay in sync with the flags in pkg/cmd.
type ConfigProvider ¶
ConfigProvider supplies the current runner configuration.
Implementations must be safe to call from the runner's config reload goroutine while DnstapMinimiser.Run is active.
type DnstapMinimiser ¶
type DnstapMinimiser struct {
// contains filtered or unexported fields
}
DnstapMinimiser runs the Edge DNSTAP Minimiser service.
Construct instances with NewDnstapMinimiser. A DnstapMinimiser is single-use: one instance supports exactly one DnstapMinimiser.Run lifecycle. Concurrent Run calls return ErrDnstapMinimiserRunning; calls after a prior Run has started return ErrDnstapMinimiserAlreadyRun.
func NewDnstapMinimiser ¶
func NewDnstapMinimiser(provider ConfigProvider, logger *slog.Logger, opts ...DnstapMinimiserOption) (*DnstapMinimiser, error)
NewDnstapMinimiser constructs a DnstapMinimiser.
The returned service is ready to run but has no active run context until DnstapMinimiser.Run is called.
func (*DnstapMinimiser) Run ¶
func (edm *DnstapMinimiser) Run(ctx context.Context) error
Run starts the minimiser and blocks until it stops.
Run is not reentrant. It returns startup and runtime errors directly. When ctx is cancelled after startup, workers drain in shutdown order and Run returns nil.
type DnstapMinimiserOption ¶
type DnstapMinimiserOption func(*dnstapMinimiserOptions)
DnstapMinimiserOption customizes a DnstapMinimiser at construction time.
func WithLoggerLevel ¶
func WithLoggerLevel(loggerLevel *slog.LevelVar) DnstapMinimiserOption
WithLoggerLevel sets the mutable log level used by DnstapMinimiser.Run.
type ViperConfigProvider ¶
type ViperConfigProvider struct{}
ViperConfigProvider reads Config from the package-level Viper instance.
func (ViperConfigProvider) GetConfig ¶
func (vc ViperConfigProvider) GetConfig() (Config, error)
GetConfig reads and validates Config from Viper.