@effect/opentelemetry 0.22.1 → 0.24.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 (120) hide show
  1. package/dist/cjs/Metrics.js +48 -0
  2. package/dist/cjs/Metrics.js.map +1 -0
  3. package/dist/cjs/NodeSdk.js +63 -0
  4. package/dist/cjs/NodeSdk.js.map +1 -0
  5. package/dist/cjs/Resource.js +62 -0
  6. package/dist/cjs/Resource.js.map +1 -0
  7. package/dist/cjs/Tracer.js +88 -0
  8. package/dist/cjs/Tracer.js.map +1 -0
  9. package/dist/cjs/WebSdk.js +63 -0
  10. package/dist/cjs/WebSdk.js.map +1 -0
  11. package/dist/cjs/index.js +42 -0
  12. package/dist/cjs/index.js.map +1 -0
  13. package/{Metrics/dist/effect-opentelemetry-Metrics.cjs.dev.js → dist/cjs/internal/metrics.js} +83 -110
  14. package/dist/cjs/internal/metrics.js.map +1 -0
  15. package/dist/cjs/internal/tracer.js +207 -0
  16. package/dist/cjs/internal/tracer.js.map +1 -0
  17. package/dist/{declarations/src → dts}/Metrics.d.ts +1 -2
  18. package/dist/dts/Metrics.d.ts.map +1 -0
  19. package/dist/dts/NodeSdk.d.ts.map +1 -0
  20. package/dist/dts/Resource.d.ts.map +1 -0
  21. package/dist/dts/Tracer.d.ts.map +1 -0
  22. package/dist/dts/WebSdk.d.ts.map +1 -0
  23. package/dist/dts/index.d.ts.map +1 -0
  24. package/dist/dts/internal/metrics.d.ts +2 -0
  25. package/dist/dts/internal/metrics.d.ts.map +1 -0
  26. package/dist/dts/internal/tracer.d.ts +2 -0
  27. package/dist/dts/internal/tracer.d.ts.map +1 -0
  28. package/dist/esm/Metrics.js +17 -0
  29. package/dist/esm/Metrics.js.map +1 -0
  30. package/dist/esm/NodeSdk.js +30 -0
  31. package/dist/esm/NodeSdk.js.map +1 -0
  32. package/{Resource/dist/effect-opentelemetry-Resource.esm.js → dist/esm/Resource.js} +7 -16
  33. package/dist/esm/Resource.js.map +1 -0
  34. package/dist/esm/Tracer.js +57 -0
  35. package/dist/esm/Tracer.js.map +1 -0
  36. package/dist/esm/WebSdk.js +30 -0
  37. package/dist/esm/WebSdk.js.map +1 -0
  38. package/dist/esm/index.js +21 -0
  39. package/dist/esm/index.js.map +1 -0
  40. package/{internal/metrics.esm.js → dist/esm/internal/metrics.js} +16 -21
  41. package/dist/esm/internal/metrics.js.map +1 -0
  42. package/{internal/tracer.esm.js → dist/esm/internal/tracer.js} +33 -40
  43. package/dist/esm/internal/tracer.js.map +1 -0
  44. package/dist/esm/package.json +4 -0
  45. package/package.json +45 -131
  46. package/src/Metrics.ts +3 -4
  47. package/src/NodeSdk.ts +3 -3
  48. package/src/Tracer.ts +2 -2
  49. package/src/WebSdk.ts +3 -3
  50. package/src/index.ts +5 -5
  51. package/src/internal/metrics.ts +5 -4
  52. package/src/internal/tracer.ts +5 -5
  53. package/Metrics/dist/effect-opentelemetry-Metrics.cjs.d.mts +0 -2
  54. package/Metrics/dist/effect-opentelemetry-Metrics.cjs.d.mts.map +0 -1
  55. package/Metrics/dist/effect-opentelemetry-Metrics.cjs.d.ts +0 -2
  56. package/Metrics/dist/effect-opentelemetry-Metrics.cjs.d.ts.map +0 -1
  57. package/Metrics/dist/effect-opentelemetry-Metrics.cjs.js +0 -7
  58. package/Metrics/dist/effect-opentelemetry-Metrics.cjs.mjs +0 -5
  59. package/Metrics/dist/effect-opentelemetry-Metrics.cjs.prod.js +0 -293
  60. package/Metrics/dist/effect-opentelemetry-Metrics.esm.js +0 -24
  61. package/Metrics/package.json +0 -4
  62. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.d.mts +0 -2
  63. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.d.mts.map +0 -1
  64. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.d.ts +0 -2
  65. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.d.ts.map +0 -1
  66. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.dev.js +0 -81
  67. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.js +0 -7
  68. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.mjs +0 -4
  69. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.prod.js +0 -81
  70. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.esm.js +0 -42
  71. package/NodeSdk/package.json +0 -4
  72. package/Resource/dist/effect-opentelemetry-Resource.cjs.d.mts +0 -2
  73. package/Resource/dist/effect-opentelemetry-Resource.cjs.d.mts.map +0 -1
  74. package/Resource/dist/effect-opentelemetry-Resource.cjs.d.ts +0 -2
  75. package/Resource/dist/effect-opentelemetry-Resource.cjs.d.ts.map +0 -1
  76. package/Resource/dist/effect-opentelemetry-Resource.cjs.dev.js +0 -64
  77. package/Resource/dist/effect-opentelemetry-Resource.cjs.js +0 -7
  78. package/Resource/dist/effect-opentelemetry-Resource.cjs.mjs +0 -4
  79. package/Resource/dist/effect-opentelemetry-Resource.cjs.prod.js +0 -64
  80. package/Resource/package.json +0 -4
  81. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.d.mts +0 -2
  82. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.d.mts.map +0 -1
  83. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.d.ts +0 -2
  84. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.d.ts.map +0 -1
  85. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.dev.js +0 -293
  86. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.js +0 -7
  87. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.mjs +0 -13
  88. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.prod.js +0 -293
  89. package/Tracer/dist/effect-opentelemetry-Tracer.esm.js +0 -72
  90. package/Tracer/package.json +0 -4
  91. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.d.mts +0 -2
  92. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.d.mts.map +0 -1
  93. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.d.ts +0 -2
  94. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.d.ts.map +0 -1
  95. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.dev.js +0 -81
  96. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.js +0 -7
  97. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.mjs +0 -4
  98. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.prod.js +0 -81
  99. package/WebSdk/dist/effect-opentelemetry-WebSdk.esm.js +0 -42
  100. package/WebSdk/package.json +0 -4
  101. package/dist/declarations/src/Metrics.d.ts.map +0 -1
  102. package/dist/declarations/src/NodeSdk.d.ts.map +0 -1
  103. package/dist/declarations/src/Resource.d.ts.map +0 -1
  104. package/dist/declarations/src/Tracer.d.ts.map +0 -1
  105. package/dist/declarations/src/WebSdk.d.ts.map +0 -1
  106. package/dist/declarations/src/index.d.ts.map +0 -1
  107. package/dist/effect-opentelemetry.cjs.d.mts +0 -2
  108. package/dist/effect-opentelemetry.cjs.d.mts.map +0 -1
  109. package/dist/effect-opentelemetry.cjs.d.ts +0 -2
  110. package/dist/effect-opentelemetry.cjs.d.ts.map +0 -1
  111. package/dist/effect-opentelemetry.cjs.dev.js +0 -41
  112. package/dist/effect-opentelemetry.cjs.js +0 -7
  113. package/dist/effect-opentelemetry.cjs.mjs +0 -7
  114. package/dist/effect-opentelemetry.cjs.prod.js +0 -41
  115. package/dist/effect-opentelemetry.esm.js +0 -10
  116. /package/dist/{declarations/src → dts}/NodeSdk.d.ts +0 -0
  117. /package/dist/{declarations/src → dts}/Resource.d.ts +0 -0
  118. /package/dist/{declarations/src → dts}/Tracer.d.ts +0 -0
  119. /package/dist/{declarations/src → dts}/WebSdk.d.ts +0 -0
  120. /package/dist/{declarations/src → dts}/index.d.ts +0 -0
