@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 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;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAiB,CAAA;AAElE;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAkB,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 layers
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":";;;;;;AAMA,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;AAGjF;;;;AAIO,MAAMW,IAAI,GAAoCzB,QAAQ,CAACyB,IAAI;AAElE;;;;AAAAC,OAAA,CAAAD,IAAA,GAAAA,IAAA;AAIO,MAAME,KAAK,GAAkC3B,QAAQ,CAAC2B,KAAK;AAAAD,OAAA,CAAAC,KAAA,GAAAA,KAAA"}
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":["Cause","_interopRequireWildcard","require","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","startTime","_tag","attributes","Map","active","span","startSpan","value","setSpan","setSpanContext","spanId","traceId","isRemote","traceFlags","TraceFlags","SAMPLED","spanContext","status","attribute","setAttribute","end","endTime","exit","setStatus","code","SpanStatusCode","OK","isInterruptedOnly","cause","ERROR","message","pretty","event","addEvent","exports","make","map","trace","context","flatMap","resource","sync","getTracer","Resource","layer","unwrapEffect","setTracer"],"sources":["../src/internal_effect_untraced/tracer.ts"],"sourcesContent":[null],"mappings":"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"}
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":"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"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"Tracer.mjs","names":["internal","make","layer"],"sources":["../src/Tracer.ts"],"sourcesContent":[null],"mappings":"AAMA,OAAO,KAAKA,QAAQ,MAAM,uDAAuD;AAGjF;;;;AAIA,OAAO,MAAMC,IAAI,GAAoCD,QAAQ,CAACC,IAAI;AAElE;;;;AAIA,OAAO,MAAMC,KAAK,GAAkCF,QAAQ,CAACE,KAAK"}
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","context","flatMap","resource","sync","getTracer","layer","unwrapEffect","setTracer"],"sources":["../../src/internal_effect_untraced/tracer.ts"],"sourcesContent":[null],"mappings":"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"}
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":"AAAA,OAAO,KAAKA,OAAO,MAAM,sBAAsB;AAE/C,OAAO,KAAKC,MAAM,MAAM,qBAAqB;AAC7C,OAAO,KAAKC,KAAK,MAAM,kBAAkB;AACzC,OAAO,KAAKC,MAAM,MAAM,mBAAmB;AAE3C,OAAO,KAAKC,KAAK,MAAM,kBAAkB;AACzC,OAAO,KAAKC,MAAM,MAAM,mBAAmB;AAC3C,SAASC,QAAQ,QAAQ,gCAAgC;AACzD,OAAO,KAAKC,OAAO,MAAM,oBAAoB;AAE7C;AACA,OAAM,MAAOC,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,EAAE7B,MAAM,CAAC8B,SAAS,CAC1BC,eAAe,CAAClB,MAAM,EAAEC,OAAO,EAAEkB,aAAa,CAAC,EAC/C,MAAM1B,OAAO,CAAC2B,UAAU,CAACC,OAAO,CACjC;MACDC,UAAU,EAAEnC,MAAM,CAACoC,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,CAACC,GAAW,EAAElB,KAA4B;IACjD,IAAI,CAACH,IAAI,CAACsB,YAAY,CAACD,GAAG,EAAElB,KAAK,CAAC;IAClC,IAAI,CAACN,UAAU,CAAC0B,GAAG,CAACF,GAAG,EAAElB,KAAK,CAAC;EACjC;EAEAqB,GAAGA,CAACC,OAAe,EAAEC,IAA4B;IAC/C,IAAI,CAACP,MAAM,GAAG;MACZvB,IAAI,EAAE,OAAO;MACb6B,OAAO;MACPC,IAAI;MACJ/B,SAAS,EAAE,IAAI,CAACwB,MAAM,CAACxB;KACxB;IAED,IAAI+B,IAAI,CAAC9B,IAAI,KAAK,SAAS,EAAE;MAC3B,IAAI,CAACI,IAAI,CAAC2B,SAAS,CAAC;QAClBC,IAAI,EAAE1C,OAAO,CAAC2C,cAAc,CAACC;OAC9B,CAAC;KACH,MAAM;MACL,IAAIjD,KAAK,CAACkD,iBAAiB,CAACL,IAAI,CAACM,KAAK,CAAC,EAAE;QACvC,IAAI,CAAChC,IAAI,CAAC2B,SAAS,CAAC;UAClBC,IAAI,EAAE1C,OAAO,CAAC2C,cAAc,CAACC;SAC9B,CAAC;OACH,MAAM;QACL,IAAI,CAAC9B,IAAI,CAAC2B,SAAS,CAAC;UAClBC,IAAI,EAAE1C,OAAO,CAAC2C,cAAc,CAACI,KAAK;UAClCC,OAAO,EAAErD,KAAK,CAACsD,MAAM,CAACT,IAAI,CAACM,KAAK;SACjC,CAAC;;;IAGN,IAAI,CAAChC,IAAI,CAACwB,GAAG,CAACtB,aAAa,CAACuB,OAAO,CAAC,CAAC;EACvC;EAEAW,KAAKA,CAAC5C,IAAY,EAAEG,SAAiB,EAAEE,UAAkD;IACvF,IAAI,CAACG,IAAI,CAACqC,QAAQ,CAAC7C,IAAI,EAAEK,UAAU,EAAEK,aAAa,CAACP,SAAS,CAAC,CAAC;EAChE;;AAGF;AACA,OAAO,MAAM2C,IAAI,gBAUfxD,MAAM,CAACyD,GAAG,CAAEhD,MAAM,IAChBP,MAAM,CAACsD,IAAI,CAAC;EACVtC,IAAIA,CAACR,IAAI,EAAEC,MAAM,EAAEC,OAAO,EAAEC,SAAS;IACnC,OAAO,IAAIR,QAAQ,CACjBD,OAAO,CAACsD,KAAK,EACbtD,OAAO,CAACQ,OAAO,EACfH,MAAM,EACNC,IAAI,EACJC,MAAM,EACNC,OAAO,EACPC,SAAS,CACV;EACH;CACD,CAAC,CACH,eAtBDb,MAAM,CAAC2D,OAAO,CAAEC,QAAQ,IACtB5D,MAAM,CAAC6D,IAAI,CAAC,MACVzD,OAAO,CAACsD,KAAK,CAACI,SAAS,CACrBF,QAAQ,CAAC7C,UAAU,CAAC,cAAc,CAAW,EAC7C6C,QAAQ,CAAC7C,UAAU,CAAC,iBAAiB,CAAW,CACjD,CACF,CACF,CARDZ,QAAQ,EAwBT;AAED;AACA,OAAO,MAAM4D,KAAK,gBAAG9D,KAAK,CAAC+D,YAAY,eACrChE,MAAM,CAACyD,GAAG,CAACD,IAAI,EAAExD,MAAM,CAACiE,SAAS,CAAC,CACnC;AAED;AACA,OAAO,MAAMnC,aAAa,gBAAGjC,OAAO,CAACqE,GAAG,CAAqB,kCAAkC,CAAC;AAEhG;AACA,OAAO,MAAM/B,aAAa,gBAAGtC,OAAO,CAACqE,GAAG,CAAqB,kCAAkC,CAAC;AAEhG;AACA,OAAO,MAAMC,gBAAgB,GAAIC,OAMhC,IAAyB;EACxB,IAAIxD,OAAO,GAAGf,OAAO,CAACwE,KAAK,EAAE;EAE7B,IAAID,OAAO,CAACzC,UAAU,EAAE;IACtBf,OAAO,GAAGf,OAAO,CAACyE,GAAG,CAAC1D,OAAO,EAAEkB,aAAa,EAAEsC,OAAO,CAACzC,UAAU,CAAC;;EAGnE,IAAIyC,OAAO,CAACnC,UAAU,EAAE;IACtBrB,OAAO,GAAGd,MAAM,CAACyE,KAAK,CACpBC,gBAAgB,CAACJ,OAAO,CAACnC,UAAU,CAAC,EACpC,MAAMrB,OAAO,EACZqB,UAAU,IAAKpC,OAAO,CAACyE,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;AAED,MAAM6D,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,KAEtBhF,MAAM,CAACiF,MAAM,CACXlF,OAAO,CAACmF,SAAS,CAACpE,OAAO,EAAEkE,GAAG,CAAC,EAC/B,MACEhF,MAAM,CAAC6D,OAAO,CACZhD,MAAM,EACLA,MAAM,IAAKd,OAAO,CAACmF,SAAS,CAACrE,MAAM,CAACC,OAAO,EAAEkE,GAAG,CAAC,CACnD,CACJ;AAEH,MAAMN,gBAAgB,gBAAG1E,MAAM,CAACmF,aAAa,CAAC7E,OAAO,CAACoE,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@effect/opentelemetry",
3
- "version": "0.1.3",
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.9",
11
- "@effect/io": "^0.27.1",
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 type { Option } from "@effect/data/Option"
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, 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
- startTime: number
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: OtelApi.TraceFlags.SAMPLED
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: string) {
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: number, exit: Exit<unknown, unknown>) {
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, 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)