update prom logic
This commit is contained in:
parent
03e38f566d
commit
c01e3b3b88
4 changed files with 60 additions and 15 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
main.go
2
main.go
|
@ -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())
|
||||||
|
|
||||||
|
|
49
pluralkit.go
49
pluralkit.go
|
@ -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)
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue