Skip to content

Commit a18009d

Browse files
committed
fix: replace otlp exporter with local implementation
1 parent d375d48 commit a18009d

File tree

3 files changed

+57
-177
lines changed

3 files changed

+57
-177
lines changed

package-lock.json

Lines changed: 2 additions & 173 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/otel/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@
120120
"@opentelemetry/api": "1.9.0",
121121
"@opentelemetry/core": "1.30.1",
122122
"@opentelemetry/instrumentation": "^0.203.0",
123-
"@opentelemetry/otlp-transformer": "0.57.2",
124123
"@opentelemetry/resources": "1.30.1",
125124
"@opentelemetry/sdk-trace-node": "1.30.1"
126125
}

packages/otel/src/exporters/netlify.ts

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import { diag, type DiagLogger } from '@opentelemetry/api'
22
import { BindOnceFuture, ExportResult, ExportResultCode } from '@opentelemetry/core'
3-
import { JsonTraceSerializer } from '@opentelemetry/otlp-transformer'
43
import type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-node'
54
import { TRACE_PREFIX } from '../constants.ts'
65

76
export class NetlifySpanExporter implements SpanExporter {
87
#shutdownOnce: BindOnceFuture<void>
98
#logger: DiagLogger
10-
static #decoder = new TextDecoder()
119

1210
constructor() {
1311
this.#shutdownOnce = new BindOnceFuture(this.#shutdown, this)
@@ -27,7 +25,7 @@ export class NetlifySpanExporter implements SpanExporter {
2725
return
2826
}
2927

30-
console.log(TRACE_PREFIX, NetlifySpanExporter.#decoder.decode(JsonTraceSerializer.serializeRequest(spans)))
28+
console.log(TRACE_PREFIX, spanToJSONString(spans))
3129
resultCallback({ code: ExportResultCode.SUCCESS })
3230
}
3331

@@ -46,3 +44,57 @@ export class NetlifySpanExporter implements SpanExporter {
4644
return Promise.resolve()
4745
}
4846
}
47+
48+
// Replaces JsonTraceSerializer.serializeRequest(spans)
49+
const spanToJSONString = (spans: ReadableSpan[]): string => {
50+
const serializedSpan = {
51+
resourceSpans: spans.map((span) => {
52+
const spanContext = span.spanContext()
53+
54+
return {
55+
resource: {
56+
attributes: Object.entries(span.resource.attributes).map(([key, value]) => {
57+
return {
58+
key: key,
59+
value: {
60+
stringValue: value?.toString() ?? '',
61+
},
62+
}
63+
}),
64+
droppedAttributesCount: span.droppedAttributesCount,
65+
},
66+
scopeSpans: [
67+
{
68+
scope: {
69+
name: span.instrumentationLibrary.name,
70+
version: span.instrumentationLibrary.version,
71+
},
72+
spans: [
73+
{
74+
traceId: spanContext.traceId,
75+
spanId: spanContext.spanId,
76+
name: span.name,
77+
kind: span.kind,
78+
startTimeUnixNano: span.startTime.join(''),
79+
endTimeUnixNano: span.endTime.join(''),
80+
droppedAttributesCount: span.droppedAttributesCount,
81+
droppedEventsCount: span.droppedEventsCount,
82+
droppedLinksCount: span.droppedLinksCount,
83+
status: {
84+
code: span.status.code,
85+
message: span.status.message,
86+
},
87+
// TODO
88+
// "attributes": span.attributes,
89+
// "events": span.events,
90+
// "links": span.links,
91+
},
92+
],
93+
},
94+
],
95+
}
96+
}),
97+
}
98+
99+
return JSON.stringify(serializedSpan)
100+
}

0 commit comments

Comments
 (0)