@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.
Files changed (160) 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/{esm/index.js → index.js} +4 -20
  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 +70 -118
  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 -26
  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/OtlpTracer/package.json +0 -6
  60. package/Resource/package.json +0 -6
  61. package/Tracer/package.json +0 -6
  62. package/WebSdk/package.json +0 -6
  63. package/dist/cjs/Logger.js +0 -85
  64. package/dist/cjs/Logger.js.map +0 -1
  65. package/dist/cjs/Metrics.js +0 -24
  66. package/dist/cjs/Metrics.js.map +0 -1
  67. package/dist/cjs/NodeSdk.js +0 -53
  68. package/dist/cjs/NodeSdk.js.map +0 -1
  69. package/dist/cjs/Otlp.js +0 -46
  70. package/dist/cjs/Otlp.js.map +0 -1
  71. package/dist/cjs/OtlpLogger.js +0 -158
  72. package/dist/cjs/OtlpLogger.js.map +0 -1
  73. package/dist/cjs/OtlpMetrics.js +0 -354
  74. package/dist/cjs/OtlpMetrics.js.map +0 -1
  75. package/dist/cjs/OtlpResource.js +0 -136
  76. package/dist/cjs/OtlpResource.js.map +0 -1
  77. package/dist/cjs/OtlpTracer.js +0 -229
  78. package/dist/cjs/OtlpTracer.js.map +0 -1
  79. package/dist/cjs/Resource.js +0 -75
  80. package/dist/cjs/Resource.js.map +0 -1
  81. package/dist/cjs/Tracer.js +0 -87
  82. package/dist/cjs/Tracer.js.map +0 -1
  83. package/dist/cjs/WebSdk.js +0 -42
  84. package/dist/cjs/WebSdk.js.map +0 -1
  85. package/dist/cjs/index.js +0 -30
  86. package/dist/cjs/index.js.map +0 -1
  87. package/dist/cjs/internal/metrics.js +0 -288
  88. package/dist/cjs/internal/metrics.js.map +0 -1
  89. package/dist/cjs/internal/otlpExporter.js +0 -81
  90. package/dist/cjs/internal/otlpExporter.js.map +0 -1
  91. package/dist/cjs/internal/tracer.js +0 -299
  92. package/dist/cjs/internal/tracer.js.map +0 -1
  93. package/dist/cjs/internal/utils.js +0 -34
  94. package/dist/cjs/internal/utils.js.map +0 -1
  95. package/dist/dts/Logger.d.ts.map +0 -1
  96. package/dist/dts/Metrics.d.ts +0 -29
  97. package/dist/dts/Metrics.d.ts.map +0 -1
  98. package/dist/dts/NodeSdk.d.ts.map +0 -1
  99. package/dist/dts/Otlp.d.ts +0 -31
  100. package/dist/dts/Otlp.d.ts.map +0 -1
  101. package/dist/dts/OtlpLogger.d.ts +0 -46
  102. package/dist/dts/OtlpLogger.d.ts.map +0 -1
  103. package/dist/dts/OtlpMetrics.d.ts +0 -40
  104. package/dist/dts/OtlpMetrics.d.ts.map +0 -1
  105. package/dist/dts/OtlpResource.d.ts +0 -104
  106. package/dist/dts/OtlpResource.d.ts.map +0 -1
  107. package/dist/dts/OtlpTracer.d.ts +0 -49
  108. package/dist/dts/OtlpTracer.d.ts.map +0 -1
  109. package/dist/dts/Resource.d.ts.map +0 -1
  110. package/dist/dts/Tracer.d.ts +0 -143
  111. package/dist/dts/Tracer.d.ts.map +0 -1
  112. package/dist/dts/WebSdk.d.ts.map +0 -1
  113. package/dist/dts/index.d.ts +0 -45
  114. package/dist/dts/index.d.ts.map +0 -1
  115. package/dist/dts/internal/otlpExporter.d.ts +0 -2
  116. package/dist/dts/internal/otlpExporter.d.ts.map +0 -1
  117. package/dist/dts/internal/tracer.d.ts +0 -2
  118. package/dist/dts/internal/tracer.d.ts.map +0 -1
  119. package/dist/dts/internal/utils.d.ts +0 -2
  120. package/dist/dts/internal/utils.d.ts.map +0 -1
  121. package/dist/esm/Logger.js +0 -75
  122. package/dist/esm/Logger.js.map +0 -1
  123. package/dist/esm/Metrics.js +0 -17
  124. package/dist/esm/Metrics.js.map +0 -1
  125. package/dist/esm/NodeSdk.js.map +0 -1
  126. package/dist/esm/Otlp.js +0 -38
  127. package/dist/esm/Otlp.js.map +0 -1
  128. package/dist/esm/OtlpLogger.js +0 -150
  129. package/dist/esm/OtlpLogger.js.map +0 -1
  130. package/dist/esm/OtlpMetrics.js +0 -346
  131. package/dist/esm/OtlpMetrics.js.map +0 -1
  132. package/dist/esm/OtlpResource.js +0 -124
  133. package/dist/esm/OtlpResource.js.map +0 -1
  134. package/dist/esm/OtlpTracer.js +0 -221
  135. package/dist/esm/OtlpTracer.js.map +0 -1
  136. package/dist/esm/Resource.js.map +0 -1
  137. package/dist/esm/Tracer.js +0 -80
  138. package/dist/esm/Tracer.js.map +0 -1
  139. package/dist/esm/WebSdk.js +0 -33
  140. package/dist/esm/WebSdk.js.map +0 -1
  141. package/dist/esm/index.js.map +0 -1
  142. package/dist/esm/internal/metrics.js +0 -278
  143. package/dist/esm/internal/metrics.js.map +0 -1
  144. package/dist/esm/internal/otlpExporter.js +0 -74
  145. package/dist/esm/internal/otlpExporter.js.map +0 -1
  146. package/dist/esm/internal/tracer.js +0 -290
  147. package/dist/esm/internal/tracer.js.map +0 -1
  148. package/dist/esm/internal/utils.js +0 -23
  149. package/dist/esm/internal/utils.js.map +0 -1
  150. package/dist/esm/package.json +0 -4
  151. package/index/package.json +0 -6
  152. package/src/Otlp.ts +0 -66
  153. package/src/OtlpLogger.ts +0 -258
  154. package/src/OtlpMetrics.ts +0 -571
  155. package/src/OtlpResource.ts +0 -232
  156. package/src/OtlpTracer.ts +0 -349
  157. package/src/internal/otlpExporter.ts +0 -124
  158. package/src/internal/tracer.ts +0 -437
  159. package/src/internal/utils.ts +0 -31
  160. /package/dist/{dts/internal → internal}/metrics.d.ts +0 -0
