mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-22 13:05:36 +03:00
7fab31beae
Merge in DNS/adguard-home from 2508-ip-conversion-vol2 to master Closes #2508. Squashed commit of the following: commit 5b9d33f9cd352756831f63e34c4aea48674628c1 Author: Eugene Burkov <e.burkov@adguard.com> Date: Wed Jan 20 17:15:17 2021 +0300 util: replace net.IPNet with pointer commit 680126de7d59464077f9edf1bbaa925dd3fcee19 Merge: d3ba6a6c5a50efad
Author: Eugene Burkov <e.burkov@adguard.com> Date: Wed Jan 20 17:02:41 2021 +0300 Merge branch 'master' into 2508-ip-conversion-vol2 commit d3ba6a6cdd01c0aa736418fdb86ed40120169fe9 Author: Eugene Burkov <e.burkov@adguard.com> Date: Tue Jan 19 18:29:54 2021 +0300 all: remove last conversion commit 88b63f11a6c3f8705d7fa0c448c50dd646cc9214 Author: Eugene Burkov <e.burkov@adguard.com> Date: Tue Jan 19 14:12:45 2021 +0300 all: improve code quality commit 71af60c70a0dbaf55e2221023d6d2e4993c9e9a7 Merge: 98af37849f75725d
Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Jan 18 17:13:27 2021 +0300 Merge branch 'master' into 2508-ip-conversion-vol2 commit 98af3784ce44d0993d171653c13d6e83bb8d1e6a Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Jan 18 16:32:53 2021 +0300 all: log changes commit e99595a172bae1e844019d344544be84ddd65e4e Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Jan 18 16:06:49 2021 +0300 all: fix or remove remaining net.IP <-> string conversions commit 7fd0634ce945f7e4c9b856684c5199f8a84a543e Author: Eugene Burkov <e.burkov@adguard.com> Date: Fri Jan 15 15:36:17 2021 +0300 all: remove redundant net.IP <-> string converions commit 5df8af030421237d41b67ed659f83526cc258199 Author: Eugene Burkov <e.burkov@adguard.com> Date: Thu Jan 14 16:35:25 2021 +0300 stats: remove redundant net.IP <-> string conversion commit fbe4e3fc015e6898063543a90c04401d76dbb18f Author: Eugene Burkov <e.burkov@adguard.com> Date: Thu Jan 14 16:20:35 2021 +0300 querylog: remove redundant net.IP <-> string conversion
85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
// Package stats provides units for managing statistics of the filtering DNS
|
|
// server.
|
|
package stats
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
)
|
|
|
|
type unitIDCallback func() uint32
|
|
|
|
// DiskConfig - configuration settings that are stored on disk
|
|
type DiskConfig struct {
|
|
Interval uint32 `yaml:"statistics_interval"` // time interval for statistics (in days)
|
|
}
|
|
|
|
// Config - module configuration
|
|
type Config struct {
|
|
Filename string // database file name
|
|
LimitDays uint32 // time limit (in days)
|
|
UnitID unitIDCallback // user function to get the current unit ID. If nil, the current time hour is used.
|
|
AnonymizeClientIP bool // anonymize clients' IP addresses
|
|
|
|
// Called when the configuration is changed by HTTP request
|
|
ConfigModified func()
|
|
|
|
// Register an HTTP handler
|
|
HTTPRegister func(string, string, func(http.ResponseWriter, *http.Request))
|
|
|
|
limit uint32 // maximum time we need to keep data for (in hours)
|
|
}
|
|
|
|
// New - create object
|
|
func New(conf Config) (Stats, error) {
|
|
return createObject(conf)
|
|
}
|
|
|
|
// Stats - main interface
|
|
type Stats interface {
|
|
Start()
|
|
|
|
// Close object.
|
|
// This function is not thread safe
|
|
// (can't be called in parallel with any other function of this interface).
|
|
Close()
|
|
|
|
// Update counters
|
|
Update(e Entry)
|
|
|
|
// Get IP addresses of the clients with the most number of requests
|
|
GetTopClientsIP(limit uint) []net.IP
|
|
|
|
// WriteDiskConfig - write configuration
|
|
WriteDiskConfig(dc *DiskConfig)
|
|
}
|
|
|
|
// TimeUnit - time unit
|
|
type TimeUnit int
|
|
|
|
// Supported time units
|
|
const (
|
|
Hours TimeUnit = iota
|
|
Days
|
|
)
|
|
|
|
// Result of DNS request processing
|
|
type Result int
|
|
|
|
// Supported result values
|
|
const (
|
|
RNotFiltered Result = iota + 1
|
|
RFiltered
|
|
RSafeBrowsing
|
|
RSafeSearch
|
|
RParental
|
|
rLast
|
|
)
|
|
|
|
// Entry - data to add
|
|
type Entry struct {
|
|
Domain string
|
|
Client net.IP
|
|
Result Result
|
|
Time uint32 // processing time (msec)
|
|
}
|