@principal-ai/otel-collector-server 0.3.9 ā 0.3.10
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__/fixtures/traces.d.ts +13 -0
- package/dist/__tests__/fixtures/traces.d.ts.map +1 -1
- package/dist/__tests__/fixtures/traces.js +28 -0
- package/dist/__tests__/fixtures/traces.js.map +1 -1
- package/dist/bin/debug-otlp-server.d.ts +9 -0
- package/dist/bin/debug-otlp-server.d.ts.map +1 -0
- package/dist/bin/debug-otlp-server.js +91 -0
- package/dist/bin/debug-otlp-server.js.map +1 -0
- package/package.json +1 -1
|
@@ -5,4 +5,17 @@ import { IExportTraceServiceRequest } from '@opentelemetry/otlp-transformer';
|
|
|
5
5
|
export declare const createMockTrace: (overrides?: Partial<IExportTraceServiceRequest>) => IExportTraceServiceRequest;
|
|
6
6
|
export declare const createNestedMockTrace: () => IExportTraceServiceRequest;
|
|
7
7
|
export declare const createErrorTrace: () => IExportTraceServiceRequest;
|
|
8
|
+
/**
|
|
9
|
+
* Encode a trace as protobuf binary format
|
|
10
|
+
* Uses the same protobuf schema as the OTLPForwardingServer decoder
|
|
11
|
+
*/
|
|
12
|
+
export declare const encodeTraceAsProtobuf: (trace: IExportTraceServiceRequest) => Buffer;
|
|
13
|
+
/**
|
|
14
|
+
* Create invalid protobuf data for testing decode errors
|
|
15
|
+
*/
|
|
16
|
+
export declare const createInvalidProtobuf: () => Buffer;
|
|
17
|
+
/**
|
|
18
|
+
* Create truncated protobuf data for testing decode errors
|
|
19
|
+
*/
|
|
20
|
+
export declare const createTruncatedProtobuf: (trace: IExportTraceServiceRequest) => Buffer;
|
|
8
21
|
//# sourceMappingURL=traces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/traces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"traces.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/traces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAG7E,eAAO,MAAM,eAAe,GAAI,YAAY,OAAO,CAAC,0BAA0B,CAAC,KAAG,0BA+CjF,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAO,0BA4ExC,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,0BAkDnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,OAAO,0BAA0B,KAAG,MAOzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,QAAO,MAGxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,OAAO,0BAA0B,KAAG,MAI3E,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Test fixtures for OTLP trace data
|
|
3
3
|
*/
|
|
4
|
+
import * as root from '@opentelemetry/otlp-transformer/build/esm/generated/root.js';
|
|
4
5
|
export const createMockTrace = (overrides) => {
|
|
5
6
|
return {
|
|
6
7
|
resourceSpans: [
|
|
@@ -177,4 +178,31 @@ export const createErrorTrace = () => {
|
|
|
177
178
|
],
|
|
178
179
|
};
|
|
179
180
|
};
|
|
181
|
+
/**
|
|
182
|
+
* Encode a trace as protobuf binary format
|
|
183
|
+
* Uses the same protobuf schema as the OTLPForwardingServer decoder
|
|
184
|
+
*/
|
|
185
|
+
export const encodeTraceAsProtobuf = (trace) => {
|
|
186
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
187
|
+
const rootAny = root;
|
|
188
|
+
const ExportTraceServiceRequest = rootAny.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest;
|
|
189
|
+
const message = ExportTraceServiceRequest.create(trace);
|
|
190
|
+
const encoded = ExportTraceServiceRequest.encode(message).finish();
|
|
191
|
+
return Buffer.from(encoded);
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* Create invalid protobuf data for testing decode errors
|
|
195
|
+
*/
|
|
196
|
+
export const createInvalidProtobuf = () => {
|
|
197
|
+
// Random bytes that are not valid protobuf
|
|
198
|
+
return Buffer.from([0x08, 0xFF, 0xFF, 0xFF, 0x7F, 0x10, 0x01, 0x1A, 0x00]);
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Create truncated protobuf data for testing decode errors
|
|
202
|
+
*/
|
|
203
|
+
export const createTruncatedProtobuf = (trace) => {
|
|
204
|
+
const full = encodeTraceAsProtobuf(trace);
|
|
205
|
+
// Return only first half of the buffer
|
|
206
|
+
return full.subarray(0, Math.floor(full.length / 2));
|
|
207
|
+
};
|
|
180
208
|
//# sourceMappingURL=traces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/traces.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/traces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-otlp-server.d.ts","sourceRoot":"","sources":["../../src/bin/debug-otlp-server.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env npx ts-node
|
|
2
|
+
/**
|
|
3
|
+
* Debug OTLP Server - Logs all incoming requests with full details
|
|
4
|
+
*
|
|
5
|
+
* Usage: npx ts-node src/bin/debug-otlp-server.ts [port]
|
|
6
|
+
* Default port: 4318
|
|
7
|
+
*/
|
|
8
|
+
import * as http from 'http';
|
|
9
|
+
const port = parseInt(process.argv[2] || '4318', 10);
|
|
10
|
+
function formatBytes(bytes) {
|
|
11
|
+
// Check if it looks like JSON
|
|
12
|
+
const str = bytes.toString('utf-8');
|
|
13
|
+
if (str.startsWith('{') || str.startsWith('[')) {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(str);
|
|
16
|
+
return `JSON (${bytes.length} bytes):\n${JSON.stringify(parsed, null, 2).slice(0, 2000)}...`;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return `Text (${bytes.length} bytes, invalid JSON):\n${str.slice(0, 500)}...`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Looks like binary/protobuf
|
|
23
|
+
const hexPreview = bytes.slice(0, 100).toString('hex').match(/.{1,2}/g)?.join(' ') || '';
|
|
24
|
+
return `Binary/Protobuf (${bytes.length} bytes):\nHex: ${hexPreview}${bytes.length > 100 ? '...' : ''}`;
|
|
25
|
+
}
|
|
26
|
+
const server = http.createServer(async (req, res) => {
|
|
27
|
+
const timestamp = new Date().toISOString();
|
|
28
|
+
console.log('\n' + '='.repeat(80));
|
|
29
|
+
console.log(`[${timestamp}] ${req.method} ${req.url}`);
|
|
30
|
+
console.log('='.repeat(80));
|
|
31
|
+
// Log headers
|
|
32
|
+
console.log('\nš HEADERS:');
|
|
33
|
+
for (const [key, value] of Object.entries(req.headers)) {
|
|
34
|
+
console.log(` ${key}: ${value}`);
|
|
35
|
+
}
|
|
36
|
+
// Read body
|
|
37
|
+
const chunks = [];
|
|
38
|
+
for await (const chunk of req) {
|
|
39
|
+
chunks.push(chunk);
|
|
40
|
+
}
|
|
41
|
+
const body = Buffer.concat(chunks);
|
|
42
|
+
// Log body
|
|
43
|
+
console.log('\nš¦ BODY:');
|
|
44
|
+
console.log(formatBytes(body));
|
|
45
|
+
// Detect format
|
|
46
|
+
const contentType = req.headers['content-type'] || 'unknown';
|
|
47
|
+
console.log('\nš FORMAT DETECTION:');
|
|
48
|
+
console.log(` Content-Type header: ${contentType}`);
|
|
49
|
+
if (contentType.includes('protobuf') || contentType.includes('octet-stream')) {
|
|
50
|
+
console.log(' ā Server would use PROTOBUF decoder');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.log(' ā Server would use JSON.parse()');
|
|
54
|
+
}
|
|
55
|
+
// Check if body looks like JSON even with protobuf content-type
|
|
56
|
+
const bodyStr = body.toString('utf-8');
|
|
57
|
+
if (bodyStr.startsWith('{') || bodyStr.startsWith('[')) {
|
|
58
|
+
console.log(' ā ļø Body LOOKS LIKE JSON despite Content-Type!');
|
|
59
|
+
if (contentType.includes('protobuf')) {
|
|
60
|
+
console.log(' ā MISMATCH: JSON body sent with protobuf Content-Type - this will fail!');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(' ā Body appears to be binary');
|
|
65
|
+
if (contentType.includes('json')) {
|
|
66
|
+
console.log(' ā MISMATCH: Binary body sent with JSON Content-Type - this will fail!');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Send success response
|
|
70
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
71
|
+
res.end(JSON.stringify({ status: 'ok' }));
|
|
72
|
+
console.log('\nā
Response sent: 200 OK');
|
|
73
|
+
});
|
|
74
|
+
server.listen(port, () => {
|
|
75
|
+
console.log(`
|
|
76
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
77
|
+
ā DEBUG OTLP SERVER - Logging All Requests ā
|
|
78
|
+
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā£
|
|
79
|
+
ā Port: ${port.toString().padEnd(54)}ā
|
|
80
|
+
ā Endpoint: http://localhost:${port}/v1/traces ā
|
|
81
|
+
ā ā
|
|
82
|
+
ā This server logs all incoming requests with: ā
|
|
83
|
+
ā - Full headers ā
|
|
84
|
+
ā - Body preview (JSON or hex for binary) ā
|
|
85
|
+
ā - Format detection analysis ā
|
|
86
|
+
ā ā
|
|
87
|
+
ā Press Ctrl+C to stop ā
|
|
88
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
89
|
+
`);
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=debug-otlp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-otlp-server.js","sourceRoot":"","sources":["../../src/bin/debug-otlp-server.ts"],"names":[],"mappings":"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"}
|