mirror of
https://github.com/prymitive/karma
synced 2026-05-07 03:26:52 +00:00
chore(api): add offset and raw filter value to the counters dict
This commit is contained in:
13
alerts.go
13
alerts.go
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"sort"
|
||||
|
||||
@@ -44,18 +45,30 @@ func countersToLabelStats(counters map[string]map[string]int) models.LabelNameSt
|
||||
Name: name,
|
||||
Values: models.LabelValueStatsList{},
|
||||
}
|
||||
|
||||
for value, hits := range valueMap {
|
||||
nameStats.Hits += hits
|
||||
valueStats := models.LabelValueStats{
|
||||
Value: value,
|
||||
Raw: fmt.Sprintf("%s=%s", name, value),
|
||||
Hits: hits,
|
||||
}
|
||||
nameStats.Values = append(nameStats.Values, valueStats)
|
||||
}
|
||||
|
||||
// now that we have total hits we can calculate %
|
||||
for i, value := range nameStats.Values {
|
||||
nameStats.Values[i].Percent = int(math.Round((float64(value.Hits) / float64(nameStats.Hits)) * 100.0))
|
||||
}
|
||||
|
||||
sort.Sort(nameStats.Values)
|
||||
|
||||
// now that we have all % and values are sorted we can calculate offsets
|
||||
offset := 0
|
||||
for i, value := range nameStats.Values {
|
||||
nameStats.Values[i].Offset = offset
|
||||
offset += value.Percent
|
||||
}
|
||||
data = append(data, nameStats)
|
||||
}
|
||||
|
||||
|
||||
@@ -40,8 +40,10 @@ type LabelsCountMap map[string]map[string]int
|
||||
|
||||
type LabelValueStats struct {
|
||||
Value string `json:"value"`
|
||||
Raw string `json:"raw"`
|
||||
Hits int `json:"hits"`
|
||||
Percent int `json:"percent"`
|
||||
Offset int `json:"offset"`
|
||||
}
|
||||
|
||||
type LabelValueStatsList []LabelValueStats
|
||||
|
||||
@@ -265,13 +265,17 @@ func TestNameStatsSort(t *testing.T) {
|
||||
Values: models.LabelValueStatsList{
|
||||
models.LabelValueStats{
|
||||
Value: "suppressed",
|
||||
Raw: "@state=suppressed",
|
||||
Hits: 8,
|
||||
Percent: 33,
|
||||
Offset: 67,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "active",
|
||||
Raw: "@state=actuve",
|
||||
Hits: 16,
|
||||
Percent: 67,
|
||||
Offset: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -281,18 +285,24 @@ func TestNameStatsSort(t *testing.T) {
|
||||
Values: models.LabelValueStatsList{
|
||||
models.LabelValueStats{
|
||||
Value: "dev",
|
||||
Raw: "cluster=dev",
|
||||
Hits: 10,
|
||||
Percent: 42,
|
||||
Offset: 0,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "prod",
|
||||
Raw: "cluster=prod",
|
||||
Hits: 6,
|
||||
Percent: 25,
|
||||
Offset: 42,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "staging",
|
||||
Raw: "cluster=staging",
|
||||
Hits: 8,
|
||||
Percent: 33,
|
||||
Offset: 67,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -302,23 +312,32 @@ func TestNameStatsSort(t *testing.T) {
|
||||
Values: models.LabelValueStatsList{
|
||||
models.LabelValueStats{
|
||||
Value: "HTTP_Probe_Failed",
|
||||
Raw: "alertname=HTTP_Probe_Failed",
|
||||
Hits: 4,
|
||||
Percent: 17,
|
||||
Offset: 0,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "Host_Down",
|
||||
Raw: "alertname=Host_Down",
|
||||
Hits: 16,
|
||||
Percent: 67,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "Free_Disk_Space_Too_Low",
|
||||
Value: "Free_Disk_Space_Too_Low",
|
||||
Raw: "alertname=Free_Disk_Space_Too_Low",
|
||||
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 84,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "Memory_Usage_Too_High",
|
||||
Raw: "alertname=Memory_Usage_Too_High",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 92,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -328,53 +347,72 @@ func TestNameStatsSort(t *testing.T) {
|
||||
Values: models.LabelValueStatsList{
|
||||
models.LabelValueStats{
|
||||
Value: "server4",
|
||||
Raw: "instance=server4",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "server5",
|
||||
Raw: "instance=server5",
|
||||
Hits: 4,
|
||||
Percent: 17,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "server6",
|
||||
Raw: "instance=server6",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "server1",
|
||||
Raw: "instance=server1",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "server2",
|
||||
Raw: "instance=server2",
|
||||
Hits: 4,
|
||||
Percent: 17,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "server3",
|
||||
Raw: "instance=server3",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "server7",
|
||||
Raw: "instance=server7",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "server8",
|
||||
Raw: "instance=server8",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "web1",
|
||||
Raw: "instance=web1",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 17,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "web2",
|
||||
Raw: "instance=web2",
|
||||
Hits: 2,
|
||||
Percent: 8,
|
||||
Offset: 17,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -384,13 +422,17 @@ func TestNameStatsSort(t *testing.T) {
|
||||
Values: models.LabelValueStatsList{
|
||||
models.LabelValueStats{
|
||||
Value: "by-name",
|
||||
Raw: "@receiver=by-name",
|
||||
Hits: 12,
|
||||
Percent: 50,
|
||||
Offset: 0,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "by-cluster-service",
|
||||
Raw: "@receiver=by-cluster-service",
|
||||
Hits: 12,
|
||||
Percent: 50,
|
||||
Offset: 50,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -400,13 +442,17 @@ func TestNameStatsSort(t *testing.T) {
|
||||
Values: models.LabelValueStatsList{
|
||||
models.LabelValueStats{
|
||||
Value: "node_exporter",
|
||||
Raw: "job=node_exporter",
|
||||
Hits: 8,
|
||||
Percent: 50,
|
||||
Offset: 0,
|
||||
},
|
||||
models.LabelValueStats{
|
||||
Value: "node_ping",
|
||||
Raw: "job=node_ping",
|
||||
Hits: 8,
|
||||
Percent: 50,
|
||||
Offset: 50,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user