// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT
package customizedmetrics
import (
"sort"
"github.com/aws/amazon-cloudwatch-agent/translator/translate/metrics/config"
parent "github.com/aws/amazon-cloudwatch-agent/translator/translate/metrics/metrics_collect"
"github.com/aws/amazon-cloudwatch-agent/translator/translate/metrics/util"
)
type customizedMetric struct {
}
const WinPerfCountersKey = "win_perf_counters"
func GetObjectPath(object string) string {
curPath := parent.GetCurPath() + WinPerfCountersKey + "/" + object + "/"
return curPath
}
// This rule is specifically for windows customized metrics
func (c *customizedMetric) ApplyRule(input interface{}) (returnKey string, returnVal interface{}) {
winPerfCountersArray := []interface{}{}
inputmap := input.(map[string]interface{})
inputObjectNames := []string{}
for objectName := range inputmap {
if config.DisableWinPerfCounters[objectName] {
continue
}
inputObjectNames = append(inputObjectNames, objectName)
}
sort.Strings(inputObjectNames)
for _, objectName := range inputObjectNames {
singleConfig := util.ProcessWindowsCommonConfig(inputmap[objectName], objectName, GetObjectPath(objectName))
winPerfCountersArray = append(winPerfCountersArray, singleConfig)
}
if len(winPerfCountersArray) != 0 {
//Keep the windows metrics outcome consistent
for _, perfC := range winPerfCountersArray {
objectConfig := util.MetricArray{}
mp := perfC.(map[string]interface{})
objectConfig = append(objectConfig, mp["object"].([]interface{})...)
sort.Sort(objectConfig)
mp["object"] = objectConfig
}
returnKey = WinPerfCountersKey
returnVal = winPerfCountersArray
}
return
}
func init() {
parent.RegisterWindowsRule("customizedMetric", new(customizedMetric))
}