@@ -16,11 +16,15 @@ package audit
16
16
import (
17
17
"errors"
18
18
"fmt"
19
+ "reflect"
20
+ "sort"
21
+ "strings"
22
+ "unicode"
23
+
19
24
"github.com/dustin/go-humanize"
20
25
"github.com/nats-io/nats-server/v2/server"
21
26
"github.com/nats-io/natscli/internal/archive"
22
- "reflect"
23
- "sort"
27
+ "golang.org/x/exp/maps"
24
28
)
25
29
26
30
// checkClusterMemoryUsageOutliers creates a parametrized check to verify the memory usage of any given node in a
@@ -214,3 +218,57 @@ func makeCheckClusterHighHAAssets(haAssetsThreshold int) checkFunc {
214
218
return Pass , nil
215
219
}
216
220
}
221
+
222
+ func checkClusterNamesForWhitespace (reader * archive.Reader , examples * ExamplesCollection ) (Outcome , error ) {
223
+
224
+ for _ , clusterName := range reader .GetClusterNames () {
225
+ if strings .ContainsFunc (clusterName , unicode .IsSpace ) {
226
+ examples .add ("Cluster: %s" , clusterName )
227
+ }
228
+ }
229
+
230
+ if examples .Count () > 0 {
231
+ logCritical ("Found %d clusters with names containing whitespace" , examples .Count ())
232
+ return Fail , nil
233
+ }
234
+
235
+ return Pass , nil
236
+ }
237
+
238
+ func checkLeafnodeServerNamesForWhitespace (r * archive.Reader , examples * ExamplesCollection ) (Outcome , error ) {
239
+
240
+ for _ , clusterName := range r .GetClusterNames () {
241
+ clusterTag := archive .TagCluster (clusterName )
242
+
243
+ leafnodesWithWhitespace := map [string ]struct {}{}
244
+
245
+ for _ , serverName := range r .GetClusterServerNames (clusterName ) {
246
+ serverTag := archive .TagServer (serverName )
247
+
248
+ var serverLeafz server.Leafz
249
+ err := r .Load (& serverLeafz , clusterTag , serverTag , archive .TagServerLeafs ())
250
+ if err != nil {
251
+ logWarning ("Artifact 'LEAFZ' is missing for server %s" , serverName )
252
+ continue
253
+ }
254
+
255
+ for _ , leaf := range serverLeafz .Leafs {
256
+ // check if leafnode name contains whitespace
257
+ if strings .ContainsFunc (leaf .Name , unicode .IsSpace ) {
258
+ leafnodesWithWhitespace [leaf .Name ] = struct {}{}
259
+ }
260
+ }
261
+ }
262
+
263
+ if len (leafnodesWithWhitespace ) > 0 {
264
+ examples .add ("Cluster %s: %v" , clusterName , maps .Keys (leafnodesWithWhitespace ))
265
+ }
266
+ }
267
+
268
+ if examples .Count () > 0 {
269
+ logCritical ("Found %d clusters with leafnode names containing whitespace" , examples .Count ())
270
+ return Fail , nil
271
+ }
272
+
273
+ return Pass , nil
274
+ }
0 commit comments