diff options
| author | Xe Iaso <me@xeiaso.net> | 2024-05-13 13:44:01 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2024-05-13 13:44:01 -0400 |
| commit | ef98b27636ff79b3ba76df072d1f874b3ea565e9 (patch) | |
| tree | 87af7efd0709d9ffbb010d805574e7cc4b7a605c | |
| parent | 9ab2ee4fc920940e4ae9f43e55a68fcb1fe2c9e5 (diff) | |
| download | x-ef98b27636ff79b3ba76df072d1f874b3ea565e9.tar.xz x-ef98b27636ff79b3ba76df072d1f874b3ea565e9.zip | |
cmd/mi: better logging
Signed-off-by: Xe Iaso <me@xeiaso.net>
| -rw-r--r-- | cmd/mi/manifest.yaml | 1 | ||||
| -rw-r--r-- | cmd/mi/server.go | 13 | ||||
| -rw-r--r-- | proto/mi/mi.slog.go | 33 | ||||
| -rw-r--r-- | proto/mi/mi.valid.go | 30 |
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 +} |
