From 46d73eddae776b1b0d21fbc2018d688a54c915d8 Mon Sep 17 00:00:00 2001 From: Waldemar Quevedo Date: Fri, 2 Sep 2022 21:53:19 -0700 Subject: [PATCH] js: add per account reserved mem/store bytes Signed-off-by: Waldemar Quevedo --- server/monitor.go | 5 +++++ server/monitor_test.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/server/monitor.go b/server/monitor.go index 13b145b3..6337634e 100644 --- a/server/monitor.go +++ b/server/monitor.go @@ -2700,6 +2700,11 @@ func (s *Server) accountDetail(jsa *jsAccount, optStreams, optConsumers, optCfg }, Streams: make([]StreamDetail, 0, len(jsa.streams)), } + if reserved, ok := jsa.limits[_EMPTY_]; ok { + detail.JetStreamStats.ReservedMemory = uint64(reserved.MaxMemory) + detail.JetStreamStats.ReservedStore = uint64(reserved.MaxStore) + } + jsa.usageMu.RUnlock() var streams []*stream if optStreams { diff --git a/server/monitor_test.go b/server/monitor_test.go index b3485265..f8186937 100644 --- a/server/monitor_test.go +++ b/server/monitor_test.go @@ -4205,6 +4205,41 @@ func TestMonitorJsz(t *testing.T) { } } }) + t.Run("accounts reserved metrics", func(t *testing.T) { + for _, url := range []string{monUrl1, monUrl2} { + info := readJsInfo(url + "?accounts=true&acc=ACC") + if len(info.AccountDetails) != 1 { + t.Fatalf("expected single account") + } + acc := info.AccountDetails[0] + got := int(acc.ReservedMemory) + expected := 5242880 + if got != expected { + t.Errorf("Expected: %v, got: %v", expected, got) + } + got = int(acc.ReservedStore) + expected = 4194304 + if got != expected { + t.Errorf("Expected: %v, got: %v", expected, got) + } + + info = readJsInfo(url + "?accounts=true&acc=BCC_TO_HAVE_ONE_EXTRA") + if len(info.AccountDetails) != 1 { + t.Fatalf("expected single account") + } + acc = info.AccountDetails[0] + got = int(acc.ReservedMemory) + expected = -1 + if got != expected { + t.Errorf("Expected: %v, got: %v", expected, got) + } + got = int(acc.ReservedStore) + expected = -1 + if got != expected { + t.Errorf("Expected: %v, got: %v", expected, got) + } + } + }) t.Run("offset-too-big", func(t *testing.T) { for _, url := range []string{monUrl1, monUrl2} { info := readJsInfo(url + "?accounts=true&offset=10")