Skip to content

Commit 05fcf66

Browse files
authored
internal: true up internal metrics collection for post-SRA middleware (#2642)
1 parent 1148427 commit 05fcf66

File tree

10 files changed

+150
-42
lines changed

10 files changed

+150
-42
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"id": "ce369d28-a259-4b29-aa49-cd801c4ff959",
3+
"type": "bugfix",
4+
"description": "Adjust internal metrics collection for revised authentication workflow.",
5+
"modules": [
6+
"."
7+
]
8+
}

aws/middleware/private/metrics/metrics.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ type MetricData struct {
112112
ResolveEndpointStartTime time.Time
113113
ResolveEndpointEndTime time.Time
114114
EndpointResolutionDuration time.Duration
115+
GetIdentityStartTime time.Time
116+
GetIdentityEndTime time.Time
115117
InThroughput float64
116118
OutThroughput float64
117119
RetryCount int
@@ -144,8 +146,6 @@ type AttemptMetrics struct {
144146
ConnRequestedTime time.Time
145147
ConnObtainedTime time.Time
146148
ConcurrencyAcquireDuration time.Duration
147-
CredentialFetchStartTime time.Time
148-
CredentialFetchEndTime time.Time
149149
SignStartTime time.Time
150150
SignEndTime time.Time
151151
SigningDuration time.Duration

aws/middleware/private/metrics/metrics_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,6 @@ func TestMetricData_ComputeRequestMetrics(t *testing.T) {
109109
FirstByteTime: time.Unix(1334, 0),
110110
ConnRequestedTime: time.Unix(1234, 0),
111111
ConnObtainedTime: time.Unix(1434, 0),
112-
CredentialFetchStartTime: time.Unix(1234, 0),
113-
CredentialFetchEndTime: time.Unix(1434, 0),
114112
SignStartTime: time.Unix(1234, 0),
115113
SignEndTime: time.Unix(1434, 0),
116114
DeserializeStartTime: time.Unix(1234, 0),
@@ -133,8 +131,6 @@ func TestMetricData_ComputeRequestMetrics(t *testing.T) {
133131
FirstByteTime: time.Unix(1334, 0),
134132
ConnRequestedTime: time.Unix(1234, 0),
135133
ConnObtainedTime: time.Unix(1434, 0),
136-
CredentialFetchStartTime: time.Unix(1234, 0),
137-
CredentialFetchEndTime: time.Unix(1434, 0),
138134
SignStartTime: time.Unix(1234, 0),
139135
SignEndTime: time.Unix(1434, 0),
140136
DeserializeStartTime: time.Unix(1234, 0),

aws/middleware/private/metrics/middleware/configuration.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package middleware
22

33
import (
4+
"net/http"
5+
46
"github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics"
57
"github.com/aws/smithy-go/middleware"
6-
"net/http"
78
)
89

910
func WithMetricMiddlewares(
@@ -20,10 +21,10 @@ func WithMetricMiddlewares(
2021
if err := stack.Serialize.Add(GetRecordStackSerializeEndMiddleware(), middleware.After); err != nil {
2122
return err
2223
}
23-
if err := stack.Serialize.Insert(GetRecordEndpointResolutionStartMiddleware(), "ResolveEndpoint", middleware.Before); err != nil {
24+
if err := stack.Finalize.Insert(GetRecordEndpointResolutionStartMiddleware(), "ResolveEndpointV2", middleware.Before); err != nil {
2425
return err
2526
}
26-
if err := stack.Serialize.Insert(GetRecordEndpointResolutionEndMiddleware(), "ResolveEndpoint", middleware.After); err != nil {
27+
if err := stack.Finalize.Insert(GetRecordEndpointResolutionEndMiddleware(), "ResolveEndpointV2", middleware.After); err != nil {
2728
return err
2829
}
2930
if err := stack.Build.Add(GetWrapDataStreamMiddleware(), middleware.After); err != nil {
@@ -47,6 +48,12 @@ func WithMetricMiddlewares(
4748
if err := stack.Deserialize.Insert(GetTransportMetricsMiddleware(), "StackDeserializeStart", middleware.After); err != nil {
4849
return err
4950
}
51+
if err := timeGetIdentity(stack); err != nil {
52+
return err
53+
}
54+
if err := timeSigning(stack); err != nil {
55+
return err
56+
}
5057
return nil
5158
}
5259
}

aws/middleware/private/metrics/middleware/endpoint_resolution_end.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package middleware
66

77
import (
88
"context"
9+
910
"github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics"
1011
"github.com/aws/aws-sdk-go-v2/internal/sdk"
1112
"github.com/aws/smithy-go/middleware"
@@ -21,6 +22,8 @@ func (m *EndpointResolutionEnd) ID() string {
2122
return "EndpointResolutionEnd"
2223
}
2324

25+
// Deprecated: Endpoint resolution now occurs in Finalize. The ResolveEndpoint
26+
// middleware remains in serialize but is largely a no-op.
2427
func (m *EndpointResolutionEnd) HandleSerialize(
2528
ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler,
2629
) (
@@ -34,3 +37,13 @@ func (m *EndpointResolutionEnd) HandleSerialize(
3437

3538
return out, metadata, err
3639
}
40+
41+
func (m *EndpointResolutionEnd) HandleFinalize(
42+
ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler,
43+
) (
44+
middleware.FinalizeOutput, middleware.Metadata, error,
45+
) {
46+
mctx := metrics.Context(ctx)
47+
mctx.Data().ResolveEndpointEndTime = sdk.NowTime()
48+
return next.HandleFinalize(ctx, in)
49+
}

aws/middleware/private/metrics/middleware/endpoint_resolution_start.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package middleware
66

77
import (
88
"context"
9+
910
"github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics"
1011
"github.com/aws/aws-sdk-go-v2/internal/sdk"
1112
"github.com/aws/smithy-go/middleware"
@@ -21,6 +22,8 @@ func (m *EndpointResolutionStart) ID() string {
2122
return "EndpointResolutionStart"
2223
}
2324

25+
// Deprecated: Endpoint resolution now occurs in Finalize. The ResolveEndpoint
26+
// middleware remains in serialize but is largely a no-op.
2427
func (m *EndpointResolutionStart) HandleSerialize(
2528
ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler,
2629
) (
@@ -34,3 +37,13 @@ func (m *EndpointResolutionStart) HandleSerialize(
3437

3538
return out, metadata, err
3639
}
40+
41+
func (m *EndpointResolutionStart) HandleFinalize(
42+
ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler,
43+
) (
44+
middleware.FinalizeOutput, middleware.Metadata, error,
45+
) {
46+
mctx := metrics.Context(ctx)
47+
mctx.Data().ResolveEndpointStartTime = sdk.NowTime()
48+
return next.HandleFinalize(ctx, in)
49+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package middleware
2+
3+
import (
4+
"context"
5+
6+
"github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics"
7+
"github.com/aws/aws-sdk-go-v2/internal/sdk"
8+
"github.com/aws/smithy-go/middleware"
9+
)
10+
11+
func timeGetIdentity(stack *middleware.Stack) error {
12+
if err := stack.Finalize.Insert(getIdentityStart{}, "GetIdentity", middleware.Before); err != nil {
13+
return err
14+
}
15+
if err := stack.Finalize.Insert(getIdentityEnd{}, "GetIdentity", middleware.After); err != nil {
16+
return err
17+
}
18+
return nil
19+
}
20+
21+
type getIdentityStart struct{}
22+
23+
func (m getIdentityStart) ID() string { return "getIdentityStart" }
24+
25+
func (m getIdentityStart) HandleFinalize(
26+
ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler,
27+
) (
28+
out middleware.FinalizeOutput, md middleware.Metadata, err error,
29+
) {
30+
mctx := metrics.Context(ctx)
31+
mctx.Data().GetIdentityStartTime = sdk.NowTime()
32+
return next.HandleFinalize(ctx, in)
33+
}
34+
35+
type getIdentityEnd struct{}
36+
37+
func (m getIdentityEnd) ID() string { return "getIdentityEnd" }
38+
39+
func (m getIdentityEnd) HandleFinalize(
40+
ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler,
41+
) (
42+
out middleware.FinalizeOutput, md middleware.Metadata, err error,
43+
) {
44+
mctx := metrics.Context(ctx)
45+
mctx.Data().GetIdentityEndTime = sdk.NowTime()
46+
return next.HandleFinalize(ctx, in)
47+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package middleware
2+
3+
import (
4+
"context"
5+
6+
"github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics"
7+
"github.com/aws/aws-sdk-go-v2/internal/sdk"
8+
"github.com/aws/smithy-go/middleware"
9+
)
10+
11+
func timeSigning(stack *middleware.Stack) error {
12+
if err := stack.Finalize.Insert(signingStart{}, "Signing", middleware.Before); err != nil {
13+
return err
14+
}
15+
if err := stack.Finalize.Insert(signingEnd{}, "Signing", middleware.After); err != nil {
16+
return err
17+
}
18+
return nil
19+
}
20+
21+
type signingStart struct{}
22+
23+
func (m signingStart) ID() string { return "signingStart" }
24+
25+
func (m signingStart) HandleFinalize(
26+
ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler,
27+
) (
28+
out middleware.FinalizeOutput, md middleware.Metadata, err error,
29+
) {
30+
mctx := metrics.Context(ctx)
31+
attempt, err := mctx.Data().LatestAttempt()
32+
if err != nil {
33+
return out, md, err
34+
}
35+
36+
attempt.SignStartTime = sdk.NowTime()
37+
return next.HandleFinalize(ctx, in)
38+
}
39+
40+
type signingEnd struct{}
41+
42+
func (m signingEnd) ID() string { return "signingEnd" }
43+
44+
func (m signingEnd) HandleFinalize(
45+
ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler,
46+
) (
47+
out middleware.FinalizeOutput, md middleware.Metadata, err error,
48+
) {
49+
mctx := metrics.Context(ctx)
50+
attempt, err := mctx.Data().LatestAttempt()
51+
if err != nil {
52+
return out, md, err
53+
}
54+
55+
attempt.SignEndTime = sdk.NowTime()
56+
return next.HandleFinalize(ctx, in)
57+
}

aws/middleware/private/metrics/publisher/emf_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,6 @@ func TestPostRequestMetrics(t *testing.T) {
7878
FirstByteTime: time.Unix(1234, 0),
7979
ConnRequestedTime: time.Unix(1234, 0),
8080
ConnObtainedTime: time.Unix(1434, 0),
81-
CredentialFetchStartTime: time.Unix(1234, 0),
82-
CredentialFetchEndTime: time.Unix(1434, 0),
8381
SignStartTime: time.Unix(1234, 0),
8482
SignEndTime: time.Unix(1434, 0),
8583
DeserializeStartTime: time.Unix(1234, 0),
@@ -102,8 +100,6 @@ func TestPostRequestMetrics(t *testing.T) {
102100
FirstByteTime: time.Unix(1234, 0),
103101
ConnRequestedTime: time.Unix(1234, 0),
104102
ConnObtainedTime: time.Unix(1434, 0),
105-
CredentialFetchStartTime: time.Unix(1234, 0),
106-
CredentialFetchEndTime: time.Unix(1434, 0),
107103
SignStartTime: time.Unix(1234, 0),
108104
SignEndTime: time.Unix(1434, 0),
109105
DeserializeStartTime: time.Unix(1234, 0),

aws/signer/v4/middleware.go

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111

1212
"github.com/aws/aws-sdk-go-v2/aws"
1313
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
14-
"github.com/aws/aws-sdk-go-v2/aws/middleware/private/metrics"
1514
v4Internal "github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4"
1615
internalauth "github.com/aws/aws-sdk-go-v2/internal/auth"
1716
"github.com/aws/aws-sdk-go-v2/internal/sdk"
@@ -301,22 +300,7 @@ func (s *SignHTTPRequestMiddleware) HandleFinalize(ctx context.Context, in middl
301300
return out, metadata, &SigningError{Err: fmt.Errorf("computed payload hash missing from context")}
302301
}
303302

304-
mctx := metrics.Context(ctx)
305-
306-
if mctx != nil {
307-
if attempt, err := mctx.Data().LatestAttempt(); err == nil {
308-
attempt.CredentialFetchStartTime = sdk.NowTime()
309-
}
310-
}
311-
312303
credentials, err := s.credentialsProvider.Retrieve(ctx)
313-
314-
if mctx != nil {
315-
if attempt, err := mctx.Data().LatestAttempt(); err == nil {
316-
attempt.CredentialFetchEndTime = sdk.NowTime()
317-
}
318-
}
319-
320304
if err != nil {
321305
return out, metadata, &SigningError{Err: fmt.Errorf("failed to retrieve credentials: %w", err)}
322306
}
@@ -337,20 +321,7 @@ func (s *SignHTTPRequestMiddleware) HandleFinalize(ctx context.Context, in middl
337321
})
338322
}
339323

340-
if mctx != nil {
341-
if attempt, err := mctx.Data().LatestAttempt(); err == nil {
342-
attempt.SignStartTime = sdk.NowTime()
343-
}
344-
}
345-
346324
err = s.signer.SignHTTP(ctx, credentials, req.Request, payloadHash, signingName, signingRegion, sdk.NowTime(), signerOptions...)
347-
348-
if mctx != nil {
349-
if attempt, err := mctx.Data().LatestAttempt(); err == nil {
350-
attempt.SignEndTime = sdk.NowTime()
351-
}
352-
}
353-
354325
if err != nil {
355326
return out, metadata, &SigningError{Err: fmt.Errorf("failed to sign http request, %w", err)}
356327
}

0 commit comments

Comments
 (0)