@blaxel/telemetry 0.2.18-dev.141 → 0.2.18-dev.142
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/telemetry.d.ts +1 -1
- package/dist/telemetry.js +41 -88
- package/package.json +2 -2
package/dist/telemetry.d.ts
CHANGED
|
@@ -34,7 +34,6 @@ declare class TelemetryManager {
|
|
|
34
34
|
private configured;
|
|
35
35
|
constructor();
|
|
36
36
|
initialize(): void;
|
|
37
|
-
setupBasicTracerProvider(): void;
|
|
38
37
|
setConfiguration(): Promise<void>;
|
|
39
38
|
get tracer(): import("@opentelemetry/api").Tracer;
|
|
40
39
|
get enabled(): boolean;
|
|
@@ -60,6 +59,7 @@ declare class TelemetryManager {
|
|
|
60
59
|
*/
|
|
61
60
|
getLogExporter(): OTLPLogExporter;
|
|
62
61
|
instrumentApp(): void;
|
|
62
|
+
setupProviders(): void;
|
|
63
63
|
setExporters(): void;
|
|
64
64
|
shutdownApp(): Promise<void>;
|
|
65
65
|
}
|
package/dist/telemetry.js
CHANGED
|
@@ -78,49 +78,13 @@ class TelemetryManager {
|
|
|
78
78
|
if (!this.enabled || this.initialized) {
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
-
// Setup basic TracerProvider first - this is critical for context propagation
|
|
82
|
-
this.setupBasicTracerProvider();
|
|
83
|
-
// Now setup instrumentation - it can now extract traceparent headers
|
|
84
81
|
this.instrumentApp();
|
|
85
82
|
this.setupSignalHandler();
|
|
86
83
|
this.initialized = true;
|
|
87
|
-
// Add exporters later asynchronously
|
|
88
84
|
this.setConfiguration().catch((error) => {
|
|
89
85
|
core_1.logger.error("Error setting configuration:", error);
|
|
90
86
|
});
|
|
91
87
|
}
|
|
92
|
-
setupBasicTracerProvider() {
|
|
93
|
-
const resource = new BlaxelResource(this.resourceAttributes);
|
|
94
|
-
// Create TracerProvider with complete setup including exporters
|
|
95
|
-
// This ensures we don't need to recreate it later, preserving context
|
|
96
|
-
const spanProcessors = [
|
|
97
|
-
new DefaultAttributesSpanProcessor({
|
|
98
|
-
"workload.id": core_1.settings.name || "",
|
|
99
|
-
"workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
|
|
100
|
-
workspace: core_1.settings.workspace || "",
|
|
101
|
-
}),
|
|
102
|
-
];
|
|
103
|
-
// Try to add exporters if authentication is available
|
|
104
|
-
try {
|
|
105
|
-
if (core_1.settings.authorization) {
|
|
106
|
-
const traceExporter = this.getTraceExporter();
|
|
107
|
-
spanProcessors.push(new sdk_trace_node_1.BatchSpanProcessor(traceExporter));
|
|
108
|
-
spanProcessors.push(new HasBeenProcessedSpanProcessor(traceExporter));
|
|
109
|
-
console.log("🚀 TracerProvider created with exporters from the start");
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
console.log("🚀 TracerProvider created without exporters - will be added later");
|
|
114
|
-
}
|
|
115
|
-
this.nodeTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
|
|
116
|
-
resource,
|
|
117
|
-
sampler: new sdk_trace_node_1.AlwaysOnSampler(),
|
|
118
|
-
spanProcessors,
|
|
119
|
-
});
|
|
120
|
-
// Register immediately - this enables context propagation
|
|
121
|
-
this.nodeTracerProvider.register();
|
|
122
|
-
console.log("🚀 TracerProvider registered BEFORE instrumentation - context propagation enabled");
|
|
123
|
-
}
|
|
124
88
|
async setConfiguration() {
|
|
125
89
|
if (!this.enabled || this.configured) {
|
|
126
90
|
return;
|
|
@@ -230,39 +194,24 @@ class TelemetryManager {
|
|
|
230
194
|
instrumentApp() {
|
|
231
195
|
// Setup telemetry provider first
|
|
232
196
|
core_1.telemetryRegistry.registerProvider(new telemetry_provider_1.OtelTelemetryProvider());
|
|
197
|
+
// Setup TracerProvider and other providers BEFORE instrumentation
|
|
198
|
+
this.setupProviders();
|
|
233
199
|
const httpInstrumentation = new instrumentation_http_1.HttpInstrumentation({
|
|
234
|
-
requireParentforOutgoingSpans:
|
|
200
|
+
requireParentforOutgoingSpans: false, // Allow spans from incoming headers
|
|
235
201
|
requestHook: (span) => {
|
|
236
202
|
// Debug incoming trace headers
|
|
237
203
|
console.log("=== HTTP INSTRUMENTATION REQUEST HOOK ===");
|
|
238
|
-
// Check if TracerProvider is registered
|
|
239
|
-
const tracer = api_1.trace.getTracer("debug");
|
|
240
|
-
console.log("TracerProvider available:", !!tracer);
|
|
241
|
-
// Check active context
|
|
242
|
-
const activeContext = api_1.context.active();
|
|
243
|
-
const spanContext = api_1.trace.getSpanContext(activeContext);
|
|
244
|
-
console.log("Span context from active context:", spanContext
|
|
245
|
-
? {
|
|
246
|
-
traceId: spanContext.traceId,
|
|
247
|
-
spanId: spanContext.spanId,
|
|
248
|
-
traceFlags: spanContext.traceFlags,
|
|
249
|
-
}
|
|
250
|
-
: "null");
|
|
251
204
|
// Check current span context after HTTP instrumentation processes headers
|
|
252
205
|
const activeSpan = api_1.trace.getActiveSpan();
|
|
253
206
|
if (activeSpan) {
|
|
254
|
-
console.log("
|
|
207
|
+
console.log("Active span in request hook:", {
|
|
255
208
|
traceId: activeSpan.spanContext().traceId,
|
|
256
209
|
spanId: activeSpan.spanContext().spanId,
|
|
257
210
|
traceFlags: activeSpan.spanContext().traceFlags,
|
|
258
211
|
});
|
|
259
212
|
}
|
|
260
213
|
else {
|
|
261
|
-
console.log("
|
|
262
|
-
console.log("Possible causes:");
|
|
263
|
-
console.log("1. TracerProvider not registered before HTTP instrumentation");
|
|
264
|
-
console.log("2. Traceparent header not properly extracted");
|
|
265
|
-
console.log("3. Context lost across async boundaries");
|
|
214
|
+
console.log("No active span found in request hook");
|
|
266
215
|
}
|
|
267
216
|
console.log("Current span from hook parameter:", {
|
|
268
217
|
traceId: span.spanContext().traceId,
|
|
@@ -276,6 +225,24 @@ class TelemetryManager {
|
|
|
276
225
|
instrumentations: [httpInstrumentation],
|
|
277
226
|
});
|
|
278
227
|
}
|
|
228
|
+
setupProviders() {
|
|
229
|
+
const resource = new BlaxelResource(this.resourceAttributes);
|
|
230
|
+
// Setup TracerProvider first - this is critical for context propagation
|
|
231
|
+
this.nodeTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
|
|
232
|
+
resource,
|
|
233
|
+
sampler: new sdk_trace_node_1.AlwaysOnSampler(),
|
|
234
|
+
spanProcessors: [
|
|
235
|
+
new DefaultAttributesSpanProcessor({
|
|
236
|
+
"workload.id": core_1.settings.name || "",
|
|
237
|
+
"workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
|
|
238
|
+
workspace: core_1.settings.workspace || "",
|
|
239
|
+
}),
|
|
240
|
+
],
|
|
241
|
+
});
|
|
242
|
+
// Register the tracer provider BEFORE any instrumentation
|
|
243
|
+
this.nodeTracerProvider.register();
|
|
244
|
+
console.log("TracerProvider registered - ready for context propagation");
|
|
245
|
+
}
|
|
279
246
|
setExporters() {
|
|
280
247
|
const resource = new BlaxelResource(this.resourceAttributes);
|
|
281
248
|
// Setup logging
|
|
@@ -285,38 +252,24 @@ class TelemetryManager {
|
|
|
285
252
|
});
|
|
286
253
|
this.loggerProvider.addLogRecordProcessor(new sdk_logs_1.BatchLogRecordProcessor(logExporter));
|
|
287
254
|
api_logs_1.logs.setGlobalLoggerProvider(this.loggerProvider);
|
|
288
|
-
//
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
new HasBeenProcessedSpanProcessor(traceExporter),
|
|
307
|
-
],
|
|
308
|
-
});
|
|
309
|
-
this.nodeTracerProvider = newTracerProvider;
|
|
310
|
-
this.nodeTracerProvider.register();
|
|
311
|
-
console.log("📡 TracerProvider updated with exporters");
|
|
312
|
-
}
|
|
313
|
-
catch {
|
|
314
|
-
console.log("📡 Could not add exporters to TracerProvider");
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
else {
|
|
318
|
-
console.log("📡 TracerProvider already has exporters or no changes needed");
|
|
319
|
-
}
|
|
255
|
+
// Recreate TracerProvider with exporters - this ensures proper initialization
|
|
256
|
+
const traceExporter = this.getTraceExporter();
|
|
257
|
+
this.nodeTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
|
|
258
|
+
resource,
|
|
259
|
+
sampler: new sdk_trace_node_1.AlwaysOnSampler(),
|
|
260
|
+
spanProcessors: [
|
|
261
|
+
new DefaultAttributesSpanProcessor({
|
|
262
|
+
"workload.id": core_1.settings.name || "",
|
|
263
|
+
"workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
|
|
264
|
+
workspace: core_1.settings.workspace || "",
|
|
265
|
+
}),
|
|
266
|
+
new sdk_trace_node_1.BatchSpanProcessor(traceExporter),
|
|
267
|
+
new HasBeenProcessedSpanProcessor(traceExporter),
|
|
268
|
+
],
|
|
269
|
+
});
|
|
270
|
+
// Re-register the tracer provider with exporters
|
|
271
|
+
this.nodeTracerProvider.register();
|
|
272
|
+
console.log("TracerProvider re-registered with exporters");
|
|
320
273
|
// Setup metrics
|
|
321
274
|
const metricExporter = this.getMetricExporter();
|
|
322
275
|
this.meterProvider = new sdk_metrics_1.MeterProvider({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blaxel/telemetry",
|
|
3
|
-
"version": "0.2.18-dev.
|
|
3
|
+
"version": "0.2.18-dev.142",
|
|
4
4
|
"description": "Blaxel SDK for TypeScript",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Blaxel, INC (https://blaxel.ai)",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@opentelemetry/sdk-trace-base": "^2.0.0",
|
|
72
72
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|
|
73
73
|
"ai": "^4.3.13",
|
|
74
|
-
"@blaxel/core": "0.2.18-dev.
|
|
74
|
+
"@blaxel/core": "0.2.18-dev.142"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@eslint/js": "^9.26.0",
|