@effect/opentelemetry 4.0.0-beta.1 → 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 +89 -17
  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} +45 -21
  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 +90 -18
  35. package/src/OtelLogger.ts +193 -0
  36. package/src/{Metrics.ts → OtelMetrics.ts} +45 -21
  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
package/dist/NodeSdk.d.ts CHANGED
@@ -1,21 +1,32 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Node.js OpenTelemetry setup for Effect applications.
3
+ *
4
+ * This module exports a `Configuration` type and layers for installing
5
+ * tracing, metrics, and logging in Node.js. The main `layer` builds the shared
6
+ * OpenTelemetry resource from environment variables and optional service
7
+ * metadata, then enables only the signal types that have processors or readers
8
+ * configured. `layerTracerProvider` creates a scoped Node tracer provider, and
9
+ * `layerEmpty` provides an empty resource.
10
+ *
11
+ * @since 4.0.0
3
12
  */
4
13
  import type * as Otel from "@opentelemetry/api";
5
14
  import type { LoggerProviderConfig, LogRecordProcessor } from "@opentelemetry/sdk-logs";
6
15
  import type { MetricReader } from "@opentelemetry/sdk-metrics";
7
16
  import type { SpanProcessor, TracerConfig } from "@opentelemetry/sdk-trace-base";
8
17
  import type { NonEmptyReadonlyArray } from "effect/Array";
9
- import type { DurationInput } from "effect/Duration";
18
+ import type * as Duration from "effect/Duration";
10
19
  import * as Effect from "effect/Effect";
11
20
  import { type LazyArg } from "effect/Function";
12
21
  import * as Layer from "effect/Layer";
13
- import * as Metrics from "./Metrics.ts";
22
+ import * as Metrics from "./OtelMetrics.ts";
23
+ import * as Tracer from "./OtelTracer.ts";
14
24
  import * as Resource from "./Resource.ts";
15
- import * as Tracer from "./Tracer.ts";
16
25
  /**
17
- * @since 1.0.0
18
- * @category Models
26
+ * Configuration for the Node OpenTelemetry layer, including optional tracing, metrics, logging, resource, and shutdown settings.
27
+ *
28
+ * @category models
29
+ * @since 4.0.0
19
30
  */
20
31
  export interface Configuration {
21
32
  readonly spanProcessor?: SpanProcessor | ReadonlyArray<SpanProcessor> | undefined;
@@ -30,34 +41,95 @@ export interface Configuration {
30
41
  readonly serviceVersion?: string;
31
42
  readonly attributes?: Otel.Attributes;
32
43
  } | undefined;
33
- readonly shutdownTimeout?: DurationInput | undefined;
44
+ readonly shutdownTimeout?: Duration.Input | undefined;
34
45
  }
35
46
  /**
36
- * @since 1.0.0
37
- * @category Layers
47
+ * Creates a scoped Node OpenTelemetry tracer provider from one or more span processors and shuts it down when the layer is released.
48
+ *
49
+ * @category layers
50
+ * @since 4.0.0
38
51
  */
39
52
  export declare const layerTracerProvider: (processor: SpanProcessor | NonEmptyReadonlyArray<SpanProcessor>, config?: Omit<TracerConfig, "resource"> & {
40
- readonly shutdownTimeout?: DurationInput | undefined;
53
+ readonly shutdownTimeout?: Duration.Input | undefined;
41
54
  }) => Layer.Layer<Tracer.OtelTracerProvider, never, Resource.Resource>;
42
55
  /**
43
- * @since 1.0.0
44
- * @category Layers
56
+ * Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
57
+ *
58
+ * **When to use**
59
+ *
60
+ * Use to install OpenTelemetry support for a Node.js Effect application from
61
+ * one configuration object, enabling tracing, metrics, logging, or any
62
+ * combination of those signals based on the processors and readers supplied.
63
+ *
64
+ * **Details**
65
+ *
66
+ * The configuration can be provided lazily or effectfully. The layer always
67
+ * provides `Resource.Resource`, building it from environment variables and any
68
+ * explicit resource metadata in the configuration.
69
+ *
70
+ * **Gotchas**
71
+ *
72
+ * Register Node auto-instrumentations before importing modules that should be
73
+ * patched, because many Node instrumentations hook module loading.
74
+ *
75
+ * @category layers
76
+ * @since 4.0.0
45
77
  */
