@effect/opentelemetry 4.0.0-beta.10 → 4.0.0-beta.100

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.
Files changed (52) hide show
  1. package/dist/NodeSdk.d.ts +86 -14
  2. package/dist/NodeSdk.d.ts.map +1 -1
  3. package/dist/NodeSdk.js +31 -8
  4. package/dist/NodeSdk.js.map +1 -1
  5. package/dist/OtelLogger.d.ts +99 -0
  6. package/dist/OtelLogger.d.ts.map +1 -0
  7. package/dist/OtelLogger.js +139 -0
  8. package/dist/OtelLogger.js.map +1 -0
  9. package/dist/{Metrics.d.ts → OtelMetrics.d.ts} +42 -18
  10. package/dist/OtelMetrics.d.ts.map +1 -0
  11. package/dist/{Metrics.js → OtelMetrics.js} +27 -12
  12. package/dist/OtelMetrics.js.map +1 -0
  13. package/dist/OtelTracer.d.ts +186 -0
  14. package/dist/OtelTracer.d.ts.map +1 -0
  15. package/dist/{Tracer.js → OtelTracer.js} +129 -72
  16. package/dist/OtelTracer.js.map +1 -0
  17. package/dist/Resource.d.ts +57 -13
  18. package/dist/Resource.d.ts.map +1 -1
  19. package/dist/Resource.js +48 -13
  20. package/dist/Resource.js.map +1 -1
  21. package/dist/WebSdk.d.ts +82 -13
  22. package/dist/WebSdk.d.ts.map +1 -1
  23. package/dist/WebSdk.js +28 -7
  24. package/dist/WebSdk.js.map +1 -1
  25. package/dist/index.d.ts +12 -12
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +12 -12
  28. package/dist/index.js.map +1 -1
  29. package/dist/internal/attributes.js +5 -0
  30. package/dist/internal/attributes.js.map +1 -1
  31. package/dist/internal/metrics.js +5 -5
  32. package/dist/internal/metrics.js.map +1 -1
  33. package/package.json +22 -18
  34. package/src/NodeSdk.ts +87 -15
  35. package/src/OtelLogger.ts +193 -0
  36. package/src/{Metrics.ts → OtelMetrics.ts} +42 -18
  37. package/src/{Tracer.ts → OtelTracer.ts} +161 -101
  38. package/src/Resource.ts +58 -14
  39. package/src/WebSdk.ts +83 -14
  40. package/src/index.ts +12 -12
  41. package/src/internal/attributes.ts +7 -0
  42. package/src/internal/metrics.ts +7 -7
  43. package/dist/Logger.d.ts +0 -48
  44. package/dist/Logger.d.ts.map +0 -1
  45. package/dist/Logger.js +0 -76
  46. package/dist/Logger.js.map +0 -1
  47. package/dist/Metrics.d.ts.map +0 -1
  48. package/dist/Metrics.js.map +0 -1
  49. package/dist/Tracer.d.ts +0 -129
  50. package/dist/Tracer.d.ts.map +0 -1
  51. package/dist/Tracer.js.map +0 -1
  52. package/src/Logger.ts +0 -124
@@ -5,19 +5,33 @@ import { Resource } from "./Resource.js";
5
5
  /**
6
6
  * Creates an OpenTelemetry metric producer from Effect metrics.
7
7
  *
8
- * @since 1.0.0
9
- * @category Constructors
8
+ * **When to use**
9
+ *
10
+ * Use when you need a `MetricProducer` for manually wiring Effect metrics into
11
+ * OpenTelemetry instead of using the scoped `layer` helper.
12
+ *
13
+ * **Details**
14
+ *
15
+ * Requires the current OpenTelemetry `Resource`, captures the current Effect
16
+ * context, and uses cumulative temporality by default. Pass `"delta"` for
17
+ * interval-based values.
18
+ *
19
+ * @see {@link registerProducer} for attaching a producer to metric readers
20
+ * @see {@link layer} for creating and registering a producer in a scoped layer
21
+ *
22
+ * @category constructors
23
+ * @since 4.0.0
10
24
  */
11
25
  export const makeProducer = temporality => Effect.gen(function* () {
12
26
  const resource = yield* Resource;
13
- const services = yield* Effect.services();
27
+ const services = yield* Effect.context();
14
28
  return new MetricProducerImpl(resource, services, temporality);
15
29
  });
16
30
  /**
17
31
  * Registers a metric producer with one or more metric readers.
18
32
  *
19
- * @since 1.0.0
20
- * @category Constructors
33
+ * @category constructors
34
+ * @since 4.0.0
21
35
  */
