plugins/processors/awsapplicationsignals/rules/replacer.go (43 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT package rules import ( "go.opentelemetry.io/collector/pdata/pcommon" "github.com/aws/amazon-cloudwatch-agent/plugins/processors/awsapplicationsignals/common" ) type ReplaceActions struct { Actions []ActionItem markDataPointAsReserved bool } func NewReplacer(rules []Rule, markDataPointAsReserved bool) *ReplaceActions { return &ReplaceActions{ Actions: generateActionDetails(rules, AllowListActionReplace), markDataPointAsReserved: markDataPointAsReserved, } } func (r *ReplaceActions) Process(attributes, _ pcommon.Map, isTrace bool) error { // do nothing when there is no replace rule defined if r.Actions == nil || len(r.Actions) == 0 { return nil } // If there are more than one rule are matched, the last one will be executed(Later one has higher priority) actions := r.Actions finalRules := make(map[string]string) for i := len(actions) - 1; i >= 0; i = i - 1 { element := actions[i] isMatched := matchesSelectors(attributes, element.SelectorMatchers, isTrace) if !isMatched { continue } for _, replacement := range element.Replacements { targetDimension := replacement.TargetDimension attr := convertToManagedAttributeKey(targetDimension, isTrace) // every replacement in one specific dimension only will be performed once if _, visited := finalRules[attr]; !visited { finalRules[attr] = replacement.Value } } } for key, value := range finalRules { attributes.PutStr(key, value) } if len(finalRules) > 0 && r.markDataPointAsReserved { attributes.PutBool(common.AttributeTmpReserved, true) } return nil }