Skip to content

Commit c229a7d

Browse files
Copilottrask
andcommitted
Add configuration and test for JDBC query parameters capture
Co-authored-by: trask <[email protected]>
1 parent d1e1338 commit c229a7d

File tree

4 files changed

+57
-0
lines changed

4 files changed

+57
-0
lines changed

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/Configuration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ public static class Instrumentation {
233233
public static class DatabaseInstrumentationWithMasking {
234234
public boolean enabled = true;
235235
public DatabaseMaskingConfiguration masking = new DatabaseMaskingConfiguration();
236+
public boolean captureQueryParameters = false;
236237
}
237238

238239
public static class DatabaseMaskingConfiguration {

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ private static void enableInstrumentations(
234234
if (!config.instrumentation.jdbc.masking.enabled) {
235235
properties.put("otel.instrumentation.jdbc.statement-sanitizer.enabled", "false");
236236
}
237+
if (config.instrumentation.jdbc.captureQueryParameters) {
238+
properties.put("otel.instrumentation.jdbc.capture-query-parameters", "true");
239+
}
237240
}
238241
if (config.instrumentation.jms.enabled) {
239242
properties.put("otel.instrumentation.jms.enabled", "true");
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.microsoft.applicationinsights.smoketest;
5+
6+
import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8;
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
import static org.assertj.core.data.MapEntry.entry;
9+
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.extension.RegisterExtension;
12+
13+
@Environment(TOMCAT_8_JAVA_8)
14+
@UseAgent("query_parameters_applicationinsights.json")
15+
class JdbcQueryParametersTest {
16+
17+
@RegisterExtension static final SmokeTestExtension testing = SmokeTestExtension.create();
18+
19+
@Test
20+
@TargetUri("/hsqldbPreparedStatement")
21+
void hsqldbPreparedStatementCapturesQueryParameters() throws Exception {
22+
Telemetry telemetry = testing.getTelemetry(1);
23+
24+
assertThat(telemetry.rd.getProperties())
25+
.containsExactly(entry("_MS.ProcessedByMetricExtractors", "True"));
26+
assertThat(telemetry.rd.getSuccess()).isTrue();
27+
28+
assertThat(telemetry.rdd1.getName()).isEqualTo("SELECT testdb.abc");
29+
assertThat(telemetry.rdd1.getData()).isEqualTo("select * from abc where xyz = ?");
30+
assertThat(telemetry.rdd1.getType()).isEqualTo("SQL");
31+
assertThat(telemetry.rdd1.getTarget()).isEqualTo("hsqldb | testdb");
32+
// Query parameters should be captured when captureQueryParameters is enabled
33+
assertThat(telemetry.rdd1.getProperties()).containsEntry("db.query.parameter.0", "y");
34+
assertThat(telemetry.rdd1.getSuccess()).isTrue();
35+
36+
SmokeTestExtension.assertParentChild(
37+
telemetry.rd, telemetry.rdEnvelope, telemetry.rddEnvelope1, "GET /Jdbc/*");
38+
}
39+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"role": {
3+
"name": "testrolename",
4+
"instance": "testroleinstance"
5+
},
6+
"sampling": {
7+
"percentage": 100
8+
},
9+
"instrumentation": {
10+
"jdbc": {
11+
"captureQueryParameters": true
12+
}
13+
}
14+
}

0 commit comments

Comments
 (0)