From c916f9500be9a35389ca85df84a74eadcf137ebb Mon Sep 17 00:00:00 2001 From: "R.I.Pienaar" Date: Thu, 2 Jan 2025 11:44:13 +0100 Subject: [PATCH] Export the examples Add method, rename some methods Signed-off-by: R.I.Pienaar --- audit/account_checks.go | 6 +-- audit/archive/archive_test.go | 16 +++---- audit/archive/reader.go | 20 ++++----- audit/checks.go | 2 +- audit/cluster_checks.go | 22 +++++----- audit/examples_collection.go | 3 +- audit/leafnode_checks.go | 6 +-- audit/metacluster_checks.go | 12 ++--- audit/server_checks.go | 82 +++++++++++++++++++++++++++-------- audit/stream_checks.go | 24 +++++----- 10 files changed, 119 insertions(+), 74 deletions(-) diff --git a/audit/account_checks.go b/audit/account_checks.go index 7579db91..38b3cd61 100644 --- a/audit/account_checks.go +++ b/audit/account_checks.go @@ -60,7 +60,7 @@ func checkAccountLimits(check *Check, r *archive.Reader, examples *ExamplesColle threshold := int64(float64(limit) * percentThreshold) if value > threshold { - examples.add( + examples.Add( "account %s (on %s) using %.1f%% of %s limit (%d/%d)", accountName, serverName, @@ -74,10 +74,10 @@ func checkAccountLimits(check *Check, r *archive.Reader, examples *ExamplesColle accountsTag := archive.TagServerAccounts() accountDetailsTag := archive.TagAccountInfo() - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var accountz server.Accountz diff --git a/audit/archive/archive_test.go b/audit/archive/archive_test.go index 3609efa1..e4c81cd9 100644 --- a/audit/archive/archive_test.go +++ b/audit/archive/archive_test.go @@ -365,32 +365,32 @@ func Test_CreateThenReadArchiveUsingTags(t *testing.T) { } } - clusterNames := ar.GetClusterNames() + clusterNames := ar.ClusterNames() if slices.Compare(clusterNames, expectedClusters) != 0 { t.Fatalf("Expected clusters: %v, got: %v", expectedClusters, clusterNames) } for _, clusterName := range clusterNames { - serverNames := ar.GetClusterServerNames(clusterName) + serverNames := ar.ClusterServerNames(clusterName) if slices.Compare(clusters[clusterName], serverNames) != 0 { t.Fatalf("Expected cluster %s servers: %v, got: %v", clusterName, clusters[clusterName], serverNames) } } expectedAccountNames := []string{globalAccountName} - accountNames := ar.GetAccountNames() + accountNames := ar.AccountNames() if slices.Compare(expectedAccountNames, accountNames) != 0 { t.Fatalf("Expected accounts: %v, got: %v", expectedAccountNames, accountNames) } expectedStreamNames := []string{"ORDERS"} - streamNames := ar.GetAccountStreamNames(globalAccountName) + streamNames := ar.AccountStreamNames(globalAccountName) if slices.Compare(expectedStreamNames, streamNames) != 0 { t.Fatalf("Expected account %s streams: %v, got: %v", globalAccountName, expectedStreamNames, streamNames) } expectedReplicaNames := []string{"A", "B", "E"} - replicaNames := ar.GetStreamServerNames(globalAccountName, "ORDERS") + replicaNames := ar.StreamServerNames(globalAccountName, "ORDERS") if slices.Compare(expectedReplicaNames, replicaNames) != 0 { t.Fatalf("Expected stream %s/%s replicas: %v, got: %v", globalAccountName, "ORDERS", expectedReplicaNames, replicaNames) } @@ -464,19 +464,19 @@ func Test_IterateResourcesUsingTags(t *testing.T) { t.Fatalf("Failed to open archive: %s", err) } - clusterNames := ar.GetClusterNames() + clusterNames := ar.ClusterNames() slices.SortFunc(clusterNames, strings.Compare) if !slices.Equal(clusterNames, expectedClusterNames) { t.Fatalf("Expected clusters: %v, actual: %v", expectedClusterNames, clusterNames) } - if len(ar.GetClusterServerNames("NO_SUCH_CLUSTER")) != 0 { + if len(ar.ClusterServerNames("NO_SUCH_CLUSTER")) != 0 { t.Fatalf("Looking up non-existent cluster produced some results") } for clusterName, expectedServerNames := range clusterServerMap { - serverNames := ar.GetClusterServerNames(clusterName) + serverNames := ar.ClusterServerNames(clusterName) slices.SortFunc(expectedServerNames, strings.Compare) slices.SortFunc(serverNames, strings.Compare) if !slices.Equal(serverNames, expectedServerNames) { diff --git a/audit/archive/reader.go b/audit/archive/reader.go index 223183b8..72e0108a 100644 --- a/audit/archive/reader.go +++ b/audit/archive/reader.go @@ -316,15 +316,15 @@ func NewReader(archivePath string) (*Reader, error) { }, nil } -// GetAccountNames list the unique names of accounts found in the archive +// AccountNames list the unique names of accounts found in the archive // The list of names is sorted alphabetically -func (r *Reader) GetAccountNames() []string { +func (r *Reader) AccountNames() []string { return slices.Clone(r.accountNames) } -// GetAccountStreamNames list the unique stream names found in the archive for the given account +// AccountStreamNames list the unique stream names found in the archive for the given account // The list of names is sorted alphabetically -func (r *Reader) GetAccountStreamNames(accountName string) []string { +func (r *Reader) AccountStreamNames(accountName string) []string { streams, present := r.accountStreamNames[accountName] if present { return slices.Clone(streams) @@ -332,15 +332,15 @@ func (r *Reader) GetAccountStreamNames(accountName string) []string { return make([]string, 0) } -// GetClusterNames list the unique names of clusters found in the archive +// ClusterNames list the unique names of clusters found in the archive // The list of names is sorted alphabetically -func (r *Reader) GetClusterNames() []string { +func (r *Reader) ClusterNames() []string { return slices.Clone(r.clusterNames) } -// GetClusterServerNames list the unique server names found in the archive for the given cluster +// ClusterServerNames list the unique server names found in the archive for the given cluster // The list of names is sorted alphabetically -func (r *Reader) GetClusterServerNames(clusterName string) []string { +func (r *Reader) ClusterServerNames(clusterName string) []string { servers, present := r.clustersServerNames[clusterName] if present { return slices.Clone(servers) @@ -348,9 +348,9 @@ func (r *Reader) GetClusterServerNames(clusterName string) []string { return make([]string, 0) } -// GetStreamServerNames list the unique server names found in the archive for the given stream in the given account +// StreamServerNames list the unique server names found in the archive for the given stream in the given account // The list of names is sorted alphabetically -func (r *Reader) GetStreamServerNames(accountName, streamName string) []string { +func (r *Reader) StreamServerNames(accountName, streamName string) []string { servers, present := r.streamServerNames[accountName+"/"+streamName] if present { return slices.Clone(servers) diff --git a/audit/checks.go b/audit/checks.go index 01e0b92d..a4a56d91 100644 --- a/audit/checks.go +++ b/audit/checks.go @@ -292,7 +292,7 @@ func (c *CheckCollection) EachCheck(cb func(c *Check)) { for _, suite := range suites { sort.Slice(c.suites[suite], func(i, j int) bool { - return c.suites[suite][i].Name < c.suites[suite][j].Name + return c.suites[suite][i].Code < c.suites[suite][j].Code }) for _, check := range c.suites[suite] { diff --git a/audit/cluster_checks.go b/audit/cluster_checks.go index 3ae18b83..e67e9424 100644 --- a/audit/cluster_checks.go +++ b/audit/cluster_checks.go @@ -77,7 +77,7 @@ func RegisterClusterChecks(collection *CheckCollection) error { // checkClusterMemoryUsageOutliers verifies the memory usage of any given node in a cluster is not significantly higher than its peers func checkClusterMemoryUsageOutliers(check *Check, r *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { typeTag := archive.TagServerVars() - clusterNames := r.GetClusterNames() + clusterNames := r.ClusterNames() outlierThreshold := check.Configuration["memory"].Value() clustersWithIssuesMap := make(map[string]any, len(clusterNames)) @@ -85,7 +85,7 @@ func checkClusterMemoryUsageOutliers(check *Check, r *archive.Reader, examples * for _, clusterName := range clusterNames { clusterTag := archive.TagCluster(clusterName) - serverNames := r.GetClusterServerNames(clusterName) + serverNames := r.ClusterServerNames(clusterName) clusterMemoryUsageMap := make(map[string]float64, len(serverNames)) clusterMemoryUsageTotal := float64(0) numServers := 0 // cannot use len(serverNames) as some artifacts may be missing @@ -112,7 +112,7 @@ func checkClusterMemoryUsageOutliers(check *Check, r *archive.Reader, examples * for serverName, serverMemoryUsage := range clusterMemoryUsageMap { if serverMemoryUsage > threshold { - examples.add( + examples.Add( "Cluster %s avg: %s, server %s: %s", clusterName, humanize.IBytes(uint64(clusterMemoryUsageMean)), @@ -139,14 +139,14 @@ func checkClusterMemoryUsageOutliers(check *Check, r *archive.Reader, examples * // checkClusterUniformGatewayConfig verify that gateways configuration matches for all nodes in each cluster func checkClusterUniformGatewayConfig(_ *Check, r *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) // For each cluster, build a map where they key is a server name in the cluster // And the value is a list of configured remote target clusters configuredOutboundGateways := make(map[string][]string) configuredInboundGateways := make(map[string][]string) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var gateways server.Gatewayz @@ -208,7 +208,7 @@ func checkClusterUniformGatewayConfig(_ *Check, r *archive.Reader, examples *Exa len(previousTargetClusterNames), ) if !reflect.DeepEqual(targetClusterNames, previousTargetClusterNames) { - examples.add( + examples.Add( "Cluster %s, %s gateways server %s: %v != server %s: %v", clusterName, t.gatewayType, @@ -237,9 +237,9 @@ func checkClusterHighHAAssets(check *Check, r *archive.Reader, examples *Example jsTag := archive.TagServerJetStream() haAssetsThreshold := check.Configuration["assets"].Value() - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var serverJSInfo server.JSInfo @@ -252,7 +252,7 @@ func checkClusterHighHAAssets(check *Check, r *archive.Reader, examples *Example } if float64(serverJSInfo.HAAssets) > haAssetsThreshold { - examples.add("%s: %d HA assets", serverName, serverJSInfo.HAAssets) + examples.Add("%s: %d HA assets", serverName, serverJSInfo.HAAssets) } } } @@ -266,9 +266,9 @@ func checkClusterHighHAAssets(check *Check, r *archive.Reader, examples *Example } func checkClusterNamesForWhitespace(_ *Check, reader *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { - for _, clusterName := range reader.GetClusterNames() { + for _, clusterName := range reader.ClusterNames() { if strings.ContainsAny(clusterName, " \n") { - examples.add("Cluster: %s", clusterName) + examples.Add("Cluster: %s", clusterName) } } diff --git a/audit/examples_collection.go b/audit/examples_collection.go index 10f9ee14..6152220b 100644 --- a/audit/examples_collection.go +++ b/audit/examples_collection.go @@ -36,7 +36,8 @@ func newExamplesCollection(limit uint) *ExamplesCollection { } } -func (c *ExamplesCollection) add(format string, a ...any) { +// Add adds a example issue to the collection +func (c *ExamplesCollection) Add(format string, a ...any) { c.Examples = append(c.Examples, fmt.Sprintf(format, a...)) } diff --git a/audit/leafnode_checks.go b/audit/leafnode_checks.go index 20aac086..fa606a3b 100644 --- a/audit/leafnode_checks.go +++ b/audit/leafnode_checks.go @@ -35,12 +35,12 @@ func RegisterLeafnodeChecks(collection *CheckCollection) error { } func checkLeafnodeServerNamesForWhitespace(_ *Check, r *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) leafnodesWithWhitespace := map[string]struct{}{} - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var serverLeafz server.Leafz @@ -59,7 +59,7 @@ func checkLeafnodeServerNamesForWhitespace(_ *Check, r *archive.Reader, examples } if len(leafnodesWithWhitespace) > 0 { - examples.add("Cluster %s: %v", clusterName, maps.Keys(leafnodesWithWhitespace)) + examples.Add("Cluster %s: %v", clusterName, maps.Keys(leafnodesWithWhitespace)) } } diff --git a/audit/metacluster_checks.go b/audit/metacluster_checks.go index 6f51539c..1619a8d2 100644 --- a/audit/metacluster_checks.go +++ b/audit/metacluster_checks.go @@ -46,11 +46,11 @@ func checkMetaClusterLeader(_ *Check, r *archive.Reader, examples *ExamplesColle serverVarsTag := archive.TagServerVars() jsTag := archive.TagServerJetStream() - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) leaderFollowers := make(map[string][]string) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var jetStreamInfo server.JSInfo @@ -93,7 +93,7 @@ func checkMetaClusterLeader(_ *Check, r *archive.Reader, examples *ExamplesColle } if len(leaderFollowers) > 1 { - examples.add("Members of %s disagree on meta leader (%v)", clusterName, leaderFollowers) + examples.Add("Members of %s disagree on meta leader (%v)", clusterName, leaderFollowers) } } @@ -110,10 +110,10 @@ func checkMetaClusterOfflineReplicas(_ *Check, r *archive.Reader, examples *Exam serverVarsTag := archive.TagServerVars() jsTag := archive.TagServerJetStream() - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var jetStreamInfo server.JSInfo @@ -145,7 +145,7 @@ func checkMetaClusterOfflineReplicas(_ *Check, r *archive.Reader, examples *Exam for _, peerInfo := range serverVarz.JetStream.Meta.Replicas { if peerInfo.Offline { - examples.add( + examples.Add( "%s - %s reports peer %s as offline", clusterName, serverName, diff --git a/audit/server_checks.go b/audit/server_checks.go index f381914e..381d4473 100644 --- a/audit/server_checks.go +++ b/audit/server_checks.go @@ -90,17 +90,61 @@ func RegisterServerChecks(collection *CheckCollection) error { Description: "No JetStream server is configured with whitespace in its domain", Handler: checkJetStreamDomainsForWhitespace, }, + Check{ + Code: "SERVER_007", + Suite: "server", + Name: "Authentication required", + Description: "Each server requires authentication", + Handler: checkServerAuthRequired, + }, ) } +func checkServerAuthRequired(_ *Check, r *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { + notHealthy, healthy := 0, 0 + + for _, clusterName := range r.ClusterNames() { + clusterTag := archive.TagCluster(clusterName) + + for _, serverName := range r.ClusterServerNames(clusterName) { + serverTag := archive.TagServer(serverName) + + var varz server.Varz + err := r.Load(&varz, clusterTag, serverTag, archive.TagServerVars()) + if errors.Is(err, archive.ErrNoMatches) { + log.Warnf("Artifact 'VARZ' is missing for server %s", serverName) + continue + } else if err != nil { + return Skipped, fmt.Errorf("failed to load variables for server %s: %w", serverName, err) + } + + if varz.AuthRequired { + healthy++ + } else { + examples.Add("%s: authentication not required", serverName) + notHealthy++ + } + } + } + + if notHealthy > 0 { + log.Errorf("%d/%d servers do not require authentication", notHealthy, healthy+notHealthy) + return PassWithIssues, nil + } + + log.Infof("%d/%d servers require authentication", healthy, healthy) + + return Pass, nil +} + // checkServerHealth verify all known servers are reporting healthy func checkServerHealth(_ *Check, r *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { notHealthy, healthy := 0, 0 - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var health server.HealthStatus @@ -114,7 +158,7 @@ func checkServerHealth(_ *Check, r *archive.Reader, examples *ExamplesCollection } if health.Status != "ok" { - examples.add("%s: %d - %s", serverName, health.StatusCode, health.Status) + examples.Add("%s: %d - %s", serverName, health.StatusCode, health.Status) notHealthy += 1 } else { healthy += 1 @@ -136,10 +180,10 @@ func checkServerVersion(_ *Check, r *archive.Reader, examples *ExamplesCollectio versionsToServersMap := make(map[string][]string) var lastVersionSeen string - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var serverVarz server.Varz @@ -159,7 +203,7 @@ func checkServerVersion(_ *Check, r *archive.Reader, examples *ExamplesCollectio // First time encountering this version, create map entry versionsToServersMap[version] = []string{} // Add one example server for each version - examples.add("%s - %s", serverName, version) + examples.Add("%s - %s", serverName, version) } // Add this server to the list running this version versionsToServersMap[version] = append(versionsToServersMap[version], serverName) @@ -187,9 +231,9 @@ func checkServerCPUUsage(check *Check, r *archive.Reader, examples *ExamplesColl severVarsTag := archive.TagServerVars() cpuThreshold := check.Configuration["cpu"].Value() - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var serverVarz server.Varz err := r.Load(&serverVarz, serverTag, clusterTag, severVarsTag) @@ -204,7 +248,7 @@ func checkServerCPUUsage(check *Check, r *archive.Reader, examples *ExamplesColl averageCpuUtilization := serverVarz.CPU / float64(serverVarz.Cores) if averageCpuUtilization > cpuThreshold { - examples.add("%s - %s: %.1f%%", clusterName, serverName, averageCpuUtilization) + examples.Add("%s - %s: %.1f%%", clusterName, serverName, averageCpuUtilization) } } } @@ -221,10 +265,10 @@ func checkServerCPUUsage(check *Check, r *archive.Reader, examples *ExamplesColl func checkSlowConsumers(_ *Check, r *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { totalSlowConsumers := int64(0) - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var serverVarz server.Varz @@ -234,7 +278,7 @@ func checkSlowConsumers(_ *Check, r *archive.Reader, examples *ExamplesCollectio } if slowConsumers := serverVarz.SlowConsumers; slowConsumers > 0 { - examples.add("%s/%s: %d slow consumers", clusterName, serverName, slowConsumers) + examples.Add("%s/%s: %d slow consumers", clusterName, serverName, slowConsumers) totalSlowConsumers += slowConsumers } } @@ -256,9 +300,9 @@ func checkServerResourceLimits(check *Check, r *archive.Reader, examples *Exampl memoryUsageThreshold := check.Configuration["memory"].Value() storeUsageThreshold := check.Configuration["store"].Value() - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var serverJSInfo server.JSInfo @@ -273,7 +317,7 @@ func checkServerResourceLimits(check *Check, r *archive.Reader, examples *Exampl if serverJSInfo.ReservedMemory > 0 { threshold := uint64(float64(serverJSInfo.ReservedMemory) * memoryUsageThreshold) if serverJSInfo.Memory > threshold { - examples.add( + examples.Add( "%s memory usage: %s of %s", serverName, humanize.IBytes(serverJSInfo.Memory), @@ -285,7 +329,7 @@ func checkServerResourceLimits(check *Check, r *archive.Reader, examples *Exampl if serverJSInfo.ReservedStore > 0 { threshold := uint64(float64(serverJSInfo.ReservedStore) * storeUsageThreshold) if serverJSInfo.Store > threshold { - examples.add( + examples.Add( "%s store usage: %s of %s", serverName, humanize.IBytes(serverJSInfo.Store), @@ -305,10 +349,10 @@ func checkServerResourceLimits(check *Check, r *archive.Reader, examples *Exampl } func checkJetStreamDomainsForWhitespace(_ *Check, r *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { - for _, clusterName := range r.GetClusterNames() { + for _, clusterName := range r.ClusterNames() { clusterTag := archive.TagCluster(clusterName) - for _, serverName := range r.GetClusterServerNames(clusterName) { + for _, serverName := range r.ClusterServerNames(clusterName) { serverTag := archive.TagServer(serverName) var serverJsz server.JSInfo @@ -320,7 +364,7 @@ func checkJetStreamDomainsForWhitespace(_ *Check, r *archive.Reader, examples *E // check if jetstream domain contains whitespace if strings.ContainsAny(serverJsz.Config.Domain, " \n") { - examples.add("Cluster %s Server %s Domain %s", clusterName, serverName, serverJsz.Config.Domain) + examples.Add("Cluster %s Server %s Domain %s", clusterName, serverName, serverJsz.Config.Domain) } } } diff --git a/audit/stream_checks.go b/audit/stream_checks.go index 8785b297..f65125b1 100644 --- a/audit/stream_checks.go +++ b/audit/stream_checks.go @@ -87,7 +87,7 @@ func RegisterJetStreamChecks(collection *CheckCollection) error { // checkStreamLaggingReplicas verifies that in each known stream no replica is too far behind the most up to date (based on stream last sequence) func checkStreamLaggingReplicas(check *Check, r *archive.Reader, examples *ExamplesCollection, log api.Logger) (Outcome, error) { typeTag := archive.TagStreamInfo() - accountNames := r.GetAccountNames() + accountNames := r.AccountNames() lastSequenceLagThreshold := check.Configuration["last_seq"].Value() if len(accountNames) == 0 { @@ -100,7 +100,7 @@ func checkStreamLaggingReplicas(check *Check, r *archive.Reader, examples *Examp for _, accountName := range accountNames { accountTag := archive.TagAccount(accountName) - streamNames := r.GetAccountStreamNames(accountName) + streamNames := r.AccountStreamNames(accountName) if len(streamNames) == 0 { log.Debugf("No streams found in account: %s", accountName) @@ -112,7 +112,7 @@ func checkStreamLaggingReplicas(check *Check, r *archive.Reader, examples *Examp accountsWithStreams[accountName] = nil streamTag := archive.TagStream(streamName) - serverNames := r.GetStreamServerNames(accountName, streamName) + serverNames := r.StreamServerNames(accountName, streamName) log.Debugf( "Inspecting account '%s' stream '%s', found %d servers: %v", @@ -180,7 +180,7 @@ func checkStreamLaggingReplicas(check *Check, r *archive.Reader, examples *Examp for serverName, streamDetail := range replicasStreamDetails { lastSeq := streamDetail.State.LastSeq if lastSeq < threshold { - examples.add( + examples.Add( "%s/%s server %s lastSequence: %d is behind highest lastSequence: %d on server: %s", accountName, streamName, @@ -210,13 +210,13 @@ func checkStreamHighCardinality(check *Check, r *archive.Reader, examples *Examp streamDetailsTag := archive.TagStreamInfo() numSubjectsThreshold := check.Configuration["subjects"].Value() - for _, accountName := range r.GetAccountNames() { + for _, accountName := range r.AccountNames() { accountTag := archive.TagAccount(accountName) - for _, streamName := range r.GetAccountStreamNames(accountName) { + for _, streamName := range r.AccountStreamNames(accountName) { streamTag := archive.TagStream(streamName) - serverNames := r.GetStreamServerNames(accountName, streamName) + serverNames := r.StreamServerNames(accountName, streamName) for _, serverName := range serverNames { serverTag := archive.TagServer(serverName) @@ -230,7 +230,7 @@ func checkStreamHighCardinality(check *Check, r *archive.Reader, examples *Examp } if float64(streamDetails.State.NumSubjects) > numSubjectsThreshold { - examples.add("%s/%s: %d subjects", accountName, streamName, streamDetails.State.NumSubjects) + examples.Add("%s/%s: %d subjects", accountName, streamName, streamDetails.State.NumSubjects) continue // no need to check other servers for this stream } } @@ -259,7 +259,7 @@ func checkStreamLimits(check *Check, r *archive.Reader, examples *ExamplesCollec } threshold := int64(float64(limit) * percentThreshold) if value > threshold { - examples.add( + examples.Add( "stream %s (in %s on %s) using %.1f%% of %s limit (%d/%d)", streamName, accountName, @@ -274,13 +274,13 @@ func checkStreamLimits(check *Check, r *archive.Reader, examples *ExamplesCollec streamDetailsTag := archive.TagStreamInfo() - for _, accountName := range r.GetAccountNames() { + for _, accountName := range r.AccountNames() { accountTag := archive.TagAccount(accountName) - for _, streamName := range r.GetAccountStreamNames(accountName) { + for _, streamName := range r.AccountStreamNames(accountName) { streamTag := archive.TagStream(streamName) - serverNames := r.GetStreamServerNames(accountName, streamName) + serverNames := r.StreamServerNames(accountName, streamName) for _, serverName := range serverNames { serverTag := archive.TagServer(serverName)