m/pkg/logtree: implement concise stringification
This adds a new method on LogEntry: ConciseString(). It's designed to
be used in cases where we want to display the log line on some
limited-width (and likely non-interactive) log console, like TTY
consoles in Metropolis.
This is a bit too Metropolis-specific to my liking (we hardcode some
logic related to the layout of root.role.*), but it'll do for now.
Change-Id: I1079b8b19a3c304fcc5077ce6b4c69887a34d7ae
Reviewed-on: https://review.monogon.dev/c/monogon/+/1359
Reviewed-by: Leopold Schabel <leo@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/pkg/logtree/journal_test.go b/metropolis/pkg/logtree/journal_test.go
index 474748a..1df3f12 100644
--- a/metropolis/pkg/logtree/journal_test.go
+++ b/metropolis/pkg/logtree/journal_test.go
@@ -146,3 +146,28 @@
t.Fatalf("Subtree(a.b): %s", res)
}
}
+
+func TestDN_Shorten(t *testing.T) {
+ for i, te := range []struct {
+ input string
+ maxLen int
+ want string
+ }{
+ {"root.role.controlplane.launcher.consensus.autopromoter", 20, "cplane autopromoter"},
+ {"networking.interfaces", 20, "net ifaces"},
+ {"hostsfile", 20, "hostsfile"},
+ {"root.dhcp-server", 20, "dhcp-server"},
+ {"root.role.kubernetes.run.kubernetes.apiserver", 20, "k8s apiserver"},
+ {"some.very.long.dn.that.cant.be.shortened", 20, "...cant be shortened"},
+ {"network.interfaces.dhcp", 20, "net ifaces dhcp"},
+ } {
+ got := DN(te.input).Shorten(MetropolisShortenDict, te.maxLen)
+ if len(got) > te.maxLen {
+ t.Errorf("case %d: output %q too long, got %d bytes, wanted %d", i, got, len(got), te.maxLen)
+ } else {
+ if te.want != got {
+ t.Errorf("case %d: wanted %q, got %q", i, te.want, got)
+ }
+ }
+ }
+}