+ statistics: store in separate file
+ GET /control/stats handler
This commit is contained in:
committed by
Ildar Kamalov
parent
60eb55bdce
commit
4a58266ba3
68
stats/stats.go
Normal file
68
stats/stats.go
Normal file
@@ -0,0 +1,68 @@
|
||||
// Module for managing statistics for DNS filtering server
|
||||
|
||||
package stats
|
||||
|
||||
import (
|
||||
"net"
|
||||
)
|
||||
|
||||
type unitIDCallback func() int
|
||||
|
||||
// New - create object
|
||||
// filename: DB file name
|
||||
// limit: time limit (in days)
|
||||
// unitID: user function to get the current unit ID. If nil, the current time hour is used.
|
||||
func New(filename string, limit int, unitID unitIDCallback) Stats {
|
||||
return createObject(filename, limit, unitID)
|
||||
}
|
||||
|
||||
// Stats - main interface
|
||||
type Stats interface {
|
||||
// Close object.
|
||||
// This function is not thread safe
|
||||
// (can't be called in parallel with any other function of this interface).
|
||||
Close()
|
||||
|
||||
// Set new configuration at runtime.
|
||||
// limit: time limit (in days)
|
||||
Configure(limit int)
|
||||
|
||||
// Reset counters and clear database
|
||||
Clear()
|
||||
|
||||
// Update counters
|
||||
Update(e Entry)
|
||||
|
||||
// Get data
|
||||
GetData(timeUnit TimeUnit) map[string]interface{}
|
||||
}
|
||||
|
||||
// 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 uint // processing time (msec)
|
||||
}
|
||||
Reference in New Issue
Block a user