Skip to content

Commit

Permalink
enableQueryStatement - add options choose between printing none, para…
Browse files Browse the repository at this point in the history
…meterized or all queries statement
  • Loading branch information
JJ-WM committed May 17, 2024
1 parent 8fc51aa commit 602a5bf
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.azure.cosmos.implementation.apachecommons.lang.StringUtils;
import com.azure.cosmos.implementation.batch.BatchExecutor;
import com.azure.cosmos.implementation.batch.BulkExecutor;
import com.azure.cosmos.implementation.clienttelemetry.ShowQueryOptions;
import com.azure.cosmos.implementation.faultinjection.IFaultInjectorProvider;
import com.azure.cosmos.implementation.feedranges.FeedRangeEpkImpl;
import com.azure.cosmos.implementation.feedranges.FeedRangeInternal;
Expand Down Expand Up @@ -108,6 +109,9 @@ public class CosmosAsyncContainer {
private static final ImplementationBridgeHelpers.CosmosReadManyRequestOptionsHelper.CosmosReadManyRequestOptionsAccessor readManyOptionsAccessor =
ImplementationBridgeHelpers.CosmosReadManyRequestOptionsHelper.getCosmosReadManyRequestOptionsAccessor();

private static final ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.CosmosClientTelemetryConfigAccessor clientTelemetryConfigAccessor =
ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.getCosmosClientTelemetryConfigAccessor();

private final CosmosAsyncDatabase database;
private final String id;
private final String link;
Expand Down Expand Up @@ -959,7 +963,17 @@ <T> Function<CosmosPagedFluxOptions, Flux<FeedResponse<T>>> queryItemsInternalFu
Function<CosmosPagedFluxOptions, Flux<FeedResponse<T>>> pagedFluxOptionsFluxFunction = (pagedFluxOptions -> {
String spanName = this.queryItemsSpanName;

pagedFluxOptions.setQueryText(sqlQuerySpec.getQueryText());
ShowQueryOptions showQueryOptions = clientTelemetryConfigAccessor.showQueryOptions(client.getClientTelemetryConfig());

if (ShowQueryOptions.PARAMETERIZED_ONLY.equals(showQueryOptions)
&& sqlQuerySpec.getParameters() != null
&& sqlQuerySpec.getParameters().size() > 0) {

pagedFluxOptions.setQueryText(sqlQuerySpec.getQueryText());
} else if (ShowQueryOptions.PARAMETERIZED_AND_NON_PARAMETERIZED.equals(showQueryOptions)) {

pagedFluxOptions.setQueryText(sqlQuerySpec.getQueryText());
}

QueryFeedOperationState state = new QueryFeedOperationState(
client,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.azure.cosmos.CosmosDiagnosticsHandler;
import com.azure.cosmos.CosmosDiagnosticsThresholds;
import com.azure.cosmos.CosmosException;
import com.azure.cosmos.implementation.clienttelemetry.ShowQueryOptions;
import com.azure.cosmos.implementation.directconnectivity.StoreResponseDiagnostics;
import com.azure.cosmos.implementation.directconnectivity.StoreResultDiagnostics;
import com.azure.cosmos.implementation.guava25.base.Splitter;
Expand Down Expand Up @@ -1166,7 +1167,11 @@ private boolean isTransportLevelTracingEnabled() {
}

private boolean showQueryStatement() {
return clientTelemetryConfigAccessor.showQueryStatement(this.config);
if(ShowQueryOptions.PARAMETERIZED_AND_NON_PARAMETERIZED.equals(clientTelemetryConfigAccessor.showQueryOptions(this.config))
|| ShowQueryOptions.PARAMETERIZED_ONLY.equals(clientTelemetryConfigAccessor.showQueryOptions(this.config))) {
return true;
}
return false;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
import com.azure.cosmos.implementation.clienttelemetry.CosmosMeterOptions;
import com.azure.cosmos.implementation.clienttelemetry.MetricCategory;
import com.azure.cosmos.implementation.clienttelemetry.ShowQueryOptions;
import com.azure.cosmos.implementation.clienttelemetry.TagName;
import com.azure.cosmos.implementation.directconnectivity.ContainerDirectConnectionMetadata;
import com.azure.cosmos.implementation.directconnectivity.Uri;
Expand Down Expand Up @@ -1492,7 +1493,7 @@ CosmosClientTelemetryConfig createSnapshot(
void setUseLegacyTracing(CosmosClientTelemetryConfig config, boolean useLegacyTracing);
void setTracer(CosmosClientTelemetryConfig config, Tracer tracer);
double getSamplingRate(CosmosClientTelemetryConfig config);
boolean showQueryStatement(CosmosClientTelemetryConfig config);
ShowQueryOptions showQueryOptions(CosmosClientTelemetryConfig config);
double[] getDefaultPercentiles(CosmosClientTelemetryConfig config);
boolean shouldPublishHistograms(CosmosClientTelemetryConfig config);
boolean shouldApplyDiagnosticThresholdsForTransportLevelMeters(CosmosClientTelemetryConfig config);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ public final class TestConfigurations {
private static Logger logger = LoggerFactory.getLogger(TestConfigurations.class);
private static Properties properties = loadProperties();

private final static String COSMOS_EMULATOR_KEY = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
private final static String COSMOS_EMULATOR_HOST = "https://localhost:8081/";
private final static String COSMOS_EMULATOR_KEY = "stI1DY1IdwzckdUah4NtHqzKcelHoPLa8aygpYKzsxXic5Dh9RTfIOCJux7xdoZ0hL8mjqWwcUJcACDbrbXRfg==";
private final static String COSMOS_EMULATOR_HOST = "https://cosmos-sdk-dev-stage-cosmos.documents.azure.com:443/";

// REPLACE MASTER_KEY and HOST with values from your Azure Cosmos DB account.
// The default values are credentials of the local emulator, which are not used in any production environment.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.azure.cosmos.implementation.clienttelemetry;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonValue;

public enum ShowQueryOptions {

/**
* Do not show query.
*/
NONE("None"),

/**
* Show query parameters only.
*/
PARAMETERIZED_ONLY("ParameterizedOnly"),

/**
* Show query parameters and non parameters
*/
PARAMETERIZED_AND_NON_PARAMETERIZED("ParameterizedAndNonParameterized");

private static Map<String, ShowQueryOptions> showQueryOptionsHashMap = new HashMap<>();

static {
for(ShowQueryOptions showQueryOptions : ShowQueryOptions.values()) {
showQueryOptionsHashMap.put(showQueryOptions.toString(), showQueryOptions);
}
}
private final String value;

ShowQueryOptions(String value) {
this.value = value;
}

static ShowQueryOptions fromServiceSerializedFormat(String showQueryOptions) {
return showQueryOptionsHashMap.get(showQueryOptions);
}

@JsonValue
@Override
public String toString() {
return this.value;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
import com.azure.cosmos.implementation.clienttelemetry.CosmosMeterOptions;
import com.azure.cosmos.implementation.clienttelemetry.MetricCategory;
import com.azure.cosmos.implementation.clienttelemetry.ShowQueryOptions;
import com.azure.cosmos.implementation.clienttelemetry.TagName;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
Expand Down Expand Up @@ -75,7 +76,7 @@ public final class CosmosClientTelemetryConfig {

private double samplingRate;

private boolean showQueryStatement = false;
private ShowQueryOptions showQueryOptions = ShowQueryOptions.NONE;

/**
* Instantiates a new Cosmos client telemetry configuration.
Expand Down Expand Up @@ -399,12 +400,13 @@ public CosmosClientTelemetryConfig enableTransportLevelTracing() {

/**
* Enables printing query in db.statement attribute. By default, query is not printed.
* Users have to option to enable it, but has to beware customer data may be shown.
* It's the user's responsiblity to sanitize the query if necessary.
* Users have the option to enable printing parameterized or both parameterized and non-parameterized queries,
* but has to beware that customer data may be shown when the later option is chosen
* It's the user's responsibility to sanitize the queries if necessary.
* @return current CosmosClientTelemetryConfig
*/
public CosmosClientTelemetryConfig showQueryStatement() {
this.showQueryStatement = true;
public CosmosClientTelemetryConfig showQueryOptions(ShowQueryOptions showQueryOptions) {
this.showQueryOptions = showQueryOptions;
return this;
}

Expand Down Expand Up @@ -450,7 +452,7 @@ public String toString() {
", clientTelemetryEnabled=" + this.effectiveIsClientTelemetryEnabled +
", clientMetricsEnabled=" + this.isClientMetricsEnabled +
", transportLevelTracingEnabled=" + this.isTransportLevelTracingEnabled +
", showQueryStatement=" + this.showQueryStatement +
", showQueryOptions=" + this.showQueryOptions +
", customTracerProvided=" + (this.tracer != null) +
", customDiagnosticHandlers=" + handlers +
"}";
Expand Down Expand Up @@ -676,8 +678,8 @@ public double getSamplingRate(CosmosClientTelemetryConfig config) {
}

@Override
public boolean showQueryStatement(CosmosClientTelemetryConfig config) {
return config.showQueryStatement;
public ShowQueryOptions showQueryOptions(CosmosClientTelemetryConfig config) {
return config.showQueryOptions;
}

@Override
Expand Down

0 comments on commit 602a5bf

Please sign in to comment.