mirror of
https://github.com/bakito/adguardhome-sync.git
synced 2025-10-04 03:54:23 +08:00
102 lines
2.9 KiB
Go
102 lines
2.9 KiB
Go
package metrics
|
|
|
|
import (
|
|
"github.com/go-faker/faker/v4"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
"k8s.io/utils/ptr"
|
|
|
|
"github.com/bakito/adguardhome-sync/internal/client/model"
|
|
)
|
|
|
|
var _ = Describe("Metrics", func() {
|
|
BeforeEach(func() {
|
|
stats = make(OverallStats)
|
|
})
|
|
Context("UpdateInstances / getStats", func() {
|
|
It("generate correct stats", func() {
|
|
UpdateInstances(InstanceMetricsList{[]InstanceMetrics{
|
|
{HostName: "foo", Status: &model.ServerStatus{}, Stats: &model.Stats{
|
|
NumDnsQueries: ptr.To(100),
|
|
DnsQueries: ptr.To(
|
|
[]int{10, 20, 30, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
),
|
|
}},
|
|
{HostName: "bar", Status: &model.ServerStatus{}, Stats: &model.Stats{
|
|
NumDnsQueries: ptr.To(200),
|
|
DnsQueries: ptr.To(
|
|
[]int{20, 40, 60, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
),
|
|
}},
|
|
{HostName: "aaa", Status: &model.ServerStatus{}, Stats: &model.Stats{
|
|
NumDnsQueries: ptr.To(300),
|
|
DnsQueries: ptr.To(
|
|
[]int{30, 60, 90, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
),
|
|
}},
|
|
}})
|
|
Ω(stats).Should(HaveKey("foo"))
|
|
Ω(stats["foo"].NumDnsQueries).Should(Equal(ptr.To(100)))
|
|
Ω(stats).Should(HaveKey("bar"))
|
|
Ω(stats["bar"].NumDnsQueries).Should(Equal(ptr.To(200)))
|
|
Ω(stats).Should(HaveKey("aaa"))
|
|
Ω(stats["aaa"].NumDnsQueries).Should(Equal(ptr.To(300)))
|
|
|
|
os := getStats()
|
|
tot := os.Total()
|
|
Ω(*tot.NumDnsQueries).Should(Equal(600))
|
|
Ω(
|
|
*tot.DnsQueries,
|
|
).Should(Equal([]int{60, 120, 180, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}))
|
|
|
|
foo := os["foo"]
|
|
bar := os["bar"]
|
|
aaa := os["aaa"]
|
|
|
|
Ω(*foo.NumDnsQueries).Should(Equal(100))
|
|
Ω(*bar.NumDnsQueries).Should(Equal(200))
|
|
Ω(*aaa.NumDnsQueries).Should(Equal(300))
|
|
Ω(
|
|
*foo.DnsQueries,
|
|
).Should(Equal([]int{10, 20, 30, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}))
|
|
Ω(
|
|
*bar.DnsQueries,
|
|
).Should(Equal([]int{20, 40, 60, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}))
|
|
Ω(
|
|
*aaa.DnsQueries,
|
|
).Should(Equal([]int{30, 60, 90, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}))
|
|
})
|
|
})
|
|
Context("StatsGraph", func() {
|
|
var metrics InstanceMetricsList
|
|
BeforeEach(func() {
|
|
err := faker.FakeData(&metrics)
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
})
|
|
It("should provide correct results with faked values", func() {
|
|
UpdateInstances(metrics)
|
|
|
|
_, dns, blocked, malware, adult := StatsGraph()
|
|
|
|
verifyStats(dns)
|
|
verifyStats(blocked)
|
|
verifyStats(malware)
|
|
verifyStats(adult)
|
|
})
|
|
})
|
|
})
|
|
|
|
func verifyStats(lines []Line) {
|
|
var total Line
|
|
sum := make([]int, len(lines[0].Data))
|
|
for _, l := range lines {
|
|
if l.Title == labelTotal {
|
|
total = l
|
|
} else {
|
|
for i, d := range l.Data {
|
|
sum[i] += d
|
|
}
|
|
}
|
|
}
|
|
Ω(sum).Should(Equal(total.Data))
|
|
}
|