Documentation ¶
Overview ¶
Package querylog provides query log functions and interfaces.
Index ¶
Constants ¶
const ( ErrTSNotFound errors.Error = "ts not found" ErrTSTooLate errors.Error = "ts too late" ErrTSTooEarly errors.Error = "ts too early" )
Timestamp not found errors.
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 *ClientWHOIS `json:"whois,omitempty"` Name string `json:"name"` DisallowedRule string `json:"disallowed_rule"` Disallowed bool `json:"disallowed"` }
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 ClientWHOIS ¶ added in v0.107.0
type ClientWHOIS struct { City string `json:"city,omitempty"` Country string `json:"country,omitempty"` Orgname string `json:"orgname,omitempty"` }
ClientWHOIS is the filtered WHOIS data for the client.
TODO(a.garipov): Merge with home.RuntimeClientWHOISInfo after the refactoring is done.
type Config ¶
type Config struct { // 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. The value must be one of: // // 6 * time.Hour // 1 * timeutil.Day // 7 * timeutil.Day // 30 * timeutil.Day // 90 * timeutil.Day // RotationIvl time.Duration // MemSize is the number of entries kept in a memory buffer before they // are flushed to disk. MemSize uint32 // 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 // Ignored is the list of host names, which should not be written to // log. Ignored *stringutil.Set }
Config is the query log configuration structure.
type QLogFile ¶
type QLogFile struct {
// contains filtered or unexported fields
}
QLogFile represents a single query log file It allows reading from the file in the reverse order
Please note that this is a stateful object. Internally, it contains a pointer to a specific position in the file, and it reads lines in reverse order starting from that position.
func NewQLogFile ¶
NewQLogFile initializes a new instance of the QLogFile
func (*QLogFile) ReadNext ¶
ReadNext reads the next line (in the reverse order) from the file and shifts the current position left to the next (actually prev) line. returns io.EOF if there's nothing to read more
type QLogReader ¶
type QLogReader struct {
// contains filtered or unexported fields
}
QLogReader allows reading from multiple query log files in the reverse order.
Please note that this is a stateful object. Internally, it contains a pointer to a particular query log file, and to a specific position in this file, and it reads lines in reverse order starting from that position.
func NewQLogReader ¶
func NewQLogReader(files []string) (*QLogReader, error)
NewQLogReader initializes a QLogReader instance with the specified files
func (*QLogReader) ReadNext ¶
func (r *QLogReader) ReadNext() (string, error)
ReadNext reads the next line (in the reverse order) from the query log files. and shifts the current position left to the next (actually prev) line (or the next file). returns io.EOF if there's nothing to read more.
func (*QLogReader) SeekStart ¶
func (r *QLogReader) SeekStart() error
SeekStart changes the current position to the end of the newest file Please note that we're reading query log in the reverse order and that's why log start is actually the end of file
Returns nil if we were able to change the current position. Returns error in any other case.
type QueryLog ¶
type QueryLog interface { Start() // Close query log object Close() // Add a log entry Add(params *AddParams) // WriteDiskConfig - write configuration WriteDiskConfig(c *Config) // ShouldLog returns true if request for the host should be logged. ShouldLog(host string, qType, qClass uint16) bool }
QueryLog - main interface