From ef4a9a08e7a129380e18a1a810857f19534d31a9 Mon Sep 17 00:00:00 2001 From: Luc Talatinian <102624213+lucix-aws@users.noreply.github.com> Date: Thu, 16 May 2024 10:56:21 -0400 Subject: [PATCH] internal: capture user-agent in metrics (#2644) --- .../33f766393bb344b9b26b55846650e8a0.json | 8 +++++ aws/middleware/private/metrics/metrics.go | 1 + .../metrics/middleware/configuration.go | 3 ++ .../private/metrics/middleware/user_agent.go | 29 +++++++++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 .changelog/33f766393bb344b9b26b55846650e8a0.json create mode 100644 aws/middleware/private/metrics/middleware/user_agent.go diff --git a/.changelog/33f766393bb344b9b26b55846650e8a0.json b/.changelog/33f766393bb344b9b26b55846650e8a0.json new file mode 100644 index 00000000000..4dbb44d704a --- /dev/null +++ b/.changelog/33f766393bb344b9b26b55846650e8a0.json @@ -0,0 +1,8 @@ +{ + "id": "33f76639-3bb3-44b9-b26b-55846650e8a0", + "type": "feature", + "description": "Capture user agent in internal metrics.", + "modules": [ + "." + ] +} \ No newline at end of file diff --git a/aws/middleware/private/metrics/metrics.go b/aws/middleware/private/metrics/metrics.go index 30d554ac780..19d6107c461 100644 --- a/aws/middleware/private/metrics/metrics.go +++ b/aws/middleware/private/metrics/metrics.go @@ -124,6 +124,7 @@ type MetricData struct { OperationName string PartitionID string Region string + UserAgent string RequestContentLength int64 Stream StreamMetrics Attempts []AttemptMetrics diff --git a/aws/middleware/private/metrics/middleware/configuration.go b/aws/middleware/private/metrics/middleware/configuration.go index f29b536d6df..4e999556c07 100644 --- a/aws/middleware/private/metrics/middleware/configuration.go +++ b/aws/middleware/private/metrics/middleware/configuration.go @@ -54,6 +54,9 @@ func WithMetricMiddlewares( if err := timeSigning(stack); err != nil { return err } + if err := stack.Build.Add(&captureUserAgent{}, middleware.After); err != nil { + return err + } return nil } } diff --git a/aws/middleware/private/metrics/middleware/user_agent.go b/aws/middleware/private/metrics/middleware/user_agent.go new file mode 100644 index 00000000000..8f502ae84bc --- /dev/null +++ b/aws/middleware/private/metrics/middleware/user_agent.go @@ -0,0 +1,29 @@ +package middleware + +import ( + "context" + "fmt" + + "github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics" + "github.com/aws/smithy-go/middleware" + smithyhttp "github.com/aws/smithy-go/transport/http" +) + +type captureUserAgent struct{} + +func (*captureUserAgent) ID() string { return "captureUserAgent" } + +func (*captureUserAgent) HandleBuild( + ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler, +) ( + out middleware.BuildOutput, md middleware.Metadata, err error, +) { + r, ok := in.Request.(*smithyhttp.Request) + if !ok { + return out, md, fmt.Errorf("unexpected transport type %T", in.Request) + } + + mctx := metrics.Context(ctx) + mctx.Data().UserAgent = r.Header.Get("User-Agent") + return next.HandleBuild(ctx, in) +}