2828import java .util .Optional ;
2929import software .amazon .awssdk .annotations .SdkInternalApi ;
3030import software .amazon .awssdk .core .ApiName ;
31- import software .amazon .awssdk .core .RequestOverrideConfiguration ;
32- import software .amazon .awssdk .core .SelectedAuthScheme ;
3331import software .amazon .awssdk .core .client .config .SdkAdvancedClientOption ;
3432import software .amazon .awssdk .core .client .config .SdkClientConfiguration ;
3533import software .amazon .awssdk .core .client .config .SdkClientOption ;
3634import software .amazon .awssdk .core .interceptor .ExecutionAttributes ;
37- import software .amazon .awssdk .core .interceptor .SdkExecutionAttribute ;
3835import software .amazon .awssdk .core .interceptor .SdkInternalExecutionAttribute ;
3936import software .amazon .awssdk .core .internal .http .HttpClientDependencies ;
4037import software .amazon .awssdk .core .internal .http .RequestExecutionContext ;
4138import software .amazon .awssdk .core .internal .http .pipeline .MutableRequestToRequestPipeline ;
42- import software .amazon .awssdk .core .signer .Signer ;
4339import software .amazon .awssdk .core .useragent .AdditionalMetadata ;
4440import software .amazon .awssdk .core .useragent .BusinessMetricCollection ;
45- import software .amazon .awssdk .core .useragent .BusinessMetricFeatureId ;
4641import software .amazon .awssdk .http .SdkHttpFullRequest ;
47- import software .amazon .awssdk .http .auth .aws .scheme .AwsV4aAuthScheme ;
4842import software .amazon .awssdk .identity .spi .Identity ;
4943import software .amazon .awssdk .utils .CompletableFutureUtils ;
5044import software .amazon .awssdk .utils .Logger ;
5347
5448/**
5549 * A stage for adding the user agent header to the request, after retrieving the current string
56- * from execution attributes and adding any additional information.
50+ * from execution attributes and adding any additional information.
5751 */
5852@ SdkInternalApi
5953public class ApplyUserAgentStage implements MutableRequestToRequestPipeline {
@@ -118,8 +112,7 @@ private String finalizeUserAgent(RequestExecutionContext context) {
118112 userAgentMetadata .forEach (s -> javaUserAgent .append (SPACE ).append (s ));
119113 }
120114
121- Optional <String > businessMetrics = getBusinessMetricsString (context .executionAttributes (),
122- groupedApiNames .right (), context );
115+ Optional <String > businessMetrics = getBusinessMetricsString (context .executionAttributes (), groupedApiNames .right ());
123116 businessMetrics .ifPresent (
124117 metrics -> appendSpaceAndField (javaUserAgent , BUSINESS_METADATA , metrics )
125118 );
@@ -150,32 +143,29 @@ private static Pair<List<ApiName>, Collection<String>> groupApiNames(List<ApiNam
150143 }
151144
152145 private static Optional <String > getBusinessMetricsString (ExecutionAttributes executionAttributes ,
153- Collection <String > metricsFromApiNames ,
154- RequestExecutionContext context ) {
146+ Collection <String > metricsFromApiNames ) {
155147 BusinessMetricCollection businessMetrics =
156148 executionAttributes .getAttribute (SdkInternalExecutionAttribute .BUSINESS_METRICS );
157149 if (businessMetrics == null ) {
158150 businessMetrics = new BusinessMetricCollection ();
159151 }
160152 businessMetrics .merge (metricsFromApiNames );
161153
162- SelectedAuthScheme <?> selectedAuthScheme =
163- executionAttributes .getAttribute (SdkInternalExecutionAttribute .SELECTED_AUTH_SCHEME );
154+ credentialProviderBusinessMetrics (executionAttributes ).ifPresent (businessMetrics ::merge );
164155
165- credentialProviderBusinessMetrics (selectedAuthScheme ).ifPresent (businessMetrics ::merge );
166- addSigV4aBusinessMetrics (selectedAuthScheme , businessMetrics , context , executionAttributes );
167-
168156 if (businessMetrics .recordedMetrics ().isEmpty ()) {
169157 return Optional .empty ();
170158 }
171-
159+
172160 return Optional .of (businessMetrics .asBoundedString ());
173161 }
174162
175163 private static Optional <Collection <String >> credentialProviderBusinessMetrics (
176- SelectedAuthScheme <?> selectedAuthScheme ) {
177- return Optional .ofNullable (selectedAuthScheme )
178- .map (scheme -> CompletableFutureUtils .joinLikeSync (scheme .identity ()))
164+ ExecutionAttributes executionAttributes ) {
165+ return Optional .ofNullable (
166+ executionAttributes .getAttribute (SdkInternalExecutionAttribute .SELECTED_AUTH_SCHEME ))
167+ .map (selectedAuthScheme ->
168+ CompletableFutureUtils .joinLikeSync (selectedAuthScheme .identity ()))
179169 .flatMap (Identity ::providerName )
180170 .map (providerName -> {
181171 if (StringUtils .isBlank (providerName )) {
@@ -185,26 +175,6 @@ private static Optional<Collection<String>> credentialProviderBusinessMetrics(
185175 });
186176 }
187177
188- private static boolean isSignerOverridden (RequestExecutionContext context , ExecutionAttributes executionAttributes ) {
189- boolean isClientSignerOverridden =
190- Boolean .TRUE .equals (executionAttributes .getAttribute (SdkExecutionAttribute .SIGNER_OVERRIDDEN ));
191- Optional <Signer > requestSigner = context .originalRequest ().overrideConfiguration ()
192- .flatMap (RequestOverrideConfiguration ::signer );
193- return isClientSignerOverridden || requestSigner .isPresent ();
194- }
195-
196- private static void addSigV4aBusinessMetrics (SelectedAuthScheme <?> selectedAuthScheme ,
197- BusinessMetricCollection businessMetrics ,
198- RequestExecutionContext context ,
199- ExecutionAttributes executionAttributes ) {
200- if (selectedAuthScheme != null &&
201- selectedAuthScheme .authSchemeOption ().schemeId ().equals (AwsV4aAuthScheme .SCHEME_ID ) &&
202- !isSignerOverridden (context , executionAttributes )) {
203-
204- businessMetrics .addMetric (BusinessMetricFeatureId .SIGV4A_SIGNING .value ());
205- }
206- }
207-
208178 /**
209179 * This structure is used for external users as well as for internal tracking of features.
210180 * It's not governed by a specification.
@@ -225,4 +195,4 @@ private Optional<String> requestApiNames(List<ApiName> requestApiNames) {
225195 .append (apiName .version ()));
226196 return Optional .of (concatenatedNames .toString ());
227197 }
228- }
198+ }
0 commit comments