Skip to content

Commit

Permalink
fixed time formatting issue in request diagnostics (#15572)
Browse files Browse the repository at this point in the history
  • Loading branch information
moderakh authored Sep 24, 2020
1 parent 4c3f21f commit 24f1943
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,24 @@
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import com.sun.management.OperatingSystemMXBean;
import com.azure.cosmos.implementation.apachecommons.lang.StringUtils;

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.URI;
import java.time.Duration;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

@JsonSerialize(using = ClientSideRequestStatistics.ClientSideRequestStatisticsSerializer.class)
class ClientSideRequestStatistics {
private static final int MAX_SUPPLEMENTAL_REQUESTS_FOR_TO_STRING = 10;
private static final DateTimeFormatter RESPONSE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("dd MMM yyyy HH:mm:ss" + ".SSS").withLocale(Locale.US);

private ConnectionMode connectionMode;

private List<StoreResponseStatistics> responseStatisticsList;
Expand Down Expand Up @@ -280,8 +273,8 @@ public void serialize(
long requestLatency = statistics.getDuration().toMillis();
generator.writeStringField("userAgent", CosmosDiagnostics.USER_AGENT);
generator.writeNumberField("requestLatencyInMs", requestLatency);
generator.writeStringField("requestStartTimeUTC", DiagnosticsInstantSerializer.formatDateTime(statistics.requestStartTimeUTC));
generator.writeStringField("requestEndTimeUTC", DiagnosticsInstantSerializer.formatDateTime(statistics.requestEndTimeUTC));
generator.writeStringField("requestStartTimeUTC", DiagnosticsInstantSerializer.fromInstant(statistics.requestStartTimeUTC));
generator.writeStringField("requestEndTimeUTC", DiagnosticsInstantSerializer.fromInstant(statistics.requestEndTimeUTC));
generator.writeObjectField("connectionMode", statistics.connectionMode);
generator.writeObjectField("responseStatisticsList", statistics.responseStatisticsList);
int supplementalResponseStatisticsListCount = statistics.supplementalResponseStatisticsList.size();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@

import java.io.IOException;
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

/**
* Provides a serialization for instant using ISO-8601 representation.
* e.g., such as '2011-12-03T10:15:30Z'.
*
* https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT
*/
public class DiagnosticsInstantSerializer extends StdSerializer<Instant> {

private static final long serialVersionUID = 1477047422582342157L;
private static final DateTimeFormatter RESPONSE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("dd MMM yyyy HH:mm:ss" + ".SSS").withLocale(Locale.US).withZone(ZoneOffset.UTC);

public DiagnosticsInstantSerializer() {
super(Instant.class);
Expand All @@ -26,13 +26,14 @@ public DiagnosticsInstantSerializer() {
public void serialize(Instant instant,
JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeObject(formatDateTime(instant));
jsonGenerator.writeObject(fromInstant(instant));
}

public static String formatDateTime(Instant dateTime) {
if (dateTime == null) {
public static String fromInstant(Instant instant) {
if (instant == null) {
return null;
}
return RESPONSE_TIME_FORMATTER.format(dateTime);

return instant.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ public void serialize(MetadataDiagnostics metaDataDiagnostic, JsonGenerator json
Duration.ZERO : Duration.between(metaDataDiagnostic.startTimeUTC, metaDataDiagnostic.endTimeUTC);
jsonGenerator.writeStartObject();
jsonGenerator.writeObjectField("metaDataName", metaDataDiagnostic.metaDataName);
jsonGenerator.writeStringField("startTimeUTC", DiagnosticsInstantSerializer.formatDateTime(metaDataDiagnostic.startTimeUTC));
jsonGenerator.writeStringField("endTimeUTC", DiagnosticsInstantSerializer.formatDateTime(metaDataDiagnostic.endTimeUTC));
jsonGenerator.writeStringField("startTimeUTC", DiagnosticsInstantSerializer.fromInstant(metaDataDiagnostic.startTimeUTC));
jsonGenerator.writeStringField("endTimeUTC", DiagnosticsInstantSerializer.fromInstant(metaDataDiagnostic.endTimeUTC));
if(durationinMS != null) {
jsonGenerator.writeNumberField("durationinMS", durationinMS.toMillis());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ public void serialize(SerializationDiagnosticsContext.SerializationDiagnostics s
Duration.ZERO : Duration.between(serializationDiagnostics.startTimeUTC, serializationDiagnostics.endTimeUTC);
jsonGenerator.writeStartObject();
jsonGenerator.writeObjectField("serializationType", serializationDiagnostics.serializationType);
jsonGenerator.writeStringField("startTimeUTC", DiagnosticsInstantSerializer.formatDateTime(serializationDiagnostics.startTimeUTC));
jsonGenerator.writeStringField("endTimeUTC", DiagnosticsInstantSerializer.formatDateTime(serializationDiagnostics.endTimeUTC));
jsonGenerator.writeStringField("startTimeUTC", DiagnosticsInstantSerializer.fromInstant(serializationDiagnostics.startTimeUTC));
jsonGenerator.writeStringField("endTimeUTC", DiagnosticsInstantSerializer.fromInstant(serializationDiagnostics.endTimeUTC));
if (durationinMS != null) {
jsonGenerator.writeNumberField("durationInMicroSec", durationinMS.toNanos() / 1000);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
Expand All @@ -51,11 +52,11 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import static org.assertj.core.api.InstanceOfAssertFactories.INSTANT;

public class CosmosDiagnosticsTest extends TestSuiteBase {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final DateTimeFormatter RESPONSE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("dd MMM yyyy HH:mm:ss" + ".SSS").withLocale(Locale.US).withZone(ZoneOffset.UTC);
private static final DateTimeFormatter RESPONSE_TIME_FORMATTER = DateTimeFormatter.ISO_INSTANT;
private CosmosClient gatewayClient;
private CosmosClient directClient;
private CosmosContainer container;
Expand Down Expand Up @@ -444,15 +445,8 @@ public void supplementalResponseStatisticsList() throws Exception {
assertThat(node.get("storeResult").asText()).isNotNull();

String requestResponseTimeUTC = node.get("requestResponseTimeUTC").asText();
String formattedInstant = RESPONSE_TIME_FORMATTER.format(Instant.now());
String[] requestResponseTimeUTCList = requestResponseTimeUTC.split(" ");
String[] formattedInstantList = formattedInstant.split(" ");
assertThat(requestResponseTimeUTC.length()).isEqualTo(formattedInstant.length());
assertThat(requestResponseTimeUTCList.length).isEqualTo(formattedInstantList.length);
assertThat(requestResponseTimeUTCList[0]).isEqualTo(formattedInstantList[0]);
assertThat(requestResponseTimeUTCList[1]).isEqualTo(formattedInstantList[1]);
assertThat(requestResponseTimeUTCList[2]).isEqualTo(formattedInstantList[2]);

Instant instant = Instant.from(RESPONSE_TIME_FORMATTER.parse(requestResponseTimeUTC));
assertThat(Instant.now().toEpochMilli() - instant.toEpochMilli()).isLessThan(5000);
assertThat(node.get("requestResponseTimeUTC")).isNotNull();
assertThat(node.get("requestOperationType")).isNotNull();
assertThat(node.get("requestOperationType")).isNotNull();
Expand Down

0 comments on commit 24f1943

Please sign in to comment.