@effect/opentelemetry 0.1.3 → 0.2.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.
- package/Tracer.d.ts +24 -1
- package/Tracer.d.ts.map +1 -1
- package/Tracer.js +20 -2
- package/Tracer.js.map +1 -1
- package/internal_effect_untraced/tracer.js +46 -10
- package/internal_effect_untraced/tracer.js.map +1 -1
- package/mjs/Tracer.mjs +15 -0
- package/mjs/Tracer.mjs.map +1 -1
- package/mjs/internal_effect_untraced/tracer.mjs +42 -9
- package/mjs/internal_effect_untraced/tracer.mjs.map +1 -1
- package/package.json +3 -3
- package/src/Tracer.ts +29 -1
- package/src/internal_effect_untraced/tracer.ts +80 -13
package/Tracer.d.ts
CHANGED
|
@@ -1,18 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
+
import type { Tag } from "@effect/data/Context";
|
|
4
5
|
import type { Effect } from "@effect/io/Effect";
|
|
5
6
|
import type { Layer } from "@effect/io/Layer";
|
|
6
|
-
import type { Tracer } from "@effect/io/Tracer";
|
|
7
|
+
import type { ExternalSpan, Tracer } from "@effect/io/Tracer";
|
|
7
8
|
import type { Resource } from "@effect/opentelemetry/Resource";
|
|
9
|
+
import type * as Otel from "@opentelemetry/api";
|
|
8
10
|
/**
|
|
9
11
|
* @since 1.0.0
|
|
10
12
|
* @category constructors
|
|
11
13
|
*/
|
|
12
14
|
export declare const make: Effect<Resource, never, Tracer>;
|
|
15
|
+
/**
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
* @category constructors
|
|
18
|
+
*/
|
|
19
|
+
export declare const makeExternalSpan: (options: {
|
|
20
|
+
readonly name: string;
|
|
21
|
+
readonly traceId: string;
|
|
22
|
+
readonly spanId: string;
|
|
23
|
+
readonly traceFlags?: Otel.TraceFlags;
|
|
24
|
+
readonly traceState?: string;
|
|
25
|
+
}) => ExternalSpan;
|
|
13
26
|
/**
|
|
14
27
|
* @since 1.0.0
|
|
15
28
|
* @category layers
|
|
16
29
|
*/
|
|
17
30
|
export declare const layer: Layer<Resource, never, never>;
|
|
31
|
+
/**
|
|
32
|
+
* @since 1.0.0
|
|
33
|
+
* @category tags
|
|
34
|
+
*/
|
|
35
|
+
export declare const TraceFlags: Tag<Otel.TraceFlags, Otel.TraceFlags>;
|
|
36
|
+
/**
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
* @category tags
|
|
39
|
+
*/
|
|
40
|
+
export declare const TraceState: Tag<Otel.TraceState, Otel.TraceState>;
|
|
18
41
|
//# sourceMappingURL=Tracer.d.ts.map
|
package/Tracer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tracer.d.ts","sourceRoot":"","sources":["./src/Tracer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Tracer.d.ts","sourceRoot":"","sources":["./src/Tracer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAiB,CAAA;AAElE;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,CAC7B,OAAO,EAAE;IACP,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAA;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B,KACE,YAAwC,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAkB,CAAA;AAElE;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAA0B,CAAA;AAEvF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAA0B,CAAA"}
|
package/Tracer.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.make = exports.layer = void 0;
|
|
6
|
+
exports.makeExternalSpan = exports.make = exports.layer = exports.TraceState = exports.TraceFlags = void 0;
|
|
7
7
|
var internal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/opentelemetry/internal_effect_untraced/tracer"));
|
|
8
8
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
9
9
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -14,9 +14,27 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
14
14
|
const make = internal.make;
|
|
15
15
|
/**
|
|
16
16
|
* @since 1.0.0
|
|
17
|
-
* @category
|
|
17
|
+
* @category constructors
|
|
18
18
|
*/
|
|
19
19
|
exports.make = make;
|
|
20
|
+
const makeExternalSpan = internal.makeExternalSpan;
|
|
21
|
+
/**
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
* @category layers
|
|
24
|
+
*/
|
|
25
|
+
exports.makeExternalSpan = makeExternalSpan;
|
|
20
26
|
const layer = internal.layer;
|
|
27
|
+
/**
|
|
28
|
+
* @since 1.0.0
|
|
29
|
+
* @category tags
|
|
30
|
+
*/
|
|
21
31
|
exports.layer = layer;
|
|
32
|
+
const TraceFlags = internal.traceFlagsTag;
|
|
33
|
+
/**
|
|
34
|
+
* @since 1.0.0
|
|
35
|
+
* @category tags
|
|
36
|
+
*/
|
|
37
|
+
exports.TraceFlags = TraceFlags;
|
|
38
|
+
const TraceState = internal.traceStateTag;
|
|
39
|
+
exports.TraceState = TraceState;
|
|
22
40
|
//# sourceMappingURL=Tracer.js.map
|
package/Tracer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tracer.js","names":["internal","_interopRequireWildcard","require","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","make","exports","layer"],"sources":["./src/Tracer.ts"],"sourcesContent":[null],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"Tracer.js","names":["internal","_interopRequireWildcard","require","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","make","exports","makeExternalSpan","layer","TraceFlags","traceFlagsTag","TraceState","traceStateTag"],"sources":["./src/Tracer.ts"],"sourcesContent":[null],"mappings":";;;;;;AAOA,IAAAA,QAAA,gBAAAC,uBAAA,eAAAC,OAAA;AAAiF,SAAAC,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAH,wBAAAO,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAIjF;;;;AAIO,MAAMW,IAAI,GAAoCzB,QAAQ,CAACyB,IAAI;AAElE;;;;AAAAC,OAAA,CAAAD,IAAA,GAAAA,IAAA;AAIO,MAAME,gBAAgB,GAQT3B,QAAQ,CAAC2B,gBAAgB;AAE7C;;;;AAAAD,OAAA,CAAAC,gBAAA,GAAAA,gBAAA;AAIO,MAAMC,KAAK,GAAkC5B,QAAQ,CAAC4B,KAAK;AAElE;;;;AAAAF,OAAA,CAAAE,KAAA,GAAAA,KAAA;AAIO,MAAMC,UAAU,GAA0C7B,QAAQ,CAAC8B,aAAa;AAEvF;;;;AAAAJ,OAAA,CAAAG,UAAA,GAAAA,UAAA;AAIO,MAAME,UAAU,GAA0C/B,QAAQ,CAACgC,aAAa;AAAAN,OAAA,CAAAK,UAAA,GAAAA,UAAA"}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.make = exports.layer = exports.OtelSpan = void 0;
|
|
6
|
+
exports.traceStateTag = exports.traceFlagsTag = exports.makeExternalSpan = exports.make = exports.layer = exports.OtelSpan = void 0;
|
|
7
|
+
var Context = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Context"));
|
|
8
|
+
var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Option"));
|
|
7
9
|
var Cause = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/io/Cause"));
|
|
8
10
|
var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/io/Effect"));
|
|
9
11
|
var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/io/Layer"));
|
|
@@ -14,21 +16,23 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
14
16
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
17
|
/** @internal */
|
|
16
18
|
class OtelSpan {
|
|
17
|
-
constructor(traceApi, contextApi, tracer, name, parent, startTime) {
|
|
19
|
+
constructor(traceApi, contextApi, tracer, name, parent, context, startTime) {
|
|
18
20
|
this.name = name;
|
|
19
21
|
this.parent = parent;
|
|
22
|
+
this.context = context;
|
|
20
23
|
this._tag = "Span";
|
|
21
24
|
this.attributes = new Map();
|
|
22
25
|
const active = contextApi.active();
|
|
23
26
|
this.span = parent._tag === "Some" ? tracer.startSpan(name, {
|
|
24
|
-
startTime
|
|
27
|
+
startTime: nanosToHrTime(startTime)
|
|
25
28
|
}, parent.value instanceof OtelSpan ? traceApi.setSpan(active, parent.value.span) : traceApi.setSpanContext(active, {
|
|
26
29
|
spanId: parent.value.spanId,
|
|
27
30
|
traceId: parent.value.traceId,
|
|
28
31
|
isRemote: parent.value._tag === "ExternalSpan",
|
|
29
|
-
traceFlags: OtelApi.TraceFlags.SAMPLED
|
|
32
|
+
traceFlags: Option.getOrElse(extractTraceTag(parent, context, traceFlagsTag), () => OtelApi.TraceFlags.SAMPLED),
|
|
33
|
+
traceState: Option.getOrUndefined(extractTraceTag(parent, context, traceStateTag))
|
|
30
34
|
})) : tracer.startSpan(name, {
|
|
31
|
-
startTime
|
|
35
|
+
startTime: nanosToHrTime(startTime)
|
|
32
36
|
}, active);
|
|
33
37
|
const spanContext = this.span.spanContext();
|
|
34
38
|
this.spanId = spanContext.spanId;
|
|
@@ -65,21 +69,53 @@ class OtelSpan {
|
|
|
65
69
|
});
|
|
66
70
|
}
|
|
67
71
|
}
|
|
68
|
-
this.span.end(endTime);
|
|
72
|
+
this.span.end(nanosToHrTime(endTime));
|
|
69
73
|
}
|
|
70
|
-
event(name, attributes) {
|
|
71
|
-
this.span.addEvent(name, attributes);
|
|
74
|
+
event(name, startTime, attributes) {
|
|
75
|
+
this.span.addEvent(name, attributes, nanosToHrTime(startTime));
|
|
72
76
|
}
|
|
73
77
|
}
|
|
74
78
|
/** @internal */
|
|
75
79
|
exports.OtelSpan = OtelSpan;
|
|
76
80
|
const make = /*#__PURE__*/Effect.map(tracer => Tracer.make({
|
|
77
|
-
span(name, parent, startTime) {
|
|
78
|
-
return new OtelSpan(OtelApi.trace, OtelApi.context, tracer, name, parent, startTime);
|
|
81
|
+
span(name, parent, context, startTime) {
|
|
82
|
+
return new OtelSpan(OtelApi.trace, OtelApi.context, tracer, name, parent, context, startTime);
|
|
79
83
|
}
|
|
80
84
|
}))( /*#__PURE__*/Effect.flatMap(resource => Effect.sync(() => OtelApi.trace.getTracer(resource.attributes["service.name"], resource.attributes["service.version"])))(_Resource.Resource));
|
|
81
85
|
/** @internal */
|
|
82
86
|
exports.make = make;
|
|
83
87
|
const layer = /*#__PURE__*/Layer.unwrapEffect( /*#__PURE__*/Effect.map(make, Effect.setTracer));
|
|
88
|
+
/** @internal */
|
|
84
89
|
exports.layer = layer;
|
|
90
|
+
const traceFlagsTag = /*#__PURE__*/Context.Tag("@effect/opentelemetry/traceFlags");
|
|
91
|
+
/** @internal */
|
|
92
|
+
exports.traceFlagsTag = traceFlagsTag;
|
|
93
|
+
const traceStateTag = /*#__PURE__*/Context.Tag("@effect/opentelemetry/traceState");
|
|
94
|
+
/** @internal */
|
|
95
|
+
exports.traceStateTag = traceStateTag;
|
|
96
|
+
const makeExternalSpan = options => {
|
|
97
|
+
let context = Context.empty();
|
|
98
|
+
if (options.traceFlags) {
|
|
99
|
+
context = Context.add(context, traceFlagsTag, options.traceFlags);
|
|
100
|
+
}
|
|
101
|
+
if (options.traceState) {
|
|
102
|
+
context = Option.match(createTraceState(options.traceState), () => context, traceState => Context.add(context, traceStateTag, traceState));
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
_tag: "ExternalSpan",
|
|
106
|
+
name: options.name,
|
|
107
|
+
traceId: options.traceId,
|
|
108
|
+
spanId: options.spanId,
|
|
109
|
+
context
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
exports.makeExternalSpan = makeExternalSpan;
|
|
113
|
+
const oneE9 = 1000000000n;
|
|
114
|
+
const nanosToHrTime = timestamp => {
|
|
115
|
+
const nanos = timestamp % oneE9;
|
|
116
|
+
const seconds = Number((timestamp - nanos) / oneE9);
|
|
117
|
+
return [seconds, Number(nanos)];
|
|
118
|
+
};
|
|
119
|
+
const extractTraceTag = (parent, context, tag) => Option.orElse(Context.getOption(context, tag), () => Option.flatMap(parent, parent => Context.getOption(parent.context, tag)));
|
|
120
|
+
const createTraceState = /*#__PURE__*/Option.liftThrowable(OtelApi.createTraceState);
|
|
85
121
|
//# sourceMappingURL=tracer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.js","names":["
|
|
1
|
+
{"version":3,"file":"tracer.js","names":["Context","_interopRequireWildcard","require","Option","Cause","Effect","Layer","Tracer","_Resource","OtelApi","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","OtelSpan","constructor","traceApi","contextApi","tracer","name","parent","context","startTime","_tag","attributes","Map","active","span","startSpan","nanosToHrTime","value","setSpan","setSpanContext","spanId","traceId","isRemote","traceFlags","getOrElse","extractTraceTag","traceFlagsTag","TraceFlags","SAMPLED","traceState","getOrUndefined","traceStateTag","spanContext","status","attribute","setAttribute","end","endTime","exit","setStatus","code","SpanStatusCode","OK","isInterruptedOnly","cause","ERROR","message","pretty","event","addEvent","exports","make","map","trace","flatMap","resource","sync","getTracer","Resource","layer","unwrapEffect","setTracer","Tag","makeExternalSpan","options","empty","add","match","createTraceState","oneE9","timestamp","nanos","seconds","Number","tag","orElse","getOption","liftThrowable"],"sources":["../src/internal_effect_untraced/tracer.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,OAAA,gBAAAC,uBAAA,eAAAC,OAAA;AAEA,IAAAC,MAAA,gBAAAF,uBAAA,eAAAC,OAAA;AACA,IAAAE,KAAA,gBAAAH,uBAAA,eAAAC,OAAA;AACA,IAAAG,MAAA,gBAAAJ,uBAAA,eAAAC,OAAA;AAEA,IAAAI,KAAA,gBAAAL,uBAAA,eAAAC,OAAA;AACA,IAAAK,MAAA,gBAAAN,uBAAA,eAAAC,OAAA;AACA,IAAAM,SAAA,gBAAAN,OAAA;AACA,IAAAO,OAAA,gBAAAR,uBAAA,eAAAC,OAAA;AAA6C,SAAAQ,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAV,wBAAAc,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAE7C;AACM,MAAOW,QAAQ;EASnBC,YACEC,QAA0B,EAC1BC,UAA8B,EAC9BC,MAAsB,EACbC,IAAY,EACZC,MAAwC,EACxCC,OAA+B,EACxCC,SAAiB;IAHR,KAAAH,IAAI,GAAJA,IAAI;IACJ,KAAAC,MAAM,GAANA,MAAM;IACN,KAAAC,OAAO,GAAPA,OAAO;IAdT,KAAAE,IAAI,GAAG,MAAM;IAKb,KAAAC,UAAU,GAAG,IAAIC,GAAG,EAAiC;IAY5D,MAAMC,MAAM,GAAGT,UAAU,CAACS,MAAM,EAAE;IAClC,IAAI,CAACC,IAAI,GAAGP,MAAM,CAACG,IAAI,KAAK,MAAM,GAC9BL,MAAM,CAACU,SAAS,CAChBT,IAAI,EACJ;MAAEG,SAAS,EAAEO,aAAa,CAACP,SAAS;IAAC,CAAE,EACvCF,MAAM,CAACU,KAAK,YAAYhB,QAAQ,GAC9BE,QAAQ,CAACe,OAAO,CAACL,MAAM,EAAEN,MAAM,CAACU,KAAK,CAACH,IAAI,CAAC,GAC3CX,QAAQ,CAACgB,cAAc,CAACN,MAAM,EAAE;MAC9BO,MAAM,EAAEb,MAAM,CAACU,KAAK,CAACG,MAAM;MAC3BC,OAAO,EAAEd,MAAM,CAACU,KAAK,CAACI,OAAO;MAC7BC,QAAQ,EAAEf,MAAM,CAACU,KAAK,CAACP,IAAI,KAAK,cAAc;MAC9Ca,UAAU,EAAEnD,MAAM,CAACoD,SAAS,CAC1BC,eAAe,CAAClB,MAAM,EAAEC,OAAO,EAAEkB,aAAa,CAAC,EAC/C,MAAMhD,OAAO,CAACiD,UAAU,CAACC,OAAO,CACjC;MACDC,UAAU,EAAEzD,MAAM,CAAC0D,cAAc,CAACL,eAAe,CAAClB,MAAM,EAAEC,OAAO,EAAEuB,aAAa,CAAC;KAClF,CAAC,CACL,GACC1B,MAAM,CAACU,SAAS,CAACT,IAAI,EAAE;MAAEG,SAAS,EAAEO,aAAa,CAACP,SAAS;IAAC,CAAE,EAAEI,MAAM,CAAC;IAC3E,MAAMmB,WAAW,GAAG,IAAI,CAAClB,IAAI,CAACkB,WAAW,EAAE;IAE3C,IAAI,CAACZ,MAAM,GAAGY,WAAW,CAACZ,MAAM;IAChC,IAAI,CAACC,OAAO,GAAGW,WAAW,CAACX,OAAO;IAElC,IAAI,CAACY,MAAM,GAAG;MACZvB,IAAI,EAAE,SAAS;MACfD;KACD;EACH;EAEAyB,SAASA,CAACvC,GAAW,EAAEsB,KAA4B;IACjD,IAAI,CAACH,IAAI,CAACqB,YAAY,CAACxC,GAAG,EAAEsB,KAAK,CAAC;IAClC,IAAI,CAACN,UAAU,CAACX,GAAG,CAACL,GAAG,EAAEsB,KAAK,CAAC;EACjC;EAEAmB,GAAGA,CAACC,OAAe,EAAEC,IAA4B;IAC/C,IAAI,CAACL,MAAM,GAAG;MACZvB,IAAI,EAAE,OAAO;MACb2B,OAAO;MACPC,IAAI;MACJ7B,SAAS,EAAE,IAAI,CAACwB,MAAM,CAACxB;KACxB;IAED,IAAI6B,IAAI,CAAC5B,IAAI,KAAK,SAAS,EAAE;MAC3B,IAAI,CAACI,IAAI,CAACyB,SAAS,CAAC;QAClBC,IAAI,EAAE9D,OAAO,CAAC+D,cAAc,CAACC;OAC9B,CAAC;KACH,MAAM;MACL,IAAIrE,KAAK,CAACsE,iBAAiB,CAACL,IAAI,CAACM,KAAK,CAAC,EAAE;QACvC,IAAI,CAAC9B,IAAI,CAACyB,SAAS,CAAC;UAClBC,IAAI,EAAE9D,OAAO,CAAC+D,cAAc,CAACC;SAC9B,CAAC;OACH,MAAM;QACL,IAAI,CAAC5B,IAAI,CAACyB,SAAS,CAAC;UAClBC,IAAI,EAAE9D,OAAO,CAAC+D,cAAc,CAACI,KAAK;UAClCC,OAAO,EAAEzE,KAAK,CAAC0E,MAAM,CAACT,IAAI,CAACM,KAAK;SACjC,CAAC;;;IAGN,IAAI,CAAC9B,IAAI,CAACsB,GAAG,CAACpB,aAAa,CAACqB,OAAO,CAAC,CAAC;EACvC;EAEAW,KAAKA,CAAC1C,IAAY,EAAEG,SAAiB,EAAEE,UAAkD;IACvF,IAAI,CAACG,IAAI,CAACmC,QAAQ,CAAC3C,IAAI,EAAEK,UAAU,EAAEK,aAAa,CAACP,SAAS,CAAC,CAAC;EAChE;;AAGF;AAAAyC,OAAA,CAAAjD,QAAA,GAAAA,QAAA;AACO,MAAMkD,IAAI,gBAUf7E,MAAM,CAAC8E,GAAG,CAAE/C,MAAM,IAChB7B,MAAM,CAAC2E,IAAI,CAAC;EACVrC,IAAIA,CAACR,IAAI,EAAEC,MAAM,EAAEC,OAAO,EAAEC,SAAS;IACnC,OAAO,IAAIR,QAAQ,CACjBvB,OAAO,CAAC2E,KAAK,EACb3E,OAAO,CAAC8B,OAAO,EACfH,MAAM,EACNC,IAAI,EACJC,MAAM,EACNC,OAAO,EACPC,SAAS,CACV;EACH;CACD,CAAC,CACH,eAtBDnC,MAAM,CAACgF,OAAO,CAAEC,QAAQ,IACtBjF,MAAM,CAACkF,IAAI,CAAC,MACV9E,OAAO,CAAC2E,KAAK,CAACI,SAAS,CACrBF,QAAQ,CAAC5C,UAAU,CAAC,cAAc,CAAW,EAC7C4C,QAAQ,CAAC5C,UAAU,CAAC,iBAAiB,CAAW,CACjD,CACF,CACF,CARD+C,kBAAQ,EAwBT;AAED;AAAAR,OAAA,CAAAC,IAAA,GAAAA,IAAA;AACO,MAAMQ,KAAK,gBAAGpF,KAAK,CAACqF,YAAY,eACrCtF,MAAM,CAAC8E,GAAG,CAACD,IAAI,EAAE7E,MAAM,CAACuF,SAAS,CAAC,CACnC;AAED;AAAAX,OAAA,CAAAS,KAAA,GAAAA,KAAA;AACO,MAAMjC,aAAa,gBAAGzD,OAAO,CAAC6F,GAAG,CAAqB,kCAAkC,CAAC;AAEhG;AAAAZ,OAAA,CAAAxB,aAAA,GAAAA,aAAA;AACO,MAAMK,aAAa,gBAAG9D,OAAO,CAAC6F,GAAG,CAAqB,kCAAkC,CAAC;AAEhG;AAAAZ,OAAA,CAAAnB,aAAA,GAAAA,aAAA;AACO,MAAMgC,gBAAgB,GAAIC,OAMhC,IAAyB;EACxB,IAAIxD,OAAO,GAAGvC,OAAO,CAACgG,KAAK,EAAE;EAE7B,IAAID,OAAO,CAACzC,UAAU,EAAE;IACtBf,OAAO,GAAGvC,OAAO,CAACiG,GAAG,CAAC1D,OAAO,EAAEkB,aAAa,EAAEsC,OAAO,CAACzC,UAAU,CAAC;;EAGnE,IAAIyC,OAAO,CAACnC,UAAU,EAAE;IACtBrB,OAAO,GAAGpC,MAAM,CAAC+F,KAAK,CACpBC,gBAAgB,CAACJ,OAAO,CAACnC,UAAU,CAAC,EACpC,MAAMrB,OAAO,EACZqB,UAAU,IAAK5D,OAAO,CAACiG,GAAG,CAAC1D,OAAO,EAAEuB,aAAa,EAAEF,UAAU,CAAC,CAChE;;EAGH,OAAO;IACLnB,IAAI,EAAE,cAAc;IACpBJ,IAAI,EAAE0D,OAAO,CAAC1D,IAAI;IAClBe,OAAO,EAAE2C,OAAO,CAAC3C,OAAO;IACxBD,MAAM,EAAE4C,OAAO,CAAC5C,MAAM;IACtBZ;GACD;AACH,CAAC;AAAA0C,OAAA,CAAAa,gBAAA,GAAAA,gBAAA;AAED,MAAMM,KAAK,GAAG,WAAc;AAC5B,MAAMrD,aAAa,GAAIsD,SAAiB,IAAoB;EAC1D,MAAMC,KAAK,GAAGD,SAAS,GAAGD,KAAK;EAC/B,MAAMG,OAAO,GAAGC,MAAM,CAAC,CAACH,SAAS,GAAGC,KAAK,IAAIF,KAAK,CAAC;EACnD,OAAO,CAACG,OAAO,EAAEC,MAAM,CAACF,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM9C,eAAe,GAAGA,CACtBlB,MAAwC,EACxCC,OAA+B,EAC/BkE,GAAsB,KAEtBtG,MAAM,CAACuG,MAAM,CACX1G,OAAO,CAAC2G,SAAS,CAACpE,OAAO,EAAEkE,GAAG,CAAC,EAC/B,MACEtG,MAAM,CAACkF,OAAO,CACZ/C,MAAM,EACLA,MAAM,IAAKtC,OAAO,CAAC2G,SAAS,CAACrE,MAAM,CAACC,OAAO,EAAEkE,GAAG,CAAC,CACnD,CACJ;AAEH,MAAMN,gBAAgB,gBAAGhG,MAAM,CAACyG,aAAa,CAACnG,OAAO,CAAC0F,gBAAgB,CAAC"}
|
package/mjs/Tracer.mjs
CHANGED
|
@@ -4,9 +4,24 @@ import * as internal from "@effect/opentelemetry/internal_effect_untraced/tracer
|
|
|
4
4
|
* @category constructors
|
|
5
5
|
*/
|
|
6
6
|
export const make = internal.make;
|
|
7
|
+
/**
|
|
8
|
+
* @since 1.0.0
|
|
9
|
+
* @category constructors
|
|
10
|
+
*/
|
|
11
|
+
export const makeExternalSpan = internal.makeExternalSpan;
|
|
7
12
|
/**
|
|
8
13
|
* @since 1.0.0
|
|
9
14
|
* @category layers
|
|
10
15
|
*/
|
|
11
16
|
export const layer = internal.layer;
|
|
17
|
+
/**
|
|
18
|
+
* @since 1.0.0
|
|
19
|
+
* @category tags
|
|
20
|
+
*/
|
|
21
|
+
export const TraceFlags = internal.traceFlagsTag;
|
|
22
|
+
/**
|
|
23
|
+
* @since 1.0.0
|
|
24
|
+
* @category tags
|
|
25
|
+
*/
|
|
26
|
+
export const TraceState = internal.traceStateTag;
|
|
12
27
|
//# sourceMappingURL=Tracer.mjs.map
|
package/mjs/Tracer.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tracer.mjs","names":["internal","make","layer"],"sources":["../src/Tracer.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"file":"Tracer.mjs","names":["internal","make","makeExternalSpan","layer","TraceFlags","traceFlagsTag","TraceState","traceStateTag"],"sources":["../src/Tracer.ts"],"sourcesContent":[null],"mappings":"AAOA,OAAO,KAAKA,QAAQ,MAAM,uDAAuD;AAIjF;;;;AAIA,OAAO,MAAMC,IAAI,GAAoCD,QAAQ,CAACC,IAAI;AAElE;;;;AAIA,OAAO,MAAMC,gBAAgB,GAQTF,QAAQ,CAACE,gBAAgB;AAE7C;;;;AAIA,OAAO,MAAMC,KAAK,GAAkCH,QAAQ,CAACG,KAAK;AAElE;;;;AAIA,OAAO,MAAMC,UAAU,GAA0CJ,QAAQ,CAACK,aAAa;AAEvF;;;;AAIA,OAAO,MAAMC,UAAU,GAA0CN,QAAQ,CAACO,aAAa"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import * as Context from "@effect/data/Context";
|
|
2
|
+
import * as Option from "@effect/data/Option";
|
|
1
3
|
import * as Cause from "@effect/io/Cause";
|
|
2
4
|
import * as Effect from "@effect/io/Effect";
|
|
3
5
|
import * as Layer from "@effect/io/Layer";
|
|
@@ -6,21 +8,23 @@ import { Resource } from "@effect/opentelemetry/Resource";
|
|
|
6
8
|
import * as OtelApi from "@opentelemetry/api";
|
|
7
9
|
/** @internal */
|
|
8
10
|
export class OtelSpan {
|
|
9
|
-
constructor(traceApi, contextApi, tracer, name, parent, startTime) {
|
|
11
|
+
constructor(traceApi, contextApi, tracer, name, parent, context, startTime) {
|
|
10
12
|
this.name = name;
|
|
11
13
|
this.parent = parent;
|
|
14
|
+
this.context = context;
|
|
12
15
|
this._tag = "Span";
|
|
13
16
|
this.attributes = new Map();
|
|
14
17
|
const active = contextApi.active();
|
|
15
18
|
this.span = parent._tag === "Some" ? tracer.startSpan(name, {
|
|
16
|
-
startTime
|
|
19
|
+
startTime: nanosToHrTime(startTime)
|
|
17
20
|
}, parent.value instanceof OtelSpan ? traceApi.setSpan(active, parent.value.span) : traceApi.setSpanContext(active, {
|
|
18
21
|
spanId: parent.value.spanId,
|
|
19
22
|
traceId: parent.value.traceId,
|
|
20
23
|
isRemote: parent.value._tag === "ExternalSpan",
|
|
21
|
-
traceFlags: OtelApi.TraceFlags.SAMPLED
|
|
24
|
+
traceFlags: Option.getOrElse(extractTraceTag(parent, context, traceFlagsTag), () => OtelApi.TraceFlags.SAMPLED),
|
|
25
|
+
traceState: Option.getOrUndefined(extractTraceTag(parent, context, traceStateTag))
|
|
22
26
|
})) : tracer.startSpan(name, {
|
|
23
|
-
startTime
|
|
27
|
+
startTime: nanosToHrTime(startTime)
|
|
24
28
|
}, active);
|
|
25
29
|
const spanContext = this.span.spanContext();
|
|
26
30
|
this.spanId = spanContext.spanId;
|
|
@@ -57,18 +61,47 @@ export class OtelSpan {
|
|
|
57
61
|
});
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
|
-
this.span.end(endTime);
|
|
64
|
+
this.span.end(nanosToHrTime(endTime));
|
|
61
65
|
}
|
|
62
|
-
event(name, attributes) {
|
|
63
|
-
this.span.addEvent(name, attributes);
|
|
66
|
+
event(name, startTime, attributes) {
|
|
67
|
+
this.span.addEvent(name, attributes, nanosToHrTime(startTime));
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
/** @internal */
|
|
67
71
|
export const make = /*#__PURE__*/Effect.map(tracer => Tracer.make({
|
|
68
|
-
span(name, parent, startTime) {
|
|
69
|
-
return new OtelSpan(OtelApi.trace, OtelApi.context, tracer, name, parent, startTime);
|
|
72
|
+
span(name, parent, context, startTime) {
|
|
73
|
+
return new OtelSpan(OtelApi.trace, OtelApi.context, tracer, name, parent, context, startTime);
|
|
70
74
|
}
|
|
71
75
|
}))( /*#__PURE__*/Effect.flatMap(resource => Effect.sync(() => OtelApi.trace.getTracer(resource.attributes["service.name"], resource.attributes["service.version"])))(Resource));
|
|
72
76
|
/** @internal */
|
|
73
77
|
export const layer = /*#__PURE__*/Layer.unwrapEffect( /*#__PURE__*/Effect.map(make, Effect.setTracer));
|
|
78
|
+
/** @internal */
|
|
79
|
+
export const traceFlagsTag = /*#__PURE__*/Context.Tag("@effect/opentelemetry/traceFlags");
|
|
80
|
+
/** @internal */
|
|
81
|
+
export const traceStateTag = /*#__PURE__*/Context.Tag("@effect/opentelemetry/traceState");
|
|
82
|
+
/** @internal */
|
|
83
|
+
export const makeExternalSpan = options => {
|
|
84
|
+
let context = Context.empty();
|
|
85
|
+
if (options.traceFlags) {
|
|
86
|
+
context = Context.add(context, traceFlagsTag, options.traceFlags);
|
|
87
|
+
}
|
|
88
|
+
if (options.traceState) {
|
|
89
|
+
context = Option.match(createTraceState(options.traceState), () => context, traceState => Context.add(context, traceStateTag, traceState));
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
_tag: "ExternalSpan",
|
|
93
|
+
name: options.name,
|
|
94
|
+
traceId: options.traceId,
|
|
95
|
+
spanId: options.spanId,
|
|
96
|
+
context
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
const oneE9 = 1000000000n;
|
|
100
|
+
const nanosToHrTime = timestamp => {
|
|
101
|
+
const nanos = timestamp % oneE9;
|
|
102
|
+
const seconds = Number((timestamp - nanos) / oneE9);
|
|
103
|
+
return [seconds, Number(nanos)];
|
|
104
|
+
};
|
|
105
|
+
const extractTraceTag = (parent, context, tag) => Option.orElse(Context.getOption(context, tag), () => Option.flatMap(parent, parent => Context.getOption(parent.context, tag)));
|
|
106
|
+
const createTraceState = /*#__PURE__*/Option.liftThrowable(OtelApi.createTraceState);
|
|
74
107
|
//# sourceMappingURL=tracer.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.mjs","names":["Cause","Effect","Layer","Tracer","Resource","OtelApi","OtelSpan","constructor","traceApi","contextApi","tracer","name","parent","startTime","_tag","attributes","Map","active","span","startSpan","value","setSpan","setSpanContext","spanId","traceId","isRemote","traceFlags","TraceFlags","SAMPLED","spanContext","status","attribute","key","setAttribute","set","end","endTime","exit","setStatus","code","SpanStatusCode","OK","isInterruptedOnly","cause","ERROR","message","pretty","event","addEvent","make","map","trace","
|
|
1
|
+
{"version":3,"file":"tracer.mjs","names":["Context","Option","Cause","Effect","Layer","Tracer","Resource","OtelApi","OtelSpan","constructor","traceApi","contextApi","tracer","name","parent","context","startTime","_tag","attributes","Map","active","span","startSpan","nanosToHrTime","value","setSpan","setSpanContext","spanId","traceId","isRemote","traceFlags","getOrElse","extractTraceTag","traceFlagsTag","TraceFlags","SAMPLED","traceState","getOrUndefined","traceStateTag","spanContext","status","attribute","key","setAttribute","set","end","endTime","exit","setStatus","code","SpanStatusCode","OK","isInterruptedOnly","cause","ERROR","message","pretty","event","addEvent","make","map","trace","flatMap","resource","sync","getTracer","layer","unwrapEffect","setTracer","Tag","makeExternalSpan","options","empty","add","match","createTraceState","oneE9","timestamp","nanos","seconds","Number","tag","orElse","getOption","liftThrowable"],"sources":["../../src/internal_effect_untraced/tracer.ts"],"sourcesContent":[null],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/opentelemetry",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/Effect-TS/opentelemetry.git"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@effect/data": "^0.12.
|
|
11
|
-
"@effect/io": "^0.
|
|
10
|
+
"@effect/data": "^0.12.10",
|
|
11
|
+
"@effect/io": "^0.29.1",
|
|
12
12
|
"@opentelemetry/api": "^1.4.1",
|
|
13
13
|
"@opentelemetry/resources": "^1.14.0",
|
|
14
14
|
"@opentelemetry/semantic-conventions": "^1.14.0"
|
package/src/Tracer.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
+
import type { Tag } from "@effect/data/Context"
|
|
4
5
|
import type { Effect } from "@effect/io/Effect"
|
|
5
6
|
import type { Layer } from "@effect/io/Layer"
|
|
6
|
-
import type { Tracer } from "@effect/io/Tracer"
|
|
7
|
+
import type { ExternalSpan, Tracer } from "@effect/io/Tracer"
|
|
7
8
|
import * as internal from "@effect/opentelemetry/internal_effect_untraced/tracer"
|
|
8
9
|
import type { Resource } from "@effect/opentelemetry/Resource"
|
|
10
|
+
import type * as Otel from "@opentelemetry/api"
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
* @since 1.0.0
|
|
@@ -13,8 +15,34 @@ import type { Resource } from "@effect/opentelemetry/Resource"
|
|
|
13
15
|
*/
|
|
14
16
|
export const make: Effect<Resource, never, Tracer> = internal.make
|
|
15
17
|
|
|
18
|
+
/**
|
|
19
|
+
* @since 1.0.0
|
|
20
|
+
* @category constructors
|
|
21
|
+
*/
|
|
22
|
+
export const makeExternalSpan: (
|
|
23
|
+
options: {
|
|
24
|
+
readonly name: string
|
|
25
|
+
readonly traceId: string
|
|
26
|
+
readonly spanId: string
|
|
27
|
+
readonly traceFlags?: Otel.TraceFlags
|
|
28
|
+
readonly traceState?: string
|
|
29
|
+
}
|
|
30
|
+
) => ExternalSpan = internal.makeExternalSpan
|
|
31
|
+
|
|
16
32
|
/**
|
|
17
33
|
* @since 1.0.0
|
|
18
34
|
* @category layers
|
|
19
35
|
*/
|
|
20
36
|
export const layer: Layer<Resource, never, never> = internal.layer
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
* @category tags
|
|
41
|
+
*/
|
|
42
|
+
export const TraceFlags: Tag<Otel.TraceFlags, Otel.TraceFlags> = internal.traceFlagsTag
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @since 1.0.0
|
|
46
|
+
* @category tags
|
|
47
|
+
*/
|
|
48
|
+
export const TraceState: Tag<Otel.TraceState, Otel.TraceState> = internal.traceStateTag
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import * as Context from "@effect/data/Context"
|
|
1
2
|
import { pipe } from "@effect/data/Function"
|
|
2
|
-
import
|
|
3
|
+
import * as Option from "@effect/data/Option"
|
|
3
4
|
import * as Cause from "@effect/io/Cause"
|
|
4
5
|
import * as Effect from "@effect/io/Effect"
|
|
5
6
|
import type { Exit } from "@effect/io/Exit"
|
|
@@ -15,7 +16,7 @@ export class OtelSpan implements Tracer.Span {
|
|
|
15
16
|
readonly span: OtelApi.Span
|
|
16
17
|
readonly spanId: string
|
|
17
18
|
readonly traceId: string
|
|
18
|
-
readonly attributes = new Map<string,
|
|
19
|
+
readonly attributes = new Map<string, Tracer.AttributeValue>()
|
|
19
20
|
status: Tracer.SpanStatus
|
|
20
21
|
|
|
21
22
|
constructor(
|
|
@@ -23,24 +24,29 @@ export class OtelSpan implements Tracer.Span {
|
|
|
23
24
|
contextApi: OtelApi.ContextAPI,
|
|
24
25
|
tracer: OtelApi.Tracer,
|
|
25
26
|
readonly name: string,
|
|
26
|
-
readonly parent: Option<Tracer.ParentSpan>,
|
|
27
|
-
|
|
27
|
+
readonly parent: Option.Option<Tracer.ParentSpan>,
|
|
28
|
+
readonly context: Context.Context<never>,
|
|
29
|
+
startTime: bigint
|
|
28
30
|
) {
|
|
29
31
|
const active = contextApi.active()
|
|
30
32
|
this.span = parent._tag === "Some"
|
|
31
33
|
? tracer.startSpan(
|
|
32
34
|
name,
|
|
33
|
-
{ startTime },
|
|
35
|
+
{ startTime: nanosToHrTime(startTime) },
|
|
34
36
|
parent.value instanceof OtelSpan ?
|
|
35
37
|
traceApi.setSpan(active, parent.value.span) :
|
|
36
38
|
traceApi.setSpanContext(active, {
|
|
37
39
|
spanId: parent.value.spanId,
|
|
38
40
|
traceId: parent.value.traceId,
|
|
39
41
|
isRemote: parent.value._tag === "ExternalSpan",
|
|
40
|
-
traceFlags:
|
|
42
|
+
traceFlags: Option.getOrElse(
|
|
43
|
+
extractTraceTag(parent, context, traceFlagsTag),
|
|
44
|
+
() => OtelApi.TraceFlags.SAMPLED
|
|
45
|
+
),
|
|
46
|
+
traceState: Option.getOrUndefined(extractTraceTag(parent, context, traceStateTag))
|
|
41
47
|
})
|
|
42
48
|
)
|
|
43
|
-
: tracer.startSpan(name, { startTime }, active)
|
|
49
|
+
: tracer.startSpan(name, { startTime: nanosToHrTime(startTime) }, active)
|
|
44
50
|
const spanContext = this.span.spanContext()
|
|
45
51
|
|
|
46
52
|
this.spanId = spanContext.spanId
|
|
@@ -52,12 +58,12 @@ export class OtelSpan implements Tracer.Span {
|
|
|
52
58
|
}
|
|
53
59
|
}
|
|
54
60
|
|
|
55
|
-
attribute(key: string, value:
|
|
61
|
+
attribute(key: string, value: Tracer.AttributeValue) {
|
|
56
62
|
this.span.setAttribute(key, value)
|
|
57
63
|
this.attributes.set(key, value)
|
|
58
64
|
}
|
|
59
65
|
|
|
60
|
-
end(endTime:
|
|
66
|
+
end(endTime: bigint, exit: Exit<unknown, unknown>) {
|
|
61
67
|
this.status = {
|
|
62
68
|
_tag: "Ended",
|
|
63
69
|
endTime,
|
|
@@ -81,11 +87,11 @@ export class OtelSpan implements Tracer.Span {
|
|
|
81
87
|
})
|
|
82
88
|
}
|
|
83
89
|
}
|
|
84
|
-
this.span.end(endTime)
|
|
90
|
+
this.span.end(nanosToHrTime(endTime))
|
|
85
91
|
}
|
|
86
92
|
|
|
87
|
-
event(name: string, attributes?: Record<string,
|
|
88
|
-
this.span.addEvent(name, attributes)
|
|
93
|
+
event(name: string, startTime: bigint, attributes?: Record<string, Tracer.AttributeValue>) {
|
|
94
|
+
this.span.addEvent(name, attributes, nanosToHrTime(startTime))
|
|
89
95
|
}
|
|
90
96
|
}
|
|
91
97
|
|
|
@@ -102,13 +108,14 @@ export const make = pipe(
|
|
|
102
108
|
),
|
|
103
109
|
Effect.map((tracer) =>
|
|
104
110
|
Tracer.make({
|
|
105
|
-
span(name, parent, startTime) {
|
|
111
|
+
span(name, parent, context, startTime) {
|
|
106
112
|
return new OtelSpan(
|
|
107
113
|
OtelApi.trace,
|
|
108
114
|
OtelApi.context,
|
|
109
115
|
tracer,
|
|
110
116
|
name,
|
|
111
117
|
parent,
|
|
118
|
+
context,
|
|
112
119
|
startTime
|
|
113
120
|
)
|
|
114
121
|
}
|
|
@@ -120,3 +127,63 @@ export const make = pipe(
|
|
|
120
127
|
export const layer = Layer.unwrapEffect(
|
|
121
128
|
Effect.map(make, Effect.setTracer)
|
|
122
129
|
)
|
|
130
|
+
|
|
131
|
+
/** @internal */
|
|
132
|
+
export const traceFlagsTag = Context.Tag<OtelApi.TraceFlags>("@effect/opentelemetry/traceFlags")
|
|
133
|
+
|
|
134
|
+
/** @internal */
|
|
135
|
+
export const traceStateTag = Context.Tag<OtelApi.TraceState>("@effect/opentelemetry/traceState")
|
|
136
|
+
|
|
137
|
+
/** @internal */
|
|
138
|
+
export const makeExternalSpan = (options: {
|
|
139
|
+
readonly name: string
|
|
140
|
+
readonly traceId: string
|
|
141
|
+
readonly spanId: string
|
|
142
|
+
readonly traceFlags?: number
|
|
143
|
+
readonly traceState?: string
|
|
144
|
+
}): Tracer.ExternalSpan => {
|
|
145
|
+
let context = Context.empty()
|
|
146
|
+
|
|
147
|
+
if (options.traceFlags) {
|
|
148
|
+
context = Context.add(context, traceFlagsTag, options.traceFlags)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (options.traceState) {
|
|
152
|
+
context = Option.match(
|
|
153
|
+
createTraceState(options.traceState),
|
|
154
|
+
() => context,
|
|
155
|
+
(traceState) => Context.add(context, traceStateTag, traceState)
|
|
156
|
+
)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return {
|
|
160
|
+
_tag: "ExternalSpan",
|
|
161
|
+
name: options.name,
|
|
162
|
+
traceId: options.traceId,
|
|
163
|
+
spanId: options.spanId,
|
|
164
|
+
context
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const oneE9 = 1_000_000_000n
|
|
169
|
+
const nanosToHrTime = (timestamp: bigint): OtelApi.HrTime => {
|
|
170
|
+
const nanos = timestamp % oneE9
|
|
171
|
+
const seconds = Number((timestamp - nanos) / oneE9)
|
|
172
|
+
return [seconds, Number(nanos)]
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const extractTraceTag = <I, S>(
|
|
176
|
+
parent: Option.Option<Tracer.ParentSpan>,
|
|
177
|
+
context: Context.Context<never>,
|
|
178
|
+
tag: Context.Tag<I, S>
|
|
179
|
+
) =>
|
|
180
|
+
Option.orElse(
|
|
181
|
+
Context.getOption(context, tag),
|
|
182
|
+
() =>
|
|
183
|
+
Option.flatMap(
|
|
184
|
+
parent,
|
|
185
|
+
(parent) => Context.getOption(parent.context, tag)
|
|
186
|
+
)
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
const createTraceState = Option.liftThrowable(OtelApi.createTraceState)
|