@kronos-ts/opentelemetry 0.2.1 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"opentelemetry-span-factory.d.ts","sourceRoot":"","sources":["../src/opentelemetry-span-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,MAAM,EAIZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAQ,WAAW,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAgDrF,MAAM,WAAW,+BAA+B;IAC9C,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,sBAAsB,CAAC,EAAE,sBAAsB,EAAE,CAAA;CAClD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,+BAAoC,GAC5C,WAAW,CAgFb"}
1
+ {"version":3,"file":"opentelemetry-span-factory.d.ts","sourceRoot":"","sources":["../src/opentelemetry-span-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,MAAM,EAIZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAQ,WAAW,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAuDrF,MAAM,WAAW,+BAA+B;IAC9C,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,sBAAsB,CAAC,EAAE,sBAAsB,EAAE,CAAA;CAClD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,+BAAoC,GAC5C,WAAW,CAyGb"}
@@ -19,7 +19,7 @@ const metadataSetter = {
19
19
  // ---------------------------------------------------------------------------
20
20
  // OpenTelemetry Span wrapper
21
21
  // ---------------------------------------------------------------------------
22
- function wrapOtelSpan(otelSpan, parentContext) {
22
+ function wrapOtelSpan(otelSpan, _parentContext) {
23
23
  return {
24
24
  start() {
25
25
  // OTel spans are started at creation — nothing to do
@@ -34,6 +34,13 @@ function wrapOtelSpan(otelSpan, parentContext) {
34
34
  otelSpan.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
35
35
  otelSpan.end();
36
36
  },
37
+ runActive(fn) {
38
+ // Make this span the active context for the duration of `fn`. With the
39
+ // AsyncLocalStorage context manager the span stays active across awaits in
40
+ // an async `fn`, so propagateContext / currentTraceContext and any child
41
+ // spans created during handling parent to it.
42
+ return context.with(trace.setSpan(context.active(), otelSpan), fn);
43
+ },
37
44
  };
38
45
  }
39
46
  /**
@@ -78,6 +85,20 @@ export function createOpenTelemetrySpanFactory(options = {}) {
78
85
  addMessageAttributes(otelSpan, parentMessage);
79
86
  return wrapOtelSpan(otelSpan, parentContext);
80
87
  },
88
+ createLinkedHandlerSpan(operationName, parentMessage) {
89
+ // New trace (root), linked to the parent message's span rather than
90
+ // parented to it — the originating trace may be long finished by the time
91
+ // an asynchronous processor handles the event.
92
+ const parentContext = extractContext(parentMessage);
93
+ const parentSpanContext = trace.getSpanContext(parentContext);
94
+ const otelSpan = tracer.startSpan(operationName, {
95
+ kind: SpanKind.CONSUMER,
96
+ root: true,
97
+ links: parentSpanContext ? [{ context: parentSpanContext }] : [],
98
+ });
99
+ addMessageAttributes(otelSpan, parentMessage);
100
+ return wrapOtelSpan(otelSpan, parentContext);
101
+ },
81
102
  createDispatchSpan(operationName, parentMessage) {
82
103
  const parentContext = extractContext(parentMessage);
83
104
  const otelSpan = tracer.startSpan(operationName, { kind: SpanKind.PRODUCER }, parentContext);
@@ -101,6 +122,11 @@ export function createOpenTelemetrySpanFactory(options = {}) {
101
122
  metadata: { ...message.metadata, ...additionalMetadata },
102
123
  };
103
124
  },
125
+ currentTraceContext() {
126
+ const carrier = {};
127
+ propagation.inject(context.active(), carrier, metadataSetter);
128
+ return carrier;
129
+ },
104
130
  registerSpanAttributeProvider(provider) {
105
131
  attributeProviders.push(provider);
106
132
  },
@@ -1 +1 @@
1
- {"version":3,"file":"opentelemetry-span-factory.js","sourceRoot":"","sources":["../src/opentelemetry-span-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opentelemetry-span-factory.js","sourceRoot":"","sources":["../src/opentelemetry-span-factory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kronos-ts/opentelemetry",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "OpenTelemetry extension for Kronos — tracing for commands and events.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -50,13 +50,13 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@kronos-ts/common": "0.1.1",
53
- "@kronos-ts/app": "0.3.3",
54
- "@kronos-ts/messaging": "0.5.0",
53
+ "@kronos-ts/app": "0.4.0",
54
+ "@kronos-ts/messaging": "0.6.0",
55
55
  "@opentelemetry/api": "^1.9"
56
56
  },
57
57
  "devDependencies": {
58
- "@kronos-ts/eventsourcing": "0.2.0",
59
- "@kronos-ts/modelling": "0.2.3",
58
+ "@kronos-ts/eventsourcing": "0.2.2",
59
+ "@kronos-ts/modelling": "0.2.5",
60
60
  "@opentelemetry/sdk-trace-base": "^1.30.0",
61
61
  "@opentelemetry/sdk-trace-node": "^1.30.0",
62
62
  "zod": "^4.3.6"
@@ -37,7 +37,7 @@ const metadataSetter: TextMapSetter<Record<string, unknown>> = {
37
37
  // OpenTelemetry Span wrapper
38
38
  // ---------------------------------------------------------------------------
39
39
 
40
- function wrapOtelSpan(otelSpan: import("@opentelemetry/api").Span, parentContext: OtelContext): Span {
40
+ function wrapOtelSpan(otelSpan: import("@opentelemetry/api").Span, _parentContext: OtelContext): Span {
41
41
  return {
42
42
  start() {
43
43
  // OTel spans are started at creation — nothing to do
@@ -52,6 +52,13 @@ function wrapOtelSpan(otelSpan: import("@opentelemetry/api").Span, parentContext
52
52
  otelSpan.setStatus({ code: SpanStatusCode.ERROR, message: error.message })
53
53
  otelSpan.end()
54
54
  },
55
+ runActive<T>(fn: () => T): T {
56
+ // Make this span the active context for the duration of `fn`. With the
57
+ // AsyncLocalStorage context manager the span stays active across awaits in
58
+ // an async `fn`, so propagateContext / currentTraceContext and any child
59
+ // spans created during handling parent to it.
60
+ return context.with(trace.setSpan(context.active(), otelSpan), fn)
61
+ },
55
62
  }
56
63
  }
57
64
 
@@ -123,6 +130,21 @@ export function createOpenTelemetrySpanFactory(
123
130
  return wrapOtelSpan(otelSpan, parentContext)
124
131
  },
125
132
 
133
+ createLinkedHandlerSpan(operationName: string, parentMessage: Message): Span {
134
+ // New trace (root), linked to the parent message's span rather than
135
+ // parented to it — the originating trace may be long finished by the time
136
+ // an asynchronous processor handles the event.
137
+ const parentContext = extractContext(parentMessage)
138
+ const parentSpanContext = trace.getSpanContext(parentContext)
139
+ const otelSpan = tracer.startSpan(operationName, {
140
+ kind: SpanKind.CONSUMER,
141
+ root: true,
142
+ links: parentSpanContext ? [{ context: parentSpanContext }] : [],
143
+ })
144
+ addMessageAttributes(otelSpan, parentMessage)
145
+ return wrapOtelSpan(otelSpan, parentContext)
146
+ },
147
+
126
148
  createDispatchSpan(operationName: string, parentMessage: Message): Span {
127
149
  const parentContext = extractContext(parentMessage)
128
150
  const otelSpan = tracer.startSpan(
@@ -155,6 +177,16 @@ export function createOpenTelemetrySpanFactory(
155
177
  }
156
178
  },
157
179
 
180
+ currentTraceContext(): Record<string, string> {
181
+ const carrier: Record<string, string> = {}
182
+ propagation.inject(
183
+ context.active(),
184
+ carrier,
185
+ metadataSetter as TextMapSetter<Record<string, string>>,
186
+ )
187
+ return carrier
188
+ },
189
+
158
190
  registerSpanAttributeProvider(provider: SpanAttributesProvider) {
159
191
  attributeProviders.push(provider)
160
192
  },