Skip to content

Commit 053a36f

Browse files
authored
Configuration to Disable APM Tracing (#8219)
What Does This Do Change Env var DD_EXPERIMENTAL_APPSEC_ENABLED = true for DD_APM_TRACING_ENABLED = false AsmStandaloneSampler should be use when APM tracing is disabled, so it's renamed to ApmTracingDisabledSampler Change _dd.p.appsec = 1 when there is an ASM event for a a two-character-long hex string _dd.p.ts
1 parent dcf73eb commit 053a36f

File tree

41 files changed

+438
-184
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+438
-184
lines changed

dd-java-agent/agent-iast/src/main/java/com/datadog/iast/Reporter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.datadog.iast.model.VulnerabilityBatch;
99
import com.datadog.iast.taint.TaintedObjects;
1010
import datadog.trace.api.Config;
11+
import datadog.trace.api.ProductTraceSource;
1112
import datadog.trace.api.gateway.RequestContext;
1213
import datadog.trace.api.gateway.RequestContextSlot;
1314
import datadog.trace.api.internal.TraceSegment;
@@ -125,7 +126,7 @@ private VulnerabilityBatch getOrCreateVulnerabilityBatch(final AgentSpan span) {
125126
// TODO: We need to check if we can have an API with more fine-grained semantics on why traces
126127
// are kept.
127128
segment.setTagTop(Tags.ASM_KEEP, true);
128-
segment.setTagTop(Tags.PROPAGATED_APPSEC, true);
129+
segment.setTagTop(Tags.PROPAGATED_TRACE_SOURCE, ProductTraceSource.ASM);
129130
return batch;
130131
}
131132

dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/ReporterTest.groovy

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.datadog.iast.model.Vulnerability
66
import com.datadog.iast.model.VulnerabilityBatch
77
import com.datadog.iast.model.VulnerabilityType
88
import datadog.trace.api.Config
9+
import datadog.trace.api.ProductTraceSource
910
import datadog.trace.api.gateway.RequestContext
1011
import datadog.trace.api.gateway.RequestContextSlot
1112
import datadog.trace.api.internal.TraceSegment
@@ -85,7 +86,7 @@ class ReporterTest extends DDSpecification {
8586
]
8687
}''', batch.toString(), true)
8788
1 * traceSegment.setTagTop('asm.keep', true)
88-
1 * traceSegment.setTagTop('_dd.p.appsec', true)
89+
1 * traceSegment.setTagTop('_dd.p.ts', ProductTraceSource.ASM)
8990
1 * reqCtx.getOrCreateMetaStructTop('_dd.stack', _) >> { stackTraceBatch }
9091
assertStackTrace(stackTraceBatch, v)
9192
0 * _
@@ -135,7 +136,7 @@ class ReporterTest extends DDSpecification {
135136
]
136137
}''', batch.toString(), true)
137138
1 * traceSegment.setTagTop('asm.keep', true)
138-
1 * traceSegment.setTagTop('_dd.p.appsec', true)
139+
1 * traceSegment.setTagTop('_dd.p.ts', ProductTraceSource.ASM)
139140
0 * _
140141
}
141142

