@temporalio/interceptors-opentelemetry 1.15.0 → 1.16.1
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/lib/instrumentation.d.ts +11 -0
- package/lib/instrumentation.js +24 -1
- package/lib/instrumentation.js.map +1 -1
- package/lib/plugin.js +6 -0
- package/lib/plugin.js.map +1 -1
- package/lib/worker/index.d.ts +26 -1
- package/lib/worker/index.js +88 -1
- package/lib/worker/index.js.map +1 -1
- package/lib/workflow/definitions.d.ts +9 -1
- package/lib/workflow/definitions.js +8 -0
- package/lib/workflow/definitions.js.map +1 -1
- package/lib/workflow/index.js +3 -2
- package/lib/workflow/index.js.map +1 -1
- package/package.json +10 -9
- package/src/instrumentation.ts +24 -1
- package/src/plugin.ts +8 -0
- package/src/worker/index.ts +109 -0
- package/src/workflow/definitions.ts +8 -0
- package/src/workflow/index.ts +4 -2
package/lib/instrumentation.d.ts
CHANGED
|
@@ -26,10 +26,21 @@ export declare const NEXUS_ENDPOINT_ATTR_KEY = "temporalNexusEndpoint";
|
|
|
26
26
|
* If found, return an otel Context deserialized from the provided headers
|
|
27
27
|
*/
|
|
28
28
|
export declare function extractContextFromHeaders(headers: Headers): otel.Context | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* If found, return an otel Context deserialized from the provided Nexus headers.
|
|
31
|
+
*
|
|
32
|
+
* Nexus headers are plain `Record<string, string>`, so we extract the context
|
|
33
|
+
* directly from the string map.
|
|
34
|
+
*/
|
|
35
|
+
export declare function extractContextFromNexusHeaders(headers: Record<string, string>): otel.Context | undefined;
|
|
29
36
|
/**
|
|
30
37
|
* Given headers, return new headers with the current otel context inserted
|
|
31
38
|
*/
|
|
32
39
|
export declare function headersWithContext(headers: Headers): Headers;
|
|
40
|
+
/**
|
|
41
|
+
* Given Nexus headers, return new headers with the current otel context injected directly
|
|
42
|
+
*/
|
|
43
|
+
export declare function nexusHeadersWithContext(headers: Record<string, string>): Record<string, string>;
|
|
33
44
|
export interface InstrumentOptions<T> {
|
|
34
45
|
tracer: otel.Tracer;
|
|
35
46
|
spanName: string;
|
package/lib/instrumentation.js
CHANGED
|
@@ -25,7 +25,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.NEXUS_ENDPOINT_ATTR_KEY = exports.NEXUS_OPERATION_ATTR_KEY = exports.NEXUS_SERVICE_ATTR_KEY = exports.TERMINATE_REASON_ATTR_KEY = exports.UPDATE_ID_ATTR_KEY = exports.ACTIVITY_ID_ATTR_KEY = exports.WORKFLOW_ID_ATTR_KEY = exports.RUN_ID_ATTR_KEY = exports.TRACE_HEADER = void 0;
|
|
27
27
|
exports.extractContextFromHeaders = extractContextFromHeaders;
|
|
28
|
+
exports.extractContextFromNexusHeaders = extractContextFromNexusHeaders;
|
|
28
29
|
exports.headersWithContext = headersWithContext;
|
|
30
|
+
exports.nexusHeadersWithContext = nexusHeadersWithContext;
|
|
29
31
|
exports.instrument = instrument;
|
|
30
32
|
exports.instrumentSync = instrumentSync;
|
|
31
33
|
/**
|
|
@@ -64,6 +66,18 @@ function extractContextFromHeaders(headers) {
|
|
|
64
66
|
const textMap = payloadConverter.fromPayload(encodedSpanContext);
|
|
65
67
|
return otel.propagation.extract(otel.context.active(), textMap, otel.defaultTextMapGetter);
|
|
66
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* If found, return an otel Context deserialized from the provided Nexus headers.
|
|
71
|
+
*
|
|
72
|
+
* Nexus headers are plain `Record<string, string>`, so we extract the context
|
|
73
|
+
* directly from the string map.
|
|
74
|
+
*/
|
|
75
|
+
function extractContextFromNexusHeaders(headers) {
|
|
76
|
+
if (Object.keys(headers).length === 0) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
return otel.propagation.extract(otel.context.active(), headers, otel.defaultTextMapGetter);
|
|
80
|
+
}
|
|
67
81
|
/**
|
|
68
82
|
* Given headers, return new headers with the current otel context inserted
|
|
69
83
|
*/
|
|
@@ -72,6 +86,14 @@ function headersWithContext(headers) {
|
|
|
72
86
|
otel.propagation.inject(otel.context.active(), carrier, otel.defaultTextMapSetter);
|
|
73
87
|
return { ...headers, [exports.TRACE_HEADER]: payloadConverter.toPayload(carrier) };
|
|
74
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Given Nexus headers, return new headers with the current otel context injected directly
|
|
91
|
+
*/
|
|
92
|
+
function nexusHeadersWithContext(headers) {
|
|
93
|
+
const carrier = {};
|
|
94
|
+
otel.propagation.inject(otel.context.active(), carrier, otel.defaultTextMapSetter);
|
|
95
|
+
return { ...headers, ...carrier };
|
|
96
|
+
}
|
|
75
97
|
async function wrapWithSpan(span, fn, acceptableErrors) {
|
|
76
98
|
try {
|
|
77
99
|
const ret = await fn(span);
|
|
@@ -104,7 +126,8 @@ function maybeAddErrorToSpan(err, span, acceptableErrors) {
|
|
|
104
126
|
const isBenignErr = err instanceof common_1.ApplicationFailure && err.category === common_1.ApplicationFailureCategory.BENIGN;
|
|
105
127
|
if (acceptableErrors === undefined || !acceptableErrors(err)) {
|
|
106
128
|
const statusCode = isBenignErr ? otel.SpanStatusCode.UNSET : otel.SpanStatusCode.ERROR;
|
|
107
|
-
|
|
129
|
+
const message = err != null && typeof err.message === 'string' ? err.message : String(err);
|
|
130
|
+
span.setStatus({ code: statusCode, message });
|
|
108
131
|
span.recordException(err);
|
|
109
132
|
}
|
|
110
133
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,8DAOC;AAKD,gDAIC;
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,8DAOC;AAQD,wEAKC;AAKD,gDAIC;AAKD,0DAIC;AA6DD,gCAaC;AAED,wCAOC;AA7JD;;;GAGG;AACH,yDAA2C;AAC3C,+CAK4B;AAE5B,0DAA0D;AAC7C,QAAA,YAAY,GAAG,cAAc,CAAC;AAC3C,4BAA4B;AACf,QAAA,eAAe,GAAG,QAAQ,CAAC;AACxC,wBAAwB;AACX,QAAA,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,wBAAwB;AACX,QAAA,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,sBAAsB;AACT,QAAA,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,+BAA+B;AAClB,QAAA,yBAAyB,GAAG,yBAAyB,CAAC;AACnE,0BAA0B;AACb,QAAA,sBAAsB,GAAG,sBAAsB,CAAC;AAC7D,4BAA4B;AACf,QAAA,wBAAwB,GAAG,wBAAwB,CAAC;AACjE,2BAA2B;AACd,QAAA,uBAAuB,GAAG,uBAAuB,CAAC;AAE/D,MAAM,gBAAgB,GAAG,gCAAuB,CAAC;AAEjD;;GAEG;AACH,SAAgB,yBAAyB,CAAC,OAAgB;IACxD,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAY,CAAC,CAAC;IACjD,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAA2B,gBAAgB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;GAKG;AACH,SAAgB,8BAA8B,CAAC,OAA+B;IAC5E,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACnF,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,oBAAY,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,OAA+B;IACrE,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACnF,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAAe,EACf,EAAmC,EACnC,gBAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACjD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAe,EACf,EAA0B,EAC1B,gBAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACjD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAQ,EAAE,IAAe,EAAE,gBAA4C;IAClG,MAAM,WAAW,GAAG,GAAG,YAAY,2BAAkB,IAAI,GAAG,CAAC,QAAQ,KAAK,mCAA0B,CAAC,MAAM,CAAC;IAC5G,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QACvF,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAYD;;GAEG;AACI,KAAK,UAAU,UAAU,CAAI,EAClC,MAAM,EACN,QAAQ,EACR,EAAE,EACF,OAAO,EACP,gBAAgB,GACK;IACrB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACjD,OAAO,MAAM,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAChH,CAAC;AAED,SAAgB,cAAc,CAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAA4B;IAC7G,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAClG,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAClG,CAAC"}
|
package/lib/plugin.js
CHANGED
|
@@ -33,6 +33,12 @@ class OpenTelemetryPlugin extends plugin_1.SimplePlugin {
|
|
|
33
33
|
outbound: new worker_1.OpenTelemetryActivityOutboundInterceptor(ctx),
|
|
34
34
|
}),
|
|
35
35
|
],
|
|
36
|
+
nexus: [
|
|
37
|
+
(ctx) => ({
|
|
38
|
+
inbound: new worker_1.OpenTelemetryNexusInboundInterceptor(ctx, interceptorOptions),
|
|
39
|
+
outbound: new worker_1.OpenTelemetryNexusOutboundInterceptor(ctx),
|
|
40
|
+
}),
|
|
41
|
+
],
|
|
36
42
|
},
|
|
37
43
|
});
|
|
38
44
|
this.otelOptions = otelOptions;
|
package/lib/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;AAEA,+CAAkD;AAElD,qCAAsF;AACtF,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;AAEA,+CAAkD;AAElD,qCAAsF;AACtF,qCAMkB;AAelB;;;;;;;GAOG;AACH,MAAa,mBAAoB,SAAQ,qBAAY;IAC9B;IAArB,YAAqB,WAAuC;QAC1D,MAAM,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC5E,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC;YACJ,IAAI,EAAE,qBAAqB;YAC3B,kBAAkB,EAAE;gBAClB,QAAQ,EAAE,CAAC,IAAI,+CAAsC,CAAC,kBAAkB,CAAC,CAAC;aAC3E;YACD,kBAAkB,EAAE;gBAClB,MAAM,EAAE;oBACN,QAAQ,EAAE,CAAC,IAAI,+CAAsC,CAAC,kBAAkB,CAAC,CAAC;iBAC3E;gBACD,eAAe,EAAE,CAAC,wBAAwB,CAAC;gBAC3C,QAAQ,EAAE;oBACR,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACR,OAAO,EAAE,IAAI,gDAAuC,CAAC,GAAG,EAAE,kBAAkB,CAAC;wBAC7E,QAAQ,EAAE,IAAI,iDAAwC,CAAC,GAAG,CAAC;qBAC5D,CAAC;iBACH;gBACD,KAAK,EAAE;oBACL,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACR,OAAO,EAAE,IAAI,6CAAoC,CAAC,GAAG,EAAE,kBAAkB,CAAC;wBAC1E,QAAQ,EAAE,IAAI,8CAAqC,CAAC,GAAG,CAAC;qBACzD,CAAC;iBACH;aACF;SACF,CAAC,CAAC;QA1BgB,gBAAW,GAAX,WAAW,CAA4B;IA2B5D,CAAC;IAED,eAAe,CAAC,OAAsB;QACpC,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,qBAAqB,CAAC,OAA4B;QAChD,OAAO,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAEO,WAAW,CAA2C,OAAU;QACtE,MAAM,KAAK,GAAsC;YAC/C,QAAQ,EAAE,IAAA,6BAAoB,EAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;SAC1F,CAAC;QACF,OAAO;YACL,GAAG,OAAO;YACV,KAAK,EAAE;gBACL,GAAG,OAAO,CAAC,KAAK;gBAChB,GAAG,KAAK;aACT;SACF,CAAC;IACJ,CAAC;CACF;AAlDD,kDAkDC"}
|
package/lib/worker/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as otel from '@opentelemetry/api';
|
|
2
2
|
import type { Resource } from '@opentelemetry/resources';
|
|
3
3
|
import type { SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
4
|
+
import type * as nexus from 'nexus-rpc';
|
|
4
5
|
import type { Context as ActivityContext } from '@temporalio/activity';
|
|
5
|
-
import type { Next, ActivityInboundCallsInterceptor, ActivityOutboundCallsInterceptor, InjectedSink, GetLogAttributesInput, GetMetricTagsInput, ActivityExecuteInput } from '@temporalio/worker';
|
|
6
|
+
import type { Next, ActivityInboundCallsInterceptor, ActivityOutboundCallsInterceptor, NexusInboundCallsInterceptor, NexusOutboundCallsInterceptor, NexusStartOperationInput, NexusStartOperationOutput, NexusCancelOperationInput, InjectedSink, GetLogAttributesInput, GetMetricTagsInput, ActivityExecuteInput } from '@temporalio/worker';
|
|
6
7
|
import { type OpenTelemetryWorkflowExporter } from '../workflow/definitions';
|
|
7
8
|
export interface InterceptorOptions {
|
|
8
9
|
readonly tracer?: otel.Tracer;
|
|
@@ -30,6 +31,30 @@ export declare class OpenTelemetryActivityOutboundInterceptor implements Activit
|
|
|
30
31
|
getLogAttributes(input: GetLogAttributesInput, next: Next<ActivityOutboundCallsInterceptor, 'getLogAttributes'>): Record<string, unknown>;
|
|
31
32
|
getMetricTags(input: GetMetricTagsInput, next: Next<ActivityOutboundCallsInterceptor, 'getMetricTags'>): GetMetricTagsInput;
|
|
32
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Intercepts inbound Nexus Operation calls on the worker.
|
|
36
|
+
*
|
|
37
|
+
* Wraps `startOperation` and `cancelOperation` in opentelemetry Spans, linking to a parent Span context
|
|
38
|
+
* if one is provided in the Nexus request headers.
|
|
39
|
+
*/
|
|
40
|
+
export declare class OpenTelemetryNexusInboundInterceptor implements NexusInboundCallsInterceptor {
|
|
41
|
+
protected readonly ctx: nexus.OperationContext;
|
|
42
|
+
protected readonly tracer: otel.Tracer;
|
|
43
|
+
constructor(ctx: nexus.OperationContext, options?: InterceptorOptions);
|
|
44
|
+
startOperation(input: NexusStartOperationInput, next: Next<NexusInboundCallsInterceptor, 'startOperation'>): Promise<NexusStartOperationOutput>;
|
|
45
|
+
cancelOperation(input: NexusCancelOperationInput, next: Next<NexusInboundCallsInterceptor, 'cancelOperation'>): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Intercepts outbound calls from a Nexus Operation handler.
|
|
49
|
+
*
|
|
50
|
+
* Attaches OpenTelemetry context tracing attributes to emitted log messages and metrics.
|
|
51
|
+
*/
|
|
52
|
+
export declare class OpenTelemetryNexusOutboundInterceptor implements NexusOutboundCallsInterceptor {
|
|
53
|
+
protected readonly ctx: nexus.OperationContext;
|
|
54
|
+
constructor(ctx: nexus.OperationContext);
|
|
55
|
+
getLogAttributes(input: GetLogAttributesInput, next: Next<NexusOutboundCallsInterceptor, 'getLogAttributes'>): Record<string, unknown>;
|
|
56
|
+
getMetricTags(input: GetMetricTagsInput, next: Next<NexusOutboundCallsInterceptor, 'getMetricTags'>): GetMetricTagsInput;
|
|
57
|
+
}
|
|
33
58
|
/**
|
|
34
59
|
* Takes an opentelemetry SpanExporter and turns it into an injected Workflow span exporter sink
|
|
35
60
|
*
|
package/lib/worker/index.js
CHANGED
|
@@ -23,10 +23,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.OpenTelemetryActivityOutboundInterceptor = exports.OpenTelemetryActivityInboundInterceptor = void 0;
|
|
26
|
+
exports.OpenTelemetryNexusOutboundInterceptor = exports.OpenTelemetryNexusInboundInterceptor = exports.OpenTelemetryActivityOutboundInterceptor = exports.OpenTelemetryActivityInboundInterceptor = void 0;
|
|
27
27
|
exports.makeWorkflowExporter = makeWorkflowExporter;
|
|
28
28
|
const otel = __importStar(require("@opentelemetry/api"));
|
|
29
29
|
const api_1 = require("@opentelemetry/api");
|
|
30
|
+
const common_1 = require("@temporalio/common");
|
|
30
31
|
const instrumentation_1 = require("../instrumentation");
|
|
31
32
|
const definitions_1 = require("../workflow/definitions");
|
|
32
33
|
/**
|
|
@@ -55,6 +56,7 @@ class OpenTelemetryActivityInboundInterceptor {
|
|
|
55
56
|
return next(input);
|
|
56
57
|
},
|
|
57
58
|
context,
|
|
59
|
+
acceptableErrors: (err) => err instanceof common_1.CompleteAsyncError,
|
|
58
60
|
});
|
|
59
61
|
}
|
|
60
62
|
}
|
|
@@ -101,6 +103,91 @@ class OpenTelemetryActivityOutboundInterceptor {
|
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
exports.OpenTelemetryActivityOutboundInterceptor = OpenTelemetryActivityOutboundInterceptor;
|
|
106
|
+
/**
|
|
107
|
+
* Intercepts inbound Nexus Operation calls on the worker.
|
|
108
|
+
*
|
|
109
|
+
* Wraps `startOperation` and `cancelOperation` in opentelemetry Spans, linking to a parent Span context
|
|
110
|
+
* if one is provided in the Nexus request headers.
|
|
111
|
+
*/
|
|
112
|
+
class OpenTelemetryNexusInboundInterceptor {
|
|
113
|
+
ctx;
|
|
114
|
+
tracer;
|
|
115
|
+
constructor(ctx, options) {
|
|
116
|
+
this.ctx = ctx;
|
|
117
|
+
this.tracer = options?.tracer ?? otel.trace.getTracer('@temporalio/interceptor-nexus');
|
|
118
|
+
}
|
|
119
|
+
async startOperation(input, next) {
|
|
120
|
+
const context = (0, instrumentation_1.extractContextFromNexusHeaders)(input.ctx.headers);
|
|
121
|
+
const spanName = `${definitions_1.SpanName.NEXUS_START_OPERATION_EXECUTE}${definitions_1.SPAN_DELIMITER}${input.ctx.service}/${input.ctx.operation}`;
|
|
122
|
+
return await (0, instrumentation_1.instrument)({
|
|
123
|
+
tracer: this.tracer,
|
|
124
|
+
spanName,
|
|
125
|
+
fn: (span) => {
|
|
126
|
+
span.setAttribute(instrumentation_1.NEXUS_SERVICE_ATTR_KEY, input.ctx.service);
|
|
127
|
+
span.setAttribute(instrumentation_1.NEXUS_OPERATION_ATTR_KEY, input.ctx.operation);
|
|
128
|
+
return next(input);
|
|
129
|
+
},
|
|
130
|
+
context,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async cancelOperation(input, next) {
|
|
134
|
+
const context = (0, instrumentation_1.extractContextFromNexusHeaders)(input.ctx.headers);
|
|
135
|
+
const spanName = `${definitions_1.SpanName.NEXUS_CANCEL_OPERATION_EXECUTE}${definitions_1.SPAN_DELIMITER}${input.ctx.service}/${input.ctx.operation}`;
|
|
136
|
+
return await (0, instrumentation_1.instrument)({
|
|
137
|
+
tracer: this.tracer,
|
|
138
|
+
spanName,
|
|
139
|
+
fn: (span) => {
|
|
140
|
+
span.setAttribute(instrumentation_1.NEXUS_SERVICE_ATTR_KEY, input.ctx.service);
|
|
141
|
+
span.setAttribute(instrumentation_1.NEXUS_OPERATION_ATTR_KEY, input.ctx.operation);
|
|
142
|
+
return next(input);
|
|
143
|
+
},
|
|
144
|
+
context,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.OpenTelemetryNexusInboundInterceptor = OpenTelemetryNexusInboundInterceptor;
|
|
149
|
+
/**
|
|
150
|
+
* Intercepts outbound calls from a Nexus Operation handler.
|
|
151
|
+
*
|
|
152
|
+
* Attaches OpenTelemetry context tracing attributes to emitted log messages and metrics.
|
|
153
|
+
*/
|
|
154
|
+
class OpenTelemetryNexusOutboundInterceptor {
|
|
155
|
+
ctx;
|
|
156
|
+
constructor(ctx) {
|
|
157
|
+
this.ctx = ctx;
|
|
158
|
+
}
|
|
159
|
+
getLogAttributes(input, next) {
|
|
160
|
+
const span = otel.trace.getSpan(otel.context.active());
|
|
161
|
+
const spanContext = span?.spanContext();
|
|
162
|
+
if (spanContext && otel.isSpanContextValid(spanContext)) {
|
|
163
|
+
return next({
|
|
164
|
+
trace_id: spanContext.traceId,
|
|
165
|
+
span_id: spanContext.spanId,
|
|
166
|
+
trace_flags: `0${spanContext.traceFlags.toString(16)}`,
|
|
167
|
+
...input,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
return next(input);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
getMetricTags(input, next) {
|
|
175
|
+
const span = otel.trace.getSpan(otel.context.active());
|
|
176
|
+
const spanContext = span?.spanContext();
|
|
177
|
+
if (spanContext && otel.isSpanContextValid(spanContext)) {
|
|
178
|
+
return next({
|
|
179
|
+
trace_id: spanContext.traceId,
|
|
180
|
+
span_id: spanContext.spanId,
|
|
181
|
+
trace_flags: `0${spanContext.traceFlags.toString(16)}`,
|
|
182
|
+
...input,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
return next(input);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.OpenTelemetryNexusOutboundInterceptor = OpenTelemetryNexusOutboundInterceptor;
|
|
104
191
|
function makeWorkflowExporter(processorOrExporter, resource) {
|
|
105
192
|
const givenSpanProcessor = isSpanProcessor(processorOrExporter);
|
|
106
193
|
return {
|
package/lib/worker/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -114,6 +114,14 @@ export declare enum SpanName {
|
|
|
114
114
|
/**
|
|
115
115
|
* Nexus operation is started
|
|
116
116
|
*/
|
|
117
|
-
NEXUS_OPERATION_START = "StartNexusOperation"
|
|
117
|
+
NEXUS_OPERATION_START = "StartNexusOperation",
|
|
118
|
+
/**
|
|
119
|
+
* Nexus operation is executing
|
|
120
|
+
*/
|
|
121
|
+
NEXUS_START_OPERATION_EXECUTE = "RunStartNexusOperation",
|
|
122
|
+
/**
|
|
123
|
+
* Nexus operation cancel is executing
|
|
124
|
+
*/
|
|
125
|
+
NEXUS_CANCEL_OPERATION_EXECUTE = "RunCancelNexusOperation"
|
|
118
126
|
}
|
|
119
127
|
export declare const SPAN_DELIMITER = ":";
|
|
@@ -79,6 +79,14 @@ var SpanName;
|
|
|
79
79
|
* Nexus operation is started
|
|
80
80
|
*/
|
|
81
81
|
SpanName["NEXUS_OPERATION_START"] = "StartNexusOperation";
|
|
82
|
+
/**
|
|
83
|
+
* Nexus operation is executing
|
|
84
|
+
*/
|
|
85
|
+
SpanName["NEXUS_START_OPERATION_EXECUTE"] = "RunStartNexusOperation";
|
|
86
|
+
/**
|
|
87
|
+
* Nexus operation cancel is executing
|
|
88
|
+
*/
|
|
89
|
+
SpanName["NEXUS_CANCEL_OPERATION_EXECUTE"] = "RunCancelNexusOperation";
|
|
82
90
|
})(SpanName || (exports.SpanName = SpanName = {}));
|
|
83
91
|
exports.SPAN_DELIMITER = ':';
|
|
84
92
|
//# sourceMappingURL=definitions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/workflow/definitions.ts"],"names":[],"mappings":";;;AA6CA,IAAY,
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/workflow/definitions.ts"],"names":[],"mappings":";;;AA6CA,IAAY,QAkGX;AAlGD,WAAY,QAAQ;IAClB;;OAEG;IACH,4CAAgC,CAAA;IAEhC;;OAEG;IACH,8CAAkC,CAAA;IAElC;;OAEG;IACH,kEAAsD,CAAA;IAEtD;;OAEG;IACH,4CAAgC,CAAA;IAEhC;;OAEG;IACH,yDAA6C,CAAA;IAE7C;;OAEG;IACH,kEAAsD,CAAA;IAEtD;;OAEG;IACH,mDAAuC,CAAA;IAEvC;;OAEG;IACH,iDAAqC,CAAA;IAErC;;OAEG;IACH,mDAAuC,CAAA;IAEvC;;OAEG;IACH,uDAA2C,CAAA;IAE3C;;OAEG;IACH,oDAAwC,CAAA;IAExC;;OAEG;IACH,8CAAkC,CAAA;IAElC;;OAEG;IACH,kDAAsC,CAAA;IAEtC;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,uDAA2C,CAAA;IAC3C;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,6CAAiC,CAAA;IACjC;;OAEG;IACH,yDAA6C,CAAA;IAC7C;;OAEG;IACH,oEAAwD,CAAA;IACxD;;OAEG;IACH,sEAA0D,CAAA;AAC5D,CAAC,EAlGW,QAAQ,wBAAR,QAAQ,QAkGnB;AAEY,QAAA,cAAc,GAAG,GAAG,CAAC"}
|
package/lib/workflow/index.js
CHANGED
|
@@ -175,12 +175,13 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
175
175
|
return next(input);
|
|
176
176
|
return await (0, instrumentation_1.instrument)({
|
|
177
177
|
tracer: this.tracer,
|
|
178
|
-
spanName: `${definitions_1.SpanName.NEXUS_OPERATION_START}${definitions_1.SPAN_DELIMITER}${input.service}
|
|
178
|
+
spanName: `${definitions_1.SpanName.NEXUS_OPERATION_START}${definitions_1.SPAN_DELIMITER}${input.service}/${input.operation}`,
|
|
179
179
|
fn: async (span) => {
|
|
180
180
|
span.setAttribute(instrumentation_1.NEXUS_SERVICE_ATTR_KEY, input.service);
|
|
181
181
|
span.setAttribute(instrumentation_1.NEXUS_OPERATION_ATTR_KEY, input.operation);
|
|
182
182
|
span.setAttribute(instrumentation_1.NEXUS_ENDPOINT_ATTR_KEY, input.endpoint);
|
|
183
|
-
|
|
183
|
+
const headers = (0, instrumentation_1.nexusHeadersWithContext)(input.headers);
|
|
184
|
+
return await next({ ...input, headers });
|
|
184
185
|
},
|
|
185
186
|
});
|
|
186
187
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,qBAAmB,CAAC,uDAAuD;AAC3E,yDAA2C;AAC3C,uEAAyD;AAqBzD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@temporalio/interceptors-opentelemetry",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.1",
|
|
4
4
|
"description": "Temporal.io SDK interceptors bundle for tracing with opentelemetry",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -17,18 +17,19 @@
|
|
|
17
17
|
"@opentelemetry/core": "^1.25.1",
|
|
18
18
|
"@opentelemetry/resources": "^1.25.1",
|
|
19
19
|
"@opentelemetry/sdk-trace-base": "^1.25.1",
|
|
20
|
-
"@temporalio/plugin": "1.
|
|
20
|
+
"@temporalio/plugin": "1.16.1"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"
|
|
24
|
-
"@temporalio/
|
|
25
|
-
"@temporalio/
|
|
26
|
-
"@temporalio/
|
|
27
|
-
"@temporalio/
|
|
23
|
+
"nexus-rpc": "^0.0.2",
|
|
24
|
+
"@temporalio/activity": "1.16.1",
|
|
25
|
+
"@temporalio/common": "1.16.1",
|
|
26
|
+
"@temporalio/workflow": "1.16.1",
|
|
27
|
+
"@temporalio/worker": "1.16.1",
|
|
28
|
+
"@temporalio/client": "1.16.1"
|
|
28
29
|
},
|
|
29
30
|
"peerDependencies": {
|
|
30
|
-
"@temporalio/common": "1.
|
|
31
|
-
"@temporalio/workflow": "1.
|
|
31
|
+
"@temporalio/common": "1.16.1",
|
|
32
|
+
"@temporalio/workflow": "1.16.1"
|
|
32
33
|
},
|
|
33
34
|
"peerDependenciesMeta": {
|
|
34
35
|
"@temporalio/workflow": {
|
package/src/instrumentation.ts
CHANGED
|
@@ -43,6 +43,19 @@ export function extractContextFromHeaders(headers: Headers): otel.Context | unde
|
|
|
43
43
|
return otel.propagation.extract(otel.context.active(), textMap, otel.defaultTextMapGetter);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
/**
|
|
47
|
+
* If found, return an otel Context deserialized from the provided Nexus headers.
|
|
48
|
+
*
|
|
49
|
+
* Nexus headers are plain `Record<string, string>`, so we extract the context
|
|
50
|
+
* directly from the string map.
|
|
51
|
+
*/
|
|
52
|
+
export function extractContextFromNexusHeaders(headers: Record<string, string>): otel.Context | undefined {
|
|
53
|
+
if (Object.keys(headers).length === 0) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
return otel.propagation.extract(otel.context.active(), headers, otel.defaultTextMapGetter);
|
|
57
|
+
}
|
|
58
|
+
|
|
46
59
|
/**
|
|
47
60
|
* Given headers, return new headers with the current otel context inserted
|
|
48
61
|
*/
|
|
@@ -52,6 +65,15 @@ export function headersWithContext(headers: Headers): Headers {
|
|
|
52
65
|
return { ...headers, [TRACE_HEADER]: payloadConverter.toPayload(carrier) };
|
|
53
66
|
}
|
|
54
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Given Nexus headers, return new headers with the current otel context injected directly
|
|
70
|
+
*/
|
|
71
|
+
export function nexusHeadersWithContext(headers: Record<string, string>): Record<string, string> {
|
|
72
|
+
const carrier: Record<string, string> = {};
|
|
73
|
+
otel.propagation.inject(otel.context.active(), carrier, otel.defaultTextMapSetter);
|
|
74
|
+
return { ...headers, ...carrier };
|
|
75
|
+
}
|
|
76
|
+
|
|
55
77
|
async function wrapWithSpan<T>(
|
|
56
78
|
span: otel.Span,
|
|
57
79
|
fn: (span: otel.Span) => Promise<T>,
|
|
@@ -90,7 +112,8 @@ function maybeAddErrorToSpan(err: any, span: otel.Span, acceptableErrors?: (err:
|
|
|
90
112
|
const isBenignErr = err instanceof ApplicationFailure && err.category === ApplicationFailureCategory.BENIGN;
|
|
91
113
|
if (acceptableErrors === undefined || !acceptableErrors(err)) {
|
|
92
114
|
const statusCode = isBenignErr ? otel.SpanStatusCode.UNSET : otel.SpanStatusCode.ERROR;
|
|
93
|
-
|
|
115
|
+
const message = err != null && typeof err.message === 'string' ? err.message : String(err);
|
|
116
|
+
span.setStatus({ code: statusCode, message });
|
|
94
117
|
span.recordException(err);
|
|
95
118
|
} else {
|
|
96
119
|
span.setStatus({ code: otel.SpanStatusCode.OK });
|
package/src/plugin.ts
CHANGED
|
@@ -7,6 +7,8 @@ import {
|
|
|
7
7
|
makeWorkflowExporter,
|
|
8
8
|
OpenTelemetryActivityInboundInterceptor,
|
|
9
9
|
OpenTelemetryActivityOutboundInterceptor,
|
|
10
|
+
OpenTelemetryNexusInboundInterceptor,
|
|
11
|
+
OpenTelemetryNexusOutboundInterceptor,
|
|
10
12
|
} from './worker';
|
|
11
13
|
import { OpenTelemetrySinks } from './workflow';
|
|
12
14
|
|
|
@@ -50,6 +52,12 @@ export class OpenTelemetryPlugin extends SimplePlugin {
|
|
|
50
52
|
outbound: new OpenTelemetryActivityOutboundInterceptor(ctx),
|
|
51
53
|
}),
|
|
52
54
|
],
|
|
55
|
+
nexus: [
|
|
56
|
+
(ctx) => ({
|
|
57
|
+
inbound: new OpenTelemetryNexusInboundInterceptor(ctx, interceptorOptions),
|
|
58
|
+
outbound: new OpenTelemetryNexusOutboundInterceptor(ctx),
|
|
59
|
+
}),
|
|
60
|
+
],
|
|
53
61
|
},
|
|
54
62
|
});
|
|
55
63
|
}
|
package/src/worker/index.ts
CHANGED
|
@@ -2,11 +2,18 @@ import * as otel from '@opentelemetry/api';
|
|
|
2
2
|
import { createTraceState } from '@opentelemetry/api';
|
|
3
3
|
import type { Resource } from '@opentelemetry/resources';
|
|
4
4
|
import type { ReadableSpan, SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
5
|
+
import type * as nexus from 'nexus-rpc';
|
|
5
6
|
import type { Context as ActivityContext } from '@temporalio/activity';
|
|
7
|
+
import { CompleteAsyncError } from '@temporalio/common';
|
|
6
8
|
import type {
|
|
7
9
|
Next,
|
|
8
10
|
ActivityInboundCallsInterceptor,
|
|
9
11
|
ActivityOutboundCallsInterceptor,
|
|
12
|
+
NexusInboundCallsInterceptor,
|
|
13
|
+
NexusOutboundCallsInterceptor,
|
|
14
|
+
NexusStartOperationInput,
|
|
15
|
+
NexusStartOperationOutput,
|
|
16
|
+
NexusCancelOperationInput,
|
|
10
17
|
InjectedSink,
|
|
11
18
|
GetLogAttributesInput,
|
|
12
19
|
GetMetricTagsInput,
|
|
@@ -15,9 +22,12 @@ import type {
|
|
|
15
22
|
import {
|
|
16
23
|
instrument,
|
|
17
24
|
extractContextFromHeaders,
|
|
25
|
+
extractContextFromNexusHeaders,
|
|
18
26
|
WORKFLOW_ID_ATTR_KEY,
|
|
19
27
|
RUN_ID_ATTR_KEY,
|
|
20
28
|
ACTIVITY_ID_ATTR_KEY,
|
|
29
|
+
NEXUS_SERVICE_ATTR_KEY,
|
|
30
|
+
NEXUS_OPERATION_ATTR_KEY,
|
|
21
31
|
} from '../instrumentation';
|
|
22
32
|
import {
|
|
23
33
|
type OpenTelemetryWorkflowExporter,
|
|
@@ -59,6 +69,7 @@ export class OpenTelemetryActivityInboundInterceptor implements ActivityInboundC
|
|
|
59
69
|
return next(input);
|
|
60
70
|
},
|
|
61
71
|
context,
|
|
72
|
+
acceptableErrors: (err) => err instanceof CompleteAsyncError,
|
|
62
73
|
});
|
|
63
74
|
}
|
|
64
75
|
}
|
|
@@ -108,6 +119,104 @@ export class OpenTelemetryActivityOutboundInterceptor implements ActivityOutboun
|
|
|
108
119
|
}
|
|
109
120
|
}
|
|
110
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Intercepts inbound Nexus Operation calls on the worker.
|
|
124
|
+
*
|
|
125
|
+
* Wraps `startOperation` and `cancelOperation` in opentelemetry Spans, linking to a parent Span context
|
|
126
|
+
* if one is provided in the Nexus request headers.
|
|
127
|
+
*/
|
|
128
|
+
export class OpenTelemetryNexusInboundInterceptor implements NexusInboundCallsInterceptor {
|
|
129
|
+
protected readonly tracer: otel.Tracer;
|
|
130
|
+
|
|
131
|
+
constructor(
|
|
132
|
+
protected readonly ctx: nexus.OperationContext,
|
|
133
|
+
options?: InterceptorOptions
|
|
134
|
+
) {
|
|
135
|
+
this.tracer = options?.tracer ?? otel.trace.getTracer('@temporalio/interceptor-nexus');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async startOperation(
|
|
139
|
+
input: NexusStartOperationInput,
|
|
140
|
+
next: Next<NexusInboundCallsInterceptor, 'startOperation'>
|
|
141
|
+
): Promise<NexusStartOperationOutput> {
|
|
142
|
+
const context = extractContextFromNexusHeaders(input.ctx.headers);
|
|
143
|
+
const spanName = `${SpanName.NEXUS_START_OPERATION_EXECUTE}${SPAN_DELIMITER}${input.ctx.service}/${input.ctx.operation}`;
|
|
144
|
+
return await instrument({
|
|
145
|
+
tracer: this.tracer,
|
|
146
|
+
spanName,
|
|
147
|
+
fn: (span) => {
|
|
148
|
+
span.setAttribute(NEXUS_SERVICE_ATTR_KEY, input.ctx.service);
|
|
149
|
+
span.setAttribute(NEXUS_OPERATION_ATTR_KEY, input.ctx.operation);
|
|
150
|
+
return next(input);
|
|
151
|
+
},
|
|
152
|
+
context,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async cancelOperation(
|
|
157
|
+
input: NexusCancelOperationInput,
|
|
158
|
+
next: Next<NexusInboundCallsInterceptor, 'cancelOperation'>
|
|
159
|
+
): Promise<void> {
|
|
160
|
+
const context = extractContextFromNexusHeaders(input.ctx.headers);
|
|
161
|
+
const spanName = `${SpanName.NEXUS_CANCEL_OPERATION_EXECUTE}${SPAN_DELIMITER}${input.ctx.service}/${input.ctx.operation}`;
|
|
162
|
+
return await instrument({
|
|
163
|
+
tracer: this.tracer,
|
|
164
|
+
spanName,
|
|
165
|
+
fn: (span) => {
|
|
166
|
+
span.setAttribute(NEXUS_SERVICE_ATTR_KEY, input.ctx.service);
|
|
167
|
+
span.setAttribute(NEXUS_OPERATION_ATTR_KEY, input.ctx.operation);
|
|
168
|
+
return next(input);
|
|
169
|
+
},
|
|
170
|
+
context,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Intercepts outbound calls from a Nexus Operation handler.
|
|
177
|
+
*
|
|
178
|
+
* Attaches OpenTelemetry context tracing attributes to emitted log messages and metrics.
|
|
179
|
+
*/
|
|
180
|
+
export class OpenTelemetryNexusOutboundInterceptor implements NexusOutboundCallsInterceptor {
|
|
181
|
+
constructor(protected readonly ctx: nexus.OperationContext) {}
|
|
182
|
+
|
|
183
|
+
public getLogAttributes(
|
|
184
|
+
input: GetLogAttributesInput,
|
|
185
|
+
next: Next<NexusOutboundCallsInterceptor, 'getLogAttributes'>
|
|
186
|
+
): Record<string, unknown> {
|
|
187
|
+
const span = otel.trace.getSpan(otel.context.active());
|
|
188
|
+
const spanContext = span?.spanContext();
|
|
189
|
+
if (spanContext && otel.isSpanContextValid(spanContext)) {
|
|
190
|
+
return next({
|
|
191
|
+
trace_id: spanContext.traceId,
|
|
192
|
+
span_id: spanContext.spanId,
|
|
193
|
+
trace_flags: `0${spanContext.traceFlags.toString(16)}`,
|
|
194
|
+
...input,
|
|
195
|
+
});
|
|
196
|
+
} else {
|
|
197
|
+
return next(input);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
public getMetricTags(
|
|
202
|
+
input: GetMetricTagsInput,
|
|
203
|
+
next: Next<NexusOutboundCallsInterceptor, 'getMetricTags'>
|
|
204
|
+
): GetMetricTagsInput {
|
|
205
|
+
const span = otel.trace.getSpan(otel.context.active());
|
|
206
|
+
const spanContext = span?.spanContext();
|
|
207
|
+
if (spanContext && otel.isSpanContextValid(spanContext)) {
|
|
208
|
+
return next({
|
|
209
|
+
trace_id: spanContext.traceId,
|
|
210
|
+
span_id: spanContext.spanId,
|
|
211
|
+
trace_flags: `0${spanContext.traceFlags.toString(16)}`,
|
|
212
|
+
...input,
|
|
213
|
+
});
|
|
214
|
+
} else {
|
|
215
|
+
return next(input);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
111
220
|
/**
|
|
112
221
|
* Takes an opentelemetry SpanExporter and turns it into an injected Workflow span exporter sink
|
|
113
222
|
*
|
|
@@ -133,6 +133,14 @@ export enum SpanName {
|
|
|
133
133
|
* Nexus operation is started
|
|
134
134
|
*/
|
|
135
135
|
NEXUS_OPERATION_START = 'StartNexusOperation',
|
|
136
|
+
/**
|
|
137
|
+
* Nexus operation is executing
|
|
138
|
+
*/
|
|
139
|
+
NEXUS_START_OPERATION_EXECUTE = 'RunStartNexusOperation',
|
|
140
|
+
/**
|
|
141
|
+
* Nexus operation cancel is executing
|
|
142
|
+
*/
|
|
143
|
+
NEXUS_CANCEL_OPERATION_EXECUTE = 'RunCancelNexusOperation',
|
|
136
144
|
}
|
|
137
145
|
|
|
138
146
|
export const SPAN_DELIMITER = ':';
|
package/src/workflow/index.ts
CHANGED
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
instrumentSync,
|
|
28
28
|
extractContextFromHeaders,
|
|
29
29
|
headersWithContext,
|
|
30
|
+
nexusHeadersWithContext,
|
|
30
31
|
UPDATE_ID_ATTR_KEY,
|
|
31
32
|
NEXUS_SERVICE_ATTR_KEY,
|
|
32
33
|
NEXUS_OPERATION_ATTR_KEY,
|
|
@@ -210,12 +211,13 @@ export class OpenTelemetryOutboundInterceptor implements WorkflowOutboundCallsIn
|
|
|
210
211
|
|
|
211
212
|
return await instrument({
|
|
212
213
|
tracer: this.tracer,
|
|
213
|
-
spanName: `${SpanName.NEXUS_OPERATION_START}${SPAN_DELIMITER}${input.service}
|
|
214
|
+
spanName: `${SpanName.NEXUS_OPERATION_START}${SPAN_DELIMITER}${input.service}/${input.operation}`,
|
|
214
215
|
fn: async (span) => {
|
|
215
216
|
span.setAttribute(NEXUS_SERVICE_ATTR_KEY, input.service);
|
|
216
217
|
span.setAttribute(NEXUS_OPERATION_ATTR_KEY, input.operation);
|
|
217
218
|
span.setAttribute(NEXUS_ENDPOINT_ATTR_KEY, input.endpoint);
|
|
218
|
-
|
|
219
|
+
const headers = nexusHeadersWithContext(input.headers);
|
|
220
|
+
return await next({ ...input, headers });
|
|
219
221
|
},
|
|
220
222
|
});
|
|
221
223
|
}
|