@principal-ai/otel-collector-server 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/otel-setup.d.ts +42 -0
- package/dist/__tests__/otel-setup.d.ts.map +1 -0
- package/dist/__tests__/otel-setup.js +159 -0
- package/dist/__tests__/otel-setup.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/router/PortRouter.d.ts +4 -1
- package/dist/router/PortRouter.d.ts.map +1 -1
- package/dist/router/PortRouter.js +29 -6
- package/dist/router/PortRouter.js.map +1 -1
- package/dist/server/OTLPForwardingServer.d.ts +1 -0
- package/dist/server/OTLPForwardingServer.d.ts.map +1 -1
- package/dist/server/OTLPForwardingServer.js +67 -14
- package/dist/server/OTLPForwardingServer.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTEL Test Infrastructure
|
|
3
|
+
*
|
|
4
|
+
* Provides OpenTelemetry instrumentation setup for tests that capture
|
|
5
|
+
* telemetry data and export it to Principal View workflow files.
|
|
6
|
+
*/
|
|
7
|
+
export declare const tracer: import("@opentelemetry/api").Tracer;
|
|
8
|
+
/**
|
|
9
|
+
* Get all collected spans from the exporter
|
|
10
|
+
*/
|
|
11
|
+
export declare function getCollectedSpans(): import("@opentelemetry/sdk-trace-base").ReadableSpan[];
|
|
12
|
+
/**
|
|
13
|
+
* Clear collected spans (useful between tests)
|
|
14
|
+
*/
|
|
15
|
+
export declare function clearCollectedSpans(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Export collected spans to OTLP JSON format for Principal View
|
|
18
|
+
*
|
|
19
|
+
* @param workflowPath - Path to workflow directory (e.g., '.principal-views/trace-ingestion/otlp-request-processing')
|
|
20
|
+
* @param executionName - Name for the execution file (e.g., 'success-test')
|
|
21
|
+
*/
|
|
22
|
+
export declare function exportSpansToWorkflow(workflowPath: string, executionName: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Helper to run a function within an instrumented span
|
|
25
|
+
*
|
|
26
|
+
* @param spanName - Name of the span to create
|
|
27
|
+
* @param fn - Function to execute within the span
|
|
28
|
+
* @returns Result of the function
|
|
29
|
+
*/
|
|
30
|
+
export declare function withSpan<T>(spanName: string, fn: () => Promise<T> | T): Promise<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Setup function to call in beforeEach
|
|
33
|
+
*/
|
|
34
|
+
export declare function setupOTELForTest(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Teardown function to call in afterAll to export spans
|
|
37
|
+
*
|
|
38
|
+
* @param workflowPath - Path to workflow directory
|
|
39
|
+
* @param executionName - Name for the execution file
|
|
40
|
+
*/
|
|
41
|
+
export declare function teardownOTELForTest(workflowPath: string, executionName: string): void;
|
|
42
|
+
//# sourceMappingURL=otel-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/otel-setup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,eAAO,MAAM,MAAM,qCAA8C,CAAC;AAElE;;GAEG;AACH,wBAAgB,iBAAiB,2DAEhC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,SAElC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CA6EvF;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAGrF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OTEL Test Infrastructure
|
|
4
|
+
*
|
|
5
|
+
* Provides OpenTelemetry instrumentation setup for tests that capture
|
|
6
|
+
* telemetry data and export it to Principal View workflow files.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.tracer = void 0;
|
|
10
|
+
exports.getCollectedSpans = getCollectedSpans;
|
|
11
|
+
exports.clearCollectedSpans = clearCollectedSpans;
|
|
12
|
+
exports.exportSpansToWorkflow = exportSpansToWorkflow;
|
|
13
|
+
exports.withSpan = withSpan;
|
|
14
|
+
exports.setupOTELForTest = setupOTELForTest;
|
|
15
|
+
exports.teardownOTELForTest = teardownOTELForTest;
|
|
16
|
+
const api_1 = require("@opentelemetry/api");
|
|
17
|
+
const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
|
|
18
|
+
const fs_1 = require("fs");
|
|
19
|
+
const path_1 = require("path");
|
|
20
|
+
// Global span exporter for collecting spans across all tests
|
|
21
|
+
const spanExporter = new sdk_trace_base_1.InMemorySpanExporter();
|
|
22
|
+
// Configure tracer provider
|
|
23
|
+
const tracerProvider = new sdk_trace_base_1.BasicTracerProvider();
|
|
24
|
+
tracerProvider.addSpanProcessor(new sdk_trace_base_1.SimpleSpanProcessor(spanExporter));
|
|
25
|
+
tracerProvider.register();
|
|
26
|
+
// Get tracer for trace ingestion workflow
|
|
27
|
+
exports.tracer = api_1.trace.getTracer('trace-ingestion', '1.0.0');
|
|
28
|
+
/**
|
|
29
|
+
* Get all collected spans from the exporter
|
|
30
|
+
*/
|
|
31
|
+
function getCollectedSpans() {
|
|
32
|
+
return spanExporter.getFinishedSpans();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Clear collected spans (useful between tests)
|
|
36
|
+
*/
|
|
37
|
+
function clearCollectedSpans() {
|
|
38
|
+
spanExporter.reset();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Export collected spans to OTLP JSON format for Principal View
|
|
42
|
+
*
|
|
43
|
+
* @param workflowPath - Path to workflow directory (e.g., '.principal-views/trace-ingestion/otlp-request-processing')
|
|
44
|
+
* @param executionName - Name for the execution file (e.g., 'success-test')
|
|
45
|
+
*/
|
|
46
|
+
function exportSpansToWorkflow(workflowPath, executionName) {
|
|
47
|
+
const spans = getCollectedSpans();
|
|
48
|
+
if (spans.length === 0) {
|
|
49
|
+
console.warn(`No spans to export for ${executionName}`);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Convert SDK spans to OTLP JSON format
|
|
53
|
+
const otlpData = {
|
|
54
|
+
resourceSpans: [
|
|
55
|
+
{
|
|
56
|
+
resource: {
|
|
57
|
+
attributes: [
|
|
58
|
+
{
|
|
59
|
+
key: 'service.name',
|
|
60
|
+
value: { stringValue: 'otel-collector-server-tests' },
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
key: 'test.execution.name',
|
|
64
|
+
value: { stringValue: executionName },
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
droppedAttributesCount: 0,
|
|
68
|
+
},
|
|
69
|
+
scopeSpans: [
|
|
70
|
+
{
|
|
71
|
+
scope: {
|
|
72
|
+
name: 'trace-ingestion',
|
|
73
|
+
version: '1.0.0',
|
|
74
|
+
},
|
|
75
|
+
spans: spans.map((span) => ({
|
|
76
|
+
traceId: span.spanContext().traceId,
|
|
77
|
+
spanId: span.spanContext().spanId,
|
|
78
|
+
parentSpanId: span.parentSpanId || undefined,
|
|
79
|
+
name: span.name,
|
|
80
|
+
kind: span.kind,
|
|
81
|
+
startTimeUnixNano: String(span.startTime[0] * 1e9 + span.startTime[1]),
|
|
82
|
+
endTimeUnixNano: String(span.endTime[0] * 1e9 + span.endTime[1]),
|
|
83
|
+
attributes: Object.entries(span.attributes).map(([key, value]) => ({
|
|
84
|
+
key,
|
|
85
|
+
value: { stringValue: String(value) },
|
|
86
|
+
})),
|
|
87
|
+
events: span.events.map((event) => ({
|
|
88
|
+
timeUnixNano: String(event.time[0] * 1e9 + event.time[1]),
|
|
89
|
+
name: event.name,
|
|
90
|
+
attributes: Object.entries(event.attributes || {}).map(([key, value]) => ({
|
|
91
|
+
key,
|
|
92
|
+
value: typeof value === 'number'
|
|
93
|
+
? { intValue: String(value) }
|
|
94
|
+
: { stringValue: String(value) },
|
|
95
|
+
})),
|
|
96
|
+
droppedAttributesCount: 0,
|
|
97
|
+
})),
|
|
98
|
+
status: {
|
|
99
|
+
code: span.status.code === api_1.SpanStatusCode.OK ? 1 : 2,
|
|
100
|
+
message: span.status.message || '',
|
|
101
|
+
},
|
|
102
|
+
droppedAttributesCount: 0,
|
|
103
|
+
droppedEventsCount: 0,
|
|
104
|
+
droppedLinksCount: 0,
|
|
105
|
+
})),
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
};
|
|
111
|
+
// Ensure workflow directory exists
|
|
112
|
+
(0, fs_1.mkdirSync)(workflowPath, { recursive: true });
|
|
113
|
+
// Write execution file
|
|
114
|
+
const executionPath = (0, path_1.join)(workflowPath, `${executionName}.otel.json`);
|
|
115
|
+
(0, fs_1.writeFileSync)(executionPath, JSON.stringify(otlpData, null, 2));
|
|
116
|
+
console.log(`Exported ${spans.length} span(s) to ${executionPath}`);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Helper to run a function within an instrumented span
|
|
120
|
+
*
|
|
121
|
+
* @param spanName - Name of the span to create
|
|
122
|
+
* @param fn - Function to execute within the span
|
|
123
|
+
* @returns Result of the function
|
|
124
|
+
*/
|
|
125
|
+
async function withSpan(spanName, fn) {
|
|
126
|
+
const span = exports.tracer.startSpan(spanName);
|
|
127
|
+
try {
|
|
128
|
+
const result = await api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), fn);
|
|
129
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
span.setStatus({
|
|
134
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
135
|
+
message: error instanceof Error ? error.message : String(error),
|
|
136
|
+
});
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
span.end();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Setup function to call in beforeEach
|
|
145
|
+
*/
|
|
146
|
+
function setupOTELForTest() {
|
|
147
|
+
clearCollectedSpans();
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Teardown function to call in afterAll to export spans
|
|
151
|
+
*
|
|
152
|
+
* @param workflowPath - Path to workflow directory
|
|
153
|
+
* @param executionName - Name for the execution file
|
|
154
|
+
*/
|
|
155
|
+
function teardownOTELForTest(workflowPath, executionName) {
|
|
156
|
+
exportSpansToWorkflow(workflowPath, executionName);
|
|
157
|
+
clearCollectedSpans();
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=otel-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-setup.js","sourceRoot":"","sources":["../../src/__tests__/otel-setup.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export { TraceOutput } from './output/TraceOutput';
|
|
|
12
12
|
export { ConsoleOutput } from './output/ConsoleOutput';
|
|
13
13
|
export { FileOutput } from './output/FileOutput';
|
|
14
14
|
export { MessagePortOutput } from './output/MessagePortOutput';
|
|
15
|
-
export { PortRouter } from './router/PortRouter';
|
|
15
|
+
export { PortRouter, WILDCARD_SOURCE } from './router/PortRouter';
|
|
16
16
|
export { BinaryManager } from './core/BinaryManager';
|
|
17
17
|
export { ConfigGenerator, CollectorConfig } from './core/ConfigGenerator';
|
|
18
18
|
export { CollectorProcessManager } from './core/CollectorProcessManager';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,YAAY,EACV,yBAAyB,EACzB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,YAAY,EACV,yBAAyB,EACzB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - Electron: MessagePort routing for Electron renderer integration
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.OTLPForwardingServer = exports.CollectorProcessManager = exports.ConfigGenerator = exports.BinaryManager = exports.PortRouter = exports.MessagePortOutput = exports.FileOutput = exports.ConsoleOutput = exports.OTELCollectorServer = void 0;
|
|
10
|
+
exports.OTLPForwardingServer = exports.CollectorProcessManager = exports.ConfigGenerator = exports.BinaryManager = exports.WILDCARD_SOURCE = exports.PortRouter = exports.MessagePortOutput = exports.FileOutput = exports.ConsoleOutput = exports.OTELCollectorServer = void 0;
|
|
11
11
|
var OTELCollectorServer_1 = require("./OTELCollectorServer");
|
|
12
12
|
Object.defineProperty(exports, "OTELCollectorServer", { enumerable: true, get: function () { return OTELCollectorServer_1.OTELCollectorServer; } });
|
|
13
13
|
var ConsoleOutput_1 = require("./output/ConsoleOutput");
|
|
@@ -19,6 +19,7 @@ Object.defineProperty(exports, "MessagePortOutput", { enumerable: true, get: fun
|
|
|
19
19
|
// Export router (Electron mode)
|
|
20
20
|
var PortRouter_1 = require("./router/PortRouter");
|
|
21
21
|
Object.defineProperty(exports, "PortRouter", { enumerable: true, get: function () { return PortRouter_1.PortRouter; } });
|
|
22
|
+
Object.defineProperty(exports, "WILDCARD_SOURCE", { enumerable: true, get: function () { return PortRouter_1.WILDCARD_SOURCE; } });
|
|
22
23
|
// Export core components (for advanced usage)
|
|
23
24
|
var BinaryManager_1 = require("./core/BinaryManager");
|
|
24
25
|
Object.defineProperty(exports, "BinaryManager", { enumerable: true, get: function () { return BinaryManager_1.BinaryManager; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAe5B,wDAAuD;AAA9C,8GAAA,aAAa,OAAA;AACtB,kDAAiD;AAAxC,wGAAA,UAAU,OAAA;AACnB,gEAA+D;AAAtD,sHAAA,iBAAiB,OAAA;AAE1B,gCAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAe5B,wDAAuD;AAA9C,8GAAA,aAAa,OAAA;AACtB,kDAAiD;AAAxC,wGAAA,UAAU,OAAA;AACnB,gEAA+D;AAAtD,sHAAA,iBAAiB,OAAA;AAE1B,gCAAgC;AAChC,kDAAkE;AAAzD,wGAAA,UAAU,OAAA;AAAE,6GAAA,eAAe,OAAA;AAEpC,8CAA8C;AAC9C,sDAAqD;AAA5C,8GAAA,aAAa,OAAA;AACtB,0DAA0E;AAAjE,kHAAA,eAAe,OAAA;AACxB,0EAAyE;AAAhE,kIAAA,uBAAuB,OAAA;AAChC,sEAAqE;AAA5D,4HAAA,oBAAoB,OAAA"}
|
|
@@ -5,6 +5,8 @@ import { MessagePort } from 'worker_threads';
|
|
|
5
5
|
import { Logger } from '../shared/logger';
|
|
6
6
|
import { PortRegistration } from '../shared/types';
|
|
7
7
|
import { IExportTraceServiceRequest } from '@opentelemetry/otlp-transformer';
|
|
8
|
+
/** Wildcard source URL - ports registered with this receive ALL traces */
|
|
9
|
+
export declare const WILDCARD_SOURCE = "*";
|
|
8
10
|
export declare class PortRouter {
|
|
9
11
|
private logger;
|
|
10
12
|
private portRegistry;
|
|
@@ -22,7 +24,8 @@ export declare class PortRouter {
|
|
|
22
24
|
*/
|
|
23
25
|
unregisterWindow(windowId: string): void;
|
|
24
26
|
/**
|
|
25
|
-
* Route OTLP payload to registered windows based on source URL
|
|
27
|
+
* Route OTLP payload to registered windows based on source URL.
|
|
28
|
+
* Also sends to any ports registered with WILDCARD_SOURCE ('*').
|
|
26
29
|
*/
|
|
27
30
|
routePayload(payload: IExportTraceServiceRequest, sourceUrl: string): void;
|
|
28
31
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortRouter.d.ts","sourceRoot":"","sources":["../../src/router/PortRouter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAgB,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAkC;gBAE1C,MAAM,CAAC,EAAE,MAAM;IAK3B;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IA0B1E;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAoBzD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAuBxC
|
|
1
|
+
{"version":3,"file":"PortRouter.d.ts","sourceRoot":"","sources":["../../src/router/PortRouter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAgB,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,0EAA0E;AAC1E,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAkC;gBAE1C,MAAM,CAAC,EAAE,MAAM;IAK3B;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IA0B1E;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAoBzD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAuBxC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAoD1E;;OAEG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAInD;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAQ9B;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;CAGjC"}
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
* PortRouter - Routes OTLP traces to registered renderer windows via MessagePort
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PortRouter = void 0;
|
|
6
|
+
exports.PortRouter = exports.WILDCARD_SOURCE = void 0;
|
|
7
7
|
const logger_1 = require("../shared/logger");
|
|
8
|
+
/** Wildcard source URL - ports registered with this receive ALL traces */
|
|
9
|
+
exports.WILDCARD_SOURCE = '*';
|
|
8
10
|
class PortRouter {
|
|
9
11
|
constructor(logger) {
|
|
10
12
|
this.logger = logger || (0, logger_1.createLogger)('PortRouter');
|
|
@@ -77,22 +79,43 @@ class PortRouter {
|
|
|
77
79
|
this.logger.info(`Unregistered ${removedCount} ports for window ${windowId}`);
|
|
78
80
|
}
|
|
79
81
|
/**
|
|
80
|
-
* Route OTLP payload to registered windows based on source URL
|
|
82
|
+
* Route OTLP payload to registered windows based on source URL.
|
|
83
|
+
* Also sends to any ports registered with WILDCARD_SOURCE ('*').
|
|
81
84
|
*/
|
|
82
85
|
routePayload(payload, sourceUrl) {
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
// Get registrations for the specific source URL
|
|
87
|
+
const sourceRegistrations = this.portRegistry.get(sourceUrl) || [];
|
|
88
|
+
// Get wildcard registrations (receive all traces)
|
|
89
|
+
const wildcardRegistrations = sourceUrl !== exports.WILDCARD_SOURCE
|
|
90
|
+
? (this.portRegistry.get(exports.WILDCARD_SOURCE) || [])
|
|
91
|
+
: [];
|
|
92
|
+
// Combine both, avoiding duplicates by windowId
|
|
93
|
+
const seenWindows = new Set();
|
|
94
|
+
const allRegistrations = [];
|
|
95
|
+
for (const reg of sourceRegistrations) {
|
|
96
|
+
if (!seenWindows.has(reg.windowId)) {
|
|
97
|
+
seenWindows.add(reg.windowId);
|
|
98
|
+
allRegistrations.push(reg);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
for (const reg of wildcardRegistrations) {
|
|
102
|
+
if (!seenWindows.has(reg.windowId)) {
|
|
103
|
+
seenWindows.add(reg.windowId);
|
|
104
|
+
allRegistrations.push(reg);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (allRegistrations.length === 0) {
|
|
85
108
|
this.logger.debug(`No registrations for source: ${sourceUrl}, dropping traces`);
|
|
86
109
|
return;
|
|
87
110
|
}
|
|
88
|
-
this.logger.debug(`Routing traces from ${sourceUrl} to ${
|
|
111
|
+
this.logger.debug(`Routing traces from ${sourceUrl} to ${allRegistrations.length} window(s) (${sourceRegistrations.length} specific, ${wildcardRegistrations.length} wildcard)`);
|
|
89
112
|
const message = {
|
|
90
113
|
type: 'TRACE_BATCH',
|
|
91
114
|
payload,
|
|
92
115
|
source: sourceUrl,
|
|
93
116
|
timestamp: Date.now(),
|
|
94
117
|
};
|
|
95
|
-
for (const registration of
|
|
118
|
+
for (const registration of allRegistrations) {
|
|
96
119
|
try {
|
|
97
120
|
registration.port.postMessage(message);
|
|
98
121
|
this.logger.debug(`Sent traces to window ${registration.windowId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortRouter.js","sourceRoot":"","sources":["../../src/router/PortRouter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PortRouter.js","sourceRoot":"","sources":["../../src/router/PortRouter.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,6CAAwD;AAIxD,0EAA0E;AAC7D,QAAA,eAAe,GAAG,GAAG,CAAC;AAEnC,MAAa,UAAU;IAIrB,YAAY,MAAe;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAA,qBAAY,EAAC,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAgB,EAAE,SAAiB,EAAE,IAAiB;QACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,aAAa,SAAS,EAAE,CAAC,CAAC;QAElF,MAAM,YAAY,GAAqB;YACrC,QAAQ;YACR,SAAS;YACT,IAAI;YACJ,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;SACzB,CAAC;QAEF,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAExD,6DAA6D;QAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACvE,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,QAAQ,2BAA2B,SAAS,aAAa,CAAC,CAAC;YACtF,QAAQ,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,sBAAsB,SAAS,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB,EAAE,SAAiB;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,QAAQ,aAAa,SAAS,EAAE,CAAC,CAAC;QAEpF,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAEpE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,SAAS,wCAAwC,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,gCAAgC,SAAS,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;QAEnE,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YACpE,YAAY,IAAI,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAEvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,YAAY,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAmC,EAAE,SAAiB;QACjE,gDAAgD;QAChD,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAEnE,kDAAkD;QAClD,MAAM,qBAAqB,GAAG,SAAS,KAAK,uBAAe;YACzD,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAe,CAAC,IAAI,EAAE,CAAC;YAChD,CAAC,CAAC,EAAE,CAAC;QAEP,gDAAgD;QAChD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,MAAM,gBAAgB,GAAuB,EAAE,CAAC;QAEhD,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC9B,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC9B,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,SAAS,mBAAmB,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,SAAS,OAAO,gBAAgB,CAAC,MAAM,eAAe,mBAAmB,CAAC,MAAM,cAAc,qBAAqB,CAAC,MAAM,YAAY,CAAC,CAAC;QAEjL,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,aAAa;YACnB,OAAO;YACP,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,YAAY,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC7E,4CAA4C;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACvD,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC;QAChC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;CACF;AAvKD,gCAuKC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OTLPForwardingServer.d.ts","sourceRoot":"","sources":["../../src/server/OTLPForwardingServer.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"OTLPForwardingServer.d.ts","sourceRoot":"","sources":["../../src/server/OTLPForwardingServer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAgB,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,oBAAoB;IAQ7B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IARrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,MAAM,CAA+C;gBAGnD,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,EAChC,MAAM,CAAC,EAAE,MAAM;IAMjB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,OAAO,CAAC,aAAa;IA2BrB;;OAEG;YACW,kBAAkB;IAgHhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAkBhB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAuBzB"}
|
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.OTLPForwardingServer = void 0;
|
|
40
40
|
const http = __importStar(require("http"));
|
|
41
41
|
const root = __importStar(require("@opentelemetry/otlp-transformer/build/esm/generated/root"));
|
|
42
|
+
const api_1 = require("@opentelemetry/api");
|
|
42
43
|
const logger_1 = require("../shared/logger");
|
|
43
44
|
class OTLPForwardingServer {
|
|
44
45
|
constructor(config, traceOutput, logger) {
|
|
@@ -46,6 +47,7 @@ class OTLPForwardingServer {
|
|
|
46
47
|
this.traceOutput = traceOutput;
|
|
47
48
|
this.server = null;
|
|
48
49
|
this.tracesReceived = 0;
|
|
50
|
+
this.tracer = api_1.trace.getTracer('trace-ingestion', '1.0.0');
|
|
49
51
|
this.logger = logger || (0, logger_1.createLogger)('OTLPForwardingServer');
|
|
50
52
|
this.port = config.port;
|
|
51
53
|
}
|
|
@@ -130,41 +132,89 @@ class OTLPForwardingServer {
|
|
|
130
132
|
* Handle OTLP trace request - supports both JSON and protobuf formats
|
|
131
133
|
*/
|
|
132
134
|
async handleTraceRequest(req, res) {
|
|
135
|
+
const span = this.tracer.startSpan('otlp.request.processing');
|
|
136
|
+
const startTime = Date.now();
|
|
133
137
|
try {
|
|
134
138
|
// Read body as buffer
|
|
135
139
|
const bodyBuffer = await this.readBody(req);
|
|
136
|
-
//
|
|
140
|
+
// Emit trace.request.started event
|
|
137
141
|
const contentType = req.headers['content-type'] || 'application/json';
|
|
142
|
+
span.addEvent('trace.request.started', {
|
|
143
|
+
'content.type': contentType,
|
|
144
|
+
'content.length': bodyBuffer.length,
|
|
145
|
+
});
|
|
146
|
+
// Determine format from Content-Type header
|
|
138
147
|
let payload;
|
|
139
148
|
if (contentType.includes('application/x-protobuf') || contentType.includes('application/octet-stream')) {
|
|
140
149
|
// Decode protobuf format
|
|
141
150
|
this.logger.debug('Decoding protobuf trace request');
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
+
try {
|
|
152
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
153
|
+
const rootAny = root;
|
|
154
|
+
const traceRequestType = rootAny.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest;
|
|
155
|
+
const decoded = traceRequestType.decode(bodyBuffer);
|
|
156
|
+
payload = traceRequestType.toObject(decoded, {
|
|
157
|
+
longs: String,
|
|
158
|
+
enums: String,
|
|
159
|
+
bytes: String,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
catch (parseError) {
|
|
163
|
+
// Emit parse error event
|
|
164
|
+
span.addEvent('trace.request.error', {
|
|
165
|
+
'error.type': parseError instanceof Error ? parseError.name : 'ParseError',
|
|
166
|
+
'error.message': parseError instanceof Error ? parseError.message : String(parseError),
|
|
167
|
+
'error.stage': 'parsing',
|
|
168
|
+
});
|
|
169
|
+
throw parseError;
|
|
170
|
+
}
|
|
151
171
|
}
|
|
152
172
|
else {
|
|
153
173
|
// Parse JSON format (default)
|
|
154
174
|
this.logger.debug('Parsing JSON trace request');
|
|
155
|
-
|
|
156
|
-
|
|
175
|
+
try {
|
|
176
|
+
const bodyString = bodyBuffer.toString('utf-8');
|
|
177
|
+
payload = JSON.parse(bodyString);
|
|
178
|
+
}
|
|
179
|
+
catch (parseError) {
|
|
180
|
+
// Emit parse error event
|
|
181
|
+
span.addEvent('trace.request.error', {
|
|
182
|
+
'error.type': parseError instanceof Error ? parseError.name : 'ParseError',
|
|
183
|
+
'error.message': parseError instanceof Error ? parseError.message : String(parseError),
|
|
184
|
+
'error.stage': 'parsing',
|
|
185
|
+
});
|
|
186
|
+
throw parseError;
|
|
187
|
+
}
|
|
157
188
|
}
|
|
158
189
|
// Extract source URL
|
|
159
190
|
const sourceUrl = this.extractSourceUrl(payload);
|
|
160
191
|
// Forward to output
|
|
161
|
-
|
|
162
|
-
|
|
192
|
+
try {
|
|
193
|
+
this.traceOutput.send(payload, sourceUrl);
|
|
194
|
+
this.tracesReceived++;
|
|
195
|
+
}
|
|
196
|
+
catch (forwardError) {
|
|
197
|
+
// Emit forward error event
|
|
198
|
+
span.addEvent('trace.request.error', {
|
|
199
|
+
'error.type': forwardError instanceof Error ? forwardError.name : 'ForwardError',
|
|
200
|
+
'error.message': forwardError instanceof Error ? forwardError.message : String(forwardError),
|
|
201
|
+
'error.stage': 'forwarding',
|
|
202
|
+
});
|
|
203
|
+
throw forwardError;
|
|
204
|
+
}
|
|
205
|
+
// Emit trace.request.complete event
|
|
206
|
+
const duration = Date.now() - startTime;
|
|
207
|
+
span.addEvent('trace.request.complete', {
|
|
208
|
+
'source.url': sourceUrl,
|
|
209
|
+
'traces.received': this.tracesReceived,
|
|
210
|
+
'duration.ms': duration,
|
|
211
|
+
});
|
|
163
212
|
// Send success response
|
|
164
213
|
this.handleCORS(req, res);
|
|
165
214
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
166
215
|
res.end(JSON.stringify({ status: 'ok' }));
|
|
167
216
|
this.logger.debug(`Received traces from ${sourceUrl}`);
|
|
217
|
+
span.end();
|
|
168
218
|
}
|
|
169
219
|
catch (err) {
|
|
170
220
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
@@ -173,10 +223,13 @@ class OTLPForwardingServer {
|
|
|
173
223
|
if (errorStack) {
|
|
174
224
|
this.logger.error('Stack trace:', errorStack);
|
|
175
225
|
}
|
|
226
|
+
// Emit error event if not already emitted
|
|
227
|
+
// (parse and forward errors emit their own events before throwing)
|
|
176
228
|
if (!res.headersSent) {
|
|
177
229
|
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
178
230
|
res.end(JSON.stringify({ error: 'Internal server error' }));
|
|
179
231
|
}
|
|
232
|
+
span.end();
|
|
180
233
|
}
|
|
181
234
|
}
|
|
182
235
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OTLPForwardingServer.js","sourceRoot":"","sources":["../../src/server/OTLPForwardingServer.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAE7B,+FAAiF;
|
|
1
|
+
{"version":3,"file":"OTLPForwardingServer.js","sourceRoot":"","sources":["../../src/server/OTLPForwardingServer.ts"],"names":[],"mappings":"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"}
|