46
78
  export declare const layer: {
47
79
  /**
48
- * @since 1.0.0
49
- * @category Layers
80
+ * Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
81
+ *
82
+ * **When to use**
83
+ *
84
+ * Use to install OpenTelemetry support for a Node.js Effect application from
85
+ * one configuration object, enabling tracing, metrics, logging, or any
86
+ * combination of those signals based on the processors and readers supplied.
87
+ *
88
+ * **Details**
89
+ *
90
+ * The configuration can be provided lazily or effectfully. The layer always
91
+ * provides `Resource.Resource`, building it from environment variables and any
92
+ * explicit resource metadata in the configuration.
93
+ *
94
+ * **Gotchas**
95
+ *
96
+ * Register Node auto-instrumentations before importing modules that should be
97
+ * patched, because many Node instrumentations hook module loading.
98
+ *
99
+ * @category layers
100
+ * @since 4.0.0
50
101
  */
51
102
  (evaluate: LazyArg<Configuration>): Layer.Layer<Resource.Resource>;
52
103
  /**
53
- * @since 1.0.0
54
- * @category Layers
104
+ * Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
105
+ *
106
+ * **When to use**
107
+ *
108
+ * Use to install OpenTelemetry support for a Node.js Effect application from
109
+ * one configuration object, enabling tracing, metrics, logging, or any
110
+ * combination of those signals based on the processors and readers supplied.
111
+ *
112
+ * **Details**
113
+ *
114
+ * The configuration can be provided lazily or effectfully. The layer always
115
+ * provides `Resource.Resource`, building it from environment variables and any
116
+ * explicit resource metadata in the configuration.
117
+ *
118
+ * **Gotchas**
119
+ *
120
+ * Register Node auto-instrumentations before importing modules that should be
121
+ * patched, because many Node instrumentations hook module loading.
122
+ *
123
+ * @category layers
124
+ * @since 4.0.0
55
125
  */
56
126
  <R, E>(evaluate: Effect.Effect<Configuration, E, R>): Layer.Layer<Resource.Resource, E, R>;
57
127
  };
58
128
  /**
129
+ * Layer that provides an empty OpenTelemetry `Resource`.
130
+ *
131
+ * @category layers
59
132
  * @since 2.0.0
60
- * @category layer
61
133
  */
62
134
  export declare const layerEmpty: Layer.Layer<Resource.Resource>;
63
135
  //# sourceMappingURL=NodeSdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeSdk.d.ts","sourceRoot":"","sources":["../src/NodeSdk.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,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,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,GAAG,SAAS,CAAA;IAClE,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,CAAC,EAAE;QAClB,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,GAAG,SAAS,CAAA;IACb,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CACrD;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,WAAW,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,EAC/D,SAAS,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CACrD,KACA,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAsB/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;CA2CzF,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAuB,CAAA"}
1
+ {"version":3,"file":"NodeSdk.d.ts","sourceRoot":"","sources":["../src/NodeSdk.ts"],"names":[],"mappings":"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"}
package/dist/NodeSdk.js CHANGED
@@ -3,13 +3,15 @@ import * as Effect from "effect/Effect";
3
3
  import { constant } from "effect/Function";
4
4
  import * as Layer from "effect/Layer";
5
5
  import { isNonEmpty } from "./internal/utilities.js";
6
- import * as Logger from "./Logger.js";
7
- import * as Metrics from "./Metrics.js";
6
+ import * as Logger from "./OtelLogger.js";
7
+ import * as Metrics from "./OtelMetrics.js";
8
+ import * as Tracer from "./OtelTracer.js";
8
9
  import * as Resource from "./Resource.js";
