API /stats_top -- show only top entries for last 3 minutes
This commit is contained in:
parent
38b3fe6718
commit
8198b65f29
|
@ -409,6 +409,9 @@ func handleStatsTop(w http.ResponseWriter, r *http.Request) {
|
|||
domains := map[string]int{}
|
||||
blocked := map[string]int{}
|
||||
clients := map[string]int{}
|
||||
now := time.Now()
|
||||
timeWindow := time.Minute * 3
|
||||
notBefore := now.Add(timeWindow * -1)
|
||||
|
||||
for _, value := range values {
|
||||
entry, ok := value.(map[string]interface{})
|
||||
|
@ -419,6 +422,11 @@ func handleStatsTop(w http.ResponseWriter, r *http.Request) {
|
|||
host := getHost(entry)
|
||||
reason := getReason(entry)
|
||||
client := getClient(entry)
|
||||
time := getTime(entry)
|
||||
if time.Before(notBefore) {
|
||||
// skip if the entry is before specified cutoff
|
||||
continue
|
||||
}
|
||||
if len(host) > 0 {
|
||||
domains[host]++
|
||||
}
|
||||
|
|
17
helpers.go
17
helpers.go
|
@ -7,6 +7,7 @@ import (
|
|||
"net/http"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func clamp(value, low, high int) int {
|
||||
|
@ -167,6 +168,22 @@ func getClient(entry map[string]interface{}) string {
|
|||
return client
|
||||
}
|
||||
|
||||
func getTime(entry map[string]interface{}) time.Time {
|
||||
t, ok := entry["time"]
|
||||
if !ok {
|
||||
return time.Time{}
|
||||
}
|
||||
tstr, ok := t.(string)
|
||||
if !ok {
|
||||
return time.Time{}
|
||||
}
|
||||
value, err := time.Parse(time.RFC3339, tstr)
|
||||
if err != nil {
|
||||
return time.Time{}
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
// -------------------------------------------------
|
||||
// helper functions for parsing parameters from body
|
||||
// -------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue