forked from github-mirrorer/quake-kube
Extract metrics reporter from Server
This commit is contained in:
60
pkg/reporters/metrics/metrics_reporter.go
Normal file
60
pkg/reporters/metrics/metrics_reporter.go
Normal file
@ -0,0 +1,60 @@
|
||||
package metrics
|
||||
|
||||
import (
|
||||
"github.com/criticalstack/quake-kube/internal/quake/net"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
)
|
||||
|
||||
var (
|
||||
activePlayers = promauto.NewGauge(prometheus.GaugeOpts{
|
||||
Name: "quake_active_players",
|
||||
Help: "The current number of active players",
|
||||
})
|
||||
|
||||
scores = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
||||
Name: "quake_player_scores",
|
||||
Help: "Current scores by player, by map",
|
||||
}, []string{"player", "map"})
|
||||
|
||||
pings = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
||||
Name: "quake_player_pings",
|
||||
Help: "Current ping by player",
|
||||
}, []string{"player"})
|
||||
|
||||
configReloads = promauto.NewCounter(prometheus.CounterOpts{
|
||||
Name: "quake_config_reloads",
|
||||
Help: "Config file reload count",
|
||||
})
|
||||
)
|
||||
|
||||
type StatusMetrics struct {
|
||||
MapName string
|
||||
Players []net.Player
|
||||
}
|
||||
|
||||
func ConfigReloads() prometheus.Counter {
|
||||
return configReloads
|
||||
}
|
||||
|
||||
func Pings() *prometheus.GaugeVec {
|
||||
return pings
|
||||
}
|
||||
|
||||
func Scores() *prometheus.GaugeVec {
|
||||
return scores
|
||||
}
|
||||
|
||||
func ActivePlayers() prometheus.Gauge {
|
||||
return activePlayers
|
||||
}
|
||||
|
||||
func Report(metrics *StatusMetrics) {
|
||||
ActivePlayers().Set(float64(len(metrics.Players)))
|
||||
for _, p := range metrics.Players {
|
||||
if len(metrics.MapName) > 0 {
|
||||
Scores().WithLabelValues(p.Name, metrics.MapName).Set(float64(p.Score))
|
||||
}
|
||||
Pings().WithLabelValues(p.Name).Set(float64(p.Ping))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user