Skip to content

Commit

Permalink
Merge pull request #600 from ripienaar/export_examples_add
Browse files Browse the repository at this point in the history
Export the examples Add method, rename some methods
  • Loading branch information
ripienaar authored Jan 2, 2025
2 parents 88ee1ab + c916f95 commit 2b2f801
Show file tree
Hide file tree
Showing 10 changed files with 119 additions and 74 deletions.
6 changes: 3 additions & 3 deletions audit/account_checks.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
Expand Down
16 changes: 8 additions & 8 deletions audit/archive/archive_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down Expand Up @@ -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) {
Expand Down
20 changes: 10 additions & 10 deletions audit/archive/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -316,41 +316,41 @@ 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)
}
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)
}
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)
Expand Down
2 changes: 1 addition & 1 deletion audit/checks.go
Original file line number Diff line number Diff line change
Expand Up @@ -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] {
Expand Down
22 changes: 11 additions & 11 deletions audit/cluster_checks.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,15 @@ 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))

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
Expand All @@ -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)),
Expand All @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand All @@ -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)
}
}
}
Expand All @@ -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)
}
}

Expand Down
3 changes: 2 additions & 1 deletion audit/examples_collection.go
Original file line number Diff line number Diff line change
Expand Up @@ -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...))
}

Expand Down
6 changes: 3 additions & 3 deletions audit/leafnode_checks.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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))
}
}

Expand Down
12 changes: 6 additions & 6 deletions audit/metacluster_checks.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
}

Expand All @@ -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
Expand Down Expand Up @@ -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,
Expand Down
Loading

0 comments on commit 2b2f801

Please sign in to comment.