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 { if len(sw.Members) != 0 {
front = &sw.Members[0] front = sw.Members[0]
} }
go dsiApi.UpdateFrontField(front.Name) go dsiApi.UpdateFrontField(front.Name)
go promCountSwitches(h, sw.Members) go promCountSwitches(h.SystemID, sw.Members)
// TODO: discord nickname updates // TODO: discord nickname updates
} }

View file

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

View file

@ -3,7 +3,9 @@ package main
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"log"
"net/http" "net/http"
"os"
"time" "time"
"github.com/hashicorp/golang-lru/v2/expirable" "github.com/hashicorp/golang-lru/v2/expirable"
@ -14,7 +16,11 @@ var (
) )
type PluralKitSwitch struct { type PluralKitSwitch struct {
Members []PluralKitMember Members []*PluralKitMember
}
type PluralKitSwitches struct {
Members []string
} }
type PluralKitMember struct { type PluralKitMember struct {
@ -79,8 +85,47 @@ func (pk *PluralKit) GetSwitch(systemID string, switchID string) (*PluralKitSwit
} }
for _, member := range sw.Members { for _, member := range sw.Members {
pk.Cache.Add(member.UUID, &member) pk.Cache.Add(member.UUID, member)
} }
return &sw, nil 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{ switchGauge *prometheus.GaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{
Namespace: "plapkit", Namespace: "plapkit",
Name: "switches", Name: "switches",
}, []string{"system", "member", "member_display", "role"}) }, []string{"system", "member", "member_display"})
messageCounter *prometheus.CounterVec = promauto.NewCounterVec(prometheus.CounterOpts{ messageCounter *prometheus.CounterVec = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: "plapkit", Namespace: "plapkit",
@ -29,24 +29,22 @@ func clearHighSwitches() {
} }
} }
func promCountSwitches(h HookPayload, members []PluralKitMember) { func promCountSwitches(systemID string, members []*PluralKitMember) {
clearHighSwitches() clearHighSwitches()
for idx, member := range members { for idx, member := range members {
role := "cofront"
if idx == 0 {
role = "front"
}
labels := prometheus.Labels{ labels := prometheus.Labels{
"system": h.SystemID, "system": systemID,
"member": member.UUID, "member": member.UUID,
"member_display": member.Name, "member_display": member.Name,
"role": role,
} }
switchGauge.With(labels).Set(1) gv := 1.0
knownHighSwitches[member.UUID+":"+role] = labels if idx != 0 {
gv = -1.0
}
switchGauge.With(labels).Set(gv)
knownHighSwitches[member.UUID] = labels
} }
} }