Skip to content

Commit 56175c8

Browse files
authored
Added sample trace scripts (#427)
2 parents 7f7015c + 4fa2278 commit 56175c8

File tree

2 files changed

+678
-0
lines changed

2 files changed

+678
-0
lines changed
Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
#!/bin/bash
2+
3+
# Generate realistic Digma test trace with observability operations
4+
# Digma test runner and analysis operations
5+
6+
# Configuration (endpoint is required)
7+
COLLECTOR_ENDPOINT="$1"
8+
9+
if [ -z "$COLLECTOR_ENDPOINT" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
10+
echo "Usage: $0 <COLLECTOR_ENDPOINT>"
11+
echo " COLLECTOR_ENDPOINT: Collector intake URL (e.g. https://your-host/v0.4/traces)"
12+
echo "Example: $0 https://collector.example.com/v0.4/traces"
13+
exit 1
14+
fi
15+
16+
# Generate random hex values (Windows compatible)
17+
TRACE_ID=$(printf "%032x" $((RANDOM * RANDOM * RANDOM * RANDOM)))
18+
PARENT_SPAN_ID=$(printf "%016x" $((RANDOM * RANDOM * RANDOM + 1)))
19+
HANDLER_SPAN_ID=$(printf "%016x" $((RANDOM * RANDOM * RANDOM + 2)))
20+
RENDER_SPAN_ID=$(printf "%016x" $((RANDOM * RANDOM * RANDOM + 3)))
21+
REPO_SPAN_ID=$(printf "%016x" $((RANDOM * RANDOM * RANDOM + 4)))
22+
SQL_SPAN_ID=$(printf "%016x" $((RANDOM * RANDOM * RANDOM + 5)))
23+
24+
# Convert to decimal for Datadog format
25+
TRACE_ID_DECIMAL=$((0x${TRACE_ID: -14}))
26+
PARENT_SPAN_ID_DECIMAL=$((0x$PARENT_SPAN_ID))
27+
HANDLER_SPAN_ID_DECIMAL=$((0x$HANDLER_SPAN_ID))
28+
RENDER_SPAN_ID_DECIMAL=$((0x$RENDER_SPAN_ID))
29+
REPO_SPAN_ID_DECIMAL=$((0x$REPO_SPAN_ID))
30+
SQL_SPAN_ID_DECIMAL=$((0x$SQL_SPAN_ID))
31+
32+
# Realistic timing for web service with SQL
33+
START_TIME=$(date +%s)000000000
34+
PARENT_END_TIME=$((START_TIME + 245000000)) # ~245ms total
35+
HANDLER_START_TIME=$((START_TIME + 800000)) # Start 0.8ms after parent
36+
HANDLER_END_TIME=$((HANDLER_START_TIME + 240000000)) # ~240ms duration
37+
REPO_START_TIME=$((HANDLER_START_TIME + 5000000)) # Start 5ms into handler
38+
REPO_END_TIME=$((REPO_START_TIME + 230000000)) # ~230ms duration
39+
SQL_START_TIME=$((REPO_START_TIME + 2000000)) # Start 2ms into repo
40+
SQL_END_TIME=$((SQL_START_TIME + 225000000)) # ~225ms duration (most of the time)
41+
RENDER_START_TIME=$((REPO_END_TIME + 500000)) # Start just after repo
42+
RENDER_END_TIME=$((RENDER_START_TIME + 3500000)) # ~3.5ms duration
43+
44+
echo "Generating realistic Digma test trace..."
45+
echo "Trace ID: $TRACE_ID"
46+
echo "Simulating: POST /api/digma/test/analyze-datadog request"
47+
48+
# Create the JSON payload for Datadog v0.4 intake
49+
DATADOG_JSON=$(cat <<EOF
50+
[
51+
[
52+
{
53+
"trace_id": $TRACE_ID_DECIMAL,
54+
"span_id": $PARENT_SPAN_ID_DECIMAL,
55+
"name": "servlet.request",
56+
"service": "digma-test-service",
57+
"resource": "POST /api/digma/test/analyze-datadog",
58+
"type": "web",
59+
"start": $START_TIME,
60+
"duration": $((PARENT_END_TIME - START_TIME)),
61+
"error": 0,
62+
"meta": {
63+
"dd.span.Resource": "POST /api/digma/test/analyze-datadog",
64+
"datadog.span.id": "$PARENT_SPAN_ID_DECIMAL",
65+
"datadog.trace.id": "$TRACE_ID_DECIMAL",
66+
"http.status_code": "200",
67+
"_dd.p.tid": "689a50f300000000",
68+
"servlet.context": "/api",
69+
"http.url": "http://localhost:8080/api/digma/test/analyze-datadog",
70+
"http.route": "/api/digma/test/analyze-datadog",
71+
"thread.name": "http-nio-8080-exec-3",
72+
"http.method": "POST",
73+
"deployment.environment": "agentic-dev",
74+
"servlet.path": "/api/digma/test/analyze-datadog",
75+
"span.kind": "server",
76+
"_dd.p.dm": "-1",
77+
"digma.environment.type": "Public",
78+
"http.useragent": "Digma-Test-Runner/1.0",
79+
"peer.ipv4": "127.0.0.1",
80+
"http.hostname": "localhost",
81+
"language": "jvm",
82+
"component": "tomcat-server",
83+
"digma.environment": "AGENTIC-DEV",
84+
"runtime-id": "66225a4d-6890-4329-8c86-02baebfe779c",
85+
"_dd.base_service": "digma-test-service",
86+
"_dd.tags.container": "service:digma-test-service,kube_service:digma-test-service,kube_deployment:digma-test-service,image_name:openjdk,image_tag:17-jre-slim"
87+
}
88+
},
89+
{
90+
"trace_id": $TRACE_ID_DECIMAL,
91+
"span_id": $HANDLER_SPAN_ID_DECIMAL,
92+
"parent_id": $PARENT_SPAN_ID_DECIMAL,
93+
"name": "spring.handler",
94+
"service": "digma-test-service",
95+
"resource": "TestController.analyzeTest",
96+
"type": "web",
97+
"start": $HANDLER_START_TIME,
98+
"duration": $((HANDLER_END_TIME - HANDLER_START_TIME)),
99+
"error": 0,
100+
"meta": {
101+
"dd.span.Resource": "TestController.analyzeTest",
102+
"datadog.span.id": "$HANDLER_SPAN_ID_DECIMAL",
103+
"datadog.trace.id": "$TRACE_ID_DECIMAL",
104+
"digma.environment.type": "Public",
105+
"thread.name": "http-nio-8080-exec-3",
106+
"_dd.p.tid": "689a50f300000000",
107+
"span.kind": "server",
108+
"digma.environment": "AGENTIC-DEV",
109+
"deployment.environment": "agentic-dev",
110+
"component": "spring-web-controller",
111+
"language": "jvm",
112+
"_dd.base_service": "digma-test-service"
113+
}
114+
},
115+
{
116+
"trace_id": $TRACE_ID_DECIMAL,
117+
"span_id": $REPO_SPAN_ID_DECIMAL,
118+
"parent_id": $HANDLER_SPAN_ID_DECIMAL,
119+
"name": "repository.operation",
120+
"service": "digma-test-service",
121+
"resource": "TestResultRepository.saveTestData",
122+
"type": "custom",
123+
"start": $REPO_START_TIME,
124+
"duration": $((REPO_END_TIME - REPO_START_TIME)),
125+
"error": 0,
126+
"meta": {
127+
"dd.span.Resource": "TestResultRepository.saveTestData",
128+
"datadog.span.id": "$REPO_SPAN_ID_DECIMAL",
129+
"datadog.trace.id": "$TRACE_ID_DECIMAL",
130+
"digma.environment": "AGENTIC-DEV",
131+
"deployment.environment": "agentic-dev",
132+
"component": "spring-data",
133+
"digma.environment.type": "Public",
134+
"thread.name": "http-nio-8080-exec-3",
135+
"_dd.p.tid": "689a50f300000000",
136+
"span.kind": "client",
137+
"_dd.base_service": "digma-test-service"
138+
}
139+
},
140+
{
141+
"trace_id": $TRACE_ID_DECIMAL,
142+
"span_id": $SQL_SPAN_ID_DECIMAL,
143+
"parent_id": $REPO_SPAN_ID_DECIMAL,
144+
"name": "postgresql.query",
145+
"service": "digma-test-service",
146+
"resource": "INSERT INTO test_results (test_id, status, metrics) VALUES (?, ?, ?)",
147+
"type": "sql",
148+
"start": $SQL_START_TIME,
149+
"duration": $((SQL_END_TIME - SQL_START_TIME)),
150+
"error": 0,
151+
"meta": {
152+
"dd.span.Resource": "INSERT INTO test_results (test_id, status, metrics) VALUES (?, ?, ?)",
153+
"datadog.span.id": "$SQL_SPAN_ID_DECIMAL",
154+
"datadog.trace.id": "$TRACE_ID_DECIMAL",
155+
"db.statement": "INSERT INTO test_results (test_id, status, metrics, execution_time, created_at) VALUES ($1, $2, $3, $4, NOW())",
156+
"db.system": "postgresql",
157+
"db.name": "digma_test_db",
158+
"db.user": "digma_test_user",
159+
"thread.name": "http-nio-8080-exec-3",
160+
"_dd.p.tid": "689a50f300000000",
161+
"span.kind": "client",
162+
"digma.environment": "AGENTIC-DEV",
163+
"deployment.environment": "agentic-dev",
164+
"component": "postgresql",
165+
"_dd.base_service": "digma-test-service"
166+
}
167+
},
168+
{
169+
"trace_id": $TRACE_ID_DECIMAL,
170+
"span_id": $RENDER_SPAN_ID_DECIMAL,
171+
"parent_id": $PARENT_SPAN_ID_DECIMAL,
172+
"name": "response.serialize",
173+
"service": "digma-test-service",
174+
"resource": "test-result.serialize",
175+
"type": "serialization",
176+
"start": $RENDER_START_TIME,
177+
"duration": $((RENDER_END_TIME - RENDER_START_TIME)),
178+
"error": 0,
179+
"meta": {
180+
"dd.span.Resource": "test-result.serialize",
181+
"datadog.span.id": "$RENDER_SPAN_ID_DECIMAL",
182+
"datadog.trace.id": "$TRACE_ID_DECIMAL",
183+
"deployment.environment": "agentic-dev",
184+
"digma.environment.type": "Public",
185+
"component": "jackson",
186+
"serialization.format": "json",
187+
"span.kind": "internal",
188+
"thread.name": "http-nio-8080-exec-3",
189+
"_dd.p.tid": "689a50f300000000",
190+
"digma.environment": "AGENTIC-DEV",
191+
"language": "jvm",
192+
"_dd.base_service": "digma-test-service"
193+
}
194+
}
195+
]
196+
]
197+
EOF
198+
)
199+
200+
echo "Sending realistic Digma test trace to collector..."
201+
echo "Endpoint: $COLLECTOR_ENDPOINT"
202+
203+
# Send the trace as JSON using Datadog intake headers to convey SDK metadata
204+
RESPONSE=$(echo "$DATADOG_JSON" | curl -s -w "%{http_code}" -X POST \
205+
--data-binary @- \
206+
-H "Content-Type: application/json" \
207+
-H "User-Agent: Datadog Agent/7.0" \
208+
-H "X-Datadog-Trace-Count: 1" \
209+
-H "Datadog-Meta-Lang: java" \
210+
-H "Datadog-Meta-Lang-Version: 21.0.7" \
211+
-H "Datadog-Meta-Tracer-Version: 1.38.0~60ddc9e0d7" \
212+
"$COLLECTOR_ENDPOINT")
213+
214+
HTTP_CODE="${RESPONSE: -3}"
215+
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "202" ]; then
216+
echo "✓ Trace sent successfully (HTTP $HTTP_CODE)"
217+
echo ""
218+
echo "Trace details:"
219+
echo "- Service: digma-test-service"
220+
echo "- Endpoint: POST /api/digma/test/analyze-datadog"
221+
echo "- Total duration: ~245ms"
222+
echo "- Spans: servlet.request → spring.handler → repository.operation → postgresql.query + response.serialize"
223+
else
224+
echo "✗ Failed to send trace (HTTP $HTTP_CODE)"
225+
echo "Response: ${RESPONSE%???}"
226+
fi

0 commit comments

Comments
 (0)