extension/agenthealth/handler/useragent/handler.go (50 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT package useragent import ( "context" "net/http" "github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware" "go.uber.org/atomic" ) const ( handlerID = "cloudwatchagent.UserAgent" headerKeyUserAgent = "User-Agent" ) type userAgentHandler struct { userAgent UserAgent isUsageDataEnabled bool header *atomic.String } var _ awsmiddleware.RequestHandler = (*userAgentHandler)(nil) func (uah *userAgentHandler) ID() string { return handlerID } func (uah *userAgentHandler) Position() awsmiddleware.HandlerPosition { return awsmiddleware.After } // HandleRequest prepends the User-Agent header with the CloudWatch Agent's // user agent string. func (uah *userAgentHandler) HandleRequest(_ context.Context, r *http.Request) { newHeader := uah.Header() current := r.Header.Get(headerKeyUserAgent) if current != "" { newHeader += separator + current } r.Header.Set(headerKeyUserAgent, newHeader) } func (uah *userAgentHandler) Header() string { return uah.header.Load() } func (uah *userAgentHandler) refreshHeader() { uah.header.Store(uah.userAgent.Header(uah.isUsageDataEnabled)) } func newHandler(userAgent UserAgent, isUsageDataEnabled bool) *userAgentHandler { handler := &userAgentHandler{ userAgent: userAgent, header: &atomic.String{}, isUsageDataEnabled: isUsageDataEnabled, } handler.refreshHeader() userAgent.Listen(handler.refreshHeader) return handler } func NewHandler(isUsageDataEnabled bool) awsmiddleware.RequestHandler { return newHandler(Get(), isUsageDataEnabled) }