@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414limitations under the License.
1515*/
1616
17- // Package metrics provides a way to capture request metrics.
17+ // Package metricsv2 provides a way to capture request metrics.
1818package metricsv2
1919
2020import (
@@ -85,6 +85,7 @@ func init() {
8585
8686type requestContextKey struct {}
8787
88+ // RequestData holds information related to request metrics.
8889type RequestData struct {
8990 RequestStartTime time.Time
9091 RequestEndTime time.Time
@@ -100,7 +101,8 @@ type RequestData struct {
100101 Attempts int
101102}
102103
103- // Inspired by https://github.com/jonathan-innis/aws-sdk-go-prometheus/v2
104+ // WithMiddlewares adds instrumentation middleware stacks to AWS GO SDK V2 service clients.
105+ // Inspired by https://github.com/jonathan-innis/aws-sdk-go-prometheus/v2.
104106func WithMiddlewares (controller string , target runtime.Object ) func (stack * middleware.Stack ) error {
105107 return func (stack * middleware.Stack ) error {
106108 if err := stack .Initialize .Add (getMetricCollectionMiddleware (controller , target ), middleware .Before ); err != nil {
@@ -115,10 +117,7 @@ func WithMiddlewares(controller string, target runtime.Object) func(stack *middl
115117 if err := stack .Finalize .Insert (getAttemptContextMiddleware (), "Retry" , middleware .After ); err != nil {
116118 return err
117119 }
118- if err := stack .Deserialize .Add (getRecordAWSPermissionsIssueMiddleware (target ), middleware .After ); err != nil {
119- return err
120- }
121- return nil
120+ return stack .Deserialize .Add (getRecordAWSPermissionsIssueMiddleware (target ), middleware .After )
122121 }
123122}
124123
@@ -148,14 +147,18 @@ func getRequestMetricContextMiddleware() middleware.FinalizeMiddleware {
148147 })
149148}
150149
151- // For capturing retry count and status codes
150+ // For capturing retry count and status codes.
152151func getAttemptContextMiddleware () middleware.FinalizeMiddleware {
153152 return middleware .FinalizeMiddlewareFunc ("capa/AttemptMetricContextMiddleware" , func (ctx context.Context , input middleware.FinalizeInput , handler middleware.FinalizeHandler ) (middleware.FinalizeOutput , middleware.Metadata , error ) {
154153 request := getContext (ctx )
155154 request .Attempts ++
156155 out , metadata , err := handler .HandleFinalize (ctx , input )
157156 response := getRawResponse (metadata )
158157
158+ if response .Body != nil {
159+ defer response .Body .Close ()
160+ }
161+
159162 // This will record only last attempts status code.
160163 // Can be further extended to capture status codes of all attempts
161164 if response != nil {
@@ -167,7 +170,6 @@ func getAttemptContextMiddleware() middleware.FinalizeMiddleware {
167170 return out , metadata , err
168171 })
169172}
170-
171173func getRecordAWSPermissionsIssueMiddleware (target runtime.Object ) middleware.DeserializeMiddleware {
172174 return middleware .DeserializeMiddlewareFunc ("capa/RecordAWSPermissionsIssueMiddleware" , func (ctx context.Context , input middleware.DeserializeInput , handler middleware.DeserializeHandler ) (middleware.DeserializeOutput , middleware.Metadata , error ) {
173175 r , ok := input .Request .(* smithyhttp.ResponseError )
0 commit comments