Skip to content

Commit 7ad0289

Browse files
Send datadog metrics in double instead of long (#727)
* Send datadog metrics in double instead of long * spotless: Fix code style * spotless: add commit to blame ignore revs file --------- Co-authored-by: ct-sdks[bot] <153784748+ct-sdks[bot]@users.noreply.github.com>
1 parent 29a3511 commit 7ad0289

File tree

4 files changed

+24
-17
lines changed

4 files changed

+24
-17
lines changed

.git-blame-ignore-revs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ a8ec45c8ea4ba559247b654d01b0d35b21a68865
33
430a1a0a5dd4efe78e21526c37bec9dbce036401
44
d0129c1095216d5c830900c8a6223ef5d4274de1
55
4bc5c823b8ebf5a00491c7e63e1ea49d29bf5ee7
6+
352051999507bd78542e177d67ce1548a0752691

commercetools/commercetools-monitoring-datadog/src/main/java/com/commercetools/monitoring/datadog/DatadogResponseSerializer.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public DatadogResponseSerializer(final ResponseSerializer serializer, final ApiC
3939
public <O> ApiHttpResponse<O> convertResponse(ApiHttpResponse<byte[]> response, Class<O> outputType) {
4040
Instant start = Instant.now();
4141
ApiHttpResponse<O> result = serializer.convertResponse(response, outputType);
42-
long durationInMillis = Duration.between(start, Instant.now()).toMillis();
42+
double durationInMillis = Duration.between(start, Instant.now()).toNanos() / 1_000_000.0;
4343
submitJsonDeserializationMetric(apiInstance, (double) durationInMillis, outputType.getCanonicalName());
4444
return result;
4545
}
@@ -48,26 +48,26 @@ public <O> ApiHttpResponse<O> convertResponse(ApiHttpResponse<byte[]> response,
4848
public <O> ApiHttpResponse<O> convertResponse(ApiHttpResponse<byte[]> response, JavaType outputType) {
4949
Instant start = Instant.now();
5050
ApiHttpResponse<O> result = serializer.convertResponse(response, outputType);
51-
long durationInMillis = Duration.between(start, Instant.now()).toMillis();
52-
submitJsonDeserializationMetric(apiInstance, (double) durationInMillis, outputType.toString());
51+
double durationInMillis = Duration.between(start, Instant.now()).toNanos() / 1_000_000.0;
52+
submitJsonDeserializationMetric(apiInstance, durationInMillis, outputType.toString());
5353
return result;
5454
}
5555

5656
@Override
5757
public <O> ApiHttpResponse<O> convertResponse(ApiHttpResponse<byte[]> response, TypeReference<O> outputType) {
5858
Instant start = Instant.now();
5959
ApiHttpResponse<O> result = serializer.convertResponse(response, outputType);
60-
long durationInMillis = Duration.between(start, Instant.now()).toMillis();
61-
submitJsonDeserializationMetric(apiInstance, (double) durationInMillis, outputType.getType().getTypeName());
60+
double durationInMillis = Duration.between(start, Instant.now()).toNanos() / 1_000_000.0;
61+
submitJsonDeserializationMetric(apiInstance, durationInMillis, outputType.getType().getTypeName());
6262
return result;
6363
}
6464

6565
@Override
6666
public byte[] toJsonByteArray(Object value) throws JsonProcessingException {
6767
Instant start = Instant.now();
6868
byte[] result = serializer.toJsonByteArray(value);
69-
long durationInMillis = Duration.between(start, Instant.now()).toMillis();
70-
submitJsonSerializationMetric(apiInstance, (double) durationInMillis, value.getClass().getCanonicalName());
69+
double durationInMillis = Duration.between(start, Instant.now()).toNanos() / 1_000_000.0;
70+
submitJsonSerializationMetric(apiInstance, durationInMillis, value.getClass().getCanonicalName());
7171
return result;
7272
}
7373

commercetools/commercetools-monitoring-datadog/src/main/java/com/commercetools/monitoring/datadog/DatadogUtils.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,40 +30,40 @@ protected static void submitClientDurationMetric(final ApiHttpRequest request, f
3030
final double durationInMillis, final ApiHttpResponse<byte[]> response) throws ApiException {
3131
final String name = PREFIX + "." + CLIENT_DURATION;
3232
final MetricIntakeType type = MetricIntakeType.UNSPECIFIED;
33-
submitMetricWithHttpTags(name, durationInMillis, type, request, apiInstance, response);
33+
submitMetricWithHttpTags(name, durationInMillis, type, "ms", request, apiInstance, response);
3434
}
3535

3636
protected static void submitErrorRequestsMetric(final ApiHttpRequest request, final MetricsApi apiInstance,
3737
final ApiHttpResponse<byte[]> response) throws ApiException {
3838
final String name = PREFIX + "." + CLIENT_REQUEST_ERROR;
3939
final MetricIntakeType count = MetricIntakeType.COUNT;
40-
submitMetricWithHttpTags(name, 1.0, count, request, apiInstance, response);
40+
submitMetricWithHttpTags(name, 1.0, count, "count", request, apiInstance, response);
4141
}
4242

4343
protected static void submitTotalRequestsMetric(final ApiHttpRequest request, final MetricsApi apiInstance,
4444
final ApiHttpResponse<byte[]> response) throws ApiException {
4545
final String name = PREFIX + "." + CLIENT_REQUEST_TOTAL;
4646
final MetricIntakeType count = MetricIntakeType.COUNT;
47-
submitMetricWithHttpTags(name, 1.0, count, request, apiInstance, response);
47+
submitMetricWithHttpTags(name, 1.0, count, "count", request, apiInstance, response);
4848
}
4949

5050
private static void submitMetricWithHttpTags(final String name, final double value, final MetricIntakeType type,
51-
final ApiHttpRequest request, final MetricsApi apiInstance, final ApiHttpResponse<byte[]> response)
52-
throws ApiException {
51+
final String unit, final ApiHttpRequest request, final MetricsApi apiInstance,
52+
final ApiHttpResponse<byte[]> response) throws ApiException {
5353
final List<String> tags = Arrays.asList(format("%s:%s", HTTP_RESPONSE_STATUS_CODE, response.getStatusCode()),
5454
format("%s:%s", HTTP_REQUEST_METHOD, request.getMethod().name()),
5555
format("%s:%s", SERVER_ADDRESS, request.getUri().getHost()));
5656
if (request.getUri().getPort() > 0) {
5757
tags.add(format("%s:%s", SERVER_PORT, request.getUri().getPort()));
5858
}
59-
submitMetric(apiInstance, name, value, type, tags);
59+
submitMetric(apiInstance, name, value, type, unit, tags);
6060
}
6161

6262
protected static void submitJsonSerializationMetric(final MetricsApi apiInstance, final double durationInMillis,
6363
final String responseBodyType) {
6464
try {
6565
submitMetric(apiInstance, PREFIX + "." + JSON_SERIALIZATION, durationInMillis, MetricIntakeType.UNSPECIFIED,
66-
Arrays.asList(format("%s:%s", RESPONSE_BODY_TYPE, responseBodyType)));
66+
"ms", Arrays.asList(format("%s:%s", RESPONSE_BODY_TYPE, responseBodyType)));
6767
}
6868
catch (ApiException exception) {
6969
logger.warn("Failed to submit commercetools json serialization metric", exception);
@@ -74,17 +74,18 @@ protected static void submitJsonDeserializationMetric(final MetricsApi apiInstan
7474
final String requestBodyType) {
7575
try {
7676
submitMetric(apiInstance, PREFIX + "." + JSON_DESERIALIZATION, durationInMillis,
77-
MetricIntakeType.UNSPECIFIED, Arrays.asList(format("%s:%s", REQUEST_BODY_TYPE, requestBodyType)));
77+
MetricIntakeType.UNSPECIFIED, "ms", Arrays.asList(format("%s:%s", REQUEST_BODY_TYPE, requestBodyType)));
7878
}
7979
catch (ApiException exception) {
8080
logger.warn("Failed to submit commercetools json deserialization metric", exception);
8181
}
8282
}
8383

8484
private static void submitMetric(final MetricsApi apiInstance, final String name, final double value,
85-
final MetricIntakeType type, final List<String> tags) throws ApiException {
85+
final MetricIntakeType type, final String unit, final List<String> tags) throws ApiException {
8686
MetricPayload totalMetric = new MetricPayload().series(Collections.singletonList(new MetricSeries().metric(name)
8787
.type(type)
88+
.unit(unit)
8889
.points(Collections.singletonList(
8990
new MetricPoint().timestamp(OffsetDateTime.now().toInstant().getEpochSecond()).value(value)))
9091
.tags(tags)));

examples/spring-datadog/src/main/java/com/commercetools/sdk/examples/springmvc/config/MeClientFilter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import com.commercetools.api.defaultconfig.ApiRootBuilder;
55
import com.commercetools.api.defaultconfig.ServiceRegion;
66

7+
import com.commercetools.monitoring.datadog.DatadogMiddleware;
8+
import com.commercetools.monitoring.datadog.DatadogResponseSerializer;
9+
import com.datadog.api.client.ApiClient;
710
import io.vrap.rmf.base.client.*;
811
import io.vrap.rmf.base.client.oauth2.ClientCredentials;
912
import io.vrap.rmf.base.client.oauth2.TokenStorage;
@@ -58,7 +61,9 @@ private ProjectApiRoot meClient(ApiHttpClient client, Mono<WebSession> session)
5861
ApiRootBuilder builder = ApiRootBuilder.of(client)
5962
.withApiBaseUrl(ServiceRegion.GCP_EUROPE_WEST1.getApiUrl())
6063
.withProjectKey(projectKey)
61-
.withAnonymousRefreshFlow(credentials(), ServiceRegion.GCP_EUROPE_WEST1, storage);
64+
.withAnonymousRefreshFlow(credentials(), ServiceRegion.GCP_EUROPE_WEST1, storage)
65+
.withTelemetryMiddleware(new DatadogMiddleware(ApiClient.getDefaultApiClient()))
66+
.withSerializer(new DatadogResponseSerializer(ResponseSerializer.of(), ApiClient.getDefaultApiClient()));
6267

6368
return builder.build(projectKey);
6469
}

0 commit comments

Comments
 (0)