@effect/opentelemetry 0.61.0 → 4.0.0-beta.1

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 (183) hide show
  1. package/LICENSE +1 -1
  2. package/dist/{dts/Logger.d.ts → Logger.d.ts} +19 -13
  3. package/dist/Logger.d.ts.map +1 -0
  4. package/dist/Logger.js +76 -0
  5. package/dist/Logger.js.map +1 -0
  6. package/dist/Metrics.d.ts +76 -0
  7. package/dist/Metrics.d.ts.map +1 -0
  8. package/dist/Metrics.js +59 -0
  9. package/dist/Metrics.js.map +1 -0
  10. package/dist/{dts/NodeSdk.d.ts → NodeSdk.d.ts} +12 -9
  11. package/dist/NodeSdk.d.ts.map +1 -0
  12. package/dist/{esm/NodeSdk.js → NodeSdk.js} +23 -14
  13. package/dist/NodeSdk.js.map +1 -0
  14. package/dist/{dts/Resource.d.ts → Resource.d.ts} +10 -13
  15. package/dist/Resource.d.ts.map +1 -0
  16. package/dist/{esm/Resource.js → Resource.js} +12 -13
  17. package/dist/Resource.js.map +1 -0
  18. package/dist/Tracer.d.ts +129 -0
  19. package/dist/Tracer.d.ts.map +1 -0
  20. package/dist/Tracer.js +391 -0
  21. package/dist/Tracer.js.map +1 -0
  22. package/dist/{dts/WebSdk.d.ts → WebSdk.d.ts} +12 -9
  23. package/dist/WebSdk.d.ts.map +1 -0
  24. package/dist/WebSdk.js +41 -0
  25. package/dist/WebSdk.js.map +1 -0
  26. package/dist/index.d.ts +28 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +29 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/internal/attributes.d.ts +2 -0
  31. package/dist/internal/attributes.d.ts.map +1 -0
  32. package/dist/internal/attributes.js +19 -0
  33. package/dist/internal/attributes.js.map +1 -0
  34. package/dist/{dts/internal → internal}/metrics.d.ts.map +1 -1
  35. package/dist/internal/metrics.js +406 -0
  36. package/dist/internal/metrics.js.map +1 -0
  37. package/dist/internal/utilities.d.ts +2 -0
  38. package/dist/internal/utilities.d.ts.map +1 -0
  39. package/dist/internal/utilities.js +3 -0
  40. package/dist/internal/utilities.js.map +1 -0
  41. package/package.json +86 -119
  42. package/src/Logger.ts +52 -55
  43. package/src/Metrics.ts +92 -18
  44. package/src/NodeSdk.ts +67 -64
  45. package/src/Resource.ts +16 -24
  46. package/src/Tracer.ts +469 -78
  47. package/src/WebSdk.ts +59 -51
  48. package/src/index.ts +7 -36
  49. package/src/internal/attributes.ts +21 -0
  50. package/src/internal/metrics.ts +381 -250
  51. package/src/internal/utilities.ts +5 -0
  52. package/Logger/package.json +0 -6
  53. package/Metrics/package.json +0 -6
  54. package/NodeSdk/package.json +0 -6
  55. package/Otlp/package.json +0 -6
  56. package/OtlpLogger/package.json +0 -6
  57. package/OtlpMetrics/package.json +0 -6
  58. package/OtlpResource/package.json +0 -6
  59. package/OtlpSerialization/package.json +0 -6
  60. package/OtlpTracer/package.json +0 -6
  61. package/Resource/package.json +0 -6
  62. package/Tracer/package.json +0 -6
  63. package/WebSdk/package.json +0 -6
  64. package/dist/cjs/Logger.js +0 -85
  65. package/dist/cjs/Logger.js.map +0 -1
  66. package/dist/cjs/Metrics.js +0 -24
  67. package/dist/cjs/Metrics.js.map +0 -1
  68. package/dist/cjs/NodeSdk.js +0 -53
  69. package/dist/cjs/NodeSdk.js.map +0 -1
  70. package/dist/cjs/Otlp.js +0 -64
  71. package/dist/cjs/Otlp.js.map +0 -1
  72. package/dist/cjs/OtlpLogger.js +0 -163
  73. package/dist/cjs/OtlpLogger.js.map +0 -1
  74. package/dist/cjs/OtlpMetrics.js +0 -357
  75. package/dist/cjs/OtlpMetrics.js.map +0 -1
  76. package/dist/cjs/OtlpResource.js +0 -136
  77. package/dist/cjs/OtlpResource.js.map +0 -1
  78. package/dist/cjs/OtlpSerialization.js +0 -55
  79. package/dist/cjs/OtlpSerialization.js.map +0 -1
  80. package/dist/cjs/OtlpTracer.js +0 -231
  81. package/dist/cjs/OtlpTracer.js.map +0 -1
  82. package/dist/cjs/Resource.js +0 -75
  83. package/dist/cjs/Resource.js.map +0 -1
  84. package/dist/cjs/Tracer.js +0 -87
  85. package/dist/cjs/Tracer.js.map +0 -1
  86. package/dist/cjs/WebSdk.js +0 -42
  87. package/dist/cjs/WebSdk.js.map +0 -1
  88. package/dist/cjs/index.js +0 -32
  89. package/dist/cjs/index.js.map +0 -1
  90. package/dist/cjs/internal/metrics.js +0 -288
  91. package/dist/cjs/internal/metrics.js.map +0 -1
  92. package/dist/cjs/internal/otlpExporter.js +0 -83
  93. package/dist/cjs/internal/otlpExporter.js.map +0 -1
  94. package/dist/cjs/internal/otlpProtobuf.js +0 -430
  95. package/dist/cjs/internal/otlpProtobuf.js.map +0 -1
  96. package/dist/cjs/internal/protobuf.js +0 -183
  97. package/dist/cjs/internal/protobuf.js.map +0 -1
  98. package/dist/cjs/internal/tracer.js +0 -306
  99. package/dist/cjs/internal/tracer.js.map +0 -1
  100. package/dist/cjs/internal/utils.js +0 -34
  101. package/dist/cjs/internal/utils.js.map +0 -1
  102. package/dist/dts/Logger.d.ts.map +0 -1
  103. package/dist/dts/Metrics.d.ts +0 -29
  104. package/dist/dts/Metrics.d.ts.map +0 -1
  105. package/dist/dts/NodeSdk.d.ts.map +0 -1
  106. package/dist/dts/Otlp.d.ts +0 -80
  107. package/dist/dts/Otlp.d.ts.map +0 -1
  108. package/dist/dts/OtlpLogger.d.ts +0 -47
  109. package/dist/dts/OtlpLogger.d.ts.map +0 -1
  110. package/dist/dts/OtlpMetrics.d.ts +0 -41
  111. package/dist/dts/OtlpMetrics.d.ts.map +0 -1
  112. package/dist/dts/OtlpResource.d.ts +0 -104
  113. package/dist/dts/OtlpResource.d.ts.map +0 -1
  114. package/dist/dts/OtlpSerialization.d.ts +0 -53
  115. package/dist/dts/OtlpSerialization.d.ts.map +0 -1
  116. package/dist/dts/OtlpTracer.d.ts +0 -50
  117. package/dist/dts/OtlpTracer.d.ts.map +0 -1
  118. package/dist/dts/Resource.d.ts.map +0 -1
  119. package/dist/dts/Tracer.d.ts +0 -143
  120. package/dist/dts/Tracer.d.ts.map +0 -1
  121. package/dist/dts/WebSdk.d.ts.map +0 -1
  122. package/dist/dts/index.d.ts +0 -54
  123. package/dist/dts/index.d.ts.map +0 -1
  124. package/dist/dts/internal/otlpExporter.d.ts +0 -2
  125. package/dist/dts/internal/otlpExporter.d.ts.map +0 -1
  126. package/dist/dts/internal/otlpProtobuf.d.ts +0 -501
  127. package/dist/dts/internal/otlpProtobuf.d.ts.map +0 -1
  128. package/dist/dts/internal/protobuf.d.ts +0 -100
  129. package/dist/dts/internal/protobuf.d.ts.map +0 -1
  130. package/dist/dts/internal/tracer.d.ts +0 -2
  131. package/dist/dts/internal/tracer.d.ts.map +0 -1
  132. package/dist/dts/internal/utils.d.ts +0 -2
  133. package/dist/dts/internal/utils.d.ts.map +0 -1
  134. package/dist/esm/Logger.js +0 -75
  135. package/dist/esm/Logger.js.map +0 -1
  136. package/dist/esm/Metrics.js +0 -17
  137. package/dist/esm/Metrics.js.map +0 -1
  138. package/dist/esm/NodeSdk.js.map +0 -1
  139. package/dist/esm/Otlp.js +0 -56
  140. package/dist/esm/Otlp.js.map +0 -1
  141. package/dist/esm/OtlpLogger.js +0 -155
  142. package/dist/esm/OtlpLogger.js.map +0 -1
  143. package/dist/esm/OtlpMetrics.js +0 -349
  144. package/dist/esm/OtlpMetrics.js.map +0 -1
  145. package/dist/esm/OtlpResource.js +0 -124
  146. package/dist/esm/OtlpResource.js.map +0 -1
  147. package/dist/esm/OtlpSerialization.js +0 -46
  148. package/dist/esm/OtlpSerialization.js.map +0 -1
  149. package/dist/esm/OtlpTracer.js +0 -223
  150. package/dist/esm/OtlpTracer.js.map +0 -1
  151. package/dist/esm/Resource.js.map +0 -1
  152. package/dist/esm/Tracer.js +0 -80
  153. package/dist/esm/Tracer.js.map +0 -1
  154. package/dist/esm/WebSdk.js +0 -33
  155. package/dist/esm/WebSdk.js.map +0 -1
  156. package/dist/esm/index.js +0 -54
  157. package/dist/esm/index.js.map +0 -1
  158. package/dist/esm/internal/metrics.js +0 -278
  159. package/dist/esm/internal/metrics.js.map +0 -1
  160. package/dist/esm/internal/otlpExporter.js +0 -76
  161. package/dist/esm/internal/otlpExporter.js.map +0 -1
  162. package/dist/esm/internal/otlpProtobuf.js +0 -396
  163. package/dist/esm/internal/otlpProtobuf.js.map +0 -1
  164. package/dist/esm/internal/protobuf.js +0 -155
  165. package/dist/esm/internal/protobuf.js.map +0 -1
  166. package/dist/esm/internal/tracer.js +0 -297
  167. package/dist/esm/internal/tracer.js.map +0 -1
  168. package/dist/esm/internal/utils.js +0 -23
  169. package/dist/esm/internal/utils.js.map +0 -1
  170. package/dist/esm/package.json +0 -4
  171. package/index/package.json +0 -6
  172. package/src/Otlp.ts +0 -118
  173. package/src/OtlpLogger.ts +0 -263
  174. package/src/OtlpMetrics.ts +0 -575
  175. package/src/OtlpResource.ts +0 -232
  176. package/src/OtlpSerialization.ts +0 -64
  177. package/src/OtlpTracer.ts +0 -352
  178. package/src/internal/otlpExporter.ts +0 -126
  179. package/src/internal/otlpProtobuf.ts +0 -729
  180. package/src/internal/protobuf.ts +0 -219
  181. package/src/internal/tracer.ts +0 -448
  182. package/src/internal/utils.ts +0 -31
  183. /package/dist/{dts/internal → internal}/metrics.d.ts +0 -0
