@pingops/sdk 0.1.0

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.
@@ -0,0 +1,537 @@
1
+ /**
2
+ * Tracer Provider with global state and isolated TracerProvider architecture
3
+ *
4
+ * This module provides an isolated TracerProvider that shares the same
5
+ * span processors (like PingopsSpanProcessor) with the main OpenTelemetry SDK.
6
+ * This ensures manual spans created via startSpan are properly processed.
7
+ *
8
+ * Architecture follows Langfuse's pattern with global state management.
9
+ */
10
+ import { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';
11
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
12
+ import { resourceFromAttributes } from '@opentelemetry/resources';
13
+ import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
14
+ import { createLogger } from '@pingops/core';
15
+ import { PINGOPS_PARENT_SPAN_ATTRIBUTES_KEY } from '@pingops/core';
16
+ /**
17
+ * Global symbol for PingOps state
18
+ */
19
+ const PINGOPS_GLOBAL_SYMBOL = Symbol.for('pingops');
20
+ /**
21
+ * Logger instance for tracer provider
22
+ */
23
+ const log = createLogger('[PingOps TracerProvider]');
24
+ /**
25
+ * Creates initial global state
26
+ */
27
+ function createState() {
28
+ return {
29
+ isolatedTracerProvider: null,
30
+ };
31
+ }
32
+ /**
33
+ * Gets the global state, creating it if it doesn't exist
34
+ */
35
+ function getGlobalState() {
36
+ const initialState = createState();
37
+ try {
38
+ const g = globalThis;
39
+ if (typeof g !== 'object' || g === null) {
40
+ // Fallback if globalThis is not available
41
+ log.warn('globalThis is not available, using fallback state');
42
+ return initialState;
43
+ }
44
+ if (!g[PINGOPS_GLOBAL_SYMBOL]) {
45
+ log.debug('Creating new global state');
46
+ Object.defineProperty(g, PINGOPS_GLOBAL_SYMBOL, {
47
+ value: initialState,
48
+ writable: false, // lock the slot (not the contents)
49
+ configurable: false,
50
+ enumerable: false,
51
+ });
52
+ }
53
+ else {
54
+ log.debug('Retrieved existing global state');
55
+ }
56
+ return g[PINGOPS_GLOBAL_SYMBOL];
57
+ }
58
+ catch (err) {
59
+ log.error('Failed to access global state:', err instanceof Error ? err.message : String(err));
60
+ // Fallback on error
61
+ return initialState;
62
+ }
63
+ }
64
+ /**
65
+ * Sets an isolated TracerProvider for PingOps tracing operations.
66
+ *
67
+ * This allows PingOps to use its own TracerProvider instance, separate from
68
+ * the global OpenTelemetry TracerProvider. This is useful for avoiding conflicts
69
+ * with other OpenTelemetry instrumentation in the application.
70
+ *
71
+ * @param provider - The TracerProvider instance to use, or null to clear the isolated provider
72
+ * @public
73
+ */
74
+ export function setPingopsTracerProvider(provider) {
75
+ const state = getGlobalState();
76
+ const hadProvider = state.isolatedTracerProvider !== null;
77
+ state.isolatedTracerProvider = provider;
78
+ if (provider) {
79
+ log.info('Set isolated TracerProvider', {
80
+ hadPrevious: hadProvider,
81
+ providerType: provider.constructor.name,
82
+ });
83
+ }
84
+ else {
85
+ log.info('Cleared isolated TracerProvider', { hadPrevious: hadProvider });
86
+ }
87
+ }
88
+ /**
89
+ * Gets the TracerProvider for PingOps tracing operations.
90
+ *
91
+ * Returns the isolated TracerProvider if one has been set via setPingopsTracerProvider(),
92
+ * otherwise falls back to the global OpenTelemetry TracerProvider.
93
+ *
94
+ * @returns The TracerProvider instance to use for PingOps tracing
95
+ * @public
96
+ */
97
+ export function getPingopsTracerProvider() {
98
+ const { isolatedTracerProvider } = getGlobalState();
99
+ if (isolatedTracerProvider) {
100
+ log.debug('Using isolated TracerProvider', {
101
+ providerType: isolatedTracerProvider.constructor.name,
102
+ });
103
+ return isolatedTracerProvider;
104
+ }
105
+ const globalProvider = trace.getTracerProvider();
106
+ log.debug('Using global TracerProvider', {
107
+ providerType: globalProvider.constructor.name,
108
+ });
109
+ return globalProvider;
110
+ }
111
+ /**
112
+ * Gets the OpenTelemetry tracer instance for PingOps.
113
+ *
114
+ * This function returns a tracer specifically configured for PingOps
115
+ * with the correct tracer name and version.
116
+ *
117
+ * @returns The PingOps OpenTelemetry tracer instance
118
+ * @internal
119
+ */
120
+ function getPingopsTracer() {
121
+ const provider = getPingopsTracerProvider();
122
+ const tracer = provider.getTracer('@pingops/sdk', '0.1.0');
123
+ log.debug('Retrieved PingOps tracer', {
124
+ tracerName: '@pingops/sdk',
125
+ version: '0.1.0',
126
+ });
127
+ return tracer;
128
+ }
129
+ /**
130
+ * Initializes the isolated TracerProvider with the given span processors
131
+ *
132
+ * This creates a separate TracerProvider that shares the same span processors
133
+ * (like PingopsSpanProcessor) with the main SDK. This ensures manual spans
134
+ * are processed correctly.
135
+ *
136
+ * @param spanProcessors - Array of span processors to use (e.g., PingopsSpanProcessor)
137
+ * @param serviceName - Service name for resource attributes
138
+ * @deprecated Use setPingopsTracerProvider instead
139
+ */
140
+ export function initializeTracerProvider(spanProcessors, serviceName) {
141
+ log.info('Initializing TracerProvider', {
142
+ serviceName,
143
+ spanProcessorCount: spanProcessors.length,
144
+ });
145
+ // Create resource with service name
146
+ const resource = resourceFromAttributes({
147
+ [ATTR_SERVICE_NAME]: serviceName,
148
+ });
149
+ log.debug('Created resource', { serviceName });
150
+ // In version 2.2.0, span processors are passed in the constructor
151
+ const tracerProvider = new NodeTracerProvider({
152
+ resource,
153
+ spanProcessors,
154
+ });
155
+ log.debug('Created NodeTracerProvider', {
156
+ spanProcessorCount: spanProcessors.length,
157
+ });
158
+ // Register the provider globally
159
+ tracerProvider.register();
160
+ log.info('Registered TracerProvider globally');
161
+ // Set it in global state
162
+ setPingopsTracerProvider(tracerProvider);
163
+ log.info('TracerProvider initialization complete');
164
+ }
165
+ /**
166
+ * Gets the isolated TracerProvider instance
167
+ *
168
+ * @returns The TracerProvider instance, or null if not initialized
169
+ * @deprecated Use getPingopsTracerProvider instead
170
+ */
171
+ export function getTracerProvider() {
172
+ const provider = getPingopsTracerProvider();
173
+ return provider instanceof NodeTracerProvider ? provider : null;
174
+ }
175
+ /**
176
+ * Shuts down the TracerProvider and flushes remaining spans
177
+ */
178
+ export async function shutdownTracerProvider() {
179
+ log.info('Shutting down TracerProvider');
180
+ const provider = getPingopsTracerProvider();
181
+ // Check if provider has shutdown method (NodeTracerProvider and compatible providers)
182
+ if (provider && typeof provider.shutdown === 'function') {
183
+ log.debug('Calling provider.shutdown()');
184
+ try {
185
+ await provider.shutdown();
186
+ log.info('TracerProvider shutdown complete');
187
+ }
188
+ catch (error) {
189
+ log.error('Error during TracerProvider shutdown:', error instanceof Error ? error.message : String(error));
190
+ throw error;
191
+ }
192
+ }
193
+ else {
194
+ log.warn('TracerProvider does not have shutdown method, skipping');
195
+ }
196
+ setPingopsTracerProvider(null);
197
+ log.info('TracerProvider shutdown finished');
198
+ }
199
+ /**
200
+ * Wraps a promise to automatically end the span when the promise resolves or rejects.
201
+ *
202
+ * @param promise - The promise to wrap
203
+ * @param span - The span to end when promise completes
204
+ * @param endOnExit - Whether to end the span on exit (default: true)
205
+ * @returns The wrapped promise
206
+ * @internal
207
+ */
208
+ function wrapPromise(promise, span, endOnExit) {
209
+ const spanContext = span.spanContext();
210
+ log.debug('Wrapping promise for span', {
211
+ spanId: spanContext.spanId,
212
+ traceId: spanContext.traceId,
213
+ endOnExit: endOnExit !== false,
214
+ });
215
+ return promise.then((value) => {
216
+ log.debug('Promise resolved, ending span', {
217
+ spanId: spanContext.spanId,
218
+ traceId: spanContext.traceId,
219
+ spanAttributes: span.attributes || {},
220
+ });
221
+ if (endOnExit !== false) {
222
+ span.end();
223
+ }
224
+ return value;
225
+ }, (err) => {
226
+ const errorMessage = err instanceof Error ? err.message : 'Unknown error';
227
+ log.error('Promise rejected, marking span as error', {
228
+ spanId: spanContext.spanId,
229
+ traceId: spanContext.traceId,
230
+ error: errorMessage,
231
+ });
232
+ span.setStatus({
233
+ code: SpanStatusCode.ERROR,
234
+ message: errorMessage,
235
+ });
236
+ if (err instanceof Error) {
237
+ span.recordException(err);
238
+ }
239
+ if (endOnExit !== false) {
240
+ span.end();
241
+ }
242
+ throw err;
243
+ });
244
+ }
245
+ /**
246
+ * Starts a span, executes the function, and automatically ends the span
247
+ *
248
+ * This function uses the isolated TracerProvider to ensure spans are
249
+ * properly processed by PingopsSpanProcessor and other registered processors.
250
+ *
251
+ * The span is automatically set as active in the OpenTelemetry context, allowing
252
+ * child spans and updates to work correctly.
253
+ *
254
+ * @param name - Span name
255
+ * @param options - Span options including attributes
256
+ * @param fn - Function to execute within the span context (can be sync or async)
257
+ * @returns The result of the function
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * import { startSpan } from '@pingops/sdk';
262
+ *
263
+ * const result = await startSpan('your-span-name', {
264
+ * attributes: {
265
+ * customer_id: 'cust_123',
266
+ * correlation_id: 'req_456',
267
+ * },
268
+ * }, async (span) => {
269
+ * const result = await fetch('https://api.example.com');
270
+ * return 'done';
271
+ * });
272
+ * ```
273
+ */
274
+ export function startSpan(name, options, fn) {
275
+ log.info('Starting span', {
276
+ name,
277
+ attributeCount: Object.keys(options.attributes || {}).length,
278
+ hasStartTime: options.startTime !== undefined,
279
+ });
280
+ const tracer = getPingopsTracer();
281
+ const { attributes = {}, startTime } = options;
282
+ // Store initial attributes in context so they propagate to child spans
283
+ const activeContext = context.active();
284
+ const contextWithAttributes = activeContext.setValue(PINGOPS_PARENT_SPAN_ATTRIBUTES_KEY, attributes);
285
+ return context.with(contextWithAttributes, () => {
286
+ return tracer.startActiveSpan(name, {
287
+ kind: SpanKind.CLIENT,
288
+ attributes,
289
+ startTime,
290
+ }, context.active(), (span) => {
291
+ const spanContext = span.spanContext();
292
+ log.debug('Span started', {
293
+ name,
294
+ spanId: spanContext.spanId,
295
+ traceId: spanContext.traceId,
296
+ attributeCount: Object.keys(attributes).length,
297
+ });
298
+ try {
299
+ const result = fn(span);
300
+ if (result instanceof Promise) {
301
+ log.debug('Function returned Promise, wrapping', {
302
+ spanId: spanContext.spanId,
303
+ traceId: spanContext.traceId,
304
+ });
305
+ return wrapPromise(result, span, true);
306
+ }
307
+ else {
308
+ log.debug('Function returned sync value, ending span', {
309
+ spanId: spanContext.spanId,
310
+ traceId: spanContext.traceId,
311
+ });
312
+ span.setStatus({ code: SpanStatusCode.OK });
313
+ span.end();
314
+ return result;
315
+ }
316
+ }
317
+ catch (err) {
318
+ const errorMessage = err instanceof Error ? err.message : 'Unknown error';
319
+ log.error('Error in span execution', {
320
+ name,
321
+ spanId: spanContext.spanId,
322
+ traceId: spanContext.traceId,
323
+ error: errorMessage,
324
+ });
325
+ span.setStatus({
326
+ code: SpanStatusCode.ERROR,
327
+ message: errorMessage,
328
+ });
329
+ if (err instanceof Error) {
330
+ span.recordException(err);
331
+ }
332
+ span.end();
333
+ throw err;
334
+ }
335
+ });
336
+ });
337
+ }
338
+ /**
339
+ * Updates the currently active trace with new attributes.
340
+ *
341
+ * This function finds the currently active OpenTelemetry span and updates
342
+ * it with trace-level attributes. If no active span is found, a warning is logged.
343
+ *
344
+ * @param attributes - Trace attributes to set
345
+ *
346
+ * @example
347
+ * ```typescript
348
+ * import { updateActiveTrace } from '@pingops/sdk';
349
+ *
350
+ * // Inside an active span context
351
+ * updateActiveTrace({
352
+ * userId: 'user-123',
353
+ * sessionId: 'session-456',
354
+ * tags: ['production', 'critical'],
355
+ * });
356
+ * ```
357
+ */
358
+ export function updateActiveTrace(attributes) {
359
+ log.debug('Updating active trace', {
360
+ hasUserId: attributes.userId !== undefined,
361
+ hasSessionId: attributes.sessionId !== undefined,
362
+ hasTags: attributes.tags !== undefined,
363
+ hasMetadata: attributes.metadata !== undefined,
364
+ customAttributeCount: Object.keys(attributes).filter(k => !['userId', 'sessionId', 'tags', 'metadata'].includes(k)).length,
365
+ });
366
+ const span = trace.getActiveSpan();
367
+ if (!span) {
368
+ log.warn('No active span found, skipping trace update');
369
+ return;
370
+ }
371
+ const spanContext = span.spanContext();
372
+ log.debug('Found active span for trace update', {
373
+ spanId: spanContext.spanId,
374
+ traceId: spanContext.traceId,
375
+ });
376
+ // Convert trace attributes to OpenTelemetry attributes
377
+ const otelAttributes = {};
378
+ if (attributes.userId !== undefined) {
379
+ otelAttributes['user.id'] = attributes.userId;
380
+ log.debug('Setting user.id', { userId: attributes.userId });
381
+ }
382
+ if (attributes.sessionId !== undefined) {
383
+ otelAttributes['session.id'] = attributes.sessionId;
384
+ log.debug('Setting session.id', { sessionId: attributes.sessionId });
385
+ }
386
+ if (attributes.tags !== undefined) {
387
+ otelAttributes['trace.tags'] = attributes.tags;
388
+ log.debug('Setting trace.tags', { tags: attributes.tags });
389
+ }
390
+ if (attributes.metadata !== undefined) {
391
+ // Flatten metadata with dot notation
392
+ for (const [key, value] of Object.entries(attributes.metadata)) {
393
+ otelAttributes[`trace.metadata.${key}`] =
394
+ typeof value === 'string' ? value : JSON.stringify(value);
395
+ }
396
+ log.debug('Setting trace.metadata', {
397
+ metadataKeys: Object.keys(attributes.metadata),
398
+ });
399
+ }
400
+ // Add any other custom attributes
401
+ for (const [key, value] of Object.entries(attributes)) {
402
+ if (key !== 'userId' &&
403
+ key !== 'sessionId' &&
404
+ key !== 'tags' &&
405
+ key !== 'metadata') {
406
+ otelAttributes[key] = value;
407
+ }
408
+ }
409
+ span.setAttributes(otelAttributes);
410
+ log.info('Updated active trace', {
411
+ spanId: spanContext.spanId,
412
+ traceId: spanContext.traceId,
413
+ attributeCount: Object.keys(otelAttributes).length,
414
+ });
415
+ }
416
+ /**
417
+ * Updates the currently active span with new attributes.
418
+ *
419
+ * This function finds the currently active OpenTelemetry span in the execution context
420
+ * and updates it with span-level attributes. If no active span exists, the update is skipped.
421
+ *
422
+ * @param attributes - Span attributes to update
423
+ *
424
+ * @example
425
+ * ```typescript
426
+ * import { startSpan, updateActiveSpan } from '@pingops/sdk';
427
+ *
428
+ * await startSpan('data-processing', {
429
+ * attributes: { step: 'initialization' },
430
+ * }, async (span) => {
431
+ * // Process data...
432
+ * const result = await processData(inputData);
433
+ *
434
+ * // Update with results
435
+ * updateActiveSpan({
436
+ * attributes: { processed_records: result.count },
437
+ * output: { success: true },
438
+ * });
439
+ * });
440
+ * ```
441
+ */
442
+ export function updateActiveSpan(attributes) {
443
+ log.debug('Updating active span', {
444
+ hasAttributes: attributes.attributes !== undefined,
445
+ hasInput: attributes.input !== undefined,
446
+ hasOutput: attributes.output !== undefined,
447
+ hasMetadata: attributes.metadata !== undefined,
448
+ customAttributeCount: Object.keys(attributes).filter(k => !['attributes', 'input', 'output', 'metadata'].includes(k)).length,
449
+ });
450
+ const span = trace.getActiveSpan();
451
+ if (!span) {
452
+ log.warn('No active span found, skipping span update');
453
+ return;
454
+ }
455
+ const spanContext = span.spanContext();
456
+ log.debug('Found active span for update', {
457
+ spanId: spanContext.spanId,
458
+ traceId: spanContext.traceId,
459
+ });
460
+ const otelAttributes = {};
461
+ // Handle nested attributes object
462
+ if (attributes.attributes) {
463
+ Object.assign(otelAttributes, attributes.attributes);
464
+ log.debug('Added nested attributes', {
465
+ attributeCount: Object.keys(attributes.attributes).length,
466
+ });
467
+ }
468
+ // Handle input/output
469
+ if (attributes.input !== undefined) {
470
+ otelAttributes['span.input'] =
471
+ typeof attributes.input === 'string'
472
+ ? attributes.input
473
+ : JSON.stringify(attributes.input);
474
+ log.debug('Setting span.input', {
475
+ inputType: typeof attributes.input,
476
+ inputLength: typeof attributes.input === 'string'
477
+ ? attributes.input.length
478
+ : JSON.stringify(attributes.input).length,
479
+ });
480
+ }
481
+ if (attributes.output !== undefined) {
482
+ otelAttributes['span.output'] =
483
+ typeof attributes.output === 'string'
484
+ ? attributes.output
485
+ : JSON.stringify(attributes.output);
486
+ log.debug('Setting span.output', {
487
+ outputType: typeof attributes.output,
488
+ outputLength: typeof attributes.output === 'string'
489
+ ? attributes.output.length
490
+ : JSON.stringify(attributes.output).length,
491
+ });
492
+ }
493
+ // Handle metadata
494
+ if (attributes.metadata !== undefined) {
495
+ for (const [key, value] of Object.entries(attributes.metadata)) {
496
+ otelAttributes[`span.metadata.${key}`] =
497
+ typeof value === 'string' ? value : JSON.stringify(value);
498
+ }
499
+ log.debug('Setting span.metadata', {
500
+ metadataKeys: Object.keys(attributes.metadata),
501
+ });
502
+ }
503
+ // Add any other custom attributes (excluding the special keys)
504
+ for (const [key, value] of Object.entries(attributes)) {
505
+ if (key !== 'attributes' &&
506
+ key !== 'input' &&
507
+ key !== 'output' &&
508
+ key !== 'metadata') {
509
+ otelAttributes[key] = value;
510
+ }
511
+ }
512
+ span.setAttributes(otelAttributes);
513
+ // Store attributes in context so they propagate to child spans
514
+ // This allows child spans (like HTTP spans) to inherit parent attributes
515
+ const activeContext = context.active();
516
+ const existingAttributes = activeContext.getValue(PINGOPS_PARENT_SPAN_ATTRIBUTES_KEY);
517
+ const mergedAttributes = existingAttributes
518
+ ? { ...existingAttributes, ...otelAttributes }
519
+ : otelAttributes;
520
+ // Update context with merged attributes
521
+ // Note: The context is immutable, so we create a new context with the merged attributes
522
+ // This new context will be used by child spans created after this point
523
+ const updatedContext = activeContext.setValue(PINGOPS_PARENT_SPAN_ATTRIBUTES_KEY, mergedAttributes);
524
+ // Execute in the updated context so future child spans inherit the attributes
525
+ // This is a no-op for the current execution, but ensures the context is set for child spans
526
+ context.with(updatedContext, () => {
527
+ // Context is now updated - child spans created from this point will inherit attributes
528
+ });
529
+ log.info('Updated active span', {
530
+ spanId: spanContext.spanId,
531
+ traceId: spanContext.traceId,
532
+ spanAttributes: span.attributes || {},
533
+ attributes: otelAttributes,
534
+ contextAttributesStored: true,
535
+ });
536
+ }
537
+ //# sourceMappingURL=tracer-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer-provider.js","sourceRoot":"","sources":["../src/tracer-provider.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@pingops/sdk",
3
+ "version": "0.1.0",
4
+ "description": "PingOps SDK for Node.js",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md"
10
+ ],
11
+ "keywords": [
12
+ "pingops",
13
+ "monitoring",
14
+ "observability",
15
+ "opentelemetry",
16
+ "sdk",
17
+ "nodejs"
18
+ ],
19
+ "license": "MIT",
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "dependencies": {
24
+ "@opentelemetry/api": "^1.9.0",
25
+ "@opentelemetry/resources": "^2.2.0",
26
+ "@opentelemetry/sdk-node": "^0.208.0",
27
+ "@opentelemetry/sdk-trace-node": "^2.2.0",
28
+ "@opentelemetry/semantic-conventions": "^1.38.0",
29
+ "@pingops/otel": "^0.1.0",
30
+ "@pingops/core": "^0.1.0"
31
+ },
32
+ "devDependencies": {
33
+ "@types/node": "^20.11.0",
34
+ "typescript": "^5.6.0"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "clean": "rm -rf dist"
40
+ }
41
+ }