fix fronter, deployment

This commit is contained in:
41666 2024-06-26 17:28:42 -04:00
parent 947600efb7
commit ce36c069a7
7 changed files with 84 additions and 42 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())
resp, err = i.Client.Do(&http.Request{ _, 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)
} }

View file

@ -1,5 +1,5 @@
{ {
description = "saerro"; description = "plapkit";
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
@ -8,8 +8,21 @@
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, ... }: { perSystem = { config, self', pkgs, lib, system, ... }: rec {
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,35 +59,27 @@ 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) {
members, ok := h.Data["members"].([]interface{}) sw, err := pkApi.GetSwitch(h.SystemID, h.ID)
if !ok { if err != nil {
log.Println("[handleHookCreateSwitch] ERR rejected, missing members", h.Data) log.Println("[handleHookCreateSwitch] switch fetch failed:", err)
return return
} }
log.Println("[handleHookCreateSwitch] got switch", members, h) log.Println("[handleHookCreateSwitch] got switch", sw.Members)
log.Println("[handleHookCreateSwitch] system id", h.SystemID, " -- switch id", h.ID)
// switch out, stop front := &PluralKitMember{
front := SwitchOut UUID: "00000000-0000-0000-0000-000000000000",
if len(members) != 0 { Name: "???",
front, ok = members[0].(string)
if !ok {
log.Println("[handleHookCreateSwitch] ERR rejected, first member wasn't a string", members)
return
}
} }
member, err := pkApi.GetMember(front) if len(sw.Members) != 0 {
if err != nil { front = &sw.Members[0]
log.Printf("[handleHookCreateSwitch] pk member fetch failed, skipping named requirements")
} else {
go dsiApi.UpdateFrontField(member.Name)
} }
go promCountSwitches(h, members) go dsiApi.UpdateFrontField(front.Name)
go promCountSwitches(h, sw.Members)
// TODO: discord nickname updates // TODO: discord nickname updates
} }

1
module.nix Normal file
View file

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

View file

@ -13,6 +13,10 @@ 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"`
@ -44,7 +48,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 %ss", id) return nil, fmt.Errorf("pluralkit did not find member %s", id)
} }
var member PluralKitMember var member PluralKitMember
@ -57,3 +61,26 @@ 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,7 +8,11 @@ import (
) )
var ( var (
switchCounter *prometheus.CounterVec = promauto.NewCounterVec(prometheus.CounterOpts{ // 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{
Namespace: "plapkit", Namespace: "plapkit",
Name: "switches", Name: "switches",
}, []string{"system", "member", "member_display", "role"}) }, []string{"system", "member", "member_display", "role"})
@ -19,26 +23,30 @@ var (
}, []string{"system", "member", "member_display"}) }, []string{"system", "member", "member_display"})
) )
func promCountSwitches(h HookPayload, members []interface{}) { func clearHighSwitches() {
for idx, id := range members { for _, labels := range knownHighSwitches {
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"
} }
member := &PluralKitMember{ labels := prometheus.Labels{
Name: "switched out", "system": h.SystemID,
"member": member.UUID,
"member_display": member.Name,
"role": role,
} }
member2, err := pkApi.GetMember(id.(string)) switchGauge.With(labels).Set(1)
if err != nil { knownHighSwitches[member.UUID+":"+role] = labels
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 Symbolic link
View file

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