Skip to content

Commit 0ee0be3

Browse files
authored
Merge pull request #1882 from dagnir/core-metrics-pt2
Support core metrics for sync clients
2 parents 7f72a11 + e14f0af commit 0ee0be3

File tree

28 files changed

+845
-211
lines changed

28 files changed

+845
-211
lines changed

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/SyncClientClass.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
import java.net.URI;
2929
import java.util.ArrayList;
3030
import java.util.List;
31+
import java.util.Optional;
3132
import java.util.stream.Collectors;
3233
import javax.lang.model.element.Modifier;
3334
import software.amazon.awssdk.annotations.SdkInternalApi;
3435
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
35-
import software.amazon.awssdk.awscore.metrics.AwsCoreMetric;
3636
import software.amazon.awssdk.codegen.docs.SimpleMethodOverload;
3737
import software.amazon.awssdk.codegen.emitters.GeneratorTaskParams;
3838
import software.amazon.awssdk.codegen.model.config.customization.UtilitiesMethod;
@@ -53,6 +53,8 @@
5353
import software.amazon.awssdk.core.client.handler.SyncClientHandler;
5454
import software.amazon.awssdk.core.endpointdiscovery.EndpointDiscoveryRefreshCache;
5555
import software.amazon.awssdk.core.endpointdiscovery.EndpointDiscoveryRequest;
56+
import software.amazon.awssdk.core.internal.util.MetricUtils;
57+
import software.amazon.awssdk.core.metrics.CoreMetric;
5658
import software.amazon.awssdk.metrics.MetricCollector;
5759
import software.amazon.awssdk.metrics.MetricPublisher;
5860

