aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2024-05-13 13:44:01 -0400
committerXe Iaso <me@xeiaso.net>2024-05-13 13:44:01 -0400
commitef98b27636ff79b3ba76df072d1f874b3ea565e9 (patch)
tree87af7efd0709d9ffbb010d805574e7cc4b7a605c
parent9ab2ee4fc920940e4ae9f43e55a68fcb1fe2c9e5 (diff)
downloadx-ef98b27636ff79b3ba76df072d1f874b3ea565e9.tar.xz
x-ef98b27636ff79b3ba76df072d1f874b3ea565e9.zip
cmd/mi: better logging
Signed-off-by: Xe Iaso <me@xeiaso.net>
-rw-r--r--cmd/mi/manifest.yaml1
-rw-r--r--cmd/mi/server.go13
-rw-r--r--proto/mi/mi.slog.go33
-rw-r--r--proto/mi/mi.valid.go30
4 files changed, 77 insertions, 0 deletions
diff --git a/cmd/mi/manifest.yaml b/cmd/mi/manifest.yaml
index 7e502ea..8b010ca 100644
--- a/cmd/mi/manifest.yaml
+++ b/cmd/mi/manifest.yaml
@@ -11,6 +11,7 @@ metadata:
namespace: mi
labels:
app.kubernetes.io/name: mi
+ recurring-job-group.longhorn.io/backup: enabled
spec:
accessModes:
- ReadWriteMany
diff --git a/cmd/mi/server.go b/cmd/mi/server.go
index ff43de1..81da15d 100644
--- a/cmd/mi/server.go
+++ b/cmd/mi/server.go
@@ -2,6 +2,7 @@ package main
import (
"context"
+ "log/slog"
"time"
"github.com/oklog/ulid/v2"
@@ -48,6 +49,11 @@ func (s *SwitchTracker) WhoIsFront(ctx context.Context, _ *emptypb.Empty) (*pb.F
}
func (s *SwitchTracker) Switch(ctx context.Context, req *pb.SwitchReq) (*pb.SwitchResp, error) {
+ if err := req.Valid(); err != nil {
+ slog.Error("can't switch", "req", req, "err", err)
+ return nil, twirp.InvalidArgumentError("member_name", err.Error())
+ }
+
var sw models.Switch
tx := s.db.Begin()
@@ -90,6 +96,8 @@ func (s *SwitchTracker) Switch(ctx context.Context, req *pb.SwitchReq) (*pb.Swit
return nil, twirp.InternalErrorf("failed to commit transaction: %w", err)
}
+ slog.Info("switched", "from", sw.AsProto(), "to", newSwitch.AsProto())
+
return &pb.SwitchResp{
Old: sw.AsProto(),
Current: newSwitch.AsProto(),
@@ -97,6 +105,11 @@ func (s *SwitchTracker) Switch(ctx context.Context, req *pb.SwitchReq) (*pb.Swit
}
func (s *SwitchTracker) GetSwitch(ctx context.Context, req *pb.GetSwitchReq) (*pb.FrontChange, error) {
+ if err := req.Valid(); err != nil {
+ slog.Error("can't get switch by ID", "req", req, "err", err)
+ return nil, twirp.InvalidArgumentError("id", err.Error())
+ }
+
var sw models.Switch
if err := s.db.Joins("Member").Where("id = ?", req.Id).First(&sw).Error; err != nil {
return nil, twirp.NotFoundError("switch not found").WithMeta("id", req.Id)
diff --git a/proto/mi/mi.slog.go b/proto/mi/mi.slog.go
new file mode 100644
index 0000000..85db2e6
--- /dev/null
+++ b/proto/mi/mi.slog.go
@@ -0,0 +1,33 @@
+package mi
+
+import "log/slog"
+
+func (m *Member) LogValue() slog.Value {
+ return slog.GroupValue(
+ slog.Int("id", int(m.GetId())),
+ slog.String("name", m.GetName()),
+ slog.String("avatar_url", m.GetAvatarUrl()),
+ )
+}
+
+func (s *Switch) LogValue() slog.Value {
+ return slog.GroupValue(
+ slog.String("id", s.GetId()),
+ slog.Int("member_id", int(s.GetMemberId())),
+ slog.String("started_at", s.GetStartedAt()),
+ slog.String("ended_at", s.GetEndedAt()),
+ )
+}
+
+func (sr *SwitchReq) LogValue() slog.Value {
+ return slog.GroupValue(
+ slog.String("member_name", sr.GetMemberName()),
+ )
+}
+
+func (sr *SwitchResp) LogValue() slog.Value {
+ return slog.GroupValue(
+ slog.Any("old", sr.GetOld()),
+ slog.Any("current", sr.GetCurrent()),
+ )
+}
diff --git a/proto/mi/mi.valid.go b/proto/mi/mi.valid.go
new file mode 100644
index 0000000..396062e
--- /dev/null
+++ b/proto/mi/mi.valid.go
@@ -0,0 +1,30 @@
+package mi
+
+import (
+ "errors"
+)
+
+var (
+ ErrNoMemberName = errors.New("mi: no member name defined")
+ ErrNoSuchMemberInSystem = errors.New("mi: no such member in system")
+ ErrNoSwitchID = errors.New("mi: no switch ID defined")
+)
+
+func (sr *SwitchReq) Valid() error {
+ switch sr.GetMemberName() {
+ case "":
+ return ErrNoMemberName
+ case "Cadey", "Nicole", "Jessie", "Sephie", "Ashe", "Mai":
+ return nil
+ default:
+ return ErrNoSuchMemberInSystem
+ }
+}
+
+func (gsr *GetSwitchReq) Valid() error {
+ if gsr.GetId() == "" {
+ return ErrNoSwitchID
+ }
+
+ return nil
+}