@@ -206,7 +207,7 @@ class ReporterTest extends DDSpecification {
206207
]
207208
}''', batch.toString(), true)
208209
1 * traceSegment.setTagTop('asm.keep', true)
209-
1 * traceSegment.setTagTop('_dd.p.appsec', true)
210+
1 * traceSegment.setTagTop('_dd.p.ts', ProductTraceSource.ASM)
210211
assertStackTrace(stackTraceBatch, [v1, v2] as Vulnerability[])
211212
0 * _
212213
}
@@ -331,7 +332,7 @@ class ReporterTest extends DDSpecification {
331332
1 * traceSegment.getDataTop('iast') >> null
332333
1 * traceSegment.setDataTop('iast', _ as VulnerabilityBatch)
333334
1 * traceSegment.setTagTop('asm.keep', true)
334-
1 * traceSegment.setTagTop('_dd.p.appsec', true)
335+
1 * traceSegment.setTagTop('_dd.p.ts', ProductTraceSource.ASM)
335336
1 * traceSegment.setTagTop('_dd.iast.enabled', 1)
336337
1 * reqCtx.getOrCreateMetaStructTop('_dd.stack', _) >> new ConcurrentHashMap<>()
337338
0 * _

dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/GatewayBridge.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.datadog.appsec.report.AppSecEvent;
2828
import com.datadog.appsec.report.AppSecEventWrapper;
2929
import datadog.trace.api.Config;
30+
import datadog.trace.api.ProductTraceSource;
3031
import datadog.trace.api.UserIdCollectionMode;
3132
import datadog.trace.api.gateway.Events;
3233
import datadog.trace.api.gateway.Flow;
@@ -214,7 +215,7 @@ private Flow<Void> onUser(
214215

215216
// span with ASM data
216217
segment.setTagTop(Tags.ASM_KEEP, true);
217-
segment.setTagTop(Tags.PROPAGATED_APPSEC, true);
218+
segment.setTagTop(Tags.PROPAGATED_TRACE_SOURCE, ProductTraceSource.ASM);
218219

219220
// skip event if we have an SDK one
220221
if (mode != SDK) {
@@ -275,7 +276,7 @@ private Flow<Void> onLoginEvent(
275276

276277
// span with ASM data
277278
segment.setTagTop(Tags.ASM_KEEP, true);
278-
segment.setTagTop(Tags.PROPAGATED_APPSEC, true);
279+
segment.setTagTop(Tags.PROPAGATED_TRACE_SOURCE, ProductTraceSource.ASM);
279280

280281
// update span tags
281282
segment.setTagTop("appsec.events." + eventName + ".track", true, true);
@@ -789,7 +790,7 @@ private NoopFlow onRequestEnded(RequestContext ctx_, IGSpanInfo spanInfo) {
789790
if (!collectedEvents.isEmpty()) {
790791
// Set asm keep in case that root span was not available when events are detected
791792
traceSeg.setTagTop(Tags.ASM_KEEP, true);
792-
traceSeg.setTagTop(Tags.PROPAGATED_APPSEC, true);
793+
traceSeg.setTagTop(Tags.PROPAGATED_TRACE_SOURCE, ProductTraceSource.ASM);
793794
traceSeg.setTagTop("appsec.event", true);
794795
traceSeg.setTagTop("network.client.ip", ctx.getPeerAddress());
795796

dd-java-agent/appsec/src/main/java/com/datadog/appsec/powerwaf/PowerWAFModule.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import datadog.communication.monitor.Monitoring;
2727
import datadog.trace.api.Config;
2828
import datadog.trace.api.ProductActivation;
29+
import datadog.trace.api.ProductTraceSource;
2930
import datadog.trace.api.gateway.Flow;
3031
import datadog.trace.api.telemetry.LogCollector;
3132
import datadog.trace.api.telemetry.WafMetricCollector;
@@ -498,7 +499,9 @@ public void onDataAvailable(
498499
// If APM is disabled, inform downstream services that the current
499500
// distributed trace contains at least one ASM event and must inherit
500501
// the given force-keep priority
501-
activeSpan.getLocalRootSpan().setTag(Tags.PROPAGATED_APPSEC, true);
502+
activeSpan
503+
.getLocalRootSpan()
504+
.setTag(Tags.PROPAGATED_TRACE_SOURCE, ProductTraceSource.ASM);
502505
} else {
503506
// If active span is not available the ASK_KEEP tag will be set in the GatewayBridge
504507
// when the request ends

dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/gateway/GatewayBridgeSpecification.groovy

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.datadog.appsec.event.data.DataBundle
88
import com.datadog.appsec.event.data.KnownAddresses
99
import com.datadog.appsec.report.AppSecEvent
1010
import com.datadog.appsec.report.AppSecEventWrapper
11+
import datadog.trace.api.ProductTraceSource
1112
import datadog.trace.api.UserIdCollectionMode
1213
import datadog.trace.api.appsec.LoginEventCallback
1314
import datadog.trace.api.function.TriConsumer
@@ -1112,7 +1113,7 @@ class GatewayBridgeSpecification extends DDSpecification {
11121113
1 * traceSegment.setTagTop('appsec.events.users.signup.track', true, true)
11131114
1 * traceSegment.setTagTop('appsec.events.users.signup', ['key1': 'value1', 'key2': 'value2'], true)
11141115
1 * traceSegment.setTagTop('asm.keep', true)
1115-
1 * traceSegment.setTagTop('_dd.p.appsec', true)
1116+
1 * traceSegment.setTagTop('_dd.p.ts', ProductTraceSource.ASM)
11161117
1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { a, b, DataBundle db, GatewayContext gw ->
11171118
if (mode == SDK) {
11181119
assert db.get(KnownAddresses.USER_ID) == expectedUser
@@ -1151,7 +1152,7 @@ class GatewayBridgeSpecification extends DDSpecification {
11511152
1 * traceSegment.setTagTop('appsec.events.users.login.success.track', true, true)
11521153
1 * traceSegment.setTagTop('appsec.events.users.login.success', ['key1': 'value1', 'key2': 'value2'], true)
11531154
1 * traceSegment.setTagTop('asm.keep', true)
1154-
1 * traceSegment.setTagTop('_dd.p.appsec', true)
1155+
1 * traceSegment.setTagTop('_dd.p.ts', ProductTraceSource.ASM)
11551156
1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { a, b, DataBundle db, GatewayContext gw ->
11561157
if (mode == SDK) {
11571158
assert db.get(KnownAddresses.USER_ID) == expectedUser
@@ -1192,7 +1193,7 @@ class GatewayBridgeSpecification extends DDSpecification {
11921193
1 * traceSegment.setTagTop('appsec.events.users.login.failure.usr.exists', false, true)
11931194
1 * traceSegment.setTagTop('appsec.events.users.login.failure', ['key1': 'value1', 'key2': 'value2'], true)
11941195
1 * traceSegment.setTagTop('asm.keep', true)
1195-
1 * traceSegment.setTagTop('_dd.p.appsec', true)
1196+
1 * traceSegment.setTagTop('_dd.p.ts', ProductTraceSource.ASM)
11961197
1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { a, b, DataBundle db, GatewayContext gw ->
11971198
if (mode == SDK) {
11981199
assert db.get(KnownAddresses.USER_ID) == expectedUser
@@ -1221,7 +1222,7 @@ class GatewayBridgeSpecification extends DDSpecification {
12211222
1 * traceSegment.setTagTop('appsec.events.my.event.track', true, true)
12221223
1 * traceSegment.setTagTop('appsec.events.my.event', ['key1': 'value1', 'key2': 'value2'], true)
12231224
1 * traceSegment.setTagTop('asm.keep', true)
1224-
1 * traceSegment.setTagTop('_dd.p.appsec', true)
1225+
1 * traceSegment.setTagTop('_dd.p.ts', ProductTraceSource.ASM)
12251226
0 * eventDispatcher.publishDataEvent
12261227
}
12271228
File renamed without changes.
File renamed without changes.

dd-smoke-tests/asm-standalone-billing/src/main/java/datadog/smoketest/asmstandalonebilling/AppConfig.java renamed to dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/AppConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package datadog.smoketest.asmstandalonebilling;
1+
package datadog.smoketest.apmtracingdisabled;
22

33
import java.util.EnumSet;
44
import javax.servlet.ServletContext;

dd-smoke-tests/asm-standalone-billing/src/main/java/datadog/smoketest/asmstandalonebilling/Controller.java renamed to dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package datadog.smoketest.asmstandalonebilling;
1+
package datadog.smoketest.apmtracingdisabled;
22

33
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
44
import io.opentracing.Span;

dd-smoke-tests/asm-standalone-billing/src/main/java/datadog/smoketest/asmstandalonebilling/SpringbootApplication.java renamed to dd-smoke-tests/apm-tracing-disabled/src/main/java/datadog/smoketest/apmtracingdisabled/SpringbootApplication.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package datadog.smoketest.asmstandalonebilling;
1+
package datadog.smoketest.apmtracingdisabled;
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;

0 commit comments

Comments
 (0)