|
@@ -31,10 +31,13 @@ func FetchAdguardStats(instanceURL, username, password string) (*DNSStats, error
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
+ var topBlockedDomainsCount = min(len(responseJson.TopBlockedDomains), 5)
|
|
|
+
|
|
|
stats := &DNSStats{
|
|
|
- TotalQueries: responseJson.TotalQueries,
|
|
|
- BlockedQueries: responseJson.BlockedQueries,
|
|
|
- ResponseTime: int(responseJson.ResponseTime * 1000),
|
|
|
+ TotalQueries: responseJson.TotalQueries,
|
|
|
+ BlockedQueries: responseJson.BlockedQueries,
|
|
|
+ ResponseTime: int(responseJson.ResponseTime * 1000),
|
|
|
+ TopBlockedDomains: make([]DNSStatsBlockedDomain, 0, topBlockedDomainsCount),
|
|
|
}
|
|
|
|
|
|
if stats.TotalQueries <= 0 {
|
|
@@ -43,8 +46,6 @@ func FetchAdguardStats(instanceURL, username, password string) (*DNSStats, error
|
|
|
|
|
|
stats.BlockedPercent = int(float64(responseJson.BlockedQueries) / float64(responseJson.TotalQueries) * 100)
|
|
|
|
|
|
- var topBlockedDomainsCount = min(len(responseJson.TopBlockedDomains), 5)
|
|
|
-
|
|
|
for i := 0; i < topBlockedDomainsCount; i++ {
|
|
|
domain := responseJson.TopBlockedDomains[i]
|
|
|
var firstDomain string
|
|
@@ -59,31 +60,51 @@ func FetchAdguardStats(instanceURL, username, password string) (*DNSStats, error
|
|
|
}
|
|
|
|
|
|
stats.TopBlockedDomains = append(stats.TopBlockedDomains, DNSStatsBlockedDomain{
|
|
|
- Domain: firstDomain,
|
|
|
- PercentBlocked: int(float64(domain[firstDomain]) / float64(responseJson.BlockedQueries) * 100),
|
|
|
+ Domain: firstDomain,
|
|
|
})
|
|
|
+
|
|
|
+ if stats.BlockedQueries > 0 {
|
|
|
+ stats.TopBlockedDomains[i].PercentBlocked = int(float64(domain[firstDomain]) / float64(responseJson.BlockedQueries) * 100)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- // Adguard _should_ return data for the last 24 hours in a 1 hour interval
|
|
|
- if len(responseJson.QueriesSeries) != 24 || len(responseJson.BlockedSeries) != 24 {
|
|
|
- return stats, nil
|
|
|
+ queriesSeries := responseJson.QueriesSeries
|
|
|
+ blockedSeries := responseJson.BlockedSeries
|
|
|
+
|
|
|
+ const bars = 8
|
|
|
+ const hoursSpan = 24
|
|
|
+ const hoursPerBar int = hoursSpan / bars
|
|
|
+
|
|
|
+ if len(queriesSeries) > hoursSpan {
|
|
|
+ queriesSeries = queriesSeries[len(queriesSeries)-hoursSpan:]
|
|
|
+ } else if len(queriesSeries) < hoursSpan {
|
|
|
+ queriesSeries = append(make([]int, hoursSpan-len(queriesSeries)), queriesSeries...)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(blockedSeries) > hoursSpan {
|
|
|
+ blockedSeries = blockedSeries[len(blockedSeries)-hoursSpan:]
|
|
|
+ } else if len(blockedSeries) < hoursSpan {
|
|
|
+ blockedSeries = append(make([]int, hoursSpan-len(blockedSeries)), blockedSeries...)
|
|
|
}
|
|
|
|
|
|
maxQueriesInSeries := 0
|
|
|
|
|
|
- for i := 0; i < 8; i++ {
|
|
|
+ for i := 0; i < bars; i++ {
|
|
|
queries := 0
|
|
|
blocked := 0
|
|
|
|
|
|
- for j := 0; j < 3; j++ {
|
|
|
- queries += responseJson.QueriesSeries[i*3+j]
|
|
|
- blocked += responseJson.BlockedSeries[i*3+j]
|
|
|
+ for j := 0; j < hoursPerBar; j++ {
|
|
|
+ queries += queriesSeries[i*hoursPerBar+j]
|
|
|
+ blocked += blockedSeries[i*hoursPerBar+j]
|
|
|
}
|
|
|
|
|
|
stats.Series[i] = DNSStatsSeries{
|
|
|
- Queries: queries,
|
|
|
- Blocked: blocked,
|
|
|
- PercentBlocked: int(float64(blocked) / float64(queries) * 100),
|
|
|
+ Queries: queries,
|
|
|
+ Blocked: blocked,
|
|
|
+ }
|
|
|
+
|
|
|
+ if queries > 0 {
|
|
|
+ stats.Series[i].PercentBlocked = int(float64(blocked) / float64(queries) * 100)
|
|
|
}
|
|
|
|
|
|
if queries > maxQueriesInSeries {
|
|
@@ -91,7 +112,7 @@ func FetchAdguardStats(instanceURL, username, password string) (*DNSStats, error
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- for i := 0; i < 8; i++ {
|
|
|
+ for i := 0; i < bars; i++ {
|
|
|
stats.Series[i].PercentTotal = int(float64(stats.Series[i].Queries) / float64(maxQueriesInSeries) * 100)
|
|
|
}
|
|
|
|