@@ -194,9 +196,9 @@ private List<MethodSpec> operationMethodSpecs(OperationModel opModel) {
194196
method.addStatement("$1T $2N = $1T.create($3S)",
195197
MetricCollector.class, metricCollectorName, "ApiCall");
196198

197-
method.addStatement("$N.reportMetric($T.$L, $S)", metricCollectorName, AwsCoreMetric.class, "SERVICE_ID",
199+
method.addStatement("$N.reportMetric($T.$L, $S)", metricCollectorName, CoreMetric.class, "SERVICE_ID",
198200
model.getMetadata().getServiceId());
199-
method.addStatement("$N.reportMetric($T.$L, $S)", metricCollectorName, AwsCoreMetric.class, "OPERATION_NAME",
201+
method.addStatement("$N.reportMetric($T.$L, $S)", metricCollectorName, CoreMetric.class, "OPERATION_NAME",
200202
opModel.getOperationName());
201203

202204
String publisherName = "metricPublisher";
@@ -205,11 +207,13 @@ private List<MethodSpec> operationMethodSpecs(OperationModel opModel) {
205207
.addCode(protocolSpec.executionHandler(opModel))
206208
.endControlFlow()
207209
.beginControlFlow("finally")
208-
.addStatement("$T $N = clientConfiguration.option($T.$L)",
209-
MetricPublisher.class, publisherName, SdkClientOption.class, "METRIC_PUBLISHER")
210-
.beginControlFlow("if ($N != null)", publisherName)
211-
.addStatement("$N.publish($N.collect())", publisherName, metricCollectorName)
212-
.endControlFlow()
210+
.addStatement("$T<$T> $N = $T.resolvePublisher(clientConfiguration, $N)",
211+
Optional.class,
212+
MetricPublisher.class,
213+
publisherName,
214+
MetricUtils.class,
215+
opModel.getInput().getVariableName())
216+
.addStatement("$N.ifPresent(p -> p.publish($N.collect()))", publisherName, metricCollectorName)
213217
.endControlFlow();
214218

215219
methods.add(method.build());

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-sync.java

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package software.amazon.awssdk.services.endpointdiscoverytest;
22

33
import java.net.URI;
4+
import java.util.Optional;
45
import software.amazon.awssdk.annotations.Generated;
56
import software.amazon.awssdk.annotations.SdkInternalApi;
67
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
78
import software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler;
89
import software.amazon.awssdk.awscore.exception.AwsServiceException;
9-
import software.amazon.awssdk.awscore.metrics.AwsCoreMetric;
1010
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
1111
import software.amazon.awssdk.core.client.config.SdkClientOption;
1212
import software.amazon.awssdk.core.client.handler.ClientExecutionParams;
@@ -15,6 +15,8 @@
1515
import software.amazon.awssdk.core.endpointdiscovery.EndpointDiscoveryRequest;
1616
import software.amazon.awssdk.core.exception.SdkClientException;
1717
import software.amazon.awssdk.core.http.HttpResponseHandler;
18+
import software.amazon.awssdk.core.internal.util.MetricUtils;
19+
import software.amazon.awssdk.core.metrics.CoreMetric;
1820
import software.amazon.awssdk.metrics.MetricCollector;
1921
import software.amazon.awssdk.metrics.MetricPublisher;
2022
import software.amazon.awssdk.protocols.json.AwsJsonProtocol;
@@ -92,8 +94,8 @@ public DescribeEndpointsResponse describeEndpoints(DescribeEndpointsRequest desc
9294
HttpResponseHandler<AwsServiceException> errorResponseHandler = createErrorResponseHandler(protocolFactory,
9395
operationMetadata);
9496
MetricCollector apiCallMetricCollector = MetricCollector.create("ApiCall");
95-
apiCallMetricCollector.reportMetric(AwsCoreMetric.SERVICE_ID, "AwsEndpointDiscoveryTest");
96-
apiCallMetricCollector.reportMetric(AwsCoreMetric.OPERATION_NAME, "DescribeEndpoints");
97+
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "AwsEndpointDiscoveryTest");
98+
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DescribeEndpoints");
9799
try {
98100

99101
return clientHandler.execute(new ClientExecutionParams<DescribeEndpointsRequest, DescribeEndpointsResponse>()
@@ -102,10 +104,9 @@ public DescribeEndpointsResponse describeEndpoints(DescribeEndpointsRequest desc
102104
.withMetricCollector(apiCallMetricCollector)
103105
.withMarshaller(new DescribeEndpointsRequestMarshaller(protocolFactory)));
104106
} finally {
105-
MetricPublisher metricPublisher = clientConfiguration.option(SdkClientOption.METRIC_PUBLISHER);
106-
if (metricPublisher != null) {
107-
metricPublisher.publish(apiCallMetricCollector.collect());
108-
}
107+
Optional<MetricPublisher> metricPublisher = MetricUtils.resolvePublisher(clientConfiguration,
108+
describeEndpointsRequest);
109+
metricPublisher.ifPresent(p -> p.publish(apiCallMetricCollector.collect()));
109110
}
110111
}
111112

@@ -144,8 +145,8 @@ public TestDiscoveryIdentifiersRequiredResponse testDiscoveryIdentifiersRequired
144145
cachedEndpoint = endpointDiscoveryCache.get(key, endpointDiscoveryRequest);
145146
}
146147
MetricCollector apiCallMetricCollector = MetricCollector.create("ApiCall");
147-
apiCallMetricCollector.reportMetric(AwsCoreMetric.SERVICE_ID, "AwsEndpointDiscoveryTest");
148-
apiCallMetricCollector.reportMetric(AwsCoreMetric.OPERATION_NAME, "TestDiscoveryIdentifiersRequired");
148+
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "AwsEndpointDiscoveryTest");
149+
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "TestDiscoveryIdentifiersRequired");
149150
try {
150151

151152
return clientHandler
@@ -155,10 +156,9 @@ public TestDiscoveryIdentifiersRequiredResponse testDiscoveryIdentifiersRequired
155156
.withInput(testDiscoveryIdentifiersRequiredRequest).withMetricCollector(apiCallMetricCollector)
156157
.withMarshaller(new TestDiscoveryIdentifiersRequiredRequestMarshaller(protocolFactory)));
157158
} finally {
158-
MetricPublisher metricPublisher = clientConfiguration.option(SdkClientOption.METRIC_PUBLISHER);
159-
if (metricPublisher != null) {
160-
metricPublisher.publish(apiCallMetricCollector.collect());
161-
}
159+
Optional<MetricPublisher> metricPublisher = MetricUtils.resolvePublisher(clientConfiguration,
160+
testDiscoveryIdentifiersRequiredRequest);
161+
metricPublisher.ifPresent(p -> p.publish(apiCallMetricCollector.collect()));
162162
}
163163
}
164164