package/src/NodeSdk.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
- import type * as OtelApi from "@opentelemetry/api"
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"
@@ -11,33 +11,35 @@ import type { DurationInput } from "effect/Duration"
11
11
  import * as Effect from "effect/Effect"
12
12
  import { constant, type LazyArg } from "effect/Function"
13
13
  import * as Layer from "effect/Layer"
14
- import { isNonEmpty } from "./internal/utils.js"
15
- import * as Logger from "./Logger.js"
16
- import * as Metrics from "./Metrics.js"
17
- import * as Resource from "./Resource.js"
18
- import * as Tracer from "./Tracer.js"
14
+ import { isNonEmpty } from "./internal/utilities.ts"
15
+ import * as Logger from "./Logger.ts"
16
+ import * as Metrics from "./Metrics.ts"
17
+ import * as Resource from "./Resource.ts"
18
+ import * as Tracer from "./Tracer.ts"
19
19
 
20
20
  /**
21
21
  * @since 1.0.0
22
- * @category model
22
+ * @category Models
23
23
  */
24
24
  export interface Configuration {
25
25
  readonly spanProcessor?: SpanProcessor | ReadonlyArray<SpanProcessor> | undefined
26
26
  readonly tracerConfig?: Omit<TracerConfig, "resource"> | undefined
27
27
  readonly metricReader?: MetricReader | ReadonlyArray<MetricReader> | undefined
28
+ readonly metricTemporality?: Metrics.TemporalityPreference | undefined
28
29
  readonly logRecordProcessor?: LogRecordProcessor | ReadonlyArray<LogRecordProcessor> | undefined
29
30
  readonly loggerProviderConfig?: Omit<LoggerProviderConfig, "resource"> | undefined
31
+ readonly loggerMergeWithExisting?: boolean | undefined
30
32
  readonly resource?: {
31
33
  readonly serviceName: string
32
34
  readonly serviceVersion?: string
33
- readonly attributes?: OtelApi.Attributes
35
+ readonly attributes?: Otel.Attributes
34
36
  } | undefined
35
37
  readonly shutdownTimeout?: DurationInput | undefined
36
38
  }
