Skip to content

Commit e76cbc0

Browse files
carderneTrigger.dev RepoOps
authored andcommitted
fix(webapp): reject OTLP events with empty identifiers
Mono-RevId: 93c150de793b922c3be2d58f2f147658d3d0cb8c
1 parent fc77bfc commit e76cbc0

2 files changed

Lines changed: 73 additions & 2 deletions

File tree

apps/webapp/app/v3/otlpTransform.server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export function convertLogsToCreateableEvents(
9797
.map((log) => {
9898
const logLevel = logLevelToEventLevel(log.severityNumber);
9999

100-
if (!log.traceId || !log.spanId) {
100+
if (!log.traceId?.length || !log.spanId?.length) {
101101
return;
102102
}
103103

@@ -199,7 +199,7 @@ export function convertSpansToCreateableEvents(
199199
.map((span) => {
200200
const isPartial = isPartialSpan(span);
201201

202-
if (!span.traceId || !span.spanId) {
202+
if (!span.traceId?.length || !span.spanId?.length) {
203203
return;
204204
}
205205

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import {
2+
LogRecord,
3+
ResourceLogs,
4+
ResourceSpans,
5+
SeverityNumber,
6+
Span,
7+
} from "@trigger.dev/otlp-importer";
8+
import { describe, expect, it } from "vitest";
9+
import {
10+
convertLogsToCreateableEvents,
11+
convertSpansToCreateableEvents,
12+
} from "../app/v3/otlpTransform.server";
13+
14+
const traceId = Buffer.alloc(16, 1);
15+
const spanId = Buffer.alloc(8, 1);
16+
17+
function resourceLogs(ids: { traceId: Buffer; spanId: Buffer }): ResourceLogs {
18+
return ResourceLogs.fromPartial({
19+
scopeLogs: [
20+
{
21+
logRecords: [
22+
LogRecord.fromPartial({
23+
...ids,
24+
severityNumber: SeverityNumber.INFO,
25+
severityText: "INFO",
26+
timeUnixNano: 1n,
27+
}),
28+
],
29+
},
30+
],
31+
});
32+
}
33+
34+
function resourceSpans(ids: { traceId: Buffer; spanId: Buffer }): ResourceSpans {
35+
return ResourceSpans.fromPartial({
36+
scopeSpans: [
37+
{
38+
spans: [
39+
Span.fromPartial({
40+
...ids,
41+
name: "test span",
42+
startTimeUnixNano: 1n,
43+
endTimeUnixNano: 2n,
44+
}),
45+
],
46+
},
47+
],
48+
});
49+
}
50+
51+
describe("OTLP event identifier validation", () => {
52+
it("drops logs with an empty trace ID", () => {
53+
const result = convertLogsToCreateableEvents(
54+
resourceLogs({ traceId: Buffer.alloc(0), spanId }),
55+
128,
56+
"v2"
57+
);
58+
59+
expect(result.events).toEqual([]);
60+
});
61+
62+
it("drops spans with an empty span ID", () => {
63+
const result = convertSpansToCreateableEvents(
64+
resourceSpans({ traceId, spanId: Buffer.alloc(0) }),
65+
128,
66+
"v2"
67+
);
68+
69+
expect(result.events).toEqual([]);
70+
});
71+
});

0 commit comments

Comments
 (0)