-
Notifications
You must be signed in to change notification settings - Fork 1
/
lobby.go
46 lines (38 loc) · 1.06 KB
/
lobby.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package metric
import (
"errors"
"fmt"
"github.com/prometheus/client_golang/prometheus"
)
var lobbyMetric *LobbyMetric
type LobbyMetric struct {
runningLobby *prometheus.GaugeVec
}
func RunningLobbyInc(stream string, lobby string) {
if lobbyMetric != nil {
if vec, err := lobbyMetric.runningLobby.GetMetricWith(prometheus.Labels{"stream": stream, "lobby": lobby}); err != nil {
vec.Dec()
}
}
}
func RunningLobbyDec(stream string, lobby string) {
if lobbyMetric != nil {
lobbyMetric.runningLobby.Delete(prometheus.Labels{"stream": stream, "lobby": lobby})
}
}
func NewLobbyMetrics() (*LobbyMetric, error) {
if lobbyMetric != nil {
return nil, errors.New("lobby metric already exists")
}
lobbyMetric = &LobbyMetric{
runningLobby: prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: "shig",
Name: "lobby",
Help: "running lobbies",
}, []string{"stream", "lobby"}),
}
if err := prometheus.Register(lobbyMetric.runningLobby); err != nil {
return nil, fmt.Errorf("register runningLobby metric: %w", err)
}
return lobbyMetric, nil
}