 Documentation
      ¶
      Documentation
      ¶
    
    
  
    
  
    Overview ¶
Package querylog provides query log functions and interfaces.
Index ¶
Constants ¶
const ErrEndOfToken errors.Error = "end of token"
    ErrEndOfToken is an error returned by parse key token when the closing bracket is found.
Variables ¶
This section is empty.
Functions ¶
func AnonymizeIP ¶ added in v0.107.0
AnonymizeIP masks ip to anonymize the client if the ip is a valid one.
Types ¶
type AddParams ¶
type AddParams struct {
	Question *dns.Msg
	// ReqECS is the IP network extracted from EDNS Client-Subnet option of a
	// request.
	ReqECS *net.IPNet
	// Answer is the response which is sent to the client, if any.
	Answer *dns.Msg
	// OrigAnswer is the response from an upstream server.  It's only set if the
	// answer has been modified by filtering.
	OrigAnswer *dns.Msg
	// Result is the filtering result (optional).
	Result *filtering.Result
	ClientID string
	// Upstream is the URL of the upstream DNS server.
	Upstream string
	ClientProto ClientProto
	ClientIP net.IP
	// Elapsed is the time spent for processing the request.
	Elapsed time.Duration
	// Cached indicates if the response is served from cache.
	Cached bool
	// AuthenticatedData shows if the response had the AD bit set.
	AuthenticatedData bool
}
    AddParams is the parameters for adding an entry.
type Client ¶ added in v0.106.0
type Client struct {
	WHOIS          *whois.Info `json:"whois,omitempty"`
	Name           string      `json:"name"`
	DisallowedRule string      `json:"disallowed_rule"`
	Disallowed     bool        `json:"disallowed"`
	IgnoreQueryLog bool        `json:"-"`
}
    Client is the information required by the query log to match against clients during searches.
type ClientProto ¶
type ClientProto string
ClientProto values are names of the client protocols.
const ( ClientProtoDoH ClientProto = "doh" ClientProtoDoQ ClientProto = "doq" ClientProtoDoT ClientProto = "dot" ClientProtoDNSCrypt ClientProto = "dnscrypt" ClientProtoPlain ClientProto = "" )
Client protocol names.
func NewClientProto ¶
func NewClientProto(s string) (cp ClientProto, err error)
NewClientProto validates that the client protocol name is valid and returns the name as a ClientProto.
type Config ¶
type Config struct {
	// Logger is used for logging the operation of the query log.  It must not
	// be nil.
	Logger *slog.Logger
	// Ignored contains the list of host names, which should not be written to
	// log, and matches them.
	Ignored *aghnet.IgnoreEngine
	// Anonymizer processes the IP addresses to anonymize those if needed.
	Anonymizer *aghnet.IPMut
	// ConfigModified is called when the configuration is changed, for example
	// by HTTP requests.
	ConfigModified func()
	// HTTPRegister registers an HTTP handler.
	HTTPRegister aghhttp.RegisterFunc
	// FindClient returns client information by their IDs.
	FindClient func(ids []string) (c *Client, err error)
	// BaseDir is the base directory for log files.
	BaseDir string
	// RotationIvl is the interval for log rotation.  After that period, the old
	// log file will be renamed, NOT deleted, so the actual log retention time
	// is twice the interval.
	RotationIvl time.Duration
	// MemSize is the number of entries kept in a memory buffer before they are
	// flushed to disk.
	MemSize uint
	// Enabled tells if the query log is enabled.
	Enabled bool
	// FileEnabled tells if the query log writes logs to files.
	FileEnabled bool
	// AnonymizeClientIP tells if the query log should anonymize clients' IP
	// addresses.
	AnonymizeClientIP bool
}
    Config is the query log configuration structure.
Do not alter any fields of this structure after using it.
type QueryLog ¶
type QueryLog interface {
	// Interface starts and stops the query log.
	service.Interface
	// Add adds a log entry.
	Add(params *AddParams)
	// WriteDiskConfig writes the query log configuration to c.
	WriteDiskConfig(c *Config)
	// ShouldLog returns true if request for the host should be logged.
	ShouldLog(host string, qType, qClass uint16, ids []string) bool
}
    QueryLog is the query log interface for use by other packages.