22
36
  export const registerProducer = (self, metricReader, options) => Effect.acquireRelease(Effect.sync(() => {
23
37
  const reader = metricReader();
@@ -28,16 +42,17 @@ export const registerProducer = (self, metricReader, options) => Effect.acquireR
28
42
  /**
29
43
  * Creates a Layer that registers a metric producer with metric readers.
30
44
  *
31
- * @example
45
+ * **Example** (Creating a metrics layer with temporality)
46
+ *
32
47
  * ```ts
33
- * import { Metrics } from "@effect/opentelemetry"
48
+ * import { OtelMetrics } from "@effect/opentelemetry"
34
49
  * import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics"
35
50
  * import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http"
36
51
  *
37
52
  * const metricExporter = new OTLPMetricExporter({ url: "<your-otel-url>" })
38
53
  *
39
54
  * // Use delta temporality for backends like Datadog or Dynatrace
40
- * const metricsLayer = Metrics.layer(
55
+ * const metricsLayer = OtelMetrics.layer(
41
56
  * () => new PeriodicExportingMetricReader({
42
57
  * exporter: metricExporter,
43
58
  * exportIntervalMillis: 10000
@@ -46,14 +61,14 @@ export const registerProducer = (self, metricReader, options) => Effect.acquireR
46
61
  * )
47
62
  *
48
63
  * // Use cumulative temporality for backends like Prometheus (default)
49
- * const cumulativeLayer = Metrics.layer(
64
+ * const cumulativeLayer = OtelMetrics.layer(
50
65
  * () => new PeriodicExportingMetricReader({ exporter: metricExporter }),
51
66
  * { temporality: "cumulative" }
52
67
  * )
53
68
  * ```
54
69
  *
55
- * @since 1.0.0
56
- * @category Layers
70
+ * @category layers
71
+ * @since 4.0.0
57
72
  */
58
73
  export const layer = (evaluate, options) => Layer.effectDiscard(Effect.flatMap(makeProducer(options?.temporality), producer => registerProducer(producer, evaluate, options)));
59
- //# sourceMappingURL=Metrics.js.map
74
+ //# sourceMappingURL=OtelMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OtelMetrics.js","names":["Effect","Layer","MetricProducerImpl","Resource","makeProducer","temporality","gen","resource","services","context","registerProducer","self","metricReader","options","acquireRelease","sync","reader","readers","Array","isArray","forEach","setMetricProducer","promise","Promise","all","map","shutdown","pipe","ignore","interruptible","timeoutOption","shutdownTimeout","layer","evaluate","effectDiscard","flatMap","producer"],"sources":["../src/OtelMetrics.ts"],"sourcesContent":[null],"mappings":"AAcA,OAAO,KAAKA,MAAM,MAAM,eAAe;AAEvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAErC,SAASC,kBAAkB,QAAQ,uBAAuB;AAC1D,SAASC,QAAQ,QAAQ,eAAe;AAkBxC;;;;;;;;;;;;;;;;;;;;AAoBA,OAAO,MAAMC,YAAY,GAAIC,WAAmC,IAC9DL,MAAM,CAACM,GAAG,CAAC,aAAS;EAClB,MAAMC,QAAQ,GAAG,OAAOJ,QAAQ;EAChC,MAAMK,QAAQ,GAAG,OAAOR,MAAM,CAACS,OAAO,EAAS;EAC/C,OAAO,IAAIP,kBAAkB,CAACK,QAAQ,EAAEC,QAAQ,EAAEH,WAAW,CAAC;AAChE,CAAC,CAAC;AAEJ;;;;;;AAMA,OAAO,MAAMK,gBAAgB,GAAGA,CAC9BC,IAAoB,EACpBC,YAA6E,EAC7EC,OAEC,KAEDb,MAAM,CAACc,cAAc,CACnBd,MAAM,CAACe,IAAI,CAAC,MAAK;EACf,MAAMC,MAAM,GAAGJ,YAAY,EAAE;EAC7B,MAAMK,OAAO,GAAwBC,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,GAAGA,MAAM,GAAG,CAACA,MAAM,CAAQ;EACrFC,OAAO,CAACG,OAAO,CAAEJ,MAAM,IAAKA,MAAM,CAACK,iBAAiB,CAACV,IAAI,CAAC,CAAC;EAC3D,OAAOM,OAAO;AAChB,CAAC,CAAC,EACDA,OAAO,IACNjB,MAAM,CAACsB,OAAO,CAAC,MACbC,OAAO,CAACC,GAAG,CACTP,OAAO,CAACQ,GAAG,CAAET,MAAM,IAAKA,MAAM,CAACU,QAAQ,EAAE,CAAC,CAC3C,CACF,CAACC,IAAI,CACJ3B,MAAM,CAAC4B,MAAM,EACb5B,MAAM,CAAC6B,aAAa,EACpB7B,MAAM,CAAC8B,aAAa,CAACjB,OAAO,EAAEkB,eAAe,IAAI,IAAI,CAAC,CACvD,CACJ;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,OAAO,MAAMC,KAAK,GAAGA,CACnBC,QAAyE,EACzEpB,OAGC,KAEDZ,KAAK,CAACiC,aAAa,CAAClC,MAAM,CAACmC,OAAO,CAChC/B,YAAY,CAACS,OAAO,EAAER,WAAW,CAAC,EACjC+B,QAAQ,IAAK1B,gBAAgB,CAAC0B,QAAQ,EAAEH,QAAQ,EAAEpB,OAAO,CAAC,CAC5D,CAAC","ignoreList":[]}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Bridges Effect tracing into OpenTelemetry by installing an Effect `Tracer`
3
+ * that creates OpenTelemetry spans, records attributes, events, links, errors,
4
+ * and status, and keeps OpenTelemetry context active while traced effects run.
5
+ * Use this module when an application already has an OpenTelemetry
6
+ * `TracerProvider`, or when the Node and Web SDK layers should expose Effect
7
+ * spans to OTLP, console, or other OpenTelemetry-compatible exporters.
8
+ *
9
+ * The layer constructors wire Effect's tracer service to either the global
10
+ * OpenTelemetry tracer provider or an explicitly provided `OtelTracer`. This
11
+ * module does not create exporters or span processors by itself, so spans are
12
+ * exported only when the provider has been configured by the application or by
13
+ * the Node/Web SDK layers. Parentage is taken from Effect spans first and can
14
+ * also attach to the active OpenTelemetry context, while `makeExternalSpan` and
15
+ * `withSpanContext` are the entry points for continuing an incoming remote
16
+ * trace. Preserve `traceFlags` and `traceState` when building external spans;
17
+ * otherwise sampling defaults to sampled and trace state cannot be propagated.
18
+ *
19
+ * @since 4.0.0
20
+ */
21
+ import * as Otel from "@opentelemetry/api";
22
+ import * as Cause from "effect/Cause";
23
+ import * as Context from "effect/Context";
24
+ import * as Effect from "effect/Effect";
25
+ import * as Layer from "effect/Layer";
26
+ import * as Tracer from "effect/Tracer";
27
+ import { Resource } from "./Resource.ts";
28
+ declare const OtelTracer_base: Context.ServiceClass<OtelTracer, "@effect/opentelemetry/Tracer", Otel.Tracer>;
29
+ /**
30
+ * Context service containing the OpenTelemetry `Tracer` used to create spans for Effect tracing.
31
+ *
32
+ * @category services
33
+ * @since 4.0.0
34
+ */
35
+ export declare class OtelTracer extends OtelTracer_base {
36
+ }
37
+ declare const OtelTracerProvider_base: Context.ServiceClass<OtelTracerProvider, "@effect/opentelemetry/Tracer/OtelTracerProvider", Otel.TracerProvider>;
38
+ /**
39
+ * Context service containing the OpenTelemetry `TracerProvider` used to obtain tracers.
40
+ *
41
+ * @category services
42
+ * @since 4.0.0
43
+ */
44
+ export declare class OtelTracerProvider extends OtelTracerProvider_base {
45
+ }
46
+ declare const OtelTraceFlags_base: Context.ServiceClass<OtelTraceFlags, "@effect/opentelemetry/Tracer/OtelTraceFlags", Otel.TraceFlags>;
47
+ /**
48
+ * Context service containing OpenTelemetry trace flags used when constructing external span contexts.
49
+ *
50
+ * @category services
51
+ * @since 4.0.0
52
+ */
53
+ export declare class OtelTraceFlags extends OtelTraceFlags_base {
54
+ }
55
+ declare const OtelTraceState_base: Context.ServiceClass<OtelTraceState, "@effect/opentelemetry/Tracer/OtelTraceState", Otel.TraceState>;
56
+ /**
57
+ * Context service containing OpenTelemetry trace state used when constructing external span contexts.
58
+ *
59
+ * @category services
60
+ * @since 4.0.0
61
+ */
62
+ export declare class OtelTraceState extends OtelTraceState_base {
63
+ }
64
+ /**
65
+ * Creates an Effect `Tracer` implementation backed by the configured OpenTelemetry tracer.
66
+ *
67
+ * @category constructors
68
+ * @since 4.0.0
69
+ */
70
+ export declare const make: Effect.Effect<Tracer.Tracer, never, OtelTracer>;
71
+ /**
72
+ * Creates an Effect external span from an OpenTelemetry span context, preserving trace flags and trace state when provided.
73
+ *
74
+ * @category constructors
75
+ * @since 4.0.0
76
+ */
77
+ export declare const makeExternalSpan: (options: {
78
+ readonly traceId: string;
79
+ readonly spanId: string;
80
+ readonly traceFlags?: number | undefined;
81
+ readonly traceState?: string | Otel.TraceState | undefined;
82
+ }) => Tracer.ExternalSpan;
83
+ /**
84
+ * Layer that provides the current global OpenTelemetry tracer provider.
85
+ *
86
+ * @category layers
87
+ * @since 4.0.0
88
+ */
89
+ export declare const layerGlobalProvider: Layer.Layer<OtelTracerProvider>;
90
+ /**
91
+ * Layer that creates an OpenTelemetry tracer from the provided tracer provider and resource metadata.
92
+ *
93
+ * @category layers
94
+ * @since 4.0.0
95
+ */
96
+ export declare const layerTracer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Resource>;
97
+ /**
98
+ * Layer that creates an OpenTelemetry tracer from the global tracer provider and the current resource.
99
+ *
100
+ * @category layers
101
+ * @since 4.0.0
102
+ */
103
+ export declare const layerGlobalTracer: Layer.Layer<OtelTracer, never, Resource>;
104
+ /**
105
+ * Layer that installs an Effect tracer backed by the global OpenTelemetry tracer provider.
106
+ *
107
+ * @category layers
108
+ * @since 4.0.0
109
+ */
110
+ export declare const layerGlobal: Layer.Layer<OtelTracer, never, Resource>;
111
+ /**
112
+ * Layer that installs the Effect tracer using an `OtelTracer` already provided in the environment.
113
+ *
114
+ * @category layers
115
+ * @since 4.0.0
116
+ */
117
+ export declare const layerWithoutOtelTracer: Layer.Layer<never, never, OtelTracer>;
118
+ /**
119
+ * Layer that creates an OpenTelemetry tracer from a provider and resource, then installs it as the Effect tracer.
120
+ *
121
+ * **When to use**
122
+ *
123
+ * Use when you already provide an `OtelTracerProvider` and a `Resource`, and
124
+ * want Effect spans backed by a tracer derived from them.
125
+ *
126
+ * @see {@link layerTracer} for creating only the OpenTelemetry tracer service
127
+ * @see {@link layerGlobal} for installing the Effect tracer from the global provider
128
+ * @see {@link layerWithoutOtelTracer} for installing an already-provided `OtelTracer`
129
+ *
130
+ * @category layers
131
+ * @since 4.0.0
132
+ */
133
+ export declare const layer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Resource>;
134
+ /**
135
+ * Gets the current OpenTelemetry span.
136
+ *
137
+ * **Details**
138
+ *
139
+ * This accessor works with both the official OpenTelemetry API, such as
140
+ * `Tracer.layer` and `NodeSdk.layer`, and the lightweight OTLP module, such as
141
+ * `OtlpTracer.layer`. When using OTLP, the returned span is a wrapper that
142
+ * conforms to the OpenTelemetry `Span` interface.
143
+ *
144
+ * @category accessors
145
+ * @since 4.0.0
146
+ */
147
+ export declare const currentOtelSpan: Effect.Effect<Otel.Span, Cause.NoSuchElementError>;
148
+ /**
149
+ * Sets an effect's parent span from the given OpenTelemetry `SpanContext`.
150
+ *
151
+ * **When to use**
152
+ *
153
+ * Use when you need an effect to continue a trace from a parent span context
154
+ * produced by OpenTelemetry instrumentation outside Effect.
155
+ *
156
+ * @category propagation
157
+ * @since 4.0.0
158
+ */
159
+ export declare const withSpanContext: {
160
+ /**
161
+ * Sets an effect's parent span from the given OpenTelemetry `SpanContext`.
162
+ *
163
+ * **When to use**
164
+ *
165
+ * Use when you need an effect to continue a trace from a parent span context
166
+ * produced by OpenTelemetry instrumentation outside Effect.
167
+ *
168
+ * @category propagation
169
+ * @since 4.0.0
170
+ */
171
+ (spanContext: Otel.SpanContext): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>;
172
+ /**
173
+ * Sets an effect's parent span from the given OpenTelemetry `SpanContext`.
174
+ *
175
+ * **When to use**
176
+ *
177
+ * Use when you need an effect to continue a trace from a parent span context
178
+ * produced by OpenTelemetry instrumentation outside Effect.
179
+ *
180
+ * @category propagation
181
+ * @since 4.0.0
182
+ */
183
+ <A, E, R>(self: Effect.Effect<A, E, R>, spanContext: Otel.SpanContext): Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>;
184
+ };
185
+ export {};
186
+ //# sourceMappingURL=OtelTracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OtelTracer.d.ts","sourceRoot":"","sources":["../src/OtelTracer.ts"],"names":[],"mappings":"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"}
@@ -1,47 +1,75 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Bridges Effect tracing into OpenTelemetry by installing an Effect `Tracer`
3
+ * that creates OpenTelemetry spans, records attributes, events, links, errors,
4
+ * and status, and keeps OpenTelemetry context active while traced effects run.
5
+ * Use this module when an application already has an OpenTelemetry
6
+ * `TracerProvider`, or when the Node and Web SDK layers should expose Effect
7
+ * spans to OTLP, console, or other OpenTelemetry-compatible exporters.
8
+ *
9
+ * The layer constructors wire Effect's tracer service to either the global
10
+ * OpenTelemetry tracer provider or an explicitly provided `OtelTracer`. This
11
+ * module does not create exporters or span processors by itself, so spans are
12
+ * exported only when the provider has been configured by the application or by
13
+ * the Node/Web SDK layers. Parentage is taken from Effect spans first and can
14
+ * also attach to the active OpenTelemetry context, while `makeExternalSpan` and
15
+ * `withSpanContext` are the entry points for continuing an incoming remote
16
+ * trace. Preserve `traceFlags` and `traceState` when building external spans;
17
+ * otherwise sampling defaults to sampled and trace state cannot be propagated.
18
+ *
19
+ * @since 4.0.0
3
20
  */
4
21
  import * as Otel from "@opentelemetry/api";
5
22
  import * as OtelSemConv from "@opentelemetry/semantic-conventions";
6
23
  import * as Cause from "effect/Cause";
24
+ import * as Context from "effect/Context";
7
25
  import * as Effect from "effect/Effect";
8
26
  import * as Exit from "effect/Exit";
9
27
  import { constTrue, dual } from "effect/Function";
10
28
  import * as Layer from "effect/Layer";
29
+ import * as Option from "effect/Option";
11
30
  import * as Predicate from "effect/Predicate";
12
- import * as ServiceMap from "effect/ServiceMap";
13
31
  import * as Tracer from "effect/Tracer";
14
- import { recordToAttributes, unknownToAttributeValue } from "./internal/attributes.js";
32
+ import { nanosToHrTime, recordToAttributes, unknownToAttributeValue } from "./internal/attributes.js";
15
33
  import { Resource } from "./Resource.js";
16
34
  // =============================================================================
17
35
  // Service Definitions
18
36
  // =============================================================================
19
37
  /**
20
- * @since 1.0.0
21
- * @category Services
38
+ * Context service containing the OpenTelemetry `Tracer` used to create spans for Effect tracing.
39
+ *
40
+ * @category services
41
+ * @since 4.0.0
22
42
  */
23
- export class OtelTracer extends /*#__PURE__*/ServiceMap.Service()("@effect/opentelemetry/Tracer") {}
43
+ export class OtelTracer extends /*#__PURE__*/Context.Service()("@effect/opentelemetry/Tracer") {}
24
44
  /**
25
- * @since 1.0.0
26
- * @category Services
45
+ * Context service containing the OpenTelemetry `TracerProvider` used to obtain tracers.
46
+ *
47
+ * @category services
48
+ * @since 4.0.0
27
49
  */
28
- export class OtelTracerProvider extends /*#__PURE__*/ServiceMap.Service()("@effect/opentelemetry/Tracer/OtelTracerProvider") {}
50
+ export class OtelTracerProvider extends /*#__PURE__*/Context.Service()("@effect/opentelemetry/Tracer/OtelTracerProvider") {}
29
51
  /**
30
- * @since 1.0.0
31
- * @category Services
52
+ * Context service containing OpenTelemetry trace flags used when constructing external span contexts.
53
+ *
54
+ * @category services
55
+ * @since 4.0.0
32
56
  */
33
- export class OtelTraceFlags extends /*#__PURE__*/ServiceMap.Service()("@effect/opentelemetry/Tracer/OtelTraceFlags") {}
57
+ export class OtelTraceFlags extends /*#__PURE__*/Context.Service()("@effect/opentelemetry/Tracer/OtelTraceFlags") {}
34
58
  /**
35
- * @since 1.0.0
36
- * @category Services
59
+ * Context service containing OpenTelemetry trace state used when constructing external span contexts.
60
+ *
61
+ * @category services
62
+ * @since 4.0.0
37
63
  */
38
- export class OtelTraceState extends /*#__PURE__*/ServiceMap.Service()("@effect/opentelemetry/Tracer/OtelTraceState") {}
64
+ export class OtelTraceState extends /*#__PURE__*/Context.Service()("@effect/opentelemetry/Tracer/OtelTraceState") {}
39
65
  // =============================================================================
40
66
  // Constructors
41
67
  // =============================================================================
42
68
  /**
43
- * @since 1.0.0
44
- * @category Constructors
69
+ * Creates an Effect `Tracer` implementation backed by the configured OpenTelemetry tracer.
70
+ *
71
+ * @category constructors
72
+ * @since 4.0.0
45
73
  */
46
74
  export const make = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.service(OtelTracer), tracer => Tracer.make({
47
75
  span(options) {
@@ -56,24 +84,28 @@ export const make = /*#__PURE__*/Effect.map(/*#__PURE__*/Effect.service(OtelTrac
56
84
  }
57
85
  }));
58
86
  /**
59
- * @since 1.0.0
60
- * @category Constructors
87
+ * Creates an Effect external span from an OpenTelemetry span context, preserving trace flags and trace state when provided.
88
+ *
89
+ * @category constructors
90
+ * @since 4.0.0
61
91
  */
62
92
  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
- //
93
+ const annotations = Context.mutate(Context.empty(), annotations => {
94
+ let next = annotations;
95
+ if (options.traceFlags !== undefined) {
96
+ next = Context.add(next, OtelTraceFlags, options.traceFlags);
73
97
  }
74
- } else if (options.traceState) {
75
- annotations = ServiceMap.add(annotations, OtelTraceState, options.traceState);
76
- }
98
+ if (typeof options.traceState === "string") {
99
+ try {
100
+ next = Context.add(next, OtelTraceState, Otel.createTraceState(options.traceState));
101
+ } catch {
102
+ //
103
+ }
104
+ } else if (options.traceState) {
105
+ next = Context.add(next, OtelTraceState, options.traceState);
106
+ }
107
+ return next;
108
+ });
77
109
  return {
78
110
  _tag: "ExternalSpan",
79
111
  traceId: options.traceId,
@@ -86,13 +118,17 @@ export const makeExternalSpan = options => {
86
118
  // Layers
87
119
  // =============================================================================
88
120
  /**
89
- * @since 1.0.0
90
- * @category Layers
121
+ * Layer that provides the current global OpenTelemetry tracer provider.
122
+ *
123
+ * @category layers
124
+ * @since 4.0.0
91
125
  */
92
126
  export const layerGlobalProvider = /*#__PURE__*/Layer.sync(OtelTracerProvider, () => Otel.trace.getTracerProvider());
93
127
  /**
94
- * @since 1.0.0
95
- * @category Layers
128
+ * Layer that creates an OpenTelemetry tracer from the provided tracer provider and resource metadata.
129
+ *
130
+ * @category layers
131
+ * @since 4.0.0
96
132
  */
97
133
  export const layerTracer = /*#__PURE__*/Layer.effect(OtelTracer, /*#__PURE__*/Effect.gen(function* () {
98
134
  const resource = yield* Resource;
@@ -100,23 +136,40 @@ export const layerTracer = /*#__PURE__*/Layer.effect(OtelTracer, /*#__PURE__*/Ef
100
136
  return provider.getTracer(resource.attributes[OtelSemConv.ATTR_SERVICE_NAME], resource.attributes[OtelSemConv.ATTR_SERVICE_VERSION]);
101
137
  }));
102
138
  /**
103
- * @since 1.0.0
104
- * @category Layers
139
+ * Layer that creates an OpenTelemetry tracer from the global tracer provider and the current resource.
140
+ *
141
+ * @category layers
142
+ * @since 4.0.0
105
143
  */
106
144
  export const layerGlobalTracer = /*#__PURE__*/layerTracer.pipe(/*#__PURE__*/Layer.provide(layerGlobalProvider));
107
145
  /**
108
- * @since 1.0.0
109
- * @category Layers
146
+ * Layer that installs an Effect tracer backed by the global OpenTelemetry tracer provider.
147
+ *
148
+ * @category layers
149
+ * @since 4.0.0
110
150
  */
111
151
  export const layerGlobal = /*#__PURE__*/Layer.effect(Tracer.Tracer, make).pipe(/*#__PURE__*/Layer.provideMerge(layerGlobalTracer));
112
152
  /**
113
- * @since 1.0.0
114
- * @category Layers
153
+ * Layer that installs the Effect tracer using an `OtelTracer` already provided in the environment.
154
+ *
155
+ * @category layers
156
+ * @since 4.0.0
115
157
  */
116
158
  export const layerWithoutOtelTracer = /*#__PURE__*/Layer.effect(Tracer.Tracer, make);
117
159
  /**
118
- * @since 1.0.0
119
- * @category Layers
160
+ * Layer that creates an OpenTelemetry tracer from a provider and resource, then installs it as the Effect tracer.
161
+ *
162
+ * **When to use**
163
+ *
164
+ * Use when you already provide an `OtelTracerProvider` and a `Resource`, and
165
+ * want Effect spans backed by a tracer derived from them.
166
+ *
167
+ * @see {@link layerTracer} for creating only the OpenTelemetry tracer service
168
+ * @see {@link layerGlobal} for installing the Effect tracer from the global provider
169
+ * @see {@link layerWithoutOtelTracer} for installing an already-provided `OtelTracer`
170
+ *
171
+ * @category layers
172
+ * @since 4.0.0
120
173
  */
121
174
  export const layer = /*#__PURE__*/layerWithoutOtelTracer.pipe(/*#__PURE__*/Layer.provideMerge(layerTracer));
122
175
  // =============================================================================
@@ -125,16 +178,17 @@ export const layer = /*#__PURE__*/layerWithoutOtelTracer.pipe(/*#__PURE__*/Layer
125
178
  const bigint1e6 = /*#__PURE__*/BigInt(1_000_000);
126
179
  const bigint1e9 = /*#__PURE__*/BigInt(1_000_000_000);
127
180
  /**
128
- * Get the current OpenTelemetry span.
181
+ * Gets the current OpenTelemetry span.
129
182
  *
130
- * Works with both the official OpenTelemetry API (via `Tracer.layer`,
131
- * `NodeSdk.layer`, etc.) and the lightweight OTLP module (`OtlpTracer.layer`).
183
+ * **Details**
132
184
  *
133
- * When using OTLP, the returned span is a wrapper that conforms to the
134
- * OpenTelemetry `Span` interface.
185
+ * This accessor works with both the official OpenTelemetry API, such as
186
+ * `Tracer.layer` and `NodeSdk.layer`, and the lightweight OTLP module, such as
187
+ * `OtlpTracer.layer`. When using OTLP, the returned span is a wrapper that
188
+ * conforms to the OpenTelemetry `Span` interface.
135
189
  *
136
- * @since 1.0.0
137
190
  * @category accessors
191
+ * @since 4.0.0
138
192
  */
139
193
  export const currentOtelSpan = /*#__PURE__*/Effect.clockWith(clock => Effect.map(Effect.currentSpan, span => OtelSpanTypeId in span ? span.span : makeOtelSpan(span, clock)));
140
194
  const makeOtelSpan = (span, clock) => {
@@ -197,7 +251,9 @@ const makeOtelSpan = (span, clock) => {
197
251
  recordException(exception, timeInput) {
198
252
  const time = convertOtelTimeInput(timeInput, clock);
199
253
  const cause = Cause.fail(exception);
200
- const error = Cause.prettyErrors(cause)[0];
254
+ const error = Cause.prettyErrors(cause, {
255
+ includeCauseInStack: true
256
+ })[0];
201
257
  span.event(error.message, time, {
202
258
  "exception.type": error.name,
203
259
  "exception.message": error.message,
@@ -219,13 +275,15 @@ const convertOtelTimeInput = (input, clock) => {
219
275
  return BigInt(seconds) * bigint1e9 + BigInt(nanos);
220
276
  };
221
277
  /**
222
- * Set the effect's parent span from the given opentelemetry `SpanContext`.
278
+ * Sets an effect's parent span from the given OpenTelemetry `SpanContext`.
223
279
  *
224
- * This is handy when you set up OpenTelemetry outside of Effect and want to
225
- * attach to a parent span.
280
+ * **When to use**
226
281
  *
227
- * @since 1.0.0
228
- * @category Propagation
282
+ * Use when you need an effect to continue a trace from a parent span context
283
+ * produced by OpenTelemetry instrumentation outside Effect.
284
+ *
285
+ * @category propagation
286
+ * @since 4.0.0
229
287
  */
230
288
  export const withSpanContext = /*#__PURE__*/dual(2, (self, spanContext) => Effect.withParentSpan(self, makeExternalSpan(spanContext)));
231
289
  // =============================================================================
@@ -261,7 +319,7 @@ export class OtelSpan {
261
319
  this.links = options.links;
262
320
  this.kind = options.kind;
263
321
  const active = contextApi.active();
264
- this.parent = options.parent ?? options?.root !== true ? getOtelParent(traceApi, active, options.annotations) : undefined;
322
+ this.parent = options.root !== true ? Option.orElse(options.parent, () => getOtelParent(traceApi, active, options.annotations)) : options.parent;
265
323
  this.span = tracer.startSpan(options.name, {
266
324
  startTime: nanosToHrTime(options.startTime),
267
325
  links: options.links.length > 0 ? options.links.map(link => ({
@@ -269,7 +327,7 @@ export class OtelSpan {
269
327
  attributes: recordToAttributes(link.attributes)
270
328
  })) : undefined,
271
329
  kind: kindMap[this.kind]
272
- }, this.parent ? populateContext(active, this.parent, options.annotations) : Otel.trace.deleteSpan(active));
330
+ }, Option.isSome(this.parent) ? populateContext(active, this.parent.value, options.annotations) : Otel.trace.deleteSpan(active));
273
331
  const spanContext = this.span.spanContext();
274
332
  this.spanId = spanContext.spanId;
275
333
  this.traceId = spanContext.traceId;
@@ -312,7 +370,9 @@ export class OtelSpan {
312
370
  this.span.setAttribute("span.label", "⚠︎ Interrupted");
313
371
  this.span.setAttribute("status.interrupted", true);
314
372
  } else {
315
- const errors = Cause.prettyErrors(exit.cause);
373
+ const errors = Cause.prettyErrors(exit.cause, {
374
+ includeCauseInStack: true
375
+ });
316
376
  if (errors.length > 0) {
317
377
  for (const error of errors) {
318
378
  this.span.recordException(error, hrTime);
@@ -336,18 +396,15 @@ export class OtelSpan {
336
396
  }
337
397
  }
338
398
  const isSampled = traceFlags => (traceFlags & Otel.TraceFlags.SAMPLED) === Otel.TraceFlags.SAMPLED;
339
- const nanosToHrTime = timestamp => {
340
- return [Number(timestamp / bigint1e9), Number(timestamp % bigint1e9)];
341
- };
342
399
  const getOtelParent = (tracer, context, annotations) => {
343
- const active = tracer.getSpan(context);
344
- const otelParent = active ? active.spanContext() : undefined;
345
- return otelParent ? Tracer.externalSpan({
400
+ const otelParent = tracer.getSpan(context)?.spanContext();
401
+ if (!otelParent) return Option.none();
402
+ return Option.some(Tracer.externalSpan({
346
403
  spanId: otelParent.spanId,
347
404
  traceId: otelParent.traceId,
348
405
  sampled: (otelParent.traceFlags & 1) === 1,
349
406
  annotations
350
- }) : undefined;
407
+ }));
351
408
  };
352
409
  const makeSpanContext = (span, annotations) => {
353
410
  const traceFlags = makeTraceFlags(span, annotations);
@@ -365,27 +422,27 @@ const makeTraceFlags = (span, annotations) => {
365
422
  if (Predicate.isNotUndefined(annotations)) {
366
423
  traceFlags = extractTraceService(span, annotations, OtelTraceFlags);
367
424
  if (Predicate.isUndefined(traceFlags)) {
368
- traceFlags = ServiceMap.getOrUndefined(span.annotations, OtelTraceFlags);
425
+ traceFlags = Context.getOrUndefined(span.annotations, OtelTraceFlags);
369
426
  }
370
427
  }
371
- return traceFlags ?? Otel.TraceFlags.SAMPLED;
428
+ return traceFlags ?? (span.sampled ? Otel.TraceFlags.SAMPLED : Otel.TraceFlags.NONE);
372
429
  };
373
430
  const makeTraceState = (span, annotations) => {
374
431
  let traceState;
375
432
  if (Predicate.isNotUndefined(annotations)) {
376
433
  traceState = extractTraceService(span, annotations, OtelTraceState);
377
434
  if (Predicate.isUndefined(traceState)) {
378
- traceState = ServiceMap.getOrUndefined(span.annotations, OtelTraceState);
435
+ traceState = Context.getOrUndefined(span.annotations, OtelTraceState);
379
436
  }
380
437
  }
381
438
  return traceState;
382
439
  };
383
440
  const extractTraceService = (parent, annotations, service) => {
384
- const instance = ServiceMap.getOrUndefined(annotations, service);
441
+ const instance = Context.getOrUndefined(annotations, service);
385
442
  if (Predicate.isNotUndefined(instance)) {
386
443
  return instance;
387
444
  }
388
- return ServiceMap.getOrUndefined(parent.annotations, service);
445
+ return Context.getOrUndefined(parent.annotations, service);
389
446
  };
390
447
  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
448
+ //# sourceMappingURL=OtelTracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OtelTracer.js","names":["Otel","OtelSemConv","Cause","Context","Effect","Exit","constTrue","dual","Layer","Option","Predicate","Tracer","nanosToHrTime","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","mutate","empty","next","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","includeCauseInStack","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","orElse","getOtelParent","startSpan","makeSpanContext","isSome","deleteSpan","set","push","hrTime","code","OK","hasInterruptsOnly","pretty","errors","otelParent","getSpan","none","some","externalSpan","makeTraceFlags","makeTraceState","extractTraceService","isUndefined","getOrUndefined","instance","setSpan","setSpanContext"],"sources":["../src/OtelTracer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}