diff --git a/cmd/collectors/ems/ems.go b/cmd/collectors/ems/ems.go index e3dc3edac..ef85f9cc7 100644 --- a/cmd/collectors/ems/ems.go +++ b/cmd/collectors/ems/ems.go @@ -208,7 +208,7 @@ func (e *Ems) InitCache() error { // check if name is present in template if line.GetChildContentS("name") == "" { - e.Logger.Warn().Msg("Missing event name") + e.Logger.Error().Msg("Missing event name") continue } @@ -509,7 +509,7 @@ func (e *Ems) HandleResults(result []gjson.Result, prop map[string][]*emsProp) ( messageName := instanceData.Get("message.name") // verify if message name exists in ONTAP response if !messageName.Exists() { - e.Logger.Warn().Msg("skip instance, missing message name") + e.Logger.Error().Msg("skip instance, missing message name") continue } msgName := messageName.String() @@ -686,7 +686,7 @@ func (e *Ems) getInstanceKeys(p *emsProp, instanceData gjson.Result) string { if value.Exists() { instanceKey += Hyphen + value.String() } else { - e.Logger.Warn().Str("key", k).Msg("skip instance, missing key") + e.Logger.Error().Str("key", k).Msg("skip instance, missing key") break } } diff --git a/cmd/collectors/ems/templating.go b/cmd/collectors/ems/templating.go index 22d1941af..06bc1c4f9 100644 --- a/cmd/collectors/ems/templating.go +++ b/cmd/collectors/ems/templating.go @@ -75,8 +75,8 @@ func (e *Ems) ParseDefaults(prop *emsProp) { func (e *Ems) ParseExports(counter *node.Node, prop *emsProp) { var ( display, name, key string - bookendKeys []string ) + bookendKeys := make(map[string]string) for _, c := range counter.GetAllChildContentS() { if c != "" { @@ -91,7 +91,7 @@ func (e *Ems) ParseExports(counter *node.Node, prop *emsProp) { if key == "key" { // only for bookend EMS - bookendKeys = append(bookendKeys, name) + bookendKeys[display] = name e.Logger.Debug(). Str("name", name). Str("display", display). @@ -102,7 +102,11 @@ func (e *Ems) ParseExports(counter *node.Node, prop *emsProp) { // For bookend case, instanceKeys are replaced with bookendKeys if len(bookendKeys) > 0 { - prop.InstanceKeys = append(prop.InstanceKeys, bookendKeys...) + sortedBookendKeys := util.GetSortedKeys(bookendKeys) + // Append instance keys to ems prop + for _, k := range sortedBookendKeys { + prop.InstanceKeys = append(prop.InstanceKeys, bookendKeys[k]) + } } } @@ -116,7 +120,7 @@ func (e *Ems) ParseResolveEms(resolveEvent *node.Node, issueEmsProp emsProp) { // check if resolvedby is present in template if resolveEmsName = resolveEvent.GetChildContentS("name"); resolveEmsName == "" { - e.Logger.Warn().Msg("Missing resolving event name") + e.Logger.Error().Msg("Missing resolving event name") return } prop.Name = resolveEmsName @@ -132,7 +136,7 @@ func (e *Ems) ParseResolveEms(resolveEvent *node.Node, issueEmsProp emsProp) { } else { // If bookendKey is missing in IssueEms, the default bookendKey is index of IssueEMs prop.InstanceKeys = issueEmsProp.InstanceKeys[0:1] - e.Logger.Warn().Str("Ems name", issueEmsProp.Name).Msg("Missing bookend keys") + e.Logger.Error().Str("Ems name", issueEmsProp.Name).Msg("Missing bookend keys") } } else { e.ParseExports(resolveKey, &prop) diff --git a/cmd/collectors/rest/templating.go b/cmd/collectors/rest/templating.go index e68178ed9..e0ba07193 100644 --- a/cmd/collectors/rest/templating.go +++ b/cmd/collectors/rest/templating.go @@ -6,7 +6,6 @@ import ( "github.com/netapp/harvest/v2/pkg/tree/node" "github.com/netapp/harvest/v2/pkg/util" "regexp" - "sort" "strconv" "strings" "time" @@ -194,11 +193,7 @@ func (r *Rest) ParseRestCounters(counter *node.Node, prop *prop) { // populate prop.instanceKeys // sort keys by display name. This is needed to match counter and endpoints keys - var keys []string - for k := range instanceKeys { - keys = append(keys, k) - } - sort.Strings(keys) + keys := util.GetSortedKeys(instanceKeys) // Append instance keys to prop for _, k := range keys { diff --git a/pkg/util/util.go b/pkg/util/util.go index e5297274c..7ac85bf16 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -15,6 +15,7 @@ import ( "net/url" "os" "regexp" + "sort" "strconv" "strings" ) @@ -405,3 +406,12 @@ func HasDuplicates(slice []string) bool { return false } + +func GetSortedKeys(m map[string]string) []string { + var sortedKeys []string + for k := range m { + sortedKeys = append(sortedKeys, k) + } + sort.Strings(sortedKeys) + return sortedKeys +}