Compare commits

..

No commits in common. "dddd75dd8661d3f34f1047e1a9c501a3cb3356c9" and "947600efb7a30a5e3a0d8667f99518b8066d525a" have entirely different histories.

8 changed files with 45 additions and 87 deletions

10
fedi.go
View file

@ -33,7 +33,7 @@ func NewIceshrimpAPI(baseURL string, token string, fieldName string) IceshrimpAP
} }
func (i IceshrimpAPI) UpdateFrontField(newValue string) { func (i IceshrimpAPI) UpdateFrontField(newValue string) {
// log.Println("UpdateFrontField") log.Println("UpdateFrontField")
headers := http.Header{} headers := http.Header{}
headers.Add("authorization", fmt.Sprintf("Bearer %s", i.Token)) headers.Add("authorization", fmt.Sprintf("Bearer %s", i.Token))
@ -71,7 +71,7 @@ func (i IceshrimpAPI) UpdateFrontField(newValue string) {
return return
} }
// log.Println(fields) log.Println(fields)
for idx, field := range fields.Fields { for idx, field := range fields.Fields {
if field.Name == i.FieldName { if field.Name == i.FieldName {
@ -93,9 +93,9 @@ func (i IceshrimpAPI) UpdateFrontField(newValue string) {
return return
} }
// log.Println(buf.String()) log.Println(buf.String())
_, err = i.Client.Do(&http.Request{ resp, err = i.Client.Do(&http.Request{
URL: url, URL: url,
Method: "POST", Method: "POST",
Header: headers, Header: headers,
@ -105,5 +105,5 @@ func (i IceshrimpAPI) UpdateFrontField(newValue string) {
log.Println("[IceshrimpAPI] update call failed", err) log.Println("[IceshrimpAPI] update call failed", err)
} }
// json.NewDecoder(os.Stderr).Decode(resp.Body) json.NewDecoder(os.Stderr).Decode(resp.Body)
} }

6
flake.lock generated
View file

@ -20,11 +20,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1719254875, "lastModified": 1719075281,
"narHash": "sha256-ECni+IkwXjusHsm9Sexdtq8weAq/yUyt1TWIemXt3Ko=", "narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60", "rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -1,5 +1,5 @@
{ {
description = "plapkit"; description = "saerro";
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
@ -8,21 +8,8 @@
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } {
systems = [ "x86_64-linux" "aarch64-linux" ]; systems = [ "x86_64-linux" "aarch64-linux" ];
perSystem = { config, self', pkgs, lib, system, ... }: rec { perSystem = { config, self', pkgs, lib, system, ... }: {
devShells.default = import ./shell.nix { inherit pkgs; }; devShells.default = import ./shell.nix { inherit pkgs; };
packages.default = pkgs.buildGoModule {
name = "plapkit";
src = ./.;
vendorHash = "sha256-YY7Hj7lSq7vEoMEIu/zmweWzd7p7KF+4YCUX2SJ7kwI=";
};
packages.container = pkgs.dockerTools.buildImage {
name = "plapkit";
config = {
Cmd = [ "${packages.default}" ];
};
};
}; };
}; };
} }

View file

@ -59,27 +59,35 @@ func postGetHookToken(rw http.ResponseWriter, req *http.Request) {
go handler(payload) go handler(payload)
} }
const SwitchOut = "00000000-0000-0000-0000-000000000000"
func handleHookCreateSwitch(h HookPayload) { func handleHookCreateSwitch(h HookPayload) {
sw, err := pkApi.GetSwitch(h.SystemID, h.ID) members, ok := h.Data["members"].([]interface{})
if err != nil { if !ok {
log.Println("[handleHookCreateSwitch] switch fetch failed:", err) log.Println("[handleHookCreateSwitch] ERR rejected, missing members", h.Data)
return return
} }
log.Println("[handleHookCreateSwitch] got switch", sw.Members) log.Println("[handleHookCreateSwitch] got switch", members, h)
log.Println("[handleHookCreateSwitch] system id", h.SystemID, " -- switch id", h.ID)
front := &PluralKitMember{ // switch out, stop
UUID: "00000000-0000-0000-0000-000000000000", front := SwitchOut
Name: "???", if len(members) != 0 {
front, ok = members[0].(string)
if !ok {
log.Println("[handleHookCreateSwitch] ERR rejected, first member wasn't a string", members)
return
}
} }
if len(sw.Members) != 0 { member, err := pkApi.GetMember(front)
front = &sw.Members[0] if err != nil {
log.Printf("[handleHookCreateSwitch] pk member fetch failed, skipping named requirements")
} else {
go dsiApi.UpdateFrontField(member.Name)
} }
go dsiApi.UpdateFrontField(front.Name) go promCountSwitches(h, members)
go promCountSwitches(h, sw.Members)
// TODO: discord nickname updates // TODO: discord nickname updates
} }

View file

@ -1 +0,0 @@
{ ... }: {}

View file

@ -13,10 +13,6 @@ var (
pkApi = NewPluralKit() pkApi = NewPluralKit()
) )
type PluralKitSwitch struct {
Members []PluralKitMember
}
type PluralKitMember struct { type PluralKitMember struct {
UUID string `json:"uuid"` UUID string `json:"uuid"`
Name string `json:"name"` Name string `json:"name"`
@ -48,7 +44,7 @@ func (pk *PluralKit) GetMember(id string) (*PluralKitMember, error) {
} }
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
return nil, fmt.Errorf("pluralkit did not find member %s", id) return nil, fmt.Errorf("pluralkit did not find member %ss", id)
} }
var member PluralKitMember var member PluralKitMember
@ -61,26 +57,3 @@ func (pk *PluralKit) GetMember(id string) (*PluralKitMember, error) {
return &member, nil return &member, nil
} }
func (pk *PluralKit) GetSwitch(systemID string, switchID string) (*PluralKitSwitch, error) {
resp, err := pk.Client.Get(fmt.Sprintf("%s/systems/%s/switches/%s", pk.BaseURL, systemID, switchID))
if err != nil {
return nil, fmt.Errorf("fetching pluralkit system %s switch %s failed: %w", systemID, switchID, err)
}
if resp.StatusCode != 200 {
return nil, fmt.Errorf("pluralkit did not find system %s switch %s", systemID, switchID)
}
var sw PluralKitSwitch
err = json.NewDecoder(resp.Body).Decode(&sw)
if err != nil {
return nil, fmt.Errorf("malformed json: %w", err)
}
for _, member := range sw.Members {
pk.Cache.Add(member.UUID, &member)
}
return &sw, nil
}

