mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
44 lines
816 B
Go
44 lines
816 B
Go
|
package metrics
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// Hand-crafted Prometheus metrics
|
||
|
// Since we're only using very simple counters in this application,
|
||
|
// we don't actually need the official client SDK as a dependency
|
||
|
|
||
|
type Metrics []Metric
|
||
|
|
||
|
func (m Metrics) Print() (output string) {
|
||
|
printedMetrics := make(map[string]bool)
|
||
|
for _, m := range m {
|
||
|
if _, ok := printedMetrics[m.Key()]; !ok {
|
||
|
output += fmt.Sprintf("%s\n", m.Header())
|
||
|
printedMetrics[m.Key()] = true
|
||
|
}
|
||
|
output += fmt.Sprintf("%s\n", m.Print())
|
||
|
}
|
||
|
|
||
|
return output
|
||
|
}
|
||
|
|
||
|
func (m Metrics) Len() int {
|
||
|
return len(m)
|
||
|
}
|
||
|
|
||
|
func (m Metrics) Less(i, j int) bool {
|
||
|
return strings.Compare(m[i].Key(), m[j].Key()) < 0
|
||
|
}
|
||
|
|
||
|
func (m Metrics) Swap(i, j int) {
|
||
|
m[i], m[j] = m[j], m[i]
|
||
|
}
|
||
|
|
||
|
type Metric interface {
|
||
|
Key() string
|
||
|
Header() string
|
||
|
Print() string
|
||
|
}
|