diff --git a/fedi.go b/fedi.go index effc661..6ec8018 100644 --- a/fedi.go +++ b/fedi.go @@ -33,7 +33,7 @@ func NewIceshrimpAPI(baseURL string, token string, fieldName string) IceshrimpAP } func (i IceshrimpAPI) UpdateFrontField(newValue string) { - // log.Println("UpdateFrontField") + log.Println("UpdateFrontField") headers := http.Header{} headers.Add("authorization", fmt.Sprintf("Bearer %s", i.Token)) @@ -71,7 +71,7 @@ func (i IceshrimpAPI) UpdateFrontField(newValue string) { return } - // log.Println(fields) + log.Println(fields) for idx, field := range fields.Fields { if field.Name == i.FieldName { @@ -93,9 +93,9 @@ func (i IceshrimpAPI) UpdateFrontField(newValue string) { return } - // log.Println(buf.String()) + log.Println(buf.String()) - _, err = i.Client.Do(&http.Request{ + resp, err = i.Client.Do(&http.Request{ URL: url, Method: "POST", Header: headers, @@ -105,5 +105,5 @@ func (i IceshrimpAPI) UpdateFrontField(newValue string) { log.Println("[IceshrimpAPI] update call failed", err) } - // json.NewDecoder(os.Stderr).Decode(resp.Body) + json.NewDecoder(os.Stderr).Decode(resp.Body) } diff --git a/flake.lock b/flake.lock index 190dfbe..6846000 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1719254875, - "narHash": "sha256-ECni+IkwXjusHsm9Sexdtq8weAq/yUyt1TWIemXt3Ko=", + "lastModified": 1719075281, + "narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60", + "rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 0f51b6d..b0b6c25 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "plapkit"; + description = "saerro"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -8,21 +8,8 @@ outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { 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; }; - - packages.default = pkgs.buildGoModule { - name = "plapkit"; - src = ./.; - vendorHash = "sha256-YY7Hj7lSq7vEoMEIu/zmweWzd7p7KF+4YCUX2SJ7kwI="; - }; - - packages.container = pkgs.dockerTools.buildImage { - name = "plapkit"; - config = { - Cmd = [ "${packages.default}" ]; - }; - }; }; }; } \ No newline at end of file diff --git a/hook_handler.go b/hook_handler.go index 9fa7502..f400a76 100644 --- a/hook_handler.go +++ b/hook_handler.go @@ -59,27 +59,35 @@ func postGetHookToken(rw http.ResponseWriter, req *http.Request) { go handler(payload) } +const SwitchOut = "00000000-0000-0000-0000-000000000000" + func handleHookCreateSwitch(h HookPayload) { - sw, err := pkApi.GetSwitch(h.SystemID, h.ID) - if err != nil { - log.Println("[handleHookCreateSwitch] switch fetch failed:", err) + members, ok := h.Data["members"].([]interface{}) + if !ok { + log.Println("[handleHookCreateSwitch] ERR rejected, missing members", h.Data) return } - log.Println("[handleHookCreateSwitch] got switch", sw.Members) - log.Println("[handleHookCreateSwitch] system id", h.SystemID, " -- switch id", h.ID) + log.Println("[handleHookCreateSwitch] got switch", members, h) - front := &PluralKitMember{ - UUID: "00000000-0000-0000-0000-000000000000", - Name: "???", + // switch out, stop + front := SwitchOut + 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 { - front = &sw.Members[0] + member, err := pkApi.GetMember(front) + 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, sw.Members) + go promCountSwitches(h, members) // TODO: discord nickname updates } diff --git a/module.nix b/module.nix deleted file mode 100644 index 463085b..0000000 --- a/module.nix +++ /dev/null @@ -1 +0,0 @@ -{ ... }: {} \ No newline at end of file diff --git a/pluralkit.go b/pluralkit.go index 0a45248..4b93361 100644 --- a/pluralkit.go +++ b/pluralkit.go @@ -13,10 +13,6 @@ var ( pkApi = NewPluralKit() ) -type PluralKitSwitch struct { - Members []PluralKitMember -} - type PluralKitMember struct { UUID string `json:"uuid"` Name string `json:"name"` @@ -48,7 +44,7 @@ func (pk *PluralKit) GetMember(id string) (*PluralKitMember, error) { } 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 @@ -61,26 +57,3 @@ func (pk *PluralKit) GetMember(id string) (*PluralKitMember, error) { 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 -} diff --git a/prometheus.go b/prometheus.go index cbf6bd3..b897101 100644 --- a/prometheus.go +++ b/prometheus.go @@ -8,11 +8,7 @@ import ( ) var ( - // known high signals, we will set these to zero after. - // key is uuid:role - knownHighSwitches = map[string]prometheus.Labels{} // tima was here - - switchGauge *prometheus.GaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{ + switchCounter *prometheus.CounterVec = promauto.NewCounterVec(prometheus.CounterOpts{ Namespace: "plapkit", Name: "switches", }, []string{"system", "member", "member_display", "role"}) @@ -23,30 +19,26 @@ var ( }, []string{"system", "member", "member_display"}) ) -func clearHighSwitches() { - for _, labels := range knownHighSwitches { - switchGauge.With(labels).Set(0) - } -} - -func promCountSwitches(h HookPayload, members []PluralKitMember) { - clearHighSwitches() - - for idx, member := range members { +func promCountSwitches(h HookPayload, members []interface{}) { + for idx, id := range members { role := "cofront" if idx == 0 { role = "front" } - labels := prometheus.Labels{ - "system": h.SystemID, - "member": member.UUID, - "member_display": member.Name, - "role": role, + member := &PluralKitMember{ + Name: "switched out", } - switchGauge.With(labels).Set(1) - knownHighSwitches[member.UUID+":"+role] = labels + member2, err := pkApi.GetMember(id.(string)) + 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() } } diff --git a/result b/result deleted file mode 120000 index abc93be..0000000 --- a/result +++ /dev/null @@ -1 +0,0 @@ -/nix/store/cnnxb0z1g23wmaaigskrbdxfa566n97h-docker-image-plapkit.tar.gz \ No newline at end of file