Skip to content

Commit dfd6171

Browse files
committed
Set sampling decision maker for AI Guard
1 parent d7515c8 commit dfd6171

5 files changed

Lines changed: 15 additions & 4 deletions

File tree

dd-java-agent/agent-aiguard/src/main/java/com/datadog/aiguard/AIGuardInternal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import com.squareup.moshi.Types;
1313
import datadog.communication.http.OkHttpUtils;
1414
import datadog.trace.api.Config;
15-
import datadog.trace.api.DDTags;
1615
import datadog.trace.api.aiguard.AIGuard;
1716
import datadog.trace.api.aiguard.AIGuard.AIGuardAbortError;
1817
import datadog.trace.api.aiguard.AIGuard.AIGuardClientError;
@@ -29,6 +28,7 @@
2928
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
3029
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
3130
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
31+
import datadog.trace.bootstrap.instrumentation.api.Tags;
3232
import java.io.IOException;
3333
import java.lang.annotation.Annotation;
3434
import java.lang.reflect.Type;
@@ -221,7 +221,7 @@ public Evaluation evaluate(final List<Message> messages, final Options options)
221221
final AgentSpan span = builder.start();
222222
final AgentSpan localRootSpan = span.getLocalRootSpan();
223223
if (localRootSpan != null) {
224-
localRootSpan.setTag(DDTags.MANUAL_KEEP, true);
224+
localRootSpan.setTag(Tags.AI_GUARD_KEEP, true);
225225
}
226226
try (final AgentScope scope = tracer.activateSpan(span)) {
227227
final Message last = messages.get(messages.size() - 1);

dd-java-agent/agent-aiguard/src/test/groovy/com/datadog/aiguard/AIGuardInternalTests.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategies
66
import com.squareup.moshi.Moshi
77
import datadog.common.version.VersionInfo
88
import datadog.trace.api.Config
9-
import datadog.trace.api.DDTags
109
import datadog.trace.api.aiguard.AIGuard
1110
import datadog.trace.api.telemetry.WafMetricCollector
1211
import datadog.trace.bootstrap.instrumentation.api.AgentSpan
1312
import datadog.trace.bootstrap.instrumentation.api.AgentTracer
13+
import datadog.trace.bootstrap.instrumentation.api.Tags
1414
import datadog.trace.test.util.DDSpecification
1515
import okhttp3.Call
1616
import okhttp3.HttpUrl
@@ -189,7 +189,7 @@ class AIGuardInternalTests extends DDSpecification {
189189

190190
then:
191191
1 * span.setTag(AIGuardInternal.TARGET_TAG, suite.target)
192-
1 * localRootSpan.setTag(DDTags.MANUAL_KEEP, true)
192+
1 * localRootSpan.setTag(Tags.AI_GUARD_KEEP, true)
193193
if (suite.target == 'tool') {
194194
1 * span.setTag(AIGuardInternal.TOOL_TAG, 'calc')
195195
}

dd-trace-core/src/main/java/datadog/trace/core/taginterceptor/TagInterceptor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public boolean needsIntercept(String tag) {
108108
case DDTags.MANUAL_KEEP:
109109
case DDTags.MANUAL_DROP:
110110
case Tags.ASM_KEEP:
111+
case Tags.AI_GUARD_KEEP:
111112
case Tags.SAMPLING_PRIORITY:
112113
case Tags.PROPAGATED_TRACE_SOURCE:
113114
case Tags.PROPAGATED_DEBUG:
@@ -155,6 +156,12 @@ public boolean interceptTag(DDSpanContext span, String tag, Object value) {
155156
return true;
156157
}
157158
return false;
159+
case Tags.AI_GUARD_KEEP:
160+
if (asBoolean(value)) {
161+
span.forceKeep(SamplingMechanism.AI_GUARD);
162+
return true;
163+
}
164+
return false;
158165
case Tags.SAMPLING_PRIORITY:
159166
return interceptSamplingPriority(span, value);
160167
case Tags.PROPAGATED_TRACE_SOURCE:

internal-api/src/main/java/datadog/trace/api/sampling/SamplingMechanism.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class SamplingMechanism {
3737

3838
public static final byte REMOTE_USER_RULE = 11;
3939
public static final byte REMOTE_ADAPTIVE_RULE = 12;
40+
public static final byte AI_GUARD = 13;
4041

4142
/** Force override sampling decision from external source, like W3C traceparent. */
4243
public static final byte EXTERNAL_OVERRIDE = Byte.MIN_VALUE;

internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Tags.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ public class Tags {
167167
/** ASM force tracer to keep the trace */
168168
public static final String ASM_KEEP = "asm.keep";
169169

170+
/** AI Guard force tracer to keep the trace */
171+
public static final String AI_GUARD_KEEP = "ai_guard.keep";
172+
170173
public static final String PROPAGATED_TRACE_SOURCE = "_dd.p.ts";
171174
public static final String PROPAGATED_DEBUG = "_dd.p.debug";
172175

0 commit comments

Comments
 (0)