@effect/opentelemetry 0.60.0 → 4.0.0-beta.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.
- package/LICENSE +1 -1
- package/dist/{dts/Logger.d.ts → Logger.d.ts} +19 -13
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +76 -0
- package/dist/Logger.js.map +1 -0
- package/dist/Metrics.d.ts +76 -0
- package/dist/Metrics.d.ts.map +1 -0
- package/dist/Metrics.js +59 -0
- package/dist/Metrics.js.map +1 -0
- package/dist/{dts/NodeSdk.d.ts → NodeSdk.d.ts} +12 -9
- package/dist/NodeSdk.d.ts.map +1 -0
- package/dist/{esm/NodeSdk.js → NodeSdk.js} +23 -14
- package/dist/NodeSdk.js.map +1 -0
- package/dist/{dts/Resource.d.ts → Resource.d.ts} +10 -13
- package/dist/Resource.d.ts.map +1 -0
- package/dist/{esm/Resource.js → Resource.js} +12 -13
- package/dist/Resource.js.map +1 -0
- package/dist/Tracer.d.ts +129 -0
- package/dist/Tracer.d.ts.map +1 -0
- package/dist/Tracer.js +391 -0
- package/dist/Tracer.js.map +1 -0
- package/dist/{dts/WebSdk.d.ts → WebSdk.d.ts} +12 -9
- package/dist/WebSdk.d.ts.map +1 -0
- package/dist/WebSdk.js +41 -0
- package/dist/WebSdk.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{esm/index.js → index.js} +4 -20
- package/dist/index.js.map +1 -0
- package/dist/internal/attributes.d.ts +2 -0
- package/dist/internal/attributes.d.ts.map +1 -0
- package/dist/internal/attributes.js +19 -0
- package/dist/internal/attributes.js.map +1 -0
- package/dist/{dts/internal → internal}/metrics.d.ts.map +1 -1
- package/dist/internal/metrics.js +406 -0
- package/dist/internal/metrics.js.map +1 -0
- package/dist/internal/utilities.d.ts +2 -0
- package/dist/internal/utilities.d.ts.map +1 -0
- package/dist/internal/utilities.js +3 -0
- package/dist/internal/utilities.js.map +1 -0
- package/package.json +70 -118
- package/src/Logger.ts +52 -55
- package/src/Metrics.ts +92 -18
- package/src/NodeSdk.ts +67 -64
- package/src/Resource.ts +16 -24
- package/src/Tracer.ts +469 -78
- package/src/WebSdk.ts +59 -51
- package/src/index.ts +7 -26
- package/src/internal/attributes.ts +21 -0
- package/src/internal/metrics.ts +381 -250
- package/src/internal/utilities.ts +5 -0
- package/Logger/package.json +0 -6
- package/Metrics/package.json +0 -6
- package/NodeSdk/package.json +0 -6
- package/Otlp/package.json +0 -6
- package/OtlpLogger/package.json +0 -6
- package/OtlpMetrics/package.json +0 -6
- package/OtlpResource/package.json +0 -6
- package/OtlpTracer/package.json +0 -6
- package/Resource/package.json +0 -6
- package/Tracer/package.json +0 -6
- package/WebSdk/package.json +0 -6
- package/dist/cjs/Logger.js +0 -85
- package/dist/cjs/Logger.js.map +0 -1
- package/dist/cjs/Metrics.js +0 -24
- package/dist/cjs/Metrics.js.map +0 -1
- package/dist/cjs/NodeSdk.js +0 -53
- package/dist/cjs/NodeSdk.js.map +0 -1
- package/dist/cjs/Otlp.js +0 -46
- package/dist/cjs/Otlp.js.map +0 -1
- package/dist/cjs/OtlpLogger.js +0 -158
- package/dist/cjs/OtlpLogger.js.map +0 -1
- package/dist/cjs/OtlpMetrics.js +0 -354
- package/dist/cjs/OtlpMetrics.js.map +0 -1
- package/dist/cjs/OtlpResource.js +0 -136
- package/dist/cjs/OtlpResource.js.map +0 -1
- package/dist/cjs/OtlpTracer.js +0 -229
- package/dist/cjs/OtlpTracer.js.map +0 -1
- package/dist/cjs/Resource.js +0 -75
- package/dist/cjs/Resource.js.map +0 -1
- package/dist/cjs/Tracer.js +0 -87
- package/dist/cjs/Tracer.js.map +0 -1
- package/dist/cjs/WebSdk.js +0 -42
- package/dist/cjs/WebSdk.js.map +0 -1
- package/dist/cjs/index.js +0 -30
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/internal/metrics.js +0 -288
- package/dist/cjs/internal/metrics.js.map +0 -1
- package/dist/cjs/internal/otlpExporter.js +0 -81
- package/dist/cjs/internal/otlpExporter.js.map +0 -1
- package/dist/cjs/internal/tracer.js +0 -299
- package/dist/cjs/internal/tracer.js.map +0 -1
- package/dist/cjs/internal/utils.js +0 -34
- package/dist/cjs/internal/utils.js.map +0 -1
- package/dist/dts/Logger.d.ts.map +0 -1
- package/dist/dts/Metrics.d.ts +0 -29
- package/dist/dts/Metrics.d.ts.map +0 -1
- package/dist/dts/NodeSdk.d.ts.map +0 -1
- package/dist/dts/Otlp.d.ts +0 -31
- package/dist/dts/Otlp.d.ts.map +0 -1
- package/dist/dts/OtlpLogger.d.ts +0 -46
- package/dist/dts/OtlpLogger.d.ts.map +0 -1
- package/dist/dts/OtlpMetrics.d.ts +0 -40
- package/dist/dts/OtlpMetrics.d.ts.map +0 -1
- package/dist/dts/OtlpResource.d.ts +0 -104
- package/dist/dts/OtlpResource.d.ts.map +0 -1
- package/dist/dts/OtlpTracer.d.ts +0 -49
- package/dist/dts/OtlpTracer.d.ts.map +0 -1
- package/dist/dts/Resource.d.ts.map +0 -1
- package/dist/dts/Tracer.d.ts +0 -143
- package/dist/dts/Tracer.d.ts.map +0 -1
- package/dist/dts/WebSdk.d.ts.map +0 -1
- package/dist/dts/index.d.ts +0 -45
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/dts/internal/otlpExporter.d.ts +0 -2
- package/dist/dts/internal/otlpExporter.d.ts.map +0 -1
- package/dist/dts/internal/tracer.d.ts +0 -2
- package/dist/dts/internal/tracer.d.ts.map +0 -1
- package/dist/dts/internal/utils.d.ts +0 -2
- package/dist/dts/internal/utils.d.ts.map +0 -1
- package/dist/esm/Logger.js +0 -75
- package/dist/esm/Logger.js.map +0 -1
- package/dist/esm/Metrics.js +0 -17
- package/dist/esm/Metrics.js.map +0 -1
- package/dist/esm/NodeSdk.js.map +0 -1
- package/dist/esm/Otlp.js +0 -38
- package/dist/esm/Otlp.js.map +0 -1
- package/dist/esm/OtlpLogger.js +0 -150
- package/dist/esm/OtlpLogger.js.map +0 -1
- package/dist/esm/OtlpMetrics.js +0 -346
- package/dist/esm/OtlpMetrics.js.map +0 -1
- package/dist/esm/OtlpResource.js +0 -124
- package/dist/esm/OtlpResource.js.map +0 -1
- package/dist/esm/OtlpTracer.js +0 -221
- package/dist/esm/OtlpTracer.js.map +0 -1
- package/dist/esm/Resource.js.map +0 -1
- package/dist/esm/Tracer.js +0 -80
- package/dist/esm/Tracer.js.map +0 -1
- package/dist/esm/WebSdk.js +0 -33
- package/dist/esm/WebSdk.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/internal/metrics.js +0 -278
- package/dist/esm/internal/metrics.js.map +0 -1
- package/dist/esm/internal/otlpExporter.js +0 -74
- package/dist/esm/internal/otlpExporter.js.map +0 -1
- package/dist/esm/internal/tracer.js +0 -290
- package/dist/esm/internal/tracer.js.map +0 -1
- package/dist/esm/internal/utils.js +0 -23
- package/dist/esm/internal/utils.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/index/package.json +0 -6
- package/src/Otlp.ts +0 -66
- package/src/OtlpLogger.ts +0 -258
- package/src/OtlpMetrics.ts +0 -571
- package/src/OtlpResource.ts +0 -232
- package/src/OtlpTracer.ts +0 -349
- package/src/internal/otlpExporter.ts +0 -124
- package/src/internal/tracer.ts +0 -437
- package/src/internal/utils.ts +0 -31
- /package/dist/{dts/internal → internal}/metrics.d.ts +0 -0
package/dist/Tracer.d.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Otel from "@opentelemetry/api";
|
|
5
|
+
import * as Cause from "effect/Cause";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as Layer from "effect/Layer";
|
|
8
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
9
|
+
import * as Tracer from "effect/Tracer";
|
|
10
|
+
import { Resource } from "./Resource.ts";
|
|
11
|
+
declare const OtelTracer_base: ServiceMap.ServiceClass<OtelTracer, "@effect/opentelemetry/Tracer", Otel.Tracer>;
|
|
12
|
+
/**
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
* @category Services
|
|
15
|
+
*/
|
|
16
|
+
export declare class OtelTracer extends OtelTracer_base {
|
|
17
|
+
}
|
|
18
|
+
declare const OtelTracerProvider_base: ServiceMap.ServiceClass<OtelTracerProvider, "@effect/opentelemetry/Tracer/OtelTracerProvider", Otel.TracerProvider>;
|
|
19
|
+
/**
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
* @category Services
|
|
22
|
+
*/
|
|
23
|
+
export declare class OtelTracerProvider extends OtelTracerProvider_base {
|
|
24
|
+
}
|
|
25
|
+
declare const OtelTraceFlags_base: ServiceMap.ServiceClass<OtelTraceFlags, "@effect/opentelemetry/Tracer/OtelTraceFlags", Otel.TraceFlags>;
|
|
26
|
+
/**
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
* @category Services
|
|
29
|
+
*/
|
|
30
|
+
export declare class OtelTraceFlags extends OtelTraceFlags_base {
|
|
31
|
+
}
|
|
32
|
+
declare const OtelTraceState_base: ServiceMap.ServiceClass<OtelTraceState, "@effect/opentelemetry/Tracer/OtelTraceState", Otel.TraceState>;
|
|
33
|
+
/**
|
|
34
|
+
* @since 1.0.0
|
|
35
|
+
* @category Services
|
|
36
|
+
*/
|
|
37
|
+
export declare class OtelTraceState extends OtelTraceState_base {
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @since 1.0.0
|
|
41
|
+
* @category Constructors
|
|
42
|
+
*/
|
|
43
|
+
export declare const make: Effect.Effect<Tracer.Tracer, never, OtelTracer>;
|
|
44
|
+
/**
|
|
45
|
+
* @since 1.0.0
|
|
46
|
+
* @category Constructors
|
|
47
|
+
*/
|
|
48
|
+
export declare const makeExternalSpan: (options: {
|
|
49
|
+
readonly traceId: string;
|
|
50
|
+
readonly spanId: string;
|
|
51
|
+
readonly traceFlags?: number | undefined;
|
|
52
|
+
readonly traceState?: string | Otel.TraceState | undefined;
|
|
53
|
+
}) => Tracer.ExternalSpan;
|
|
54
|
+
/**
|
|
55
|
+
* @since 1.0.0
|
|
56
|
+
* @category Layers
|
|
57
|
+
*/
|
|
58
|
+
export declare const layerGlobalProvider: Layer.Layer<OtelTracerProvider>;
|
|
59
|
+
/**
|
|
60
|
+
* @since 1.0.0
|
|
61
|
+
* @category Layers
|
|
62
|
+
*/
|
|
63
|
+
export declare const layerTracer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Resource>;
|
|
64
|
+
/**
|
|
65
|
+
* @since 1.0.0
|
|
66
|
+
* @category Layers
|
|
67
|
+
*/
|
|
68
|
+
export declare const layerGlobalTracer: Layer.Layer<OtelTracer, never, Resource>;
|
|
69
|
+
/**
|
|
70
|
+
* @since 1.0.0
|
|
71
|
+
* @category Layers
|
|
72
|
+
*/
|
|
73
|
+
export declare const layerGlobal: Layer.Layer<OtelTracer, never, Resource>;
|
|
74
|
+
/**
|
|
75
|
+
* @since 1.0.0
|
|
76
|
+
* @category Layers
|
|
77
|
+
*/
|
|
78
|
+
export declare const layerWithoutOtelTracer: Layer.Layer<never, never, OtelTracer>;
|
|
79
|
+
/**
|
|
80
|
+
* @since 1.0.0
|
|
81
|
+
* @category Layers
|
|
82
|
+
*/
|
|
83
|
+
export declare const layer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Resource>;
|
|
84
|
+
/**
|
|
85
|
+
* Get the current OpenTelemetry span.
|
|
86
|
+
*
|
|
87
|
+
* Works with both the official OpenTelemetry API (via `Tracer.layer`,
|
|
88
|
+
* `NodeSdk.layer`, etc.) and the lightweight OTLP module (`OtlpTracer.layer`).
|
|
89
|
+
*
|
|
90
|
+
* When using OTLP, the returned span is a wrapper that conforms to the
|
|
91
|
+
* OpenTelemetry `Span` interface.
|
|
92
|
+
*
|
|
93
|
+
* @since 1.0.0
|
|
94
|
+
* @category accessors
|
|
95
|
+
*/
|
|
96
|
+
export declare const currentOtelSpan: Effect.Effect<Otel.Span, Cause.NoSuchElementError>;
|
|
97
|
+
/**
|
|
98
|
+
* Set the effect's parent span from the given opentelemetry `SpanContext`.
|
|
99
|
+
*
|
|
100
|
+
* This is handy when you set up OpenTelemetry outside of Effect and want to
|
|
101
|
+
* attach to a parent span.
|
|
102
|
+
*
|
|
103
|
+
* @since 1.0.0
|
|
104
|
+
* @category Propagation
|
|
105
|
+
*/
|
|
106
|
+
export declare const withSpanContext: {
|
|
107
|
+
/**
|
|
108
|
+
* Set the effect's parent span from the given opentelemetry `SpanContext`.
|
|
109
|
+
*
|
|
110
|
+
* This is handy when you set up OpenTelemetry outside of Effect and want to
|
|
111
|
+
* attach to a parent span.
|
|
112
|
+
*
|
|
113
|
+
* @since 1.0.0
|
|
114
|
+
* @category Propagation
|
|
115
|
+
*/
|
|
116
|
+
(spanContext: Otel.SpanContext): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>;
|
|
117
|
+
/**
|
|
118
|
+
* Set the effect's parent span from the given opentelemetry `SpanContext`.
|
|
119
|
+
*
|
|
120
|
+
* This is handy when you set up OpenTelemetry outside of Effect and want to
|
|
121
|
+
* attach to a parent span.
|
|
122
|
+
*
|
|
123
|
+
* @since 1.0.0
|
|
124
|
+
* @category Propagation
|
|
125
|
+
*/
|
|
126
|
+
<A, E, R>(self: Effect.Effect<A, E, R>, spanContext: Otel.SpanContext): Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>;
|
|
127
|
+
};
|
|
128
|
+
export {};
|
|
129
|
+
//# sourceMappingURL=Tracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tracer.d.ts","sourceRoot":"","sources":["../src/Tracer.ts"],"names":[],"mappings":"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"}
|
package/dist/Tracer.js
ADDED
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Otel from "@opentelemetry/api";
|
|
5
|
+
import * as OtelSemConv from "@opentelemetry/semantic-conventions";
|
|
6
|
+
import * as Cause from "effect/Cause";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as Exit from "effect/Exit";
|
|
9
|
+
import { constTrue, dual } from "effect/Function";
|
|
10
|
+
import * as Layer from "effect/Layer";
|
|
11
|
+
import * as Predicate from "effect/Predicate";
|
|
12
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
13
|
+
import * as Tracer from "effect/Tracer";
|
|
14
|
+
import { recordToAttributes, unknownToAttributeValue } from "./internal/attributes.js";
|
|
15
|
+
import { Resource } from "./Resource.js";
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Service Definitions
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
* @category Services
|
|
22
|
+
*/
|
|
23
|
+
export class OtelTracer extends /*#__PURE__*/ServiceMap.Service()("@effect/opentelemetry/Tracer") {}
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
* @category Services
|
|
27
|
+
*/
|
|
28
|
+
export class OtelTracerProvider extends /*#__PURE__*/ServiceMap.Service()("@effect/opentelemetry/Tracer/OtelTracerProvider") {}
|
|
29
|
+
/**
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
* @category Services
|
|
32
|
+
*/
|
|
33
|
+
export class OtelTraceFlags extends /*#__PURE__*/ServiceMap.Service()("@effect/opentelemetry/Tracer/OtelTraceFlags") {}
|
|
34
|
+
/**
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
* @category Services
|
|
37
|
+
*/
|
|
38
|
+
export class OtelTraceState extends /*#__PURE__*/ServiceMap.Service()("@effect/opentelemetry/Tracer/OtelTraceState") {}
|
|
39
|
+
// =============================================================================
|
|
40
|
+
// Constructors
|
|
41
|
+
// =============================================================================
|
|
42
|
+
/**
|
|
43
|
+
* @since 1.0.0
|
|
44
|
+
* @category Constructors
|
|
45
|
+
*/
|
|
46
|
+
export const make = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.service(OtelTracer), tracer => Tracer.make({
|
|
47
|
+
span(options) {
|
|
48
|
+
return new OtelSpan(Otel.context, Otel.trace, tracer, options);
|
|
49
|
+
},
|
|
50
|
+
context(primitive, fiber) {
|
|
51
|
+
const currentSpan = fiber.currentSpan;
|
|
52
|
+
if (currentSpan === undefined) {
|
|
53
|
+
return primitive["~effect/Effect/evaluate"](fiber);
|
|
54
|
+
}
|
|
55
|
+
return Otel.context.with(populateContext(Otel.context.active(), currentSpan), () => primitive["~effect/Effect/evaluate"](fiber));
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
/**
|
|
59
|
+
* @since 1.0.0
|
|
60
|
+
* @category Constructors
|
|
61
|
+
*/
|
|
62
|
+
export const makeExternalSpan = options => {
|
|
63
|
+
let annotations = ServiceMap.empty();
|
|
64
|
+
if (options.traceFlags !== undefined) {
|
|
65
|
+
annotations = ServiceMap.add(annotations, OtelTraceFlags, options.traceFlags);
|
|
66
|
+
}
|
|
67
|
+
if (typeof options.traceState === "string") {
|
|
68
|
+
try {
|
|
69
|
+
const traceState = Otel.createTraceState(options.traceState);
|
|
70
|
+
annotations = ServiceMap.add(annotations, OtelTraceState, traceState);
|
|
71
|
+
} catch {
|
|
72
|
+
//
|
|
73
|
+
}
|
|
74
|
+
} else if (options.traceState) {
|
|
75
|
+
annotations = ServiceMap.add(annotations, OtelTraceState, options.traceState);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
_tag: "ExternalSpan",
|
|
79
|
+
traceId: options.traceId,
|
|
80
|
+
spanId: options.spanId,
|
|
81
|
+
sampled: Predicate.isNotUndefined(options.traceFlags) ? isSampled(options.traceFlags) : true,
|
|
82
|
+
annotations
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
// =============================================================================
|
|
86
|
+
// Layers
|
|
87
|
+
// =============================================================================
|
|
88
|
+
/**
|
|
89
|
+
* @since 1.0.0
|
|
90
|
+
* @category Layers
|
|
91
|
+
*/
|
|
92
|
+
export const layerGlobalProvider = /*#__PURE__*/Layer.sync(OtelTracerProvider, () => Otel.trace.getTracerProvider());
|
|
93
|
+
/**
|
|
94
|
+
* @since 1.0.0
|
|
95
|
+
* @category Layers
|
|
96
|
+
*/
|
|
97
|
+
export const layerTracer = /*#__PURE__*/Layer.effect(OtelTracer, /*#__PURE__*/Effect.gen(function* () {
|
|
98
|
+
const resource = yield* Resource;
|
|
99
|
+
const provider = yield* OtelTracerProvider;
|
|
100
|
+
return provider.getTracer(resource.attributes[OtelSemConv.ATTR_SERVICE_NAME], resource.attributes[OtelSemConv.ATTR_SERVICE_VERSION]);
|
|
101
|
+
}));
|
|
102
|
+
/**
|
|
103
|
+
* @since 1.0.0
|
|
104
|
+
* @category Layers
|
|
105
|
+
*/
|
|
106
|
+
export const layerGlobalTracer = /*#__PURE__*/layerTracer.pipe(/*#__PURE__*/Layer.provide(layerGlobalProvider));
|
|
107
|
+
/**
|
|
108
|
+
* @since 1.0.0
|
|
109
|
+
* @category Layers
|
|
110
|
+
*/
|
|
111
|
+
export const layerGlobal = /*#__PURE__*/Layer.effect(Tracer.Tracer, make).pipe(/*#__PURE__*/Layer.provideMerge(layerGlobalTracer));
|
|
112
|
+
/**
|
|
113
|
+
* @since 1.0.0
|
|
114
|
+
* @category Layers
|
|
115
|
+
*/
|
|
116
|
+
export const layerWithoutOtelTracer = /*#__PURE__*/Layer.effect(Tracer.Tracer, make);
|
|
117
|
+
/**
|
|
118
|
+
* @since 1.0.0
|
|
119
|
+
* @category Layers
|
|
120
|
+
*/
|
|
121
|
+
export const layer = /*#__PURE__*/layerWithoutOtelTracer.pipe(/*#__PURE__*/Layer.provideMerge(layerTracer));
|
|
122
|
+
// =============================================================================
|
|
123
|
+
// Utilities / Combinators
|
|
124
|
+
// =============================================================================
|
|
125
|
+
const bigint1e6 = /*#__PURE__*/BigInt(1_000_000);
|
|
126
|
+
const bigint1e9 = /*#__PURE__*/BigInt(1_000_000_000);
|
|
127
|
+
/**
|
|
128
|
+
* Get the current OpenTelemetry span.
|
|
129
|
+
*
|
|
130
|
+
* Works with both the official OpenTelemetry API (via `Tracer.layer`,
|
|
131
|
+
* `NodeSdk.layer`, etc.) and the lightweight OTLP module (`OtlpTracer.layer`).
|
|
132
|
+
*
|
|
133
|
+
* When using OTLP, the returned span is a wrapper that conforms to the
|
|
134
|
+
* OpenTelemetry `Span` interface.
|
|
135
|
+
*
|
|
136
|
+
* @since 1.0.0
|
|
137
|
+
* @category accessors
|
|
138
|
+
*/
|
|
139
|
+
export const currentOtelSpan = /*#__PURE__*/Effect.clockWith(clock => Effect.map(Effect.currentSpan, span => OtelSpanTypeId in span ? span.span : makeOtelSpan(span, clock)));
|
|
140
|
+
const makeOtelSpan = (span, clock) => {
|
|
141
|
+
const spanContext = {
|
|
142
|
+
traceId: span.traceId,
|
|
143
|
+
spanId: span.spanId,
|
|
144
|
+
traceFlags: span.sampled ? Otel.TraceFlags.SAMPLED : Otel.TraceFlags.NONE,
|
|
145
|
+
isRemote: false
|
|
146
|
+
};
|
|
147
|
+
let exit = Exit.void;
|
|
148
|
+
const self = {
|
|
149
|
+
spanContext: () => spanContext,
|
|
150
|
+
setAttribute(key, value) {
|
|
151
|
+
span.attribute(key, value);
|
|
152
|
+
return self;
|
|
153
|
+
},
|
|
154
|
+
setAttributes(attributes) {
|
|
155
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
156
|
+
span.attribute(key, value);
|
|
157
|
+
}
|
|
158
|
+
return self;
|
|
159
|
+
},
|
|
160
|
+
addEvent(name) {
|
|
161
|
+
let attributes = undefined;
|
|
162
|
+
let startTime = undefined;
|
|
163
|
+
if (arguments.length === 3) {
|
|
164
|
+
attributes = arguments[1];
|
|
165
|
+
startTime = arguments[2];
|
|
166
|
+
} else {
|
|
167
|
+
startTime = arguments[1];
|
|
168
|
+
}
|
|
169
|
+
span.event(name, convertOtelTimeInput(startTime, clock), attributes);
|
|
170
|
+
return self;
|
|
171
|
+
},
|
|
172
|
+
addLink(link) {
|
|
173
|
+
span.addLinks([{
|
|
174
|
+
span: makeExternalSpan(link.context),
|
|
175
|
+
attributes: link.attributes ?? {}
|
|
176
|
+
}]);
|
|
177
|
+
return self;
|
|
178
|
+
},
|
|
179
|
+
addLinks(links) {
|
|
180
|
+
span.addLinks(links.map(link => ({
|
|
181
|
+
span: makeExternalSpan(link.context),
|
|
182
|
+
attributes: link.attributes ?? {}
|
|
183
|
+
})));
|
|
184
|
+
return self;
|
|
185
|
+
},
|
|
186
|
+
setStatus(status) {
|
|
187
|
+
exit = Otel.SpanStatusCode.ERROR ? Exit.die(status.message ?? "Unknown error") : Exit.void;
|
|
188
|
+
return self;
|
|
189
|
+
},
|
|
190
|
+
updateName: () => self,
|
|
191
|
+
end(endTime) {
|
|
192
|
+
const time = convertOtelTimeInput(endTime, clock);
|
|
193
|
+
span.end(time, exit);
|
|
194
|
+
return self;
|
|
195
|
+
},
|
|
196
|
+
isRecording: constTrue,
|
|
197
|
+
recordException(exception, timeInput) {
|
|
198
|
+
const time = convertOtelTimeInput(timeInput, clock);
|
|
199
|
+
const cause = Cause.fail(exception);
|
|
200
|
+
const error = Cause.prettyErrors(cause)[0];
|
|
201
|
+
span.event(error.message, time, {
|
|
202
|
+
"exception.type": error.name,
|
|
203
|
+
"exception.message": error.message,
|
|
204
|
+
"exception.stacktrace": error.stack ?? ""
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
return self;
|
|
209
|
+
};
|
|
210
|
+
const convertOtelTimeInput = (input, clock) => {
|
|
211
|
+
if (input === undefined) {
|
|
212
|
+
return clock.currentTimeNanosUnsafe();
|
|
213
|
+
} else if (typeof input === "number") {
|
|
214
|
+
return BigInt(Math.round(input * 1_000_000));
|
|
215
|
+
} else if (input instanceof Date) {
|
|
216
|
+
return BigInt(input.getTime()) * bigint1e6;
|
|
217
|
+
}
|
|
218
|
+
const [seconds, nanos] = input;
|
|
219
|
+
return BigInt(seconds) * bigint1e9 + BigInt(nanos);
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Set the effect's parent span from the given opentelemetry `SpanContext`.
|
|
223
|
+
*
|
|
224
|
+
* This is handy when you set up OpenTelemetry outside of Effect and want to
|
|
225
|
+
* attach to a parent span.
|
|
226
|
+
*
|
|
227
|
+
* @since 1.0.0
|
|
228
|
+
* @category Propagation
|
|
229
|
+
*/
|
|
230
|
+
export const withSpanContext = /*#__PURE__*/dual(2, (self, spanContext) => Effect.withParentSpan(self, makeExternalSpan(spanContext)));
|
|
231
|
+
// =============================================================================
|
|
232
|
+
// Internals
|
|
233
|
+
// =============================================================================
|
|
234
|
+
const OtelSpanTypeId = "~@effect/opentelemetry/Tracer/OtelSpan";
|
|
235
|
+
const kindMap = {
|
|
236
|
+
"internal": Otel.SpanKind.INTERNAL,
|
|
237
|
+
"client": Otel.SpanKind.CLIENT,
|
|
238
|
+
"server": Otel.SpanKind.SERVER,
|
|
239
|
+
"producer": Otel.SpanKind.PRODUCER,
|
|
240
|
+
"consumer": Otel.SpanKind.CONSUMER
|
|
241
|
+
};
|
|
242
|
+
/** @internal */
|
|
243
|
+
export class OtelSpan {
|
|
244
|
+
[OtelSpanTypeId];
|
|
245
|
+
_tag = "Span";
|
|
246
|
+
name;
|
|
247
|
+
kind;
|
|
248
|
+
annotations;
|
|
249
|
+
links;
|
|
250
|
+
span;
|
|
251
|
+
spanId;
|
|
252
|
+
traceId;
|
|
253
|
+
attributes = /*#__PURE__*/new Map();
|
|
254
|
+
sampled;
|
|
255
|
+
parent;
|
|
256
|
+
status;
|
|
257
|
+
constructor(contextApi, traceApi, tracer, options) {
|
|
258
|
+
this[OtelSpanTypeId] = OtelSpanTypeId;
|
|
259
|
+
this.name = options.name;
|
|
260
|
+
this.annotations = options.annotations;
|
|
261
|
+
this.links = options.links;
|
|
262
|
+
this.kind = options.kind;
|
|
263
|
+
const active = contextApi.active();
|
|
264
|
+
this.parent = options.parent ?? options?.root !== true ? getOtelParent(traceApi, active, options.annotations) : undefined;
|
|
265
|
+
this.span = tracer.startSpan(options.name, {
|
|
266
|
+
startTime: nanosToHrTime(options.startTime),
|
|
267
|
+
links: options.links.length > 0 ? options.links.map(link => ({
|
|
268
|
+
context: makeSpanContext(link.span),
|
|
269
|
+
attributes: recordToAttributes(link.attributes)
|
|
270
|
+
})) : undefined,
|
|
271
|
+
kind: kindMap[this.kind]
|
|
272
|
+
}, this.parent ? populateContext(active, this.parent, options.annotations) : Otel.trace.deleteSpan(active));
|
|
273
|
+
const spanContext = this.span.spanContext();
|
|
274
|
+
this.spanId = spanContext.spanId;
|
|
275
|
+
this.traceId = spanContext.traceId;
|
|
276
|
+
this.status = {
|
|
277
|
+
_tag: "Started",
|
|
278
|
+
startTime: options.startTime
|
|
279
|
+
};
|
|
280
|
+
this.sampled = isSampled(spanContext.traceFlags);
|
|
281
|
+
}
|
|
282
|
+
attribute(key, value) {
|
|
283
|
+
this.span.setAttribute(key, unknownToAttributeValue(value));
|
|
284
|
+
this.attributes.set(key, value);
|
|
285
|
+
}
|
|
286
|
+
addLinks(links) {
|
|
287
|
+
// oxlint-disable-next-line no-restricted-syntax
|
|
288
|
+
this.links.push(...links);
|
|
289
|
+
this.span.addLinks(links.map(link => ({
|
|
290
|
+
context: makeSpanContext(link.span),
|
|
291
|
+
attributes: recordToAttributes(link.attributes)
|
|
292
|
+
})));
|
|
293
|
+
}
|
|
294
|
+
end(endTime, exit) {
|
|
295
|
+
const hrTime = nanosToHrTime(endTime);
|
|
296
|
+
this.status = {
|
|
297
|
+
_tag: "Ended",
|
|
298
|
+
endTime,
|
|
299
|
+
exit,
|
|
300
|
+
startTime: this.status.startTime
|
|
301
|
+
};
|
|
302
|
+
if (exit._tag === "Success") {
|
|
303
|
+
this.span.setStatus({
|
|
304
|
+
code: Otel.SpanStatusCode.OK
|
|
305
|
+
});
|
|
306
|
+
} else {
|
|
307
|
+
if (Cause.hasInterruptsOnly(exit.cause)) {
|
|
308
|
+
this.span.setStatus({
|
|
309
|
+
code: Otel.SpanStatusCode.OK,
|
|
310
|
+
message: Cause.pretty(exit.cause)
|
|
311
|
+
});
|
|
312
|
+
this.span.setAttribute("span.label", "⚠︎ Interrupted");
|
|
313
|
+
this.span.setAttribute("status.interrupted", true);
|
|
314
|
+
} else {
|
|
315
|
+
const errors = Cause.prettyErrors(exit.cause);
|
|
316
|
+
if (errors.length > 0) {
|
|
317
|
+
for (const error of errors) {
|
|
318
|
+
this.span.recordException(error, hrTime);
|
|
319
|
+
}
|
|
320
|
+
this.span.setStatus({
|
|
321
|
+
code: Otel.SpanStatusCode.ERROR,
|
|
322
|
+
message: errors[0].message
|
|
323
|
+
});
|
|
324
|
+
} else {
|
|
325
|
+
// empty cause means no error
|
|
326
|
+
this.span.setStatus({
|
|
327
|
+
code: Otel.SpanStatusCode.OK
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
this.span.end(hrTime);
|
|
333
|
+
}
|
|
334
|
+
event(name, startTime, attributes) {
|
|
335
|
+
this.span.addEvent(name, attributes ? recordToAttributes(attributes) : undefined, nanosToHrTime(startTime));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const isSampled = traceFlags => (traceFlags & Otel.TraceFlags.SAMPLED) === Otel.TraceFlags.SAMPLED;
|
|
339
|
+
const nanosToHrTime = timestamp => {
|
|
340
|
+
return [Number(timestamp / bigint1e9), Number(timestamp % bigint1e9)];
|
|
341
|
+
};
|
|
342
|
+
const getOtelParent = (tracer, context, annotations) => {
|
|
343
|
+
const active = tracer.getSpan(context);
|
|
344
|
+
const otelParent = active ? active.spanContext() : undefined;
|
|
345
|
+
return otelParent ? Tracer.externalSpan({
|
|
346
|
+
spanId: otelParent.spanId,
|
|
347
|
+
traceId: otelParent.traceId,
|
|
348
|
+
sampled: (otelParent.traceFlags & 1) === 1,
|
|
349
|
+
annotations
|
|
350
|
+
}) : undefined;
|
|
351
|
+
};
|
|
352
|
+
const makeSpanContext = (span, annotations) => {
|
|
353
|
+
const traceFlags = makeTraceFlags(span, annotations);
|
|
354
|
+
const traceState = makeTraceState(span, annotations);
|
|
355
|
+
return {
|
|
356
|
+
spanId: span.spanId,
|
|
357
|
+
traceId: span.traceId,
|
|
358
|
+
isRemote: span._tag === "ExternalSpan",
|
|
359
|
+
traceFlags,
|
|
360
|
+
traceState
|
|
361
|
+
};
|
|
362
|
+
};
|
|
363
|
+
const makeTraceFlags = (span, annotations) => {
|
|
364
|
+
let traceFlags;
|
|
365
|
+
if (Predicate.isNotUndefined(annotations)) {
|
|
366
|
+
traceFlags = extractTraceService(span, annotations, OtelTraceFlags);
|
|
367
|
+
if (Predicate.isUndefined(traceFlags)) {
|
|
368
|
+
traceFlags = ServiceMap.getOrUndefined(span.annotations, OtelTraceFlags);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return traceFlags ?? Otel.TraceFlags.SAMPLED;
|
|
372
|
+
};
|
|
373
|
+
const makeTraceState = (span, annotations) => {
|
|
374
|
+
let traceState;
|
|
375
|
+
if (Predicate.isNotUndefined(annotations)) {
|
|
376
|
+
traceState = extractTraceService(span, annotations, OtelTraceState);
|
|
377
|
+
if (Predicate.isUndefined(traceState)) {
|
|
378
|
+
traceState = ServiceMap.getOrUndefined(span.annotations, OtelTraceState);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return traceState;
|
|
382
|
+
};
|
|
383
|
+
const extractTraceService = (parent, annotations, service) => {
|
|
384
|
+
const instance = ServiceMap.getOrUndefined(annotations, service);
|
|
385
|
+
if (Predicate.isNotUndefined(instance)) {
|
|
386
|
+
return instance;
|
|
387
|
+
}
|
|
388
|
+
return ServiceMap.getOrUndefined(parent.annotations, service);
|
|
389
|
+
};
|
|
390
|
+
const populateContext = (context, span, annotations) => span instanceof OtelSpan ? Otel.trace.setSpan(context, span.span) : Otel.trace.setSpanContext(context, makeSpanContext(span, annotations));
|
|
391
|
+
//# sourceMappingURL=Tracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tracer.js","names":["Otel","OtelSemConv","Cause","Effect","Exit","constTrue","dual","Layer","Predicate","ServiceMap","Tracer","recordToAttributes","unknownToAttributeValue","Resource","OtelTracer","Service","OtelTracerProvider","OtelTraceFlags","OtelTraceState","make","map","service","tracer","span","options","OtelSpan","context","trace","primitive","fiber","currentSpan","undefined","with","populateContext","active","makeExternalSpan","annotations","empty","traceFlags","add","traceState","createTraceState","_tag","traceId","spanId","sampled","isNotUndefined","isSampled","layerGlobalProvider","sync","getTracerProvider","layerTracer","effect","gen","resource","provider","getTracer","attributes","ATTR_SERVICE_NAME","ATTR_SERVICE_VERSION","layerGlobalTracer","pipe","provide","layerGlobal","provideMerge","layerWithoutOtelTracer","layer","bigint1e6","BigInt","bigint1e9","currentOtelSpan","clockWith","clock","OtelSpanTypeId","makeOtelSpan","spanContext","TraceFlags","SAMPLED","NONE","isRemote","exit","void","self","setAttribute","key","value","attribute","setAttributes","Object","entries","addEvent","name","startTime","arguments","length","event","convertOtelTimeInput","addLink","link","addLinks","links","setStatus","status","SpanStatusCode","ERROR","die","message","updateName","end","endTime","time","isRecording","recordException","exception","timeInput","cause","fail","error","prettyErrors","stack","input","currentTimeNanosUnsafe","Math","round","Date","getTime","seconds","nanos","withSpanContext","withParentSpan","kindMap","SpanKind","INTERNAL","CLIENT","SERVER","PRODUCER","CONSUMER","kind","Map","parent","constructor","contextApi","traceApi","root","getOtelParent","startSpan","nanosToHrTime","makeSpanContext","deleteSpan","set","push","hrTime","code","OK","hasInterruptsOnly","pretty","errors","timestamp","Number","getSpan","otelParent","externalSpan","makeTraceFlags","makeTraceState","extractTraceService","isUndefined","getOrUndefined","instance","setSpan","setSpanContext"],"sources":["../src/Tracer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type * as
|
|
4
|
+
import type * as Otel from "@opentelemetry/api";
|
|
5
5
|
import type { LoggerProviderConfig, LogRecordProcessor } from "@opentelemetry/sdk-logs";
|
|
6
6
|
import type { MetricReader } from "@opentelemetry/sdk-metrics";
|
|
7
7
|
import type { SpanProcessor, TracerConfig } from "@opentelemetry/sdk-trace-base";
|
|
@@ -9,42 +9,45 @@ import type { NonEmptyReadonlyArray } from "effect/Array";
|
|
|
9
9
|
import * as Effect from "effect/Effect";
|
|
10
10
|
import { type LazyArg } from "effect/Function";
|
|
11
11
|
import * as Layer from "effect/Layer";
|
|
12
|
-
import * as
|
|
13
|
-
import * as
|
|
12
|
+
import * as Metrics from "./Metrics.ts";
|
|
13
|
+
import * as Resource from "./Resource.ts";
|
|
14
|
+
import * as Tracer from "./Tracer.ts";
|
|
14
15
|
/**
|
|
15
16
|
* @since 1.0.0
|
|
16
|
-
* @category
|
|
17
|
+
* @category Models
|
|
17
18
|
*/
|
|
18
19
|
export interface Configuration {
|
|
19
20
|
readonly spanProcessor?: SpanProcessor | ReadonlyArray<SpanProcessor> | undefined;
|
|
20
21
|
readonly tracerConfig?: Omit<TracerConfig, "resource">;
|
|
21
22
|
readonly metricReader?: MetricReader | ReadonlyArray<MetricReader> | undefined;
|
|
23
|
+
readonly metricTemporality?: Metrics.TemporalityPreference | undefined;
|
|
22
24
|
readonly logRecordProcessor?: LogRecordProcessor | ReadonlyArray<LogRecordProcessor> | undefined;
|
|
23
25
|
readonly loggerProviderConfig?: Omit<LoggerProviderConfig, "resource"> | undefined;
|
|
26
|
+
readonly loggerMergeWithExisting?: boolean | undefined;
|
|
24
27
|
readonly resource: {
|
|
25
28
|
readonly serviceName: string;
|
|
26
29
|
readonly serviceVersion?: string;
|
|
27
|
-
readonly attributes?:
|
|
30
|
+
readonly attributes?: Otel.Attributes;
|
|
28
31
|
};
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
31
34
|
* @since 1.0.0
|
|
32
|
-
* @category
|
|
35
|
+
* @category Layers
|
|
33
36
|
*/
|
|
34
37
|
export declare const layerTracerProvider: (processor: SpanProcessor | NonEmptyReadonlyArray<SpanProcessor>, config?: Omit<TracerConfig, "resource">) => Layer.Layer<Tracer.OtelTracerProvider, never, Resource.Resource>;
|
|
35
38
|
/**
|
|
36
39
|
* @since 1.0.0
|
|
37
|
-
* @category
|
|
40
|
+
* @category Layers
|
|
38
41
|
*/
|
|
39
42
|
export declare const layer: {
|
|
40
43
|
/**
|
|
41
44
|
* @since 1.0.0
|
|
42
|
-
* @category
|
|
45
|
+
* @category Layers
|
|
43
46
|
*/
|
|
44
47
|
(evaluate: LazyArg<Configuration>): Layer.Layer<Resource.Resource>;
|
|
45
48
|
/**
|
|
46
49
|
* @since 1.0.0
|
|
47
|
-
* @category
|
|
50
|
+
* @category Layers
|
|
48
51
|
*/
|
|
49
52
|
<E, R>(evaluate: Effect.Effect<Configuration, E, R>): Layer.Layer<Resource.Resource, E, R>;
|
|
50
53
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSdk.d.ts","sourceRoot":"","sources":["../src/WebSdk.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEhF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,CAAA;IACjF,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IAC9E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAA;IACtE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAA;IAChG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,GAAG,SAAS,CAAA;IAClF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;QAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAA;KACtC,CAAA;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,WAAW,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,EAC/D,SAAS,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,KACtC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAoB/D,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE;IAClB;;;OAGG;IACH,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAClE;;;OAGG;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAoCzF,CAAA"}
|
package/dist/WebSdk.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { constant } from "effect/Function";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import { isNonEmpty } from "./internal/utilities.js";
|
|
6
|
+
import * as Logger from "./Logger.js";
|
|
7
|
+
import * as Metrics from "./Metrics.js";
|
|
8
|
+
import * as Resource from "./Resource.js";
|
|
9
|
+
import * as Tracer from "./Tracer.js";
|
|
10
|
+
/**
|
|
11
|
+
* @since 1.0.0
|
|
12
|
+
* @category Layers
|
|
13
|
+
*/
|
|
14
|
+
export const layerTracerProvider = (processor, config) => Layer.effect(Tracer.OtelTracerProvider, Effect.gen(function* () {
|
|
15
|
+
const resource = yield* Resource.Resource;
|
|
16
|
+
return yield* Effect.acquireRelease(Effect.sync(() => {
|
|
17
|
+
const provider = new WebTracerProvider({
|
|
18
|
+
...(config ?? undefined),
|
|
19
|
+
resource,
|
|
20
|
+
spanProcessors: Array.isArray(processor) ? processor : [processor]
|
|
21
|
+
});
|
|
22
|
+
return provider;
|
|
23
|
+
}), provider => Effect.ignore(Effect.promise(() => provider.forceFlush().then(() => provider.shutdown()))));
|
|
24
|
+
}));
|
|
25
|
+
/**
|
|
26
|
+
* @since 1.0.0
|
|
27
|
+
* @category Layers
|
|
28
|
+
*/
|
|
29
|
+
export const layer = evaluate => Layer.unwrap(Effect.gen(function* () {
|
|
30
|
+
const config = yield* Effect.isEffect(evaluate) ? evaluate : Effect.sync(evaluate);
|
|
31
|
+
const ResourceLive = Resource.layer(config.resource);
|
|
32
|
+
const TracerLive = isNonEmpty(config.spanProcessor) ? Layer.provide(Tracer.layer, layerTracerProvider(config.spanProcessor, config.tracerConfig)) : Layer.empty;
|
|
33
|
+
const LoggerLive = isNonEmpty(config.logRecordProcessor) ? Layer.provide(Logger.layer({
|
|
34
|
+
mergeWithExisting: config.loggerMergeWithExisting
|
|
35
|
+
}), Logger.layerLoggerProvider(config.logRecordProcessor, config.loggerProviderConfig)) : Layer.empty;
|
|
36
|
+
const MetricsLive = isNonEmpty(config.metricReader) ? Metrics.layer(constant(config.metricReader), {
|
|
37
|
+
temporality: config.metricTemporality
|
|
38
|
+
}) : Layer.empty;
|
|
39
|
+
return Layer.mergeAll(TracerLive, MetricsLive, LoggerLive).pipe(Layer.provideMerge(ResourceLive));
|
|
40
|
+
}));
|
|
41
|
+
//# sourceMappingURL=WebSdk.js.map
|