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