package/src/WebSdk.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"
@@ -10,100 +10,108 @@ import type { NonEmptyReadonlyArray } from "effect/Array"
10
10
  import * as Effect from "effect/Effect"
11
11
  import { constant, type LazyArg } from "effect/Function"
12
12
  import * as Layer from "effect/Layer"
13
- import { isNonEmpty } from "./internal/utils.js"
14
- import * as Logger from "./Logger.js"
15
- import * as Metrics from "./Metrics.js"
16
- import * as Resource from "./Resource.js"
17
- import * as Tracer from "./Tracer.js"
13
+ import { isNonEmpty } from "./internal/utilities.ts"
14
+ import * as Logger from "./Logger.ts"
15
+ import * as Metrics from "./Metrics.ts"
16
+ import * as Resource from "./Resource.ts"
17
+ import * as Tracer from "./Tracer.ts"
18
18
 
19
19
  /**
20
20
  * @since 1.0.0
21
- * @category model
21
+ * @category Models
22
22
  */
23
23
  export interface Configuration {
24
24
  readonly spanProcessor?: SpanProcessor | ReadonlyArray<SpanProcessor> | undefined
25
25
  readonly tracerConfig?: Omit<TracerConfig, "resource">
26
26
  readonly metricReader?: MetricReader | ReadonlyArray<MetricReader> | undefined
27
+ readonly metricTemporality?: Metrics.TemporalityPreference | undefined
27
28
  readonly logRecordProcessor?: LogRecordProcessor | ReadonlyArray<LogRecordProcessor> | undefined
28
29
  readonly loggerProviderConfig?: Omit<LoggerProviderConfig, "resource"> | undefined
30
+ readonly loggerMergeWithExisting?: boolean | undefined
29
31
  readonly resource: {
30
32
  readonly serviceName: string
31
33
  readonly serviceVersion?: string
32
- readonly attributes?: OtelApi.Attributes
34
+ readonly attributes?: Otel.Attributes
33
35
  }
34
36
  }