37
39
 
38
40
  /**
39
41
  * @since 1.0.0
40
- * @category layers
42
+ * @category Layers
41
43
  */
42
44
  export const layerTracerProvider = (
43
45
  processor: SpanProcessor | NonEmptyReadonlyArray<SpanProcessor>,
@@ -45,85 +47,86 @@ export const layerTracerProvider = (
45
47
  readonly shutdownTimeout?: DurationInput | undefined
46
48
  }
47
49
  ): Layer.Layer<Tracer.OtelTracerProvider, never, Resource.Resource> =>
48
- Layer.scoped(
50
+ Layer.effect(
49
51
  Tracer.OtelTracerProvider,
50
- Effect.flatMap(
51
- Resource.Resource,
52
- (resource) =>
53
- Effect.acquireRelease(
54
- Effect.sync(() => {
55
- const provider = new NodeTracerProvider({
56
- ...(config ?? undefined),
57
- resource,
58
- spanProcessors: Array.isArray(processor) ? (processor as any) : [processor]
59
- })
60
- return provider
61
- }),
62
- (provider) =>
63
- Effect.promise(() => provider.forceFlush().then(() => provider.shutdown())).pipe(
64
- Effect.ignoreLogged,
65
- Effect.interruptible,
66
- Effect.timeoutOption(config?.shutdownTimeout ?? 3000)
67
- )
68
- )
69
- )
52
+ Effect.gen(function*() {
53
+ const resource = yield* Resource.Resource
54
+ return yield* Effect.acquireRelease(
55
+ Effect.sync(() => {
56
+ const provider = new NodeTracerProvider({
57
+ ...(config ?? undefined),
58
+ resource,
59
+ spanProcessors: Array.isArray(processor) ? (processor as any) : [processor]
60
+ })
61
+ return provider
62
+ }),
63
+ (provider) =>
64
+ Effect.promise(() => provider.forceFlush().then(() => provider.shutdown())).pipe(
65
+ Effect.ignore,
66
+ Effect.interruptible,
67
+ Effect.timeoutOption(config?.shutdownTimeout ?? 3000)
68
+ )
69
+ )
70
+ })
70
71
  )
71
72
 
72
73
  /**
73
74
  * @since 1.0.0
74
- * @category layer
75
+ * @category Layers
75
76
  */
76
77
  export const layer: {
77
78
  /**
78
79
  * @since 1.0.0
79
- * @category layer
80
+ * @category Layers
80
81
  */
81
82
  (evaluate: LazyArg<Configuration>): Layer.Layer<Resource.Resource>
82
83
  /**
83
84
  * @since 1.0.0
84
- * @category layer
85
+ * @category Layers
85
86
  */
86
87
  <R, E>(evaluate: Effect.Effect<Configuration, E, R>): Layer.Layer<Resource.Resource, E, R>
87
88
  } = (
88
89
  evaluate: LazyArg<Configuration> | Effect.Effect<Configuration, any, any>
89
90
  ): Layer.Layer<Resource.Resource> =>
90
- Layer.unwrapEffect(
91
- Effect.map(
92
- Effect.isEffect(evaluate)
91
+ Layer.unwrap(
92
+ Effect.gen(function*() {
93
+ const config = yield* Effect.isEffect(evaluate)
93
94
  ? evaluate as Effect.Effect<Configuration>
94
- : Effect.sync(evaluate),
95
- (config) => {
96
- const ResourceLive = Resource.layerFromEnv(config.resource && Resource.configToAttributes(config.resource))
95
+ : Effect.sync(evaluate)
97
96
 
98
- const TracerLive = isNonEmpty(config.spanProcessor)
99
- ? Layer.provide(
100
- Tracer.layer,
101
- layerTracerProvider(config.spanProcessor, {
102
- ...config.tracerConfig,
103
- shutdownTimeout: config.shutdownTimeout
104
- })
105
- )
106
- : Layer.empty
97
+ const ResourceLive = Resource.layerFromEnv(config.resource && Resource.configToAttributes(config.resource))
107
98
 
108
- const MetricsLive = isNonEmpty(config.metricReader)
109
- ? Metrics.layer(constant(config.metricReader), config)
110
- : Layer.empty
99
+ const TracerLive = isNonEmpty(config.spanProcessor)
100
+ ? Layer.provide(
101
+ Tracer.layer,
102
+ layerTracerProvider(config.spanProcessor, {
103
+ ...config.tracerConfig,
104
+ shutdownTimeout: config.shutdownTimeout
105
+ })
106
+ )
107
+ : Layer.empty
111
108
 
112
- const LoggerLive = isNonEmpty(config.logRecordProcessor)
113
- ? Layer.provide(
114
- Logger.layerLoggerAdd,
115
- Logger.layerLoggerProvider(config.logRecordProcessor, {
116
- ...config.loggerProviderConfig,
117
- shutdownTimeout: config.shutdownTimeout
118
- })
119
- )
120
- : Layer.empty
109
+ const MetricsLive = isNonEmpty(config.metricReader)
110
+ ? Metrics.layer(constant(config.metricReader), {
111
+ shutdownTimeout: config.shutdownTimeout,
112
+ temporality: config.metricTemporality
113
+ })
114
+ : Layer.empty
121
115
 
122
- return Layer.mergeAll(TracerLive, MetricsLive, LoggerLive).pipe(
123
- Layer.provideMerge(ResourceLive)
116
+ const LoggerLive = isNonEmpty(config.logRecordProcessor)
117
+ ? Layer.provide(
118
+ Logger.layer({ mergeWithExisting: config.loggerMergeWithExisting }),
119
+ Logger.layerLoggerProvider(config.logRecordProcessor, {
120
+ ...config.loggerProviderConfig,
121
+ shutdownTimeout: config.shutdownTimeout
122
+ })
124
123
  )
125
- }
126
- )
124
+ : Layer.empty
125
+
126
+ return Layer.mergeAll(TracerLive, MetricsLive, LoggerLive).pipe(
127
+ Layer.provideMerge(ResourceLive)
128
+ )
129
+ })
127
130
  )
128
131
 
129
132
  /**
package/src/Resource.ts CHANGED
@@ -6,28 +6,22 @@ import * as Resources from "@opentelemetry/resources"
6
6
  import * as OtelSemConv from "@opentelemetry/semantic-conventions"
7
7
  import * as Arr from "effect/Array"
8
8
  import * as Config from "effect/Config"
9
- import { GenericTag } from "effect/Context"
10
9
  import * as Effect from "effect/Effect"
11
- import { pipe } from "effect/Function"
12
10
  import * as Layer from "effect/Layer"
11
+ import * as ServiceMap from "effect/ServiceMap"
13
12
 
14
13
  /**
15
14
  * @since 1.0.0
16
- * @category identifier
15
+ * @category Services
17
16
  */
18
- export interface Resource {
19
- readonly _: unique symbol
20
- }
21
-
22
- /**
23
- * @since 1.0.0
24
- * @category tag
25
- */
26
- export const Resource = GenericTag<Resource, Resources.Resource>("@effect/opentelemetry/Resource")
17
+ export class Resource extends ServiceMap.Service<
18
+ Resource,
19
+ Resources.Resource
20
+ >()("@effect/opentelemetry/Resource") {}
27
21
 
28
22
  /**
29
23
  * @since 1.0.0
30
- * @category layer
24
+ * @category Layers
31
25
  */
32
26
  export const layer = (config: {
33
27
  readonly serviceName: string
@@ -41,7 +35,7 @@ export const layer = (config: {
41
35
 
42
36
  /**
43
37
  * @since 1.0.0
44
- * @category config
38
+ * @category Configuration
45
39
  */
46
40
  export const configToAttributes = (options: {
47
41
  readonly serviceName: string
@@ -64,7 +58,7 @@ export const configToAttributes = (options: {
64
58
 
65
59
  /**
66
60
  * @since 1.0.0
67
- * @category layer
61
+ * @category Layers
68
62
  */
69
63
  export const layerFromEnv = (
70
64
  additionalAttributes?:
@@ -74,10 +68,9 @@ export const layerFromEnv = (
74
68
  Layer.effect(
75
69
  Resource,
76
70
  Effect.gen(function*() {
77
- const serviceName = yield* pipe(Config.string("OTEL_SERVICE_NAME"), Config.option, Effect.orDie)
78
- const attributes = yield* pipe(
79
- Config.string("OTEL_RESOURCE_ATTRIBUTES"),
80
- Config.withDefault(""),
71
+ const serviceName = yield* Config.option(Config.string("OTEL_SERVICE_NAME"))
72
+ const attributes = yield* Config.string("OTEL_RESOURCE_ATTRIBUTES").pipe(
73
+ Config.withDefault(() => ""),
81
74
  Config.map((s) => {
82
75
  const attrs = s.split(",")
83
76
  return Arr.reduce(attrs, {} as OtelApi.Attributes, (acc, attr) => {
@@ -88,8 +81,7 @@ export const layerFromEnv = (
88
81
  acc[parts[0].trim()] = parts[1].trim()
89
82
  return acc
90
83
  })
91
- }),
92
- Effect.orDie
84
+ })
93
85
  )
94
86
  if (serviceName._tag === "Some") {
95
87
  attributes[OtelSemConv.ATTR_SERVICE_NAME] = serviceName.value
@@ -98,12 +90,12 @@ export const layerFromEnv = (
98
90
  Object.assign(attributes, additionalAttributes)
99
91
  }
100
92
  return Resources.resourceFromAttributes(attributes)
101
- })
93
+ }).pipe(Effect.orDie)
102
94
  )
103
95
 
104
96
  /**
105
- * @since 2.0.0
106
- * @category layer
97
+ * @since 1.0.0
98
+ * @category Layers
107
99
  */
108
100
  export const layerEmpty = Layer.succeed(
109
101
  Resource,