View file

@ -8,11 +8,7 @@ import (
) )
var ( var (
// known high signals, we will set these to zero after. switchCounter *prometheus.CounterVec = promauto.NewCounterVec(prometheus.CounterOpts{
// key is uuid:role
knownHighSwitches = map[string]prometheus.Labels{} // tima was here
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", "role"})
@ -23,30 +19,26 @@ var (
}, []string{"system", "member", "member_display"}) }, []string{"system", "member", "member_display"})
) )
func clearHighSwitches() { func promCountSwitches(h HookPayload, members []interface{}) {
for _, labels := range knownHighSwitches { for idx, id := range members {
switchGauge.With(labels).Set(0)
}
}
func promCountSwitches(h HookPayload, members []PluralKitMember) {
clearHighSwitches()
for idx, member := range members {
role := "cofront" role := "cofront"
if idx == 0 { if idx == 0 {
role = "front" role = "front"
} }
labels := prometheus.Labels{ member := &PluralKitMember{
"system": h.SystemID, Name: "switched out",
"member": member.UUID,
"member_display": member.Name,
"role": role,
} }
switchGauge.With(labels).Set(1) member2, err := pkApi.GetMember(id.(string))
knownHighSwitches[member.UUID+":"+role] = labels if err != nil {
member.Name = "%%lookup failed%%"
log.Println("[promCountSwitches] WARN lookup failed,", err)
} else {
member = member2
}
switchCounter.WithLabelValues(h.SystemID, id.(string), member.Name, role).Inc()
} }
} }

1
result
View file

@ -1 +0,0 @@
/nix/store/cnnxb0z1g23wmaaigskrbdxfa566n97h-docker-image-plapkit.tar.gz