Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
7f8721d
inject step functions trace context
DylanLovesCoffee Sep 5, 2024
a974597
Merge branch 'master' into dylan/sfn-trace-ctx
DylanLovesCoffee Sep 9, 2024
7ecfa8c
remove previous logic
DylanLovesCoffee Sep 13, 2024
fa36832
aws sfn instrumentation
DylanLovesCoffee Sep 16, 2024
22c652b
Merge branch 'master' into dylan/sfn-trace-ctx
DylanLovesCoffee Sep 16, 2024
eb642b0
muzzle
DylanLovesCoffee Sep 16, 2024
0778f3d
single char
DylanLovesCoffee Sep 17, 2024
f9d0eea
Merge branch 'master' into dylan/sfn-trace-ctx
DylanLovesCoffee Oct 8, 2024
421856b
update muzzle
DylanLovesCoffee Oct 8, 2024
895341a
refactor input attr injector
DylanLovesCoffee Oct 8, 2024
9d76dec
refactor interceptor
DylanLovesCoffee Oct 9, 2024
aba1119
cleanup test
DylanLovesCoffee Oct 9, 2024
e56f2d3
Merge branch 'master' into dylan/sfn-trace-ctx
DylanLovesCoffee Oct 23, 2024
3039780
Merge branch 'master' into dylan/sfn-trace-ctx
DylanLovesCoffee Oct 23, 2024
370df6d
use JsonBuffer
DylanLovesCoffee Oct 24, 2024
a644a8b
catch exceptions
DylanLovesCoffee Oct 24, 2024
fc6e570
Merge branch 'master' into dylan/sfn-trace-ctx
nhulston Dec 3, 2024
ee83940
Merge branch 'master' into dylan/sfn-trace-ctx
nhulston Feb 6, 2025
973cd79
add build.gradle comment
nhulston Feb 6, 2025
96f7f39
fix SfnClientInstrumentation class header
nhulston Feb 6, 2025
fdb01a2
update InputAttributeInjector to use `datadog.json` component https:/…
nhulston Feb 6, 2025
8417f6e
fix injection
nhulston Feb 6, 2025
0aac239
test edge cases
nhulston Feb 6, 2025
2992508
Merge branch 'master' into dylan/sfn-trace-ctx
nhulston Feb 7, 2025
da7af0b
Merge branch 'master' into dylan/sfn-trace-ctx
nhulston Feb 10, 2025
ca13195
improve `getModifiedInput`
nhulston Feb 11, 2025
2d4507d
test that tracer does not error on invalid json input
nhulston Feb 11, 2025
29a651c
Merge branch 'master' into dylan/sfn-trace-ctx
nhulston Feb 11, 2025
a434846
Merge branch 'master' into dylan/sfn-trace-ctx
nhulston Feb 12, 2025
1197c1d
don't throw, just return request
nhulston Feb 12, 2025
0f304c7
Merge branch 'master' into dylan/sfn-trace-ctx
nhulston Feb 18, 2025
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 @@ -6,6 +6,9 @@
import static datadog.trace.core.datastreams.TagsProcessor.TOPIC_TAG;
import static datadog.trace.core.datastreams.TagsProcessor.TYPE_TAG;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import datadog.trace.api.Config;
import datadog.trace.api.DDTags;
import datadog.trace.api.cache.DDCache;
Expand All @@ -23,6 +26,8 @@
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator;
import datadog.trace.core.datastreams.TagsProcessor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URI;
import java.time.Instant;
import java.util.Collections;
Expand Down Expand Up @@ -398,6 +403,37 @@ public AgentSpan onSdkResponse(
return span;
}

public static void injectTraceToStepFunctionInput(SdkRequest request, AgentSpan span) {
Class<?> clazz = request.getClass();
if ((clazz.getSimpleName().equals("StartExecutionRequest"))
|| clazz.getSimpleName().equals("StartSyncExecutionRequest")) {
try {
Method method = clazz.getMethod("input");
String input = (String) method.invoke(request);

ObjectMapper mapper = new ObjectMapper();
JsonNode inputJsonNode = mapper.readTree(input);
if (inputJsonNode.isObject()) {
ObjectNode traceContext = mapper.createObjectNode();
traceContext.put("x-datadog-trace-id", span.getTraceId().toString());
traceContext.put("x-datadog-parent-id", String.valueOf(span.getSpanId()));
traceContext.put("x-datadog-sampling-priority", span.getSamplingPriority().toString());
traceContext.put("x-datadog-tags", mapper.writeValueAsString(span.getTags()));

ObjectNode ddInputNode = (ObjectNode) inputJsonNode;
ddInputNode.put("_datadog", traceContext);
}

Field inputField = clazz.getDeclaredField("input");
inputField.setAccessible(true);
inputField.set(request, mapper.writeValueAsString(inputJsonNode));

} catch (Throwable e) {
// Failed to inject trace context
}
}
}

@Override
protected String[] instrumentationNames() {
return new String[] {"aws-sdk"};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,18 @@ public void afterMarshalling(
}
}

@Override
public SdkRequest modifyRequest(
Context.ModifyRequest context, ExecutionAttributes executionAttributes) {
SdkRequest sdkRequest = context.request();
final AgentSpan span = executionAttributes.getAttribute(SPAN_ATTRIBUTE);
if (span != null) {
DECORATE.injectTraceToStepFunctionInput(sdkRequest, span);
}

return sdkRequest;
}

@Override
public SdkHttpRequest modifyHttpRequest(
Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) {
Expand Down