@@ -1,64 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var Resources = require('@opentelemetry/resources');
6
- var semanticConventions = require('@opentelemetry/semantic-conventions');
7
- var Context = require('effect/Context');
8
- var Layer = require('effect/Layer');
9
-
10
- function _interopNamespace(e) {
11
- if (e && e.__esModule) return e;
12
- var n = Object.create(null);
13
- if (e) {
14
- Object.keys(e).forEach(function (k) {
15
- if (k !== 'default') {
16
- var d = Object.getOwnPropertyDescriptor(e, k);
17
- Object.defineProperty(n, k, d.get ? d : {
18
- enumerable: true,
19
- get: function () { return e[k]; }
20
- });
21
- }
22
- });
23
- }
24
- n["default"] = e;
25
- return Object.freeze(n);
26
- }
27
-
28
- var Resources__namespace = /*#__PURE__*/_interopNamespace(Resources);
29
- var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
30
-
31
- /**
32
- * @since 1.0.0
33
- */
34
-
35
- /**
36
- * @since 1.0.0
37
- * @category identifier
38
- */
39
-
40
- /**
41
- * @since 1.0.0
42
- * @category tag
43
- */
44
- const Resource = /*#__PURE__*/Context.Tag("@effect/opentelemetry/Resource");
45
-
46
- /**
47
- * @since 1.0.0
48
- * @category layer
49
- */
50
- const layer = config => {
51
- const attributes = {
52
- ...(config.attributes ?? {}),
53
- [semanticConventions.SemanticResourceAttributes.SERVICE_NAME]: config.serviceName,
54
- [semanticConventions.SemanticResourceAttributes.TELEMETRY_SDK_NAME]: "@effect/opentelemetry",
55
- [semanticConventions.SemanticResourceAttributes.TELEMETRY_SDK_LANGUAGE]: typeof globalThis.document === "undefined" ? semanticConventions.TelemetrySdkLanguageValues.NODEJS : semanticConventions.TelemetrySdkLanguageValues.WEBJS
56
- };
57
- if (config.serviceVersion) {
58
- attributes[semanticConventions.SemanticResourceAttributes.SERVICE_VERSION] = config.serviceVersion;
59
- }
60
- return Layer__namespace.succeed(Resource, new Resources__namespace.Resource(attributes));
61
- };
62
-
63
- exports.Resource = Resource;
64
- exports.layer = layer;
@@ -1,4 +0,0 @@
1
- {
2
- "main": "dist/effect-opentelemetry-Resource.cjs.js",
3
- "module": "dist/effect-opentelemetry-Resource.esm.js"
4
- }
@@ -1,2 +0,0 @@
1
- export * from "../../dist/declarations/src/Tracer.js";
2
- //# sourceMappingURL=effect-opentelemetry-Tracer.cjs.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-opentelemetry-Tracer.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/Tracer.d.ts"],"names":[],"mappings":"AAAA"}
@@ -1,2 +0,0 @@
1
- export * from "../../dist/declarations/src/Tracer";
2
- //# sourceMappingURL=effect-opentelemetry-Tracer.cjs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-opentelemetry-Tracer.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/Tracer.d.ts"],"names":[],"mappings":"AAAA"}
@@ -1,293 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var OtelApi = require('@opentelemetry/api');
6
- var Cause = require('effect/Cause');
7
- var Context = require('effect/Context');
8
- var Effect = require('effect/Effect');
9
- var FiberRef = require('effect/FiberRef');
10
- var Layer = require('effect/Layer');
11
- var Option = require('effect/Option');
12
- var EffectTracer = require('effect/Tracer');
13
- var Resource_dist_effectOpentelemetryResource = require('../../Resource/dist/effect-opentelemetry-Resource.cjs.dev.js');
14
- require('@opentelemetry/resources');
15
- require('@opentelemetry/semantic-conventions');
16
-
17
- function _interopNamespace(e) {
18
- if (e && e.__esModule) return e;
19
- var n = Object.create(null);
20
- if (e) {
21
- Object.keys(e).forEach(function (k) {
22
- if (k !== 'default') {
23
- var d = Object.getOwnPropertyDescriptor(e, k);
24
- Object.defineProperty(n, k, d.get ? d : {
25
- enumerable: true,
26
- get: function () { return e[k]; }
27
- });
28
- }
29
- });
30
- }
31
- n["default"] = e;
32
- return Object.freeze(n);
33
- }
34
-
35
- var OtelApi__namespace = /*#__PURE__*/_interopNamespace(OtelApi);
36
- var Cause__namespace = /*#__PURE__*/_interopNamespace(Cause);
37
- var Context__namespace = /*#__PURE__*/_interopNamespace(Context);
38
- var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
39
- var FiberRef__namespace = /*#__PURE__*/_interopNamespace(FiberRef);
40
- var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
41
- var Option__namespace = /*#__PURE__*/_interopNamespace(Option);
42
- var EffectTracer__namespace = /*#__PURE__*/_interopNamespace(EffectTracer);
43
-
44
- /** @internal */
45
- class OtelSpan {
46
- _tag = "Span";
47
- attributes = new Map();
48
- constructor(contextApi, tracer, name, parent, context, links, startTime) {
49
- this.name = name;
50
- this.parent = parent;
51
- this.context = context;
52
- this.links = links;
53
- const active = contextApi.active();
54
- this.span = tracer.startSpan(name, {
55
- startTime: nanosToHrTime(startTime),
56
- links: links.length > 0 ? links.map(link => ({
57
- context: makeSpanContext(link.span),
58
- attributes: recordToAttributes(link.attributes)
59
- })) : undefined
60
- }, parent._tag === "Some" ? populateContext(active, parent.value, context) : OtelApi__namespace.trace.deleteSpan(active));
61
- const spanContext = this.span.spanContext();
62
- this.spanId = spanContext.spanId;
63
- this.traceId = spanContext.traceId;
64
- this.status = {
65
- _tag: "Started",
66
- startTime
67
- };
68
- this.sampled = (spanContext.traceFlags & OtelApi__namespace.TraceFlags.SAMPLED) === OtelApi__namespace.TraceFlags.SAMPLED;
69
- }
70
- attribute(key, value) {
71
- this.span.setAttribute(key, unknownToAttributeValue(value));
72
- this.attributes.set(key, value);
73
- }
74
- end(endTime, exit) {
75
- this.status = {
76
- _tag: "Ended",
77
- endTime,
78
- exit,
79
- startTime: this.status.startTime
80
- };
81
- if (exit._tag === "Success") {
82
- this.span.setStatus({
83
- code: OtelApi__namespace.SpanStatusCode.OK
84
- });
85
- } else {
86
- if (Cause__namespace.isInterruptedOnly(exit.cause)) {
87
- this.span.setStatus({
88
- code: OtelApi__namespace.SpanStatusCode.OK,
89
- message: Cause__namespace.pretty(exit.cause)
90
- });
91
- this.span.setAttribute("span.label", "⚠︎ Interrupted");
92
- this.span.setAttribute("status.interrupted", true);
93
- } else {
94
- this.span.setStatus({
95
- code: OtelApi__namespace.SpanStatusCode.ERROR,
96
- message: Cause__namespace.pretty(exit.cause)
97
- });
98
- }
99
- }
100
- this.span.end(nanosToHrTime(endTime));
101
- }
102
- event(name, startTime, attributes) {
103
- this.span.addEvent(name, attributes ? recordToAttributes(attributes) : undefined, nanosToHrTime(startTime));
104
- }
105
- }
106
-
107
- /** @internal */
108
- const TracerProvider$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/TracerProvider");
109
-
110
- /** @internal */
111
- const Tracer$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/Tracer");
112
-
113
- /** @internal */
114
- const make$1 = /*#__PURE__*/Effect__namespace.map(Tracer$1, tracer => EffectTracer__namespace.make({
115
- span(name, parent, context, links, startTime) {
116
- return new OtelSpan(OtelApi__namespace.context, tracer, name, parent, context, links, startTime);
117
- },
118
- context(execution, fiber) {
119
- const currentSpan = fiber.getFiberRef(FiberRef__namespace.currentContext).unsafeMap.get(EffectTracer__namespace.ParentSpan);
120
- if (currentSpan === undefined) {
121
- return execution();
122
- }
123
- return OtelApi__namespace.context.with(populateContext(OtelApi__namespace.context.active(), currentSpan), execution);
124
- }
125
- }));
126
-
127
- /** @internal */
128
- const traceFlagsTag = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/traceFlags");
129
-
130
- /** @internal */
131
- const traceStateTag = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/traceState");
132
-
133
- /** @internal */
134
- const makeExternalSpan$1 = options => {
135
- let context = Context__namespace.empty();
136
- if (options.traceFlags) {
137
- context = Context__namespace.add(context, traceFlagsTag, options.traceFlags);
138
- }
139
- if (typeof options.traceState === "string") {
140
- context = Option__namespace.match(createTraceState(options.traceState), {
141
- onNone: () => context,
142
- onSome: traceState => Context__namespace.add(context, traceStateTag, traceState)
143
- });
144
- } else if (options.traceState) {
145
- context = Context__namespace.add(context, traceStateTag, options.traceState);
146
- }
147
- return {
148
- _tag: "ExternalSpan",
149
- traceId: options.traceId,
150
- spanId: options.spanId,
151
- sampled: options.traceFlags ? (options.traceFlags & OtelApi__namespace.TraceFlags.SAMPLED) === OtelApi__namespace.TraceFlags.SAMPLED : true,
152
- context
153
- };
154
- };
155
-
156
- /** @internal */
157
- const currentOtelSpan$1 = /*#__PURE__*/Effect__namespace.map(Effect__namespace.currentSpan, span => Option__namespace.map(Option__namespace.filter(span, span => "span" in span), _ => _.span));
158
-
159
- /** @internal */
160
- const layerGlobalProvider = /*#__PURE__*/Layer__namespace.sync(TracerProvider$1, () => OtelApi__namespace.trace.getTracerProvider());
161
-
162
- /** @internal */
163
- const layerTracer$1 = /*#__PURE__*/Layer__namespace.effect(Tracer$1, /*#__PURE__*/Effect__namespace.flatMap( /*#__PURE__*/Effect__namespace.zip(Resource_dist_effectOpentelemetryResource.Resource, TracerProvider$1), ([resource, provider]) => Effect__namespace.sync(() => provider.getTracer(resource.attributes["service.name"], resource.attributes["service.version"]))));
164
-
165
- /** @internal */
166
- const layerGlobalTracer$1 = /*#__PURE__*/layerTracer$1.pipe( /*#__PURE__*/Layer__namespace.use(layerGlobalProvider));
167
-
168
- /** @internal */
169
- const layerGlobal$1 = /*#__PURE__*/Layer__namespace.unwrapEffect(Effect__namespace.map(make$1, Layer__namespace.setTracer)).pipe( /*#__PURE__*/Layer__namespace.use(layerGlobalTracer$1));
170
-
171
- /** @internal */
172
- const layer$1 = /*#__PURE__*/Layer__namespace.unwrapEffect(Effect__namespace.map(make$1, Layer__namespace.setTracer)).pipe( /*#__PURE__*/Layer__namespace.use(layerTracer$1));
173
-
174
- // -------------------------------------------------------------------------------------
175
- // utils
176
- // -------------------------------------------------------------------------------------
177
-
178
- const bigint1e9 = 1_000_000_000n;
179
- const nanosToHrTime = timestamp => {
180
- return [Number(timestamp / bigint1e9), Number(timestamp % bigint1e9)];
181
- };
182
- const createTraceState = /*#__PURE__*/Option__namespace.liftThrowable(OtelApi__namespace.createTraceState);
183
- const populateContext = (otelContext, span, context) => span instanceof OtelSpan ? OtelApi__namespace.trace.setSpan(otelContext, span.span) : OtelApi__namespace.trace.setSpanContext(otelContext, makeSpanContext(span, context));
184
- const makeSpanContext = (span, context) => ({
185
- spanId: span.spanId,
186
- traceId: span.traceId,
187
- isRemote: span._tag === "ExternalSpan",
188
- traceFlags: Option__namespace.getOrElse(context ? extractTraceTag(span, context, traceFlagsTag) : Context__namespace.getOption(span.context, traceFlagsTag), () => OtelApi__namespace.TraceFlags.SAMPLED),
189
- traceState: Option__namespace.getOrUndefined(context ? extractTraceTag(span, context, traceStateTag) : Context__namespace.getOption(span.context, traceStateTag))
190
- });
191
- const extractTraceTag = (parent, context, tag) => Option__namespace.orElse(Context__namespace.getOption(context, tag), () => Context__namespace.getOption(parent.context, tag));
192
- const recordToAttributes = value => {
193
- return Object.entries(value).reduce((acc, [key, value]) => {
194
- acc[key] = unknownToAttributeValue(value);
195
- return acc;
196
- }, {});
197
- };
198
- const unknownToAttributeValue = value => {
199
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
200
- return value;
201
- } else if (typeof value === "bigint") {
202
- return Number(value);
203
- }
204
- return objectToAttribute(value);
205
- };
206
- const objectToAttribute = value => {
207
- try {
208
- return JSON.stringify(value, null, 2);
209
- } catch {
210
- return String(value);
211
- }
212
- };
213
-
214
- /**
215
- * @since 1.0.0
216
- */
217
- /**
218
- * @since 1.0.0
219
- * @category constructors
220
- */
221
- const make = make$1;
222
-
223
- /**
224
- * @since 1.0.0
225
- * @category constructors
226
- */
227
- const makeExternalSpan = makeExternalSpan$1;
228
-
229
- /**
230
- * @since 1.0.0
231
- * @category accessors
232
- */
233
- const currentOtelSpan = currentOtelSpan$1;
234
-
235
- /**
236
- * @since 1.0.0
237
- * @category layers
238
- */
239
- const layer = layer$1;
240
-
241
- /**
242
- * @since 1.0.0
243
- * @category layers
244
- */
245
- const layerGlobal = layerGlobal$1;
246
-
247
- /**
248
- * @since 1.0.0
249
- * @category layers
250
- */
251
- const layerTracer = layerTracer$1;
252
-
253
- /**
254
- * @since 1.0.0
255
- * @category layers
256
- */
257
- const layerGlobalTracer = layerGlobalTracer$1;
258
-
259
- /**
260
- * @since 1.0.0
261
- * @category tags
262
- */
263
- const TracerProvider = TracerProvider$1;
264
-
265
- /**
266
- * @since 1.0.0
267
- * @category tags
268
- */
269
- const Tracer = Tracer$1;
270
-
271
- /**
272
- * @since 1.0.0
273
- * @category tags
274
- */
275
- const TraceFlags = traceFlagsTag;
276
-
277
- /**
278
- * @since 1.0.0
279
- * @category tags
280
- */
281
- const TraceState = traceStateTag;
282
-
283
- exports.TraceFlags = TraceFlags;
284
- exports.TraceState = TraceState;
285
- exports.Tracer = Tracer;
286
- exports.TracerProvider = TracerProvider;
287
- exports.currentOtelSpan = currentOtelSpan;
288
- exports.layer = layer;
289
- exports.layerGlobal = layerGlobal;
290
- exports.layerGlobalTracer = layerGlobalTracer;
291
- exports.layerTracer = layerTracer;
292
- exports.make = make;
293
- exports.makeExternalSpan = makeExternalSpan;
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- if (process.env.NODE_ENV === "production") {
4
- module.exports = require("./effect-opentelemetry-Tracer.cjs.prod.js");
5
- } else {
6
- module.exports = require("./effect-opentelemetry-Tracer.cjs.dev.js");
7
- }
@@ -1,13 +0,0 @@
1
- export {
2
- TraceFlags,
3
- TraceState,
4
- Tracer,
5
- TracerProvider,
6
- currentOtelSpan,
7
- layer,
8
- layerGlobal,
9
- layerGlobalTracer,
10
- layerTracer,
11
- make,
12
- makeExternalSpan
13
- } from "./effect-opentelemetry-Tracer.cjs.js";
@@ -1,293 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var OtelApi = require('@opentelemetry/api');
6
- var Cause = require('effect/Cause');
7
- var Context = require('effect/Context');
8
- var Effect = require('effect/Effect');
9
- var FiberRef = require('effect/FiberRef');
10
- var Layer = require('effect/Layer');
11
- var Option = require('effect/Option');
12
- var EffectTracer = require('effect/Tracer');
13
- var Resource_dist_effectOpentelemetryResource = require('../../Resource/dist/effect-opentelemetry-Resource.cjs.prod.js');
14
- require('@opentelemetry/resources');
15
- require('@opentelemetry/semantic-conventions');
16
-
17
- function _interopNamespace(e) {
18
- if (e && e.__esModule) return e;
19
- var n = Object.create(null);
20
- if (e) {
21
- Object.keys(e).forEach(function (k) {
22
- if (k !== 'default') {
23
- var d = Object.getOwnPropertyDescriptor(e, k);
24
- Object.defineProperty(n, k, d.get ? d : {
25
- enumerable: true,
26
- get: function () { return e[k]; }
27
- });
28
- }
29
- });
30
- }
31
- n["default"] = e;
32
- return Object.freeze(n);
33
- }
34
-
35
- var OtelApi__namespace = /*#__PURE__*/_interopNamespace(OtelApi);
36
- var Cause__namespace = /*#__PURE__*/_interopNamespace(Cause);
37
- var Context__namespace = /*#__PURE__*/_interopNamespace(Context);
38
- var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
39
- var FiberRef__namespace = /*#__PURE__*/_interopNamespace(FiberRef);
40
- var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
41
- var Option__namespace = /*#__PURE__*/_interopNamespace(Option);
42
- var EffectTracer__namespace = /*#__PURE__*/_interopNamespace(EffectTracer);
43
-
44
- /** @internal */
45
- class OtelSpan {
46
- _tag = "Span";
47
- attributes = new Map();
48
- constructor(contextApi, tracer, name, parent, context, links, startTime) {
49
- this.name = name;
50
- this.parent = parent;
51
- this.context = context;
52
- this.links = links;
53
- const active = contextApi.active();
54
- this.span = tracer.startSpan(name, {
55
- startTime: nanosToHrTime(startTime),
56
- links: links.length > 0 ? links.map(link => ({
57
- context: makeSpanContext(link.span),
58
- attributes: recordToAttributes(link.attributes)
59
- })) : undefined
60
- }, parent._tag === "Some" ? populateContext(active, parent.value, context) : OtelApi__namespace.trace.deleteSpan(active));
61
- const spanContext = this.span.spanContext();
62
- this.spanId = spanContext.spanId;
63
- this.traceId = spanContext.traceId;
64
- this.status = {
65
- _tag: "Started",
66
- startTime
67
- };
68
- this.sampled = (spanContext.traceFlags & OtelApi__namespace.TraceFlags.SAMPLED) === OtelApi__namespace.TraceFlags.SAMPLED;
69
- }
70
- attribute(key, value) {
71
- this.span.setAttribute(key, unknownToAttributeValue(value));
72
- this.attributes.set(key, value);
73
- }
74
- end(endTime, exit) {
75
- this.status = {
76
- _tag: "Ended",
77
- endTime,
78
- exit,
79
- startTime: this.status.startTime
80
- };
81
- if (exit._tag === "Success") {
82
- this.span.setStatus({
83
- code: OtelApi__namespace.SpanStatusCode.OK
84
- });
85
- } else {
86
- if (Cause__namespace.isInterruptedOnly(exit.cause)) {
87
- this.span.setStatus({
88
- code: OtelApi__namespace.SpanStatusCode.OK,
89
- message: Cause__namespace.pretty(exit.cause)
90
- });
91
- this.span.setAttribute("span.label", "⚠︎ Interrupted");
92
- this.span.setAttribute("status.interrupted", true);
93
- } else {
94
- this.span.setStatus({
95
- code: OtelApi__namespace.SpanStatusCode.ERROR,
96
- message: Cause__namespace.pretty(exit.cause)
97
- });
98
- }
99
- }
100
- this.span.end(nanosToHrTime(endTime));
101
- }
102
- event(name, startTime, attributes) {
103
- this.span.addEvent(name, attributes ? recordToAttributes(attributes) : undefined, nanosToHrTime(startTime));
104
- }
105
- }
106
-
107
- /** @internal */
108
- const TracerProvider$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/TracerProvider");
109
-
110
- /** @internal */
111
- const Tracer$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/Tracer");
112
-
113
- /** @internal */
114
- const make$1 = /*#__PURE__*/Effect__namespace.map(Tracer$1, tracer => EffectTracer__namespace.make({
115
- span(name, parent, context, links, startTime) {
116
- return new OtelSpan(OtelApi__namespace.context, tracer, name, parent, context, links, startTime);
117
- },
118
- context(execution, fiber) {
119
- const currentSpan = fiber.getFiberRef(FiberRef__namespace.currentContext).unsafeMap.get(EffectTracer__namespace.ParentSpan);
120
- if (currentSpan === undefined) {
121
- return execution();
122
- }
123
- return OtelApi__namespace.context.with(populateContext(OtelApi__namespace.context.active(), currentSpan), execution);
124
- }
125
- }));
126
-
127
- /** @internal */
128
- const traceFlagsTag = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/traceFlags");
129
-
130
- /** @internal */
131
- const traceStateTag = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/traceState");
132
-
133
- /** @internal */
134
- const makeExternalSpan$1 = options => {
135
- let context = Context__namespace.empty();
136
- if (options.traceFlags) {
137
- context = Context__namespace.add(context, traceFlagsTag, options.traceFlags);
138
- }
139
- if (typeof options.traceState === "string") {
140
- context = Option__namespace.match(createTraceState(options.traceState), {
141
- onNone: () => context,
142
- onSome: traceState => Context__namespace.add(context, traceStateTag, traceState)
143
- });
144
- } else if (options.traceState) {
145
- context = Context__namespace.add(context, traceStateTag, options.traceState);
146
- }
147
- return {
148
- _tag: "ExternalSpan",
149
- traceId: options.traceId,
150
- spanId: options.spanId,
151
- sampled: options.traceFlags ? (options.traceFlags & OtelApi__namespace.TraceFlags.SAMPLED) === OtelApi__namespace.TraceFlags.SAMPLED : true,
152
- context
153
- };
154
- };
155
-
156
- /** @internal */
157
- const currentOtelSpan$1 = /*#__PURE__*/Effect__namespace.map(Effect__namespace.currentSpan, span => Option__namespace.map(Option__namespace.filter(span, span => "span" in span), _ => _.span));
158
-
159
- /** @internal */
160
- const layerGlobalProvider = /*#__PURE__*/Layer__namespace.sync(TracerProvider$1, () => OtelApi__namespace.trace.getTracerProvider());
161
-
162
- /** @internal */
163
- const layerTracer$1 = /*#__PURE__*/Layer__namespace.effect(Tracer$1, /*#__PURE__*/Effect__namespace.flatMap( /*#__PURE__*/Effect__namespace.zip(Resource_dist_effectOpentelemetryResource.Resource, TracerProvider$1), ([resource, provider]) => Effect__namespace.sync(() => provider.getTracer(resource.attributes["service.name"], resource.attributes["service.version"]))));
164
-
165
- /** @internal */
166
- const layerGlobalTracer$1 = /*#__PURE__*/layerTracer$1.pipe( /*#__PURE__*/Layer__namespace.use(layerGlobalProvider));
167
-
168
- /** @internal */
169
- const layerGlobal$1 = /*#__PURE__*/Layer__namespace.unwrapEffect(Effect__namespace.map(make$1, Layer__namespace.setTracer)).pipe( /*#__PURE__*/Layer__namespace.use(layerGlobalTracer$1));
170
-
171
- /** @internal */
172
- const layer$1 = /*#__PURE__*/Layer__namespace.unwrapEffect(Effect__namespace.map(make$1, Layer__namespace.setTracer)).pipe( /*#__PURE__*/Layer__namespace.use(layerTracer$1));
173
-
174
- // -------------------------------------------------------------------------------------
175
- // utils
176
- // -------------------------------------------------------------------------------------
177
-
178
- const bigint1e9 = 1_000_000_000n;
179
- const nanosToHrTime = timestamp => {
180
- return [Number(timestamp / bigint1e9), Number(timestamp % bigint1e9)];
181
- };
182
- const createTraceState = /*#__PURE__*/Option__namespace.liftThrowable(OtelApi__namespace.createTraceState);
183
- const populateContext = (otelContext, span, context) => span instanceof OtelSpan ? OtelApi__namespace.trace.setSpan(otelContext, span.span) : OtelApi__namespace.trace.setSpanContext(otelContext, makeSpanContext(span, context));
184
- const makeSpanContext = (span, context) => ({
185
- spanId: span.spanId,
186
- traceId: span.traceId,
187
- isRemote: span._tag === "ExternalSpan",
188
- traceFlags: Option__namespace.getOrElse(context ? extractTraceTag(span, context, traceFlagsTag) : Context__namespace.getOption(span.context, traceFlagsTag), () => OtelApi__namespace.TraceFlags.SAMPLED),
189
- traceState: Option__namespace.getOrUndefined(context ? extractTraceTag(span, context, traceStateTag) : Context__namespace.getOption(span.context, traceStateTag))
190
- });
191
- const extractTraceTag = (parent, context, tag) => Option__namespace.orElse(Context__namespace.getOption(context, tag), () => Context__namespace.getOption(parent.context, tag));
192
- const recordToAttributes = value => {
193
- return Object.entries(value).reduce((acc, [key, value]) => {
194
- acc[key] = unknownToAttributeValue(value);
195
- return acc;
196
- }, {});
197
- };
198
- const unknownToAttributeValue = value => {
199
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
200
- return value;
201
- } else if (typeof value === "bigint") {
202
- return Number(value);
203
- }
204
- return objectToAttribute(value);
205
- };
206
- const objectToAttribute = value => {
207
- try {
208
- return JSON.stringify(value, null, 2);
209
- } catch {
210
- return String(value);
211
- }
212
- };
213
-
214
- /**
215
- * @since 1.0.0
216
- */
217
- /**
218
- * @since 1.0.0
219
- * @category constructors
220
- */
221
- const make = make$1;
222
-
223
- /**
224
- * @since 1.0.0
225
- * @category constructors
226
- */
227
- const makeExternalSpan = makeExternalSpan$1;
228
-
229
- /**
230
- * @since 1.0.0
231
- * @category accessors
232
- */
233
- const currentOtelSpan = currentOtelSpan$1;
234
-
235
- /**
236
- * @since 1.0.0
237
- * @category layers
238
- */
239
- const layer = layer$1;
240
-
241
- /**
242
- * @since 1.0.0
243
- * @category layers
244
- */
245
- const layerGlobal = layerGlobal$1;
246
-
247
- /**
248
- * @since 1.0.0
249
- * @category layers
250
- */
251
- const layerTracer = layerTracer$1;
252
-
253
- /**
254
- * @since 1.0.0
255
- * @category layers
256
- */
257
- const layerGlobalTracer = layerGlobalTracer$1;
258
-
259
- /**
260
- * @since 1.0.0
261
- * @category tags
262
- */
263
- const TracerProvider = TracerProvider$1;
264
-
265
- /**
266
- * @since 1.0.0
267
- * @category tags
268
- */
269
- const Tracer = Tracer$1;
270
-
271
- /**
272
- * @since 1.0.0
273
- * @category tags
274
- */
275
- const TraceFlags = traceFlagsTag;
276
-
277
- /**
278
- * @since 1.0.0
279
- * @category tags
280
- */
281
- const TraceState = traceStateTag;
282
-
283
- exports.TraceFlags = TraceFlags;
284
- exports.TraceState = TraceState;
285
- exports.Tracer = Tracer;
286
- exports.TracerProvider = TracerProvider;
287
- exports.currentOtelSpan = currentOtelSpan;
288
- exports.layer = layer;
289
- exports.layerGlobal = layerGlobal;
290
- exports.layerGlobalTracer = layerGlobalTracer;
291
- exports.layerTracer = layerTracer;
292
- exports.make = make;
293
- exports.makeExternalSpan = makeExternalSpan;