plugins/processors/awsapplicationsignals/internal/metrichandlers/pruner.go (36 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT package metrichandlers import ( "errors" "fmt" "go.opentelemetry.io/collector/pdata/pcommon" "github.com/aws/amazon-cloudwatch-agent/plugins/processors/awsapplicationsignals/common" ) type Pruner struct { } func (p *Pruner) ShouldBeDropped(attributes pcommon.Map) (bool, error) { for _, attributeKey := range common.CWMetricAttributes { if val, ok := attributes.Get(attributeKey); ok { if !isAsciiPrintable(val.Str()) { return true, errors.New("Metric attribute " + attributeKey + " must contain only ASCII characters.") } } if _, ok := attributes.Get(common.MetricAttributeTelemetrySource); !ok { return true, errors.New(fmt.Sprintf("Metric must contain %s.", common.MetricAttributeTelemetrySource)) } } return false, nil } func NewPruner() *Pruner { return &Pruner{} } func isAsciiPrintable(val string) bool { nonWhitespaceFound := false for _, c := range val { if c < 32 || c > 126 { return false } else if !nonWhitespaceFound && c != 32 { nonWhitespaceFound = true } } return nonWhitespaceFound }