func()

in plugins/processors/awsapplicationsignals/internal/normalizer/attributesnormalizer.go [136:198]


func (n *attributesNormalizer) normalizeTelemetryAttributes(attributes, resourceAttributes pcommon.Map, isTrace bool) {
	if isTrace {
		return
	}

	var (
		sdkName    string
		sdkVersion string
		sdkLang    string
	)
	var (
		sdkAutoName    string
		sdkAutoVersion string
	)
	sdkName, sdkVersion, sdkLang = "-", "-", "-"
	mode := instrumentationModeManual

	resourceAttributes.Range(func(k string, v pcommon.Value) bool {
		switch k {
		case semconv.AttributeTelemetrySDKName:
			sdkName = removeWhitespaces(v.Str())
		case semconv.AttributeTelemetrySDKLanguage:
			sdkLang = removeWhitespaces(v.Str())
		case semconv.AttributeTelemetrySDKVersion:
			sdkVersion = removeWhitespaces(v.Str())
		}
		switch k {
		case semconv.AttributeTelemetryDistroName:
			sdkAutoName = removeWhitespaces(v.Str())
		case deprecatedsemconv.AttributeTelemetryAutoVersion, semconv.AttributeTelemetryDistroVersion:
			sdkAutoVersion = removeWhitespaces(v.Str())
		}
		return true
	})
	if sdkAutoName != "" {
		sdkName = sdkAutoName
		mode = instrumentationModeAuto
	}
	if sdkAutoVersion != "" {
		sdkVersion = sdkAutoVersion
		mode = instrumentationModeAuto
	}
	attributes.PutStr(common.MetricAttributeTelemetrySDK, fmt.Sprintf("%s,%s,%s,%s", sdkName, sdkVersion, sdkLang, mode))
	attributes.PutStr(common.MetricAttributeTelemetryAgent, fmt.Sprintf("CWAgent/%s", version.Number()))

	var telemetrySource string
	if val, ok := attributes.Get(attr.AWSSpanKind); ok {
		switch val.Str() {
		case "CLIENT":
			telemetrySource = "ClientSpan"
		case "SERVER":
			telemetrySource = "ServerSpan"
		case "PRODUCER":
			telemetrySource = "ProducerSpan"
		case "CONSUMER":
			telemetrySource = "ConsumerSpan"
		case "LOCAL_ROOT":
			telemetrySource = "LocalRootSpan"
		}
		attributes.PutStr(common.MetricAttributeTelemetrySource, telemetrySource)
		attributes.Remove(attr.AWSSpanKind)
	}
}