35
37
 
36
38
  /**
37
39
  * @since 1.0.0
38
- * @category layers
40
+ * @category Layers
39
41
  */
40
42
  export const layerTracerProvider = (
41
43
  processor: SpanProcessor | NonEmptyReadonlyArray<SpanProcessor>,
42
44
  config?: Omit<TracerConfig, "resource">
43
45
  ): Layer.Layer<Tracer.OtelTracerProvider, never, Resource.Resource> =>
44
- Layer.scoped(
46
+ Layer.effect(
45
47
  Tracer.OtelTracerProvider,
46
- Effect.flatMap(
47
- Resource.Resource,
48
- (resource) =>
49
- Effect.acquireRelease(
50
- Effect.sync(() => {
51
- const provider = new WebTracerProvider({
52
- ...(config ?? undefined),
53
- resource,
54
- spanProcessors: Array.isArray(processor) ? (processor as any) : [processor]
55
- })
56
- return provider
57
- }),
58
- (provider) => Effect.ignoreLogged(Effect.promise(() => provider.forceFlush().then(() => provider.shutdown())))
59
- )
60
- )
48
+ Effect.gen(function*() {
49
+ const resource = yield* Resource.Resource
50
+ return yield* Effect.acquireRelease(
51
+ Effect.sync(() => {
52
+ const provider = new WebTracerProvider({
53
+ ...(config ?? undefined),
54
+ resource,
55
+ spanProcessors: Array.isArray(processor) ? (processor as any) : [processor]
56
+ })
57
+ return provider
58
+ }),
59
+ (provider) =>
60
+ Effect.ignore(
61
+ Effect.promise(() => provider.forceFlush().then(() => provider.shutdown()))
62
+ )
63
+ )
64
+ })
61
65
  )
62
66
 
63
67
  /**
64
68
  * @since 1.0.0
65
- * @category layer
69
+ * @category Layers
66
70
  */
67
71
  export const layer: {
68
72
  /**
69
73
  * @since 1.0.0
70
- * @category layer
74
+ * @category Layers
71
75
  */
72
76
  (evaluate: LazyArg<Configuration>): Layer.Layer<Resource.Resource>
73
77
  /**
74
78
  * @since 1.0.0
75
- * @category layer
79
+ * @category Layers
76
80
  */
77
81
  <E, R>(evaluate: Effect.Effect<Configuration, E, R>): Layer.Layer<Resource.Resource, E, R>
78
82
  } = (
79
83
  evaluate: LazyArg<Configuration> | Effect.Effect<Configuration, any, any>
80
84
  ): Layer.Layer<Resource.Resource> =>
81
- Layer.unwrapEffect(
82
- Effect.map(
83
- Effect.isEffect(evaluate)
85
+ Layer.unwrap(
86
+ Effect.gen(function*() {
87
+ const config = yield* Effect.isEffect(evaluate)
84
88
  ? evaluate as Effect.Effect<Configuration>
85
- : Effect.sync(evaluate),
86
- (config) => {
87
- const ResourceLive = Resource.layer(config.resource)
89
+ : Effect.sync(evaluate)
88
90
 
89
- const TracerLive = isNonEmpty(config.spanProcessor)
90
- ? Layer.provide(Tracer.layer, layerTracerProvider(config.spanProcessor, config.tracerConfig))
91
- : Layer.empty
92
-
93
- const LoggerLive = isNonEmpty(config.logRecordProcessor)
94
- ? Layer.provide(
95
- Logger.layerLoggerAdd,
96
- Logger.layerLoggerProvider(config.logRecordProcessor, config.loggerProviderConfig)
97
- )
98
- : Layer.empty
91
+ const ResourceLive = Resource.layer(config.resource)
99
92
 
100
- const MetricsLive = isNonEmpty(config.metricReader)
101
- ? Metrics.layer(constant(config.metricReader))
102
- : Layer.empty
93
+ const TracerLive = isNonEmpty(config.spanProcessor)
94
+ ? Layer.provide(
95
+ Tracer.layer,
96
+ layerTracerProvider(config.spanProcessor, config.tracerConfig)
97
+ )
98
+ : Layer.empty
103
99
 
104
- return Layer.mergeAll(TracerLive, MetricsLive, LoggerLive).pipe(
105
- Layer.provideMerge(ResourceLive)
100
+ const LoggerLive = isNonEmpty(config.logRecordProcessor)
101
+ ? Layer.provide(
102
+ Logger.layer({ mergeWithExisting: config.loggerMergeWithExisting }),
103
+ Logger.layerLoggerProvider(config.logRecordProcessor, config.loggerProviderConfig)
106
104
  )
107
- }
108
- )
105
+ : Layer.empty
106
+
107
+ const MetricsLive = isNonEmpty(config.metricReader)
108
+ ? Metrics.layer(constant(config.metricReader), {
109
+ temporality: config.metricTemporality
110
+ })
111
+ : Layer.empty
112
+
113
+ return Layer.mergeAll(TracerLive, MetricsLive, LoggerLive).pipe(
114
+ Layer.provideMerge(ResourceLive)
115
+ )
116
+ })
109
117
  )
package/src/index.ts CHANGED
@@ -1,54 +1,35 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
- export * as Logger from "./Logger.js"
5
4
 
6
- /**
7
- * @since 1.0.0
8
- */
9
- export * as Metrics from "./Metrics.js"
10
-
11
- /**
12
- * @since 1.0.0
13
- */
14
- export * as NodeSdk from "./NodeSdk.js"
15
-
16
- /**
17
- * @since 1.0.0
18
- */
19
- export * as Otlp from "./Otlp.js"
20
-
21
- /**
22
- * @since 1.0.0
23
- */
24
- export * as OtlpLogger from "./OtlpLogger.js"
5
+ // @barrel: Auto-generated exports. Do not edit manually.
25
6
 
26
7
  /**
27
8
  * @since 1.0.0
28
9
  */
29
- export * as OtlpMetrics from "./OtlpMetrics.js"
10
+ export * as Logger from "./Logger.ts"
30
11
 
31
12
  /**
32
13
  * @since 1.0.0
33
14
  */
34
- export * as OtlpResource from "./OtlpResource.js"
15
+ export * as Metrics from "./Metrics.ts"
35
16
 
36
17
  /**
37
18
  * @since 1.0.0
38
19
  */
39
- export * as OtlpTracer from "./OtlpTracer.js"
20
+ export * as NodeSdk from "./NodeSdk.ts"
40
21
 
41
22
  /**
42
23
  * @since 1.0.0
43
24
  */
44
- export * as Resource from "./Resource.js"
25
+ export * as Resource from "./Resource.ts"
45
26
 
46
27
  /**
47
28
  * @since 1.0.0
48
29
  */
49
- export * as Tracer from "./Tracer.js"
30
+ export * as Tracer from "./Tracer.ts"
50
31
 
51
32
  /**
52
33
  * @since 1.0.0
53
34
  */
54
- export * as WebSdk from "./WebSdk.js"
35
+ export * as WebSdk from "./WebSdk.ts"
@@ -0,0 +1,21 @@
1
+ import type * as Otel from "@opentelemetry/api"
2
+ import * as Inspectable from "effect/Inspectable"
3
+
4
+ /** @internal */
5
+ export const recordToAttributes = (record: Record<string, unknown>): Otel.Attributes => {
6
+ const attributes: Otel.Attributes = {}
7
+ for (const [key, value] of Object.entries(record)) {
8
+ attributes[key] = unknownToAttributeValue(value)
9
+ }
10
+ return attributes
11
+ }
12
+
13
+ /** @internal */
14
+ export const unknownToAttributeValue = (value: unknown): Otel.AttributeValue => {
15
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
16
+ return value
17
+ } else if (typeof value === "bigint") {
18
+ return value.toString()
19
+ }
20
+ return Inspectable.toStringUnknown(value)
21
+ }