9
- import * as Tracer from "./Tracer.js";
10
10
  /**
11
- * @since 1.0.0
12
- * @category Layers
11
+ * Creates a scoped Node OpenTelemetry tracer provider from one or more span processors and shuts it down when the layer is released.
12
+ *
13
+ * @category layers
14
+ * @since 4.0.0
13
15
  */
14
16
  export const layerTracerProvider = (processor, config) => Layer.effect(Tracer.OtelTracerProvider, Effect.gen(function* () {
15
17
  const resource = yield* Resource.Resource;
@@ -23,8 +25,27 @@ export const layerTracerProvider = (processor, config) => Layer.effect(Tracer.Ot
23
25
  }), provider => Effect.promise(() => provider.forceFlush().then(() => provider.shutdown())).pipe(Effect.ignore, Effect.interruptible, Effect.timeoutOption(config?.shutdownTimeout ?? 3000)));
24
26
  }));
25
27
  /**
26
- * @since 1.0.0
27
- * @category Layers
28
+ * Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
29
+ *
30
+ * **When to use**
31
+ *
32
+ * Use to install OpenTelemetry support for a Node.js Effect application from
33
+ * one configuration object, enabling tracing, metrics, logging, or any
34
+ * combination of those signals based on the processors and readers supplied.
35
+ *
36
+ * **Details**
37
+ *
38
+ * The configuration can be provided lazily or effectfully. The layer always
39
+ * provides `Resource.Resource`, building it from environment variables and any
40
+ * explicit resource metadata in the configuration.
41
+ *
42
+ * **Gotchas**
43
+ *
44
+ * Register Node auto-instrumentations before importing modules that should be
45
+ * patched, because many Node instrumentations hook module loading.
46
+ *
47
+ * @category layers
48
+ * @since 4.0.0
28
49
  */