@@ -196,8 +196,8 @@ public TestDiscoveryOptionalResponse testDiscoveryOptional(TestDiscoveryOptional
196196
cachedEndpoint = endpointDiscoveryCache.get(key, endpointDiscoveryRequest);
197197
}
198198
MetricCollector apiCallMetricCollector = MetricCollector.create("ApiCall");
199-
apiCallMetricCollector.reportMetric(AwsCoreMetric.SERVICE_ID, "AwsEndpointDiscoveryTest");
200-
apiCallMetricCollector.reportMetric(AwsCoreMetric.OPERATION_NAME, "TestDiscoveryOptional");
199+
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "AwsEndpointDiscoveryTest");
200+
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "TestDiscoveryOptional");
201201
try {
202202

203203
return clientHandler.execute(new ClientExecutionParams<TestDiscoveryOptionalRequest, TestDiscoveryOptionalResponse>()
@@ -206,10 +206,9 @@ public TestDiscoveryOptionalResponse testDiscoveryOptional(TestDiscoveryOptional
206206
.withInput(testDiscoveryOptionalRequest).withMetricCollector(apiCallMetricCollector)
207207
.withMarshaller(new TestDiscoveryOptionalRequestMarshaller(protocolFactory)));
208208
} finally {
209-
MetricPublisher metricPublisher = clientConfiguration.option(SdkClientOption.METRIC_PUBLISHER);
210-
if (metricPublisher != null) {
211-
metricPublisher.publish(apiCallMetricCollector.collect());
212-
}
209+
Optional<MetricPublisher> metricPublisher = MetricUtils.resolvePublisher(clientConfiguration,
210+
testDiscoveryOptionalRequest);
211+
metricPublisher.ifPresent(p -> p.publish(apiCallMetricCollector.collect()));
213212
}
214213
}
215214

@@ -247,8 +246,8 @@ public TestDiscoveryRequiredResponse testDiscoveryRequired(TestDiscoveryRequired
247246
cachedEndpoint = endpointDiscoveryCache.get(key, endpointDiscoveryRequest);
248247
}
249248
MetricCollector apiCallMetricCollector = MetricCollector.create("ApiCall");
250-
apiCallMetricCollector.reportMetric(AwsCoreMetric.SERVICE_ID, "AwsEndpointDiscoveryTest");
251-
apiCallMetricCollector.reportMetric(AwsCoreMetric.OPERATION_NAME, "TestDiscoveryRequired");
249+
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "AwsEndpointDiscoveryTest");
250+
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "TestDiscoveryRequired");
252251
try {
253252

254253
return clientHandler.execute(new ClientExecutionParams<TestDiscoveryRequiredRequest, TestDiscoveryRequiredResponse>()
@@ -257,10 +256,9 @@ public TestDiscoveryRequiredResponse testDiscoveryRequired(TestDiscoveryRequired
257256
.withInput(testDiscoveryRequiredRequest).withMetricCollector(apiCallMetricCollector)
258257
.withMarshaller(new TestDiscoveryRequiredRequestMarshaller(protocolFactory)));
259258
} finally {
260-
MetricPublisher metricPublisher = clientConfiguration.option(SdkClientOption.METRIC_PUBLISHER);
261-
if (metricPublisher != null) {
262-
metricPublisher.publish(apiCallMetricCollector.collect());
263-
}
259+
Optional<MetricPublisher> metricPublisher = MetricUtils.resolvePublisher(clientConfiguration,
260+
testDiscoveryRequiredRequest);
261+
metricPublisher.ifPresent(p -> p.publish(apiCallMetricCollector.collect()));
264262
}
265263
}
266264

@@ -280,3 +278,4 @@ public void close() {
280278
clientHandler.close();
281279
}
282280
}
281+

0 commit comments

Comments
 (0)