@blaxel/telemetry 0.2.18-dev.138 → 0.2.18-dev.139

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.
@@ -34,6 +34,7 @@ declare class TelemetryManager {
34
34
  private configured;
35
35
  constructor();
36
36
  initialize(): void;
37
+ setupBasicTracerProvider(): void;
37
38
  setConfiguration(): Promise<void>;
38
39
  get tracer(): import("@opentelemetry/api").Tracer;
39
40
  get enabled(): boolean;
package/dist/telemetry.js CHANGED
@@ -78,13 +78,35 @@ 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
81
84
  this.instrumentApp();
82
85
  this.setupSignalHandler();
83
86
  this.initialized = true;
87
+ // Add exporters later asynchronously
84
88
  this.setConfiguration().catch((error) => {
85
89
  core_1.logger.error("Error setting configuration:", error);
86
90
  });
87
91
  }
92
+ setupBasicTracerProvider() {
93
+ const resource = new BlaxelResource(this.resourceAttributes);
94
+ // Create TracerProvider with minimal setup for context propagation
95
+ this.nodeTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
96
+ resource,
97
+ sampler: new sdk_trace_node_1.AlwaysOnSampler(),
98
+ spanProcessors: [
99
+ new DefaultAttributesSpanProcessor({
100
+ "workload.id": core_1.settings.name || "",
101
+ "workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
102
+ workspace: core_1.settings.workspace || "",
103
+ }),
104
+ ],
105
+ });
106
+ // Register immediately - this enables context propagation
107
+ this.nodeTracerProvider.register();
108
+ console.log("🚀 TracerProvider registered BEFORE instrumentation - context propagation enabled");
109
+ }
88
110
  async setConfiguration() {
89
111
  if (!this.enabled || this.configured) {
90
112
  return;
@@ -199,17 +221,34 @@ class TelemetryManager {
199
221
  requestHook: (span) => {
200
222
  // Debug incoming trace headers
201
223
  console.log("=== HTTP INSTRUMENTATION REQUEST HOOK ===");
224
+ // Check if TracerProvider is registered
225
+ const tracer = api_1.trace.getTracer("debug");
226
+ console.log("TracerProvider available:", !!tracer);
227
+ // Check active context
228
+ const activeContext = api_1.context.active();
229
+ const spanContext = api_1.trace.getSpanContext(activeContext);
230
+ console.log("Span context from active context:", spanContext
231
+ ? {
232
+ traceId: spanContext.traceId,
233
+ spanId: spanContext.spanId,
234
+ traceFlags: spanContext.traceFlags,
235
+ }
236
+ : "null");
202
237
  // Check current span context after HTTP instrumentation processes headers
203
238
  const activeSpan = api_1.trace.getActiveSpan();
204
239
  if (activeSpan) {
205
- console.log("Active span in request hook:", {
240
+ console.log("Active span found in request hook:", {
206
241
  traceId: activeSpan.spanContext().traceId,
207
242
  spanId: activeSpan.spanContext().spanId,
208
243
  traceFlags: activeSpan.spanContext().traceFlags,
209
244
  });
210
245
  }
211
246
  else {
212
- console.log("No active span found in request hook");
247
+ console.log("No active span found in request hook");
248
+ console.log("Possible causes:");
249
+ console.log("1. TracerProvider not registered before HTTP instrumentation");
250
+ console.log("2. Traceparent header not properly extracted");
251
+ console.log("3. Context lost across async boundaries");
213
252
  }
214
253
  console.log("Current span from hook parameter:", {
215
254
  traceId: span.spanContext().traceId,
@@ -232,24 +271,27 @@ class TelemetryManager {
232
271
  });
233
272
  this.loggerProvider.addLogRecordProcessor(new sdk_logs_1.BatchLogRecordProcessor(logExporter));
234
273
  api_logs_1.logs.setGlobalLoggerProvider(this.loggerProvider);
235
- // Setup TracerProvider with all processors including exporters
236
- const traceExporter = this.getTraceExporter();
237
- this.nodeTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
238
- resource,
239
- sampler: new sdk_trace_node_1.AlwaysOnSampler(),
240
- spanProcessors: [
241
- new DefaultAttributesSpanProcessor({
242
- "workload.id": core_1.settings.name || "",
243
- "workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
244
- workspace: core_1.settings.workspace || "",
245
- }),
246
- new sdk_trace_node_1.BatchSpanProcessor(traceExporter),
247
- new HasBeenProcessedSpanProcessor(traceExporter),
248
- ],
249
- });
250
- // Register the tracer provider - this enables context propagation
251
- this.nodeTracerProvider.register();
252
- console.log("TracerProvider registered with exporters - ready for context propagation");
274
+ // Add exporters to existing TracerProvider (don't recreate!)
275
+ if (this.nodeTracerProvider) {
276
+ const traceExporter = this.getTraceExporter();
277
+ // Create new TracerProvider with exporters but keep context continuity
278
+ const newTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
279
+ resource,
280
+ sampler: new sdk_trace_node_1.AlwaysOnSampler(),
281
+ spanProcessors: [
282
+ new DefaultAttributesSpanProcessor({
283
+ "workload.id": core_1.settings.name || "",
284
+ "workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
285
+ workspace: core_1.settings.workspace || "",
286
+ }),
287
+ new sdk_trace_node_1.BatchSpanProcessor(traceExporter),
288
+ new HasBeenProcessedSpanProcessor(traceExporter),
289
+ ],
290
+ });
291
+ this.nodeTracerProvider = newTracerProvider;
292
+ this.nodeTracerProvider.register();
293
+ console.log("📡 Exporters added to TracerProvider - spans will now be sent to backend");
294
+ }
253
295
  // Setup metrics
254
296
  const metricExporter = this.getMetricExporter();
255
297
  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.138",
3
+ "version": "0.2.18-dev.139",
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.138"
74
+ "@blaxel/core": "0.2.18-dev.139"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@eslint/js": "^9.26.0",