update prom logic

This commit is contained in:
41666 2024-06-26 20:18:54 -04:00
parent 03e38f566d
commit c01e3b3b88
4 changed files with 60 additions and 15 deletions

View file

@ -75,11 +75,11 @@ func handleHookCreateSwitch(h HookPayload) {
}
if len(sw.Members) != 0 {
front = &sw.Members[0]
front = sw.Members[0]
}
go dsiApi.UpdateFrontField(front.Name)
go promCountSwitches(h, sw.Members)
go promCountSwitches(h.SystemID, sw.Members)
// TODO: discord nickname updates
}

View file

@ -24,6 +24,8 @@ func main() {
mux.HandleFunc("/hook/{token}", postGetHookToken)
mux.HandleFunc("/healthcheck", getHealthcheck)
go populateSwitches()
// prometheus
mux.Handle("/metrics", promhttp.Handler())

View file

@ -3,7 +3,9 @@ package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"time"
"github.com/hashicorp/golang-lru/v2/expirable"
@ -14,7 +16,11 @@ var (
)
type PluralKitSwitch struct {
Members []PluralKitMember
Members []*PluralKitMember
}
type PluralKitSwitches struct {
Members []string
}
type PluralKitMember struct {
@ -79,8 +85,47 @@ func (pk *PluralKit) GetSwitch(systemID string, switchID string) (*PluralKitSwit
}
for _, member := range sw.Members {
pk.Cache.Add(member.UUID, &member)
pk.Cache.Add(member.UUID, member)
}
return &sw, nil
}
func (pk *PluralKit) GetSwitches(systemID string) (*PluralKitSwitches, error) {
resp, err := pk.Client.Get(fmt.Sprintf("%s/systems/%s/switches", pk.BaseURL, systemID))
if err != nil {
return nil, fmt.Errorf("fetching pluralkit system %s failed: %w", systemID, err)
}
if resp.StatusCode != 200 {
return nil, fmt.Errorf("pluralkit did not find system %s", systemID)
}
var sw []PluralKitSwitches
err = json.NewDecoder(resp.Body).Decode(&sw)
if err != nil {
return nil, fmt.Errorf("malformed json: %w", err)
}
return &sw[0], nil
}
func populateSwitches() {
sysID := os.Getenv("PK_SYSTEM_ID")
switches, err := pkApi.GetSwitches(sysID)
if err != nil {
log.Fatalln("failed to prepopulate switches.", err)
}
members := make([]*PluralKitMember, len(switches.Members))
for idx, id := range switches.Members {
m, err := pkApi.GetMember(id)
if err != nil {
log.Fatalln("failed to get member.", err)
}
members[idx] = m
}
promCountSwitches(sysID, members)
}

View file

@ -15,7 +15,7 @@ var (
switchGauge *prometheus.GaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{
Namespace: "plapkit",
Name: "switches",
}, []string{"system", "member", "member_display", "role"})
}, []string{"system", "member", "member_display"})
messageCounter *prometheus.CounterVec = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: "plapkit",
@ -29,24 +29,22 @@ func clearHighSwitches() {
}
}
func promCountSwitches(h HookPayload, members []PluralKitMember) {
func promCountSwitches(systemID string, members []*PluralKitMember) {
clearHighSwitches()
for idx, member := range members {
role := "cofront"
if idx == 0 {
role = "front"
}
labels := prometheus.Labels{
"system": h.SystemID,
"system": systemID,
"member": member.UUID,
"member_display": member.Name,
"role": role,
}
switchGauge.With(labels).Set(1)
knownHighSwitches[member.UUID+":"+role] = labels
gv := 1.0
if idx != 0 {
gv = -1.0
}
switchGauge.With(labels).Set(gv)
knownHighSwitches[member.UUID] = labels
}
}