29
50
  export const layer = evaluate => Layer.unwrap(Effect.gen(function* () {
30
51
  const config = yield* Effect.isEffect(evaluate) ? evaluate : Effect.sync(evaluate);
@@ -46,8 +67,10 @@ export const layer = evaluate => Layer.unwrap(Effect.gen(function* () {
46
67
  return Layer.mergeAll(TracerLive, MetricsLive, LoggerLive).pipe(Layer.provideMerge(ResourceLive));
47
68
  }));
48
69
  /**
70
+ * Layer that provides an empty OpenTelemetry `Resource`.
71
+ *
72
+ * @category layers
49
73
  * @since 2.0.0
50
- * @category layer
51
74
  */
52
75
  export const layerEmpty = Resource.layerEmpty;
53
76
  //# sourceMappingURL=NodeSdk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeSdk.js","names":["NodeTracerProvider","Effect","constant","Layer","isNonEmpty","Logger","Metrics","Resource","Tracer","layerTracerProvider","processor","config","effect","OtelTracerProvider","gen","resource","acquireRelease","sync","provider","undefined","spanProcessors","Array","isArray","promise","forceFlush","then","shutdown","pipe","ignore","interruptible","timeoutOption","shutdownTimeout","layer","evaluate","unwrap","isEffect","ResourceLive","layerFromEnv","configToAttributes","TracerLive","spanProcessor","provide","tracerConfig","empty","MetricsLive","metricReader","temporality","metricTemporality","LoggerLive","logRecordProcessor","mergeWithExisting","loggerMergeWithExisting","layerLoggerProvider","loggerProviderConfig","mergeAll","provideMerge","layerEmpty"],"sources":["../src/NodeSdk.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"NodeSdk.js","names":["NodeTracerProvider","Effect","constant","Layer","isNonEmpty","Logger","Metrics","Tracer","Resource","layerTracerProvider","processor","config","effect","OtelTracerProvider","gen","resource","acquireRelease","sync","provider","undefined","spanProcessors","Array","isArray","promise","forceFlush","then","shutdown","pipe","ignore","interruptible","timeoutOption","shutdownTimeout","layer","evaluate","unwrap","isEffect","ResourceLive","layerFromEnv","configToAttributes","TracerLive","spanProcessor","provide","tracerConfig","empty","MetricsLive","metricReader","temporality","metricTemporality","LoggerLive","logRecordProcessor","mergeWithExisting","loggerMergeWithExisting","layerLoggerProvider","loggerProviderConfig","mergeAll","provideMerge","layerEmpty"],"sources":["../src/NodeSdk.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Connects Effect logging to the OpenTelemetry Logs SDK.
3
+ *
4
+ * This module turns Effect log events into OpenTelemetry log records. It maps
5
+ * Effect log levels to OpenTelemetry severity numbers, provides the
6
+ * `OtelLoggerProvider` service, creates an Effect `Logger` with `make`, and
7
+ * offers layers for installing that logger or creating a scoped SDK
8
+ * `LoggerProvider` from one or more `LogRecordProcessor`s.
9
+ *
10
+ * @since 4.0.0
11
+ */
12
+ import { SeverityNumber } from "@opentelemetry/api-logs";
13
+ import * as Otel from "@opentelemetry/sdk-logs";
14
+ import type { NonEmptyReadonlyArray } from "effect/Array";
15
+ import * as Context from "effect/Context";
16
+ import type * as Duration from "effect/Duration";
17
+ import * as Effect from "effect/Effect";
18
+ import * as Layer from "effect/Layer";
19
+ import * as Logger from "effect/Logger";
20
+ import type * as LogLevel from "effect/LogLevel";
21
+ import { Resource } from "./Resource.ts";
22
+ declare const OtelLoggerProvider_base: Context.ServiceClass<OtelLoggerProvider, "@effect/opentelemetry/Logger/OtelLoggerProvider", Otel.LoggerProvider>;
23
+ /**
24
+ * Context service containing the OpenTelemetry `LoggerProvider` used to emit Effect log records.
25
+ *
26
+ * @category services
27
+ * @since 4.0.0
28
+ */
29
+ export declare class OtelLoggerProvider extends OtelLoggerProvider_base {
30
+ }
31
+ /**
32
+ * Maps an Effect `LogLevel` to the corresponding OpenTelemetry `SeverityNumber`.
33
+ *
34
+ * **Details**
35
+ *
36
+ * OpenTelemetry log severity numbers are in the range `1` through `24`. This
37
+ * function maps from Effect's log levels instead of using
38
+ * `LogLevel.getOrdinal`, whose internal sort ordinals, such as the `Info`
39
+ * ordinal `20000`, fall outside the OpenTelemetry logs data model and can be
40
+ * treated as `UNSPECIFIED` by validating backends.
41
+ *
42
+ * @category converting
43
+ * @since 4.0.0
44
+ */
45
+ export declare const logLevelToSeverityNumber: (level: LogLevel.LogLevel) => SeverityNumber;
46
+ /**
47
+ * Creates an Effect logger that emits log records through the configured OpenTelemetry logger provider.
48
+ *
49
+ * @category constructors
50
+ * @since 4.0.0
51
+ */
52
+ export declare const make: Effect.Effect<Logger.Logger<unknown, void>, never, OtelLoggerProvider>;
53
+ /**
54
+ * Creates a layer that installs the OpenTelemetry-backed Effect logger, merging with existing loggers by default.
55
+ *
56
+ * **When to use**
57
+ *
58
+ * Use to install the OpenTelemetry-backed Effect logger in an application that
59
+ * has an `OtelLoggerProvider`, so standard Effect logging emits OpenTelemetry
60
+ * log records.
61
+ *
62
+ * **Details**
63
+ *
64
+ * The layer installs the logger created by `make`. `mergeWithExisting` defaults
65
+ * to `true`; set it to `false` to replace the current logger set.
66
+ *
67
+ * @see {@link make} for constructing the logger directly
68
+ * @see {@link layerLoggerProvider} for creating the required logger provider
69
+ *
70
+ * @category layers
71
+ * @since 4.0.0
72
+ */
73
+ export declare const layer: (options: {
74
+ /**
75
+ * Whether to merge the OpenTelemetry logger with existing loggers.
76
+ *
77
+ * **Details**
78
+ *
79
+ * If set to `true`, the OpenTelemetry logger will be merged with existing
80
+ * loggers in the application.
81
+ *
82
+ * If set to `false`, the OpenTelemetry logger will replace all existing
83
+ * loggers in the application.
84
+ *
85
+ * Defaults to `true`.
86
+ */
87
+ readonly mergeWithExisting?: boolean | undefined;
88
+ }) => Layer.Layer<never, never, OtelLoggerProvider>;
89
+ /**
90
+ * Creates a scoped OpenTelemetry logger provider from one or more log record processors, using the current `Resource` and flushing and shutting down the provider when the layer is released.
91
+ *
92
+ * @category layers
93
+ * @since 4.0.0
94
+ */
95
+ export declare const layerLoggerProvider: (processor: Otel.LogRecordProcessor | NonEmptyReadonlyArray<Otel.LogRecordProcessor>, config?: Omit<Otel.LoggerProviderConfig, "resource"> & {
96
+ readonly shutdownTimeout?: Duration.Input | undefined;
97
+ }) => Layer.Layer<OtelLoggerProvider, never, Resource>;
98
+ export {};
99
+ //# sourceMappingURL=OtelLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OtelLogger.d.ts","sourceRoot":"","sources":["../src/OtelLogger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAA;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGzD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAKhD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;;AAExC;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,uBAGc;CAAG;AAEzD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,UAAW,QAAQ,CAAC,QAAQ,KAAG,cAiBnE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAC5B,KAAK,EACL,kBAAkB,CAqClB,CAAA;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK,YAAa;IAC7B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACjD,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAG5C,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,cACnB,IAAI,CAAC,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAC1E,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,GAAG;IACrD,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;CACtD,KACA,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAqB/C,CAAA"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Connects Effect logging to the OpenTelemetry Logs SDK.
3
+ *
4
+ * This module turns Effect log events into OpenTelemetry log records. It maps
5
+ * Effect log levels to OpenTelemetry severity numbers, provides the
6
+ * `OtelLoggerProvider` service, creates an Effect `Logger` with `make`, and
7
+ * offers layers for installing that logger or creating a scoped SDK
8
+ * `LoggerProvider` from one or more `LogRecordProcessor`s.
9
+ *
10
+ * @since 4.0.0
11
+ */
12
+ import { SeverityNumber } from "@opentelemetry/api-logs";
13
+ import * as Otel from "@opentelemetry/sdk-logs";
14
+ import * as Arr from "effect/Array";
15
+ import * as Clock from "effect/Clock";
16
+ import * as Context from "effect/Context";
17
+ import * as Effect from "effect/Effect";
18
+ import * as Layer from "effect/Layer";
19
+ import * as Logger from "effect/Logger";
20
+ import * as Predicate from "effect/Predicate";
21
+ import * as References from "effect/References";
22
+ import * as Tracer from "effect/Tracer";
23
+ import { nanosToHrTime, unknownToAttributeValue } from "./internal/attributes.js";
24
+ import { Resource } from "./Resource.js";
25
+ /**
26
+ * Context service containing the OpenTelemetry `LoggerProvider` used to emit Effect log records.
27
+ *
28
+ * @category services
29
+ * @since 4.0.0
30
+ */
31
+ export class OtelLoggerProvider extends /*#__PURE__*/Context.Service()("@effect/opentelemetry/Logger/OtelLoggerProvider") {}
32
+ /**
33
+ * Maps an Effect `LogLevel` to the corresponding OpenTelemetry `SeverityNumber`.
34
+ *
35
+ * **Details**
36
+ *
37
+ * OpenTelemetry log severity numbers are in the range `1` through `24`. This
38
+ * function maps from Effect's log levels instead of using
39
+ * `LogLevel.getOrdinal`, whose internal sort ordinals, such as the `Info`
40
+ * ordinal `20000`, fall outside the OpenTelemetry logs data model and can be
41
+ * treated as `UNSPECIFIED` by validating backends.
42
+ *
43
+ * @category converting
44
+ * @since 4.0.0
45
+ */
46
+ export const logLevelToSeverityNumber = level => {
47
+ switch (level) {
48
+ case "Trace":
49
+ return SeverityNumber.TRACE;
50
+ case "Debug":
51
+ return SeverityNumber.DEBUG;
52
+ case "Info":
53
+ return SeverityNumber.INFO;
54
+ case "Warn":
55
+ return SeverityNumber.WARN;
56
+ case "Error":
57
+ return SeverityNumber.ERROR;
58
+ case "Fatal":
59
+ return SeverityNumber.FATAL;
60
+ default:
61
+ return SeverityNumber.UNSPECIFIED;
62
+ }
63
+ };
64
+ /**
65
+ * Creates an Effect logger that emits log records through the configured OpenTelemetry logger provider.
66
+ *
67
+ * @category constructors
68
+ * @since 4.0.0
69
+ */
70
+ export const make = /*#__PURE__*/Effect.gen(function* () {
71
+ const loggerProvider = yield* OtelLoggerProvider;
72
+ const clock = yield* Clock.Clock;
73
+ const otelLogger = loggerProvider.getLogger("@effect/opentelemetry");
74
+ return Logger.make(options => {
75
+ const attributes = {
76
+ fiberId: options.fiber.id
77
+ };
78
+ const span = Context.getOrUndefined(options.fiber.context, Tracer.ParentSpan);
79
+ if (Predicate.isNotUndefined(span)) {
80
+ attributes.spanId = span.spanId;
81
+ attributes.traceId = span.traceId;
82
+ }
83
+ for (const [key, value] of Object.entries(options.fiber.getRef(References.CurrentLogAnnotations))) {
84
+ attributes[key] = unknownToAttributeValue(value);
85
+ }
86
+ const now = options.date.getTime();
87
+ for (const [label, startTime] of options.fiber.getRef(References.CurrentLogSpans)) {
88
+ attributes[`logSpan.${label}`] = `${now - startTime}ms`;
89
+ }
90
+ const message = Arr.ensure(options.message).map(unknownToAttributeValue);
91
+ const hrTime = nanosToHrTime(clock.currentTimeNanosUnsafe());
92
+ otelLogger.emit({
93
+ body: message.length === 1 ? message[0] : message,
94
+ severityText: options.logLevel,
95
+ severityNumber: logLevelToSeverityNumber(options.logLevel),
96
+ timestamp: hrTime,
97
+ observedTimestamp: hrTime,
98
+ attributes
99
+ });
100
+ });
101
+ });
102
+ /**
103
+ * Creates a layer that installs the OpenTelemetry-backed Effect logger, merging with existing loggers by default.
104
+ *
105
+ * **When to use**
106
+ *
107
+ * Use to install the OpenTelemetry-backed Effect logger in an application that
108
+ * has an `OtelLoggerProvider`, so standard Effect logging emits OpenTelemetry
109
+ * log records.
110
+ *
111
+ * **Details**
112
+ *
113
+ * The layer installs the logger created by `make`. `mergeWithExisting` defaults
114
+ * to `true`; set it to `false` to replace the current logger set.
115
+ *
116
+ * @see {@link make} for constructing the logger directly
117
+ * @see {@link layerLoggerProvider} for creating the required logger provider
118
+ *
119
+ * @category layers
120
+ * @since 4.0.0
121
+ */
122
+ export const layer = options => Logger.layer([make], {
123
+ mergeWithExisting: options.mergeWithExisting ?? true
124
+ });
125
+ /**
126
+ * Creates a scoped OpenTelemetry logger provider from one or more log record processors, using the current `Resource` and flushing and shutting down the provider when the layer is released.
127
+ *
128
+ * @category layers
129
+ * @since 4.0.0
130
+ */
131
+ export const layerLoggerProvider = (processor, config) => Layer.effect(OtelLoggerProvider, Effect.gen(function* () {
132
+ const resource = yield* Resource;
133
+ return yield* Effect.acquireRelease(Effect.sync(() => new Otel.LoggerProvider({
134
+ ...(config ?? undefined),
135
+ processors: Arr.ensure(processor),
136
+ resource
137
+ })), provider => Effect.promise(() => provider.forceFlush().then(() => provider.shutdown())).pipe(Effect.ignore, Effect.interruptible, Effect.timeoutOption(config?.shutdownTimeout ?? 3000)));
138
+ }));
139
+ //# sourceMappingURL=OtelLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OtelLogger.js","names":["SeverityNumber","Otel","Arr","Clock","Context","Effect","Layer","Logger","Predicate","References","Tracer","nanosToHrTime","unknownToAttributeValue","Resource","OtelLoggerProvider","Service","logLevelToSeverityNumber","level","TRACE","DEBUG","INFO","WARN","ERROR","FATAL","UNSPECIFIED","make","gen","loggerProvider","clock","otelLogger","getLogger","options","attributes","fiberId","fiber","id","span","getOrUndefined","context","ParentSpan","isNotUndefined","spanId","traceId","key","value","Object","entries","getRef","CurrentLogAnnotations","now","date","getTime","label","startTime","CurrentLogSpans","message","ensure","map","hrTime","currentTimeNanosUnsafe","emit","body","length","severityText","logLevel","severityNumber","timestamp","observedTimestamp","layer","mergeWithExisting","layerLoggerProvider","processor","config","effect","resource","acquireRelease","sync","LoggerProvider","undefined","processors","provider","promise","forceFlush","then","shutdown","pipe","ignore","interruptible","timeoutOption","shutdownTimeout"],"sources":["../src/OtelLogger.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,17 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * OpenTelemetry support for Effect metrics.
3
+ *
4
+ * This module exposes Effect metrics as an OpenTelemetry `MetricProducer`.
5
+ * `makeProducer` creates the producer, `registerProducer` attaches it to one
6
+ * or more SDK `MetricReader`s, and `layer` manages that setup in a scoped
7
+ * layer. The `TemporalityPreference` type lets callers choose cumulative or
8
+ * delta metric values.
9
+ *
10
+ * @since 4.0.0
3
11
  */
4
12
  import type { MetricProducer, MetricReader } from "@opentelemetry/sdk-metrics";
5
13
  import type * as Arr from "effect/Array";
6
- import type { DurationInput } from "effect/Duration";
14
+ import type * as Duration from "effect/Duration";
7
15
  import * as Effect from "effect/Effect";
8
16
  import type { LazyArg } from "effect/Function";
9
17
  import * as Layer from "effect/Layer";
@@ -13,45 +21,61 @@ import { Resource } from "./Resource.ts";
13
21
  * Determines how metric values relate to the time interval over which they
14
22
  * are aggregated.
15
23
  *
16
- * - `cumulative`: Reports total since a fixed start time. Each data point
17
- * depends on all previous measurements. This is the default behavior.
24
+ * **Details**
18
25
  *
19
- * - `delta`: Reports changes since the last export. Each interval is
20
- * independent with no dependency on previous measurements.
26
+ * `cumulative` reports total since a fixed start time. Each data point depends
27
+ * on all previous measurements. This is the default behavior. `delta` reports
28
+ * changes since the last export. Each interval is independent with no
29
+ * dependency on previous measurements.
21
30
  *
22
- * @since 1.0.0
23
- * @category Models
31
+ * @category models
32
+ * @since 4.0.0
24
33
  */
25
34
  export type TemporalityPreference = "cumulative" | "delta";
26
35
  /**
27
36
  * Creates an OpenTelemetry metric producer from Effect metrics.
28
37
  *
29
- * @since 1.0.0
30
- * @category Constructors
38
+ * **When to use**
39
+ *
40
+ * Use when you need a `MetricProducer` for manually wiring Effect metrics into
41
+ * OpenTelemetry instead of using the scoped `layer` helper.
42
+ *
43
+ * **Details**
44
+ *
45
+ * Requires the current OpenTelemetry `Resource`, captures the current Effect
46
+ * context, and uses cumulative temporality by default. Pass `"delta"` for
47
+ * interval-based values.
48
+ *
49
+ * @see {@link registerProducer} for attaching a producer to metric readers
50
+ * @see {@link layer} for creating and registering a producer in a scoped layer
51
+ *
52
+ * @category constructors
53
+ * @since 4.0.0
31
54
  */
32
55
  export declare const makeProducer: (temporality?: TemporalityPreference) => Effect.Effect<MetricProducer, never, Resource>;
33
56
  /**
34
57
  * Registers a metric producer with one or more metric readers.
35
58
  *
36
- * @since 1.0.0
37
- * @category Constructors
59
+ * @category constructors
60
+ * @since 4.0.0
38
61
  */
39
62
  export declare const registerProducer: (self: MetricProducer, metricReader: LazyArg<MetricReader | Arr.NonEmptyReadonlyArray<MetricReader>>, options?: {
40
- readonly shutdownTimeout?: DurationInput | undefined;
63
+ readonly shutdownTimeout?: Duration.Input | undefined;
41
64
  }) => Effect.Effect<Array<any>, never, Scope.Scope>;
42
65
  /**
43
66
  * Creates a Layer that registers a metric producer with metric readers.
44
67
  *
45
- * @example
68
+ * **Example** (Creating a metrics layer with temporality)
69
+ *
46
70
  * ```ts
47
- * import { Metrics } from "@effect/opentelemetry"
71
+ * import { OtelMetrics } from "@effect/opentelemetry"
48
72
  * import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics"
49
73
  * import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http"
50
74
  *
51
75
  * const metricExporter = new OTLPMetricExporter({ url: "<your-otel-url>" })
52
76
  *
53
77
  * // Use delta temporality for backends like Datadog or Dynatrace
54
- * const metricsLayer = Metrics.layer(
78
+ * const metricsLayer = OtelMetrics.layer(
55
79
  * () => new PeriodicExportingMetricReader({
56
80
  * exporter: metricExporter,
57
81
  * exportIntervalMillis: 10000
@@ -60,17 +84,17 @@ export declare const registerProducer: (self: MetricProducer, metricReader: Lazy
60
84
  * )
61
85
  *
62
86
  * // Use cumulative temporality for backends like Prometheus (default)
63
- * const cumulativeLayer = Metrics.layer(
87
+ * const cumulativeLayer = OtelMetrics.layer(
64
88
  * () => new PeriodicExportingMetricReader({ exporter: metricExporter }),
65
89
  * { temporality: "cumulative" }
66
90
  * )
67
91
  * ```
68
92
  *
69
- * @since 1.0.0
70
- * @category Layers
93
+ * @category layers
94
+ * @since 4.0.0
71
95
  */
72
96
  export declare const layer: (evaluate: LazyArg<MetricReader | Arr.NonEmptyReadonlyArray<MetricReader>>, options?: {
73
- readonly shutdownTimeout?: DurationInput | undefined;
97
+ readonly shutdownTimeout?: Duration.Input | undefined;
74
98
  readonly temporality?: TemporalityPreference | undefined;
75
99
  }) => Layer.Layer<never, never, Resource>;
76
- //# sourceMappingURL=Metrics.d.ts.map
100
+ //# sourceMappingURL=OtelMetrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OtelMetrics.d.ts","sourceRoot":"","sources":["../src/OtelMetrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,OAAO,CAAA;AAE1D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,iBAAkB,qBAAqB,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,CAK5G,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,SACrB,cAAc,gBACN,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,YACnE;IACR,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;CACtD,KACA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAkB5C,CAAA;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,KAAK,aACN,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,YAC/D;IACR,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAA;CACzD,KACA,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAIjC,CAAA"}