forked from github-mirrorer/quake-kube
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
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))
|
|
}
|
|
}
|