@blaxel/telemetry 0.2.18-dev.137 → 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;
@@ -59,7 +60,6 @@ declare class TelemetryManager {
59
60
  */
60
61
  getLogExporter(): OTLPLogExporter;
61
62
  instrumentApp(): void;
62
- setupProviders(): void;
63
63
  setExporters(): void;
64
64
  shutdownApp(): Promise<void>;
65
65
  }
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;
@@ -194,24 +216,39 @@ class TelemetryManager {
194
216
  instrumentApp() {
195
217
  // Setup telemetry provider first
196
218
  core_1.telemetryRegistry.registerProvider(new telemetry_provider_1.OtelTelemetryProvider());
197
- // Setup TracerProvider and other providers BEFORE instrumentation
198
- this.setupProviders();
199
219
  const httpInstrumentation = new instrumentation_http_1.HttpInstrumentation({
200
- requireParentforOutgoingSpans: false, // Allow spans from incoming headers
220
+ requireParentforOutgoingSpans: true, // Maintain parent-child relationships
201
221
  requestHook: (span) => {
202
222
  // Debug incoming trace headers
203
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");
204
237
  // Check current span context after HTTP instrumentation processes headers
205
238
  const activeSpan = api_1.trace.getActiveSpan();
206
239
  if (activeSpan) {
207
- console.log("Active span in request hook:", {
240
+ console.log("Active span found in request hook:", {
208
241
  traceId: activeSpan.spanContext().traceId,
209
242
  spanId: activeSpan.spanContext().spanId,
210
243
  traceFlags: activeSpan.spanContext().traceFlags,
211
244
  });
212
245
  }
213
246
  else {
214
- 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");
215
252
  }
216
253
  console.log("Current span from hook parameter:", {
217
254
  traceId: span.spanContext().traceId,
@@ -225,24 +262,6 @@ class TelemetryManager {
225
262
  instrumentations: [httpInstrumentation],
226
263
  });
227
264
  }
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
- }
246
265
  setExporters() {
247
266
  const resource = new BlaxelResource(this.resourceAttributes);
248
267
  // Setup logging
@@ -252,24 +271,27 @@ class TelemetryManager {
252
271
  });
253
272
  this.loggerProvider.addLogRecordProcessor(new sdk_logs_1.BatchLogRecordProcessor(logExporter));
254
273
  api_logs_1.logs.setGlobalLoggerProvider(this.loggerProvider);
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");
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
+ }
273
295
  // Setup metrics
274
296
  const metricExporter = this.getMetricExporter();
275
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.137",
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.137"
74
+ "@blaxel/core": "0.2.18-dev.139"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@eslint/js": "^9.26.0",