Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -253,13 +253,13 @@ public GatewayStatistics getGatewayStatistics() {

public static class StoreResponseStatistics {
@JsonSerialize(using = StoreResult.StoreResultSerializer.class)
StoreResult storeResult;
private StoreResult storeResult;
@JsonSerialize(using = DiagnosticsInstantSerializer.class)
Instant requestResponseTimeUTC;
private Instant requestResponseTimeUTC;
@JsonSerialize
ResourceType requestResourceType;
private ResourceType requestResourceType;
@JsonSerialize
OperationType requestOperationType;
private OperationType requestOperationType;

public StoreResult getStoreResult() {
return storeResult;
Expand All @@ -268,13 +268,21 @@ public StoreResult getStoreResult() {
public Instant getRequestResponseTimeUTC() {
return requestResponseTimeUTC;
}

public ResourceType getRequestResourceType() {
return requestResourceType;
}

public OperationType getRequestOperationType() {
return requestOperationType;
}
}

private static class SystemInformation {
String usedMemory;
String availableMemory;
String systemCpuLoad;
int availableProcessors;
public static class SystemInformation {
private String usedMemory;
private String availableMemory;
private String systemCpuLoad;
private int availableProcessors;

public String getUsedMemory() {
return usedMemory;
Expand Down Expand Up @@ -347,34 +355,50 @@ public static List<StoreResponseStatistics> getCappedSupplementalResponseStatist

public static class AddressResolutionStatistics {
@JsonSerialize(using = DiagnosticsInstantSerializer.class)
Instant startTimeUTC;
private Instant startTimeUTC;
@JsonSerialize(using = DiagnosticsInstantSerializer.class)
Instant endTimeUTC;
private Instant endTimeUTC;
@JsonSerialize
String targetEndpoint;
private String targetEndpoint;
@JsonSerialize
String errorMessage;
private String errorMessage;

// If one replica return error we start address call in parallel,
// on other replica valid response, we end the current user request,
// indicating background addressResolution is still inflight
@JsonSerialize
boolean inflightRequest = true;
private boolean inflightRequest = true;

public Instant getStartTimeUTC() {
return startTimeUTC;
}

public Instant getEndTimeUTC() {
return endTimeUTC;
}

public String getTargetEndpoint() {
return targetEndpoint;
}

public String getErrorMessage() {
return errorMessage;
}

public boolean isInflightRequest() {
return inflightRequest;
}
}

public static class GatewayStatistics {
String sessionToken;
OperationType operationType;
ResourceType resourceType;
int statusCode;
int subStatusCode;
String requestCharge;
RequestTimeline requestTimeline;
String partitionKeyRangeId;
private String sessionToken;
private OperationType operationType;
private ResourceType resourceType;
private int statusCode;
private int subStatusCode;
private String requestCharge;
private RequestTimeline requestTimeline;
private String partitionKeyRangeId;

public String getSessionToken() {
return sessionToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.azure.cosmos.implementation.query.QueryInfo;
import com.azure.cosmos.implementation.query.metrics.QueryMetricsTextWriter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -23,6 +24,7 @@ public class FeedResponseDiagnostics {
private final static String EQUALS = "=";
private final static String QUERY_PLAN = "QueryPlan";
private final static String SPACE = " ";
private static final ObjectMapper mapper = new ObjectMapper();
private static final Logger LOGGER = LoggerFactory.getLogger(FeedResponseDiagnostics.class);
private Map<String, QueryMetrics> queryMetricsMap;
private QueryInfo.QueryPlanDiagnosticsContext diagnosticsContext;
Expand Down Expand Up @@ -69,7 +71,7 @@ public String toString() {
try {
stringBuilder.append(QUERY_PLAN + SPACE + "RequestTimeline ")
.append(EQUALS)
.append(Utils.getSimpleObjectMapper().writeValueAsString(diagnosticsContext.getRequestTimeline()))
.append(mapper.writeValueAsString(diagnosticsContext.getRequestTimeline()))
.append(System.lineSeparator())
.append(System.lineSeparator());
} catch (JsonProcessingException e) {
Expand All @@ -87,7 +89,7 @@ public String toString() {
}
try {
stringBuilder
.append(Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatisticsList));
.append(mapper.writeValueAsString(clientSideRequestStatisticsList));
} catch (JsonProcessingException e) {
LOGGER.error("Error while parsing diagnostics ", e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.azure.cosmos.models.CosmosResponse;
import com.azure.cosmos.models.ModelBridgeInternal;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.HdrHistogram.ConcurrentDoubleHistogram;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -39,6 +40,7 @@
public class TracerProvider {
private Tracer tracer;
private static final Logger LOGGER = LoggerFactory.getLogger(TracerProvider.class);
private static final ObjectMapper mapper = new ObjectMapper();
private final static String JSON_STRING = "JSON";
public final static String DB_TYPE_VALUE = "Cosmos";
public final static String DB_TYPE = "db.type";
Expand Down Expand Up @@ -380,18 +382,18 @@ private void addDiagnosticsOnTracerEvent(CosmosDiagnostics cosmosDiagnostics, Co
for (ClientSideRequestStatistics.StoreResponseStatistics storeResponseStatistics :
clientSideRequestStatistics.getResponseStatisticsList()) {
attributes = new HashMap<>();
attributes.put(JSON_STRING, Utils.getSimpleObjectMapper().writeValueAsString(storeResponseStatistics));
attributes.put(JSON_STRING, mapper.writeValueAsString(storeResponseStatistics));
Iterator<RequestTimeline.Event> eventIterator = null;
try {
if (storeResponseStatistics.storeResult != null) {
if (storeResponseStatistics.getStoreResult() != null) {
eventIterator =
DirectBridgeInternal.getRequestTimeline(storeResponseStatistics.storeResult.toResponse()).iterator();
DirectBridgeInternal.getRequestTimeline(storeResponseStatistics.getStoreResult().toResponse()).iterator();
}
} catch (CosmosException ex) {
eventIterator = BridgeInternal.getRequestTimeline(ex).iterator();
}

OffsetDateTime requestStartTime = OffsetDateTime.ofInstant(storeResponseStatistics.requestResponseTimeUTC
OffsetDateTime requestStartTime = OffsetDateTime.ofInstant(storeResponseStatistics.getRequestResponseTimeUTC()
, ZoneOffset.UTC);
if (eventIterator != null) {
while (eventIterator.hasNext()) {
Expand All @@ -411,12 +413,12 @@ private void addDiagnosticsOnTracerEvent(CosmosDiagnostics cosmosDiagnostics, Co
for (ClientSideRequestStatistics.StoreResponseStatistics statistics :
ClientSideRequestStatistics.getCappedSupplementalResponseStatisticsList(clientSideRequestStatistics.getSupplementalResponseStatisticsList())) {
attributes = new HashMap<>();
attributes.put(JSON_STRING, Utils.getSimpleObjectMapper().writeValueAsString(statistics));
OffsetDateTime requestStartTime = OffsetDateTime.ofInstant(statistics.requestResponseTimeUTC,
attributes.put(JSON_STRING, mapper.writeValueAsString(statistics));
OffsetDateTime requestStartTime = OffsetDateTime.ofInstant(statistics.getRequestResponseTimeUTC(),
ZoneOffset.UTC);
if (statistics.storeResult != null) {
if (statistics.getStoreResult() != null) {
Iterator<RequestTimeline.Event> eventIterator =
DirectBridgeInternal.getRequestTimeline(statistics.storeResult.toResponse()).iterator();
DirectBridgeInternal.getRequestTimeline(statistics.getStoreResult().toResponse()).iterator();
while (eventIterator.hasNext()) {
RequestTimeline.Event event = eventIterator.next();
if (event.getName().equals("created")) {
Expand All @@ -432,12 +434,12 @@ private void addDiagnosticsOnTracerEvent(CosmosDiagnostics cosmosDiagnostics, Co
if (clientSideRequestStatistics.getGatewayStatistics() != null) {
attributes = new HashMap<>();
attributes.put(JSON_STRING,
Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatistics.getGatewayStatistics()));
mapper.writeValueAsString(clientSideRequestStatistics.getGatewayStatistics()));
OffsetDateTime requestStartTime =
OffsetDateTime.ofInstant(clientSideRequestStatistics.getRequestStartTimeUTC(), ZoneOffset.UTC);
if (clientSideRequestStatistics.getGatewayStatistics().requestTimeline != null) {
if (clientSideRequestStatistics.getGatewayStatistics().getRequestTimeline() != null) {
Iterator<RequestTimeline.Event> eventIterator =
clientSideRequestStatistics.getGatewayStatistics().requestTimeline.iterator();
clientSideRequestStatistics.getGatewayStatistics().getRequestTimeline().iterator();
while (eventIterator.hasNext()) {
RequestTimeline.Event event = eventIterator.next();
if (event.getName().equals("created")) {
Expand All @@ -453,7 +455,7 @@ private void addDiagnosticsOnTracerEvent(CosmosDiagnostics cosmosDiagnostics, Co
if (clientSideRequestStatistics.getRetryContext().getRetryStartTime() != null) {
attributes = new HashMap<>();
attributes.put(JSON_STRING,
Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatistics.getRetryContext()));
mapper.writeValueAsString(clientSideRequestStatistics.getRetryContext()));
this.addEvent("Retry Context", attributes,
OffsetDateTime.ofInstant(clientSideRequestStatistics.getRetryContext().getRetryStartTime(),
ZoneOffset.UTC), context);
Expand All @@ -464,17 +466,17 @@ private void addDiagnosticsOnTracerEvent(CosmosDiagnostics cosmosDiagnostics, Co
for (ClientSideRequestStatistics.AddressResolutionStatistics addressResolutionStatistics :
clientSideRequestStatistics.getAddressResolutionStatistics().values()) {
attributes = new HashMap<>();
attributes.put(JSON_STRING, Utils.getSimpleObjectMapper().writeValueAsString(addressResolutionStatistics));
attributes.put(JSON_STRING, mapper.writeValueAsString(addressResolutionStatistics));
this.addEvent("AddressResolutionStatistics" + diagnosticsCounter++, attributes,
OffsetDateTime.ofInstant(addressResolutionStatistics.startTimeUTC, ZoneOffset.UTC), context);
OffsetDateTime.ofInstant(addressResolutionStatistics.getStartTimeUTC(), ZoneOffset.UTC), context);
}

//adding serializationDiagnosticsContext
if (clientSideRequestStatistics.getSerializationDiagnosticsContext().serializationDiagnosticsList != null) {
for (SerializationDiagnosticsContext.SerializationDiagnostics serializationDiagnostics :
clientSideRequestStatistics.getSerializationDiagnosticsContext().serializationDiagnosticsList) {
attributes = new HashMap<>();
attributes.put(JSON_STRING, Utils.getSimpleObjectMapper().writeValueAsString(serializationDiagnostics));
attributes.put(JSON_STRING, mapper.writeValueAsString(serializationDiagnostics));
this.addEvent("SerializationDiagnostics " + serializationDiagnostics.serializationType, attributes,
OffsetDateTime.ofInstant(serializationDiagnostics.startTimeUTC, ZoneOffset.UTC), context);
}
Expand All @@ -483,22 +485,22 @@ private void addDiagnosticsOnTracerEvent(CosmosDiagnostics cosmosDiagnostics, Co
//adding systemInformation
attributes = new HashMap<>();
attributes.put(JSON_STRING,
Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatistics.getRegionsContacted()));
mapper.writeValueAsString(clientSideRequestStatistics.getRegionsContacted()));
this.addEvent("RegionContacted", attributes,
OffsetDateTime.ofInstant(clientSideRequestStatistics.getRequestStartTimeUTC(), ZoneOffset.UTC), context);


//adding systemInformation
attributes = new HashMap<>();
attributes.put(JSON_STRING,
Utils.getSimpleObjectMapper().writeValueAsString(ClientSideRequestStatistics.fetchSystemInformation()));
mapper.writeValueAsString(ClientSideRequestStatistics.fetchSystemInformation()));
this.addEvent("SystemInformation", attributes,
OffsetDateTime.ofInstant(clientSideRequestStatistics.getRequestStartTimeUTC(), ZoneOffset.UTC), context);

//adding clientCfgs
attributes = new HashMap<>();
attributes.put(JSON_STRING,
Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatistics.getDiagnosticsClientContext()));
mapper.writeValueAsString(clientSideRequestStatistics.getDiagnosticsClientContext()));
this.addEvent("ClientCfgs", attributes,
OffsetDateTime.ofInstant(clientSideRequestStatistics.getRequestStartTimeUTC(), ZoneOffset.UTC), context);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.azure.cosmos.implementation.query.QueryInfo;
import com.azure.cosmos.models.FeedResponse;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.HdrHistogram.ConcurrentDoubleHistogram;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -63,6 +64,7 @@
public final class CosmosPagedFlux<T> extends ContinuablePagedFlux<String, T, FeedResponse<T>> {

private static final Logger LOGGER = LoggerFactory.getLogger(CosmosPagedFlux.class);
private static final ObjectMapper mapper = new ObjectMapper();
private final Function<CosmosPagedFluxOptions, Flux<FeedResponse<T>>> optionsFluxFunction;

private final Consumer<FeedResponse<T>> feedResponseConsumer;
Expand Down Expand Up @@ -318,7 +320,7 @@ private void addDiagnosticsOnTracerEvent(TracerProvider tracerProvider, CosmosDi
cosmosDiagnosticsAccessor.getFeedResponseDiagnostics(cosmosDiagnostics).getQueryPlanDiagnosticsContext() : null;
if (queryPlanDiagnosticsContext != null) {
attributes.put("JSON",
Utils.getSimpleObjectMapper().writeValueAsString(queryPlanDiagnosticsContext));
mapper.writeValueAsString(queryPlanDiagnosticsContext));
tracerProvider.addEvent("Query Plan Statistics", attributes,
OffsetDateTime.ofInstant(queryPlanDiagnosticsContext.getStartTimeUTC(), ZoneOffset.UTC), parentContext);
}
Expand All @@ -342,29 +344,29 @@ private void addDiagnosticsOnTracerEvent(TracerProvider tracerProvider, CosmosDi
for (ClientSideRequestStatistics.StoreResponseStatistics statistics :
clientSideRequestStatistics.getResponseStatisticsList()) {
attributes.put("StoreResponse" + counter++,
Utils.getSimpleObjectMapper().writeValueAsString(statistics));
mapper.writeValueAsString(statistics));
}

//adding Supplemental StoreResponse
counter = 1;
for (ClientSideRequestStatistics.StoreResponseStatistics statistics :
ClientSideRequestStatistics.getCappedSupplementalResponseStatisticsList(clientSideRequestStatistics.getSupplementalResponseStatisticsList())) {
attributes.put("Supplemental StoreResponse" + counter++,
Utils.getSimpleObjectMapper().writeValueAsString(statistics));
mapper.writeValueAsString(statistics));
}

//adding retry context
if (clientSideRequestStatistics.getRetryContext().getRetryStartTime() != null) {
attributes.put("Retry Context",
Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatistics.getRetryContext()));
mapper.writeValueAsString(clientSideRequestStatistics.getRetryContext()));
}

//adding addressResolutionStatistics
counter = 1;
for (ClientSideRequestStatistics.AddressResolutionStatistics addressResolutionStatistics :
clientSideRequestStatistics.getAddressResolutionStatistics().values()) {
attributes.put("AddressResolutionStatistics" + counter++,
Utils.getSimpleObjectMapper().writeValueAsString(addressResolutionStatistics));
mapper.writeValueAsString(addressResolutionStatistics));
}

//adding serializationDiagnosticsContext
Expand All @@ -374,28 +376,28 @@ private void addDiagnosticsOnTracerEvent(TracerProvider tracerProvider, CosmosDi
clientSideRequestStatistics.getSerializationDiagnosticsContext().serializationDiagnosticsList) {
attributes = new HashMap<>();
attributes.put("SerializationDiagnostics" + counter++,
Utils.getSimpleObjectMapper().writeValueAsString(serializationDiagnostics));
mapper.writeValueAsString(serializationDiagnostics));
}
}

//adding gatewayStatistics
if(clientSideRequestStatistics.getGatewayStatistics() != null) {
attributes.put("GatewayStatistics",
Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatistics.getGatewayStatistics()));
mapper.writeValueAsString(clientSideRequestStatistics.getGatewayStatistics()));
}

//adding systemInformation
attributes.put("RegionContacted",
Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatistics.getRegionsContacted()));
mapper.writeValueAsString(clientSideRequestStatistics.getRegionsContacted()));


//adding systemInformation
attributes.put("SystemInformation",
Utils.getSimpleObjectMapper().writeValueAsString(ClientSideRequestStatistics.fetchSystemInformation()));
mapper.writeValueAsString(ClientSideRequestStatistics.fetchSystemInformation()));

//adding clientCfgs
attributes.put("ClientCfgs",
Utils.getSimpleObjectMapper().writeValueAsString(clientSideRequestStatistics.getDiagnosticsClientContext()));
mapper.writeValueAsString(clientSideRequestStatistics.getDiagnosticsClientContext()));

if (clientSideRequestStatistics.getResponseStatisticsList() != null && clientSideRequestStatistics.getResponseStatisticsList().size() > 0
&& clientSideRequestStatistics.getResponseStatisticsList().get(0).getStoreResult() != null) {
Expand Down