@pingops/otel 0.1.0 → 0.1.2
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/index.cjs +1018 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +342 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +342 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +981 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +23 -11
- package/dist/config.d.ts +0 -75
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -5
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -9
- package/dist/index.js.map +0 -1
- package/dist/instrumentations/body-extractor.d.ts +0 -48
- package/dist/instrumentations/body-extractor.d.ts.map +0 -1
- package/dist/instrumentations/body-extractor.js +0 -361
- package/dist/instrumentations/body-extractor.js.map +0 -1
- package/dist/instrumentations/http.d.ts +0 -12
- package/dist/instrumentations/http.d.ts.map +0 -1
- package/dist/instrumentations/http.js +0 -38
- package/dist/instrumentations/http.js.map +0 -1
- package/dist/instrumentations/index.d.ts +0 -17
- package/dist/instrumentations/index.d.ts.map +0 -1
- package/dist/instrumentations/index.js +0 -32
- package/dist/instrumentations/index.js.map +0 -1
- package/dist/instrumentations/undici.d.ts +0 -12
- package/dist/instrumentations/undici.d.ts.map +0 -1
- package/dist/instrumentations/undici.js +0 -38
- package/dist/instrumentations/undici.js.map +0 -1
- package/dist/processor.d.ts +0 -82
- package/dist/processor.d.ts.map +0 -1
- package/dist/processor.js +0 -264
- package/dist/processor.js.map +0 -1
- package/dist/span-processor.d.ts +0 -78
- package/dist/span-processor.d.ts.map +0 -1
- package/dist/span-processor.js +0 -272
- package/dist/span-processor.js.map +0 -1
- package/dist/span-wrapper.d.ts +0 -60
- package/dist/span-wrapper.d.ts.map +0 -1
- package/dist/span-wrapper.js +0 -118
- package/dist/span-wrapper.js.map +0 -1
- package/dist/tracer-provider.d.ts +0 -57
- package/dist/tracer-provider.d.ts.map +0 -1
- package/dist/tracer-provider.js +0 -182
- package/dist/tracer-provider.js.map +0 -1
package/dist/span-wrapper.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Span wrapper for PingOps SDK
|
|
3
|
-
*
|
|
4
|
-
* Provides PingopsSpan class similar to LangfuseSpan for wrapping OpenTelemetry spans
|
|
5
|
-
* with PingOps-specific functionality.
|
|
6
|
-
*/
|
|
7
|
-
import { TimeInput, Span, SpanContext } from '@opentelemetry/api';
|
|
8
|
-
import type { Attributes } from '@opentelemetry/api';
|
|
9
|
-
import type { SpanAttributes } from './tracer-provider';
|
|
10
|
-
/**
|
|
11
|
-
* Base class for PingOps span wrappers
|
|
12
|
-
*
|
|
13
|
-
* Provides common functionality for wrapping OpenTelemetry spans with PingOps-specific features.
|
|
14
|
-
*/
|
|
15
|
-
declare abstract class PingopsBaseSpan {
|
|
16
|
-
/** The underlying OpenTelemetry span */
|
|
17
|
-
readonly otelSpan: Span;
|
|
18
|
-
/** The span ID from the OpenTelemetry span context */
|
|
19
|
-
id: string;
|
|
20
|
-
/** The trace ID from the OpenTelemetry span context */
|
|
21
|
-
traceId: string;
|
|
22
|
-
constructor(otelSpan: Span);
|
|
23
|
-
/**
|
|
24
|
-
* Ends the span, marking it as complete.
|
|
25
|
-
*
|
|
26
|
-
* @param endTime - Optional end time, defaults to current time
|
|
27
|
-
*/
|
|
28
|
-
end(endTime?: TimeInput): void;
|
|
29
|
-
/**
|
|
30
|
-
* Updates the span with new attributes.
|
|
31
|
-
*
|
|
32
|
-
* @param attributes - Span attributes to set
|
|
33
|
-
* @returns This span for method chaining
|
|
34
|
-
*/
|
|
35
|
-
update(attributes: SpanAttributes): PingopsSpan;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* PingOps span wrapper for tracking operations
|
|
39
|
-
*
|
|
40
|
-
* Provides a convenient wrapper around OpenTelemetry spans with PingOps-specific
|
|
41
|
-
* attribute handling and lifecycle management.
|
|
42
|
-
*/
|
|
43
|
-
export declare class PingopsSpan extends PingopsBaseSpan {
|
|
44
|
-
constructor(otelSpan: Span);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Creates an OpenTelemetry span with the PingOps tracer.
|
|
48
|
-
*
|
|
49
|
-
* @param params - Parameters for span creation
|
|
50
|
-
* @returns The created OpenTelemetry span
|
|
51
|
-
* @internal
|
|
52
|
-
*/
|
|
53
|
-
export declare function createOtelSpan(params: {
|
|
54
|
-
name: string;
|
|
55
|
-
startTime?: TimeInput;
|
|
56
|
-
parentSpanContext?: SpanContext;
|
|
57
|
-
attributes?: Attributes;
|
|
58
|
-
}): Span;
|
|
59
|
-
export {};
|
|
60
|
-
//# sourceMappingURL=span-wrapper.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"span-wrapper.d.ts","sourceRoot":"","sources":["../src/span-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAkB,SAAS,EAAE,IAAI,EAAE,WAAW,EAAW,MAAM,oBAAoB,CAAC;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;GAIG;AACH,uBAAe,eAAe;IAC5B,wCAAwC;IACxC,SAAgB,QAAQ,EAAE,IAAI,CAAC;IAC/B,sDAAsD;IAC/C,EAAE,EAAE,MAAM,CAAC;IAClB,uDAAuD;IAChD,OAAO,EAAE,MAAM,CAAC;gBAEX,QAAQ,EAAE,IAAI;IAO1B;;;;OAIG;IACI,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI;IAIrC;;;;;OAKG;IACI,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,WAAW;CA8CvD;AAED;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,eAAe;gBAClC,QAAQ,EAAE,IAAI;CAG3B;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,IAAI,CAYP"}
|
package/dist/span-wrapper.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Span wrapper for PingOps SDK
|
|
3
|
-
*
|
|
4
|
-
* Provides PingopsSpan class similar to LangfuseSpan for wrapping OpenTelemetry spans
|
|
5
|
-
* with PingOps-specific functionality.
|
|
6
|
-
*/
|
|
7
|
-
import { trace, context } from '@opentelemetry/api';
|
|
8
|
-
import { getPingopsTracerProvider } from './tracer-provider';
|
|
9
|
-
/**
|
|
10
|
-
* Base class for PingOps span wrappers
|
|
11
|
-
*
|
|
12
|
-
* Provides common functionality for wrapping OpenTelemetry spans with PingOps-specific features.
|
|
13
|
-
*/
|
|
14
|
-
class PingopsBaseSpan {
|
|
15
|
-
/** The underlying OpenTelemetry span */
|
|
16
|
-
otelSpan;
|
|
17
|
-
/** The span ID from the OpenTelemetry span context */
|
|
18
|
-
id;
|
|
19
|
-
/** The trace ID from the OpenTelemetry span context */
|
|
20
|
-
traceId;
|
|
21
|
-
constructor(otelSpan) {
|
|
22
|
-
this.otelSpan = otelSpan;
|
|
23
|
-
const spanContext = otelSpan.spanContext();
|
|
24
|
-
this.id = spanContext.spanId;
|
|
25
|
-
this.traceId = spanContext.traceId;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Ends the span, marking it as complete.
|
|
29
|
-
*
|
|
30
|
-
* @param endTime - Optional end time, defaults to current time
|
|
31
|
-
*/
|
|
32
|
-
end(endTime) {
|
|
33
|
-
this.otelSpan.end(endTime);
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Updates the span with new attributes.
|
|
37
|
-
*
|
|
38
|
-
* @param attributes - Span attributes to set
|
|
39
|
-
* @returns This span for method chaining
|
|
40
|
-
*/
|
|
41
|
-
update(attributes) {
|
|
42
|
-
const otelAttributes = {};
|
|
43
|
-
// Handle nested attributes object
|
|
44
|
-
if (attributes.attributes) {
|
|
45
|
-
Object.assign(otelAttributes, attributes.attributes);
|
|
46
|
-
}
|
|
47
|
-
// Handle input/output
|
|
48
|
-
if (attributes.input !== undefined) {
|
|
49
|
-
otelAttributes['span.input'] =
|
|
50
|
-
typeof attributes.input === 'string'
|
|
51
|
-
? attributes.input
|
|
52
|
-
: JSON.stringify(attributes.input);
|
|
53
|
-
}
|
|
54
|
-
if (attributes.output !== undefined) {
|
|
55
|
-
otelAttributes['span.output'] =
|
|
56
|
-
typeof attributes.output === 'string'
|
|
57
|
-
? attributes.output
|
|
58
|
-
: JSON.stringify(attributes.output);
|
|
59
|
-
}
|
|
60
|
-
// Handle metadata
|
|
61
|
-
if (attributes.metadata !== undefined) {
|
|
62
|
-
for (const [key, value] of Object.entries(attributes.metadata)) {
|
|
63
|
-
otelAttributes[`span.metadata.${key}`] =
|
|
64
|
-
typeof value === 'string' ? value : JSON.stringify(value);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// Add any other custom attributes (excluding the special keys)
|
|
68
|
-
for (const [key, value] of Object.entries(attributes)) {
|
|
69
|
-
if (key !== 'attributes' &&
|
|
70
|
-
key !== 'input' &&
|
|
71
|
-
key !== 'output' &&
|
|
72
|
-
key !== 'metadata') {
|
|
73
|
-
otelAttributes[key] = value;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
this.otelSpan.setAttributes(otelAttributes);
|
|
77
|
-
return this;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* PingOps span wrapper for tracking operations
|
|
82
|
-
*
|
|
83
|
-
* Provides a convenient wrapper around OpenTelemetry spans with PingOps-specific
|
|
84
|
-
* attribute handling and lifecycle management.
|
|
85
|
-
*/
|
|
86
|
-
export class PingopsSpan extends PingopsBaseSpan {
|
|
87
|
-
constructor(otelSpan) {
|
|
88
|
-
super(otelSpan);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Creates an OpenTelemetry span with the PingOps tracer.
|
|
93
|
-
*
|
|
94
|
-
* @param params - Parameters for span creation
|
|
95
|
-
* @returns The created OpenTelemetry span
|
|
96
|
-
* @internal
|
|
97
|
-
*/
|
|
98
|
-
export function createOtelSpan(params) {
|
|
99
|
-
const provider = getPingopsTracerProvider();
|
|
100
|
-
const tracer = provider.getTracer('@pingops/sdk', '0.1.0');
|
|
101
|
-
return tracer.startSpan(params.name, {
|
|
102
|
-
startTime: params.startTime,
|
|
103
|
-
attributes: params.attributes,
|
|
104
|
-
}, createParentContext(params.parentSpanContext));
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Creates a parent context from a span context.
|
|
108
|
-
*
|
|
109
|
-
* @param parentSpanContext - The span context to use as parent
|
|
110
|
-
* @returns The created context or undefined if no parent provided
|
|
111
|
-
* @internal
|
|
112
|
-
*/
|
|
113
|
-
function createParentContext(parentSpanContext) {
|
|
114
|
-
if (!parentSpanContext)
|
|
115
|
-
return undefined;
|
|
116
|
-
return trace.setSpanContext(context.active(), parentSpanContext);
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=span-wrapper.js.map
|
package/dist/span-wrapper.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"span-wrapper.js","sourceRoot":"","sources":["../src/span-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
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 type { TracerProvider } from "@opentelemetry/api";
|
|
11
|
-
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
|
|
12
|
-
import type { SpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
13
|
-
/**
|
|
14
|
-
* Sets an isolated TracerProvider for PingOps tracing operations.
|
|
15
|
-
*
|
|
16
|
-
* This allows PingOps to use its own TracerProvider instance, separate from
|
|
17
|
-
* the global OpenTelemetry TracerProvider. This is useful for avoiding conflicts
|
|
18
|
-
* with other OpenTelemetry instrumentation in the application.
|
|
19
|
-
*
|
|
20
|
-
* @param provider - The TracerProvider instance to use, or null to clear the isolated provider
|
|
21
|
-
* @public
|
|
22
|
-
*/
|
|
23
|
-
export declare function setPingopsTracerProvider(provider: TracerProvider | null): void;
|
|
24
|
-
/**
|
|
25
|
-
* Gets the TracerProvider for PingOps tracing operations.
|
|
26
|
-
*
|
|
27
|
-
* Returns the isolated TracerProvider if one has been set via setPingopsTracerProvider(),
|
|
28
|
-
* otherwise falls back to the global OpenTelemetry TracerProvider.
|
|
29
|
-
*
|
|
30
|
-
* @returns The TracerProvider instance to use for PingOps tracing
|
|
31
|
-
* @public
|
|
32
|
-
*/
|
|
33
|
-
export declare function getPingopsTracerProvider(): TracerProvider;
|
|
34
|
-
/**
|
|
35
|
-
* Initializes the isolated TracerProvider with the given span processors
|
|
36
|
-
*
|
|
37
|
-
* This creates a separate TracerProvider that shares the same span processors
|
|
38
|
-
* (like PingopsSpanProcessor) with the main SDK. This ensures manual spans
|
|
39
|
-
* are processed correctly.
|
|
40
|
-
*
|
|
41
|
-
* @param spanProcessors - Array of span processors to use (e.g., PingopsSpanProcessor)
|
|
42
|
-
* @param serviceName - Service name for resource attributes
|
|
43
|
-
* @deprecated Use setPingopsTracerProvider instead
|
|
44
|
-
*/
|
|
45
|
-
export declare function initializeTracerProvider(spanProcessors: SpanProcessor[], serviceName: string): void;
|
|
46
|
-
/**
|
|
47
|
-
* Gets the isolated TracerProvider instance
|
|
48
|
-
*
|
|
49
|
-
* @returns The TracerProvider instance, or null if not initialized
|
|
50
|
-
* @deprecated Use getPingopsTracerProvider instead
|
|
51
|
-
*/
|
|
52
|
-
export declare function getTracerProvider(): NodeTracerProvider | null;
|
|
53
|
-
/**
|
|
54
|
-
* Shuts down the TracerProvider and flushes remaining spans
|
|
55
|
-
*/
|
|
56
|
-
export declare function shutdownTracerProvider(): Promise<void>;
|
|
57
|
-
//# sourceMappingURL=tracer-provider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracer-provider.d.ts","sourceRoot":"","sources":["../src/tracer-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AA4EnE;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAC9B,IAAI,CAcN;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAezD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,aAAa,EAAE,EAC/B,WAAW,EAAE,MAAM,GAClB,IAAI,CA4BN;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,GAAG,IAAI,CAG7D;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA6B5D"}
|
package/dist/tracer-provider.js
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
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 { 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
|
-
/**
|
|
16
|
-
* Global symbol for PingOps state
|
|
17
|
-
*/
|
|
18
|
-
const PINGOPS_GLOBAL_SYMBOL = Symbol.for("pingops");
|
|
19
|
-
/**
|
|
20
|
-
* Logger instance for tracer provider
|
|
21
|
-
*/
|
|
22
|
-
const log = createLogger("[PingOps TracerProvider]");
|
|
23
|
-
/**
|
|
24
|
-
* Creates initial global state
|
|
25
|
-
*/
|
|
26
|
-
function createState() {
|
|
27
|
-
return {
|
|
28
|
-
isolatedTracerProvider: null,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Gets the global state, creating it if it doesn't exist
|
|
33
|
-
*/
|
|
34
|
-
function getGlobalState() {
|
|
35
|
-
const initialState = createState();
|
|
36
|
-
try {
|
|
37
|
-
const g = globalThis;
|
|
38
|
-
if (typeof g !== "object" || g === null) {
|
|
39
|
-
// Fallback if globalThis is not available
|
|
40
|
-
log.warn("globalThis is not available, using fallback state");
|
|
41
|
-
return initialState;
|
|
42
|
-
}
|
|
43
|
-
if (!g[PINGOPS_GLOBAL_SYMBOL]) {
|
|
44
|
-
log.debug("Creating new global state");
|
|
45
|
-
Object.defineProperty(g, PINGOPS_GLOBAL_SYMBOL, {
|
|
46
|
-
value: initialState,
|
|
47
|
-
writable: false, // lock the slot (not the contents)
|
|
48
|
-
configurable: false,
|
|
49
|
-
enumerable: false,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
log.debug("Retrieved existing global state");
|
|
54
|
-
}
|
|
55
|
-
return g[PINGOPS_GLOBAL_SYMBOL];
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
log.error("Failed to access global state:", err instanceof Error ? err.message : String(err));
|
|
59
|
-
// Fallback on error
|
|
60
|
-
return initialState;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Sets an isolated TracerProvider for PingOps tracing operations.
|
|
65
|
-
*
|
|
66
|
-
* This allows PingOps to use its own TracerProvider instance, separate from
|
|
67
|
-
* the global OpenTelemetry TracerProvider. This is useful for avoiding conflicts
|
|
68
|
-
* with other OpenTelemetry instrumentation in the application.
|
|
69
|
-
*
|
|
70
|
-
* @param provider - The TracerProvider instance to use, or null to clear the isolated provider
|
|
71
|
-
* @public
|
|
72
|
-
*/
|
|
73
|
-
export function setPingopsTracerProvider(provider) {
|
|
74
|
-
const state = getGlobalState();
|
|
75
|
-
const hadProvider = state.isolatedTracerProvider !== null;
|
|
76
|
-
state.isolatedTracerProvider = provider;
|
|
77
|
-
if (provider) {
|
|
78
|
-
log.info("Set isolated TracerProvider", {
|
|
79
|
-
hadPrevious: hadProvider,
|
|
80
|
-
providerType: provider.constructor.name,
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
log.info("Cleared isolated TracerProvider", { hadPrevious: hadProvider });
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Gets the TracerProvider for PingOps tracing operations.
|
|
89
|
-
*
|
|
90
|
-
* Returns the isolated TracerProvider if one has been set via setPingopsTracerProvider(),
|
|
91
|
-
* otherwise falls back to the global OpenTelemetry TracerProvider.
|
|
92
|
-
*
|
|
93
|
-
* @returns The TracerProvider instance to use for PingOps tracing
|
|
94
|
-
* @public
|
|
95
|
-
*/
|
|
96
|
-
export function getPingopsTracerProvider() {
|
|
97
|
-
const { isolatedTracerProvider } = getGlobalState();
|
|
98
|
-
if (isolatedTracerProvider) {
|
|
99
|
-
log.debug("Using isolated TracerProvider", {
|
|
100
|
-
providerType: isolatedTracerProvider.constructor.name,
|
|
101
|
-
});
|
|
102
|
-
return isolatedTracerProvider;
|
|
103
|
-
}
|
|
104
|
-
const globalProvider = trace.getTracerProvider();
|
|
105
|
-
log.debug("Using global TracerProvider", {
|
|
106
|
-
providerType: globalProvider.constructor.name,
|
|
107
|
-
});
|
|
108
|
-
return globalProvider;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Initializes the isolated TracerProvider with the given span processors
|
|
112
|
-
*
|
|
113
|
-
* This creates a separate TracerProvider that shares the same span processors
|
|
114
|
-
* (like PingopsSpanProcessor) with the main SDK. This ensures manual spans
|
|
115
|
-
* are processed correctly.
|
|
116
|
-
*
|
|
117
|
-
* @param spanProcessors - Array of span processors to use (e.g., PingopsSpanProcessor)
|
|
118
|
-
* @param serviceName - Service name for resource attributes
|
|
119
|
-
* @deprecated Use setPingopsTracerProvider instead
|
|
120
|
-
*/
|
|
121
|
-
export function initializeTracerProvider(spanProcessors, serviceName) {
|
|
122
|
-
log.info("Initializing TracerProvider", {
|
|
123
|
-
serviceName,
|
|
124
|
-
spanProcessorCount: spanProcessors.length,
|
|
125
|
-
});
|
|
126
|
-
// Create resource with service name
|
|
127
|
-
const resource = resourceFromAttributes({
|
|
128
|
-
[ATTR_SERVICE_NAME]: serviceName,
|
|
129
|
-
});
|
|
130
|
-
log.debug("Created resource", { serviceName });
|
|
131
|
-
// In version 2.2.0, span processors are passed in the constructor
|
|
132
|
-
const tracerProvider = new NodeTracerProvider({
|
|
133
|
-
resource,
|
|
134
|
-
spanProcessors,
|
|
135
|
-
});
|
|
136
|
-
log.debug("Created NodeTracerProvider", {
|
|
137
|
-
spanProcessorCount: spanProcessors.length,
|
|
138
|
-
});
|
|
139
|
-
// Register the provider globally
|
|
140
|
-
tracerProvider.register();
|
|
141
|
-
log.info("Registered TracerProvider globally");
|
|
142
|
-
// Set it in global state
|
|
143
|
-
setPingopsTracerProvider(tracerProvider);
|
|
144
|
-
log.info("TracerProvider initialization complete");
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Gets the isolated TracerProvider instance
|
|
148
|
-
*
|
|
149
|
-
* @returns The TracerProvider instance, or null if not initialized
|
|
150
|
-
* @deprecated Use getPingopsTracerProvider instead
|
|
151
|
-
*/
|
|
152
|
-
export function getTracerProvider() {
|
|
153
|
-
const provider = getPingopsTracerProvider();
|
|
154
|
-
return provider instanceof NodeTracerProvider ? provider : null;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Shuts down the TracerProvider and flushes remaining spans
|
|
158
|
-
*/
|
|
159
|
-
export async function shutdownTracerProvider() {
|
|
160
|
-
log.info("Shutting down TracerProvider");
|
|
161
|
-
const provider = getPingopsTracerProvider();
|
|
162
|
-
// Check if provider has shutdown method (NodeTracerProvider and compatible providers)
|
|
163
|
-
const providerWithShutdown = provider;
|
|
164
|
-
if (providerWithShutdown &&
|
|
165
|
-
typeof providerWithShutdown.shutdown === "function") {
|
|
166
|
-
log.debug("Calling provider.shutdown()");
|
|
167
|
-
try {
|
|
168
|
-
await providerWithShutdown.shutdown();
|
|
169
|
-
log.info("TracerProvider shutdown complete");
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
log.error("Error during TracerProvider shutdown:", error instanceof Error ? error.message : String(error));
|
|
173
|
-
throw error;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
log.warn("TracerProvider does not have shutdown method, skipping");
|
|
178
|
-
}
|
|
179
|
-
setPingopsTracerProvider(null);
|
|
180
|
-
log.info("TracerProvider shutdown finished");
|
|
181
|
-
}
|
|
182
|
-
//# sourceMappingURL=tracer-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracer-provider.js","sourceRoot":"","sources":["../src/tracer-provider.ts"],"names":[],"mappings":"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"}
|