@temporalio/interceptors-opentelemetry 1.14.2-canary-release-testing.0 → 1.15.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/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/plugin.d.ts +31 -0
- package/lib/plugin.js +60 -0
- package/lib/plugin.js.map +1 -0
- package/lib/worker/index.d.ts +10 -2
- package/lib/worker/index.js +19 -7
- package/lib/worker/index.js.map +1 -1
- package/lib/workflow/context-manager.js +0 -1
- package/lib/workflow/context-manager.js.map +1 -1
- package/lib/workflow/definitions.d.ts +7 -1
- package/lib/workflow/definitions.js.map +1 -1
- package/lib/workflow/index.js +0 -1
- package/lib/workflow/index.js.map +1 -1
- package/lib/workflow/span-exporter.js +9 -1
- package/lib/workflow/span-exporter.js.map +1 -1
- package/lib/workflow-interceptors.d.ts +3 -0
- package/lib/workflow-interceptors.js +12 -0
- package/lib/workflow-interceptors.js.map +1 -0
- package/package.json +11 -10
- package/src/index.ts +1 -0
- package/src/plugin.ts +77 -0
- package/src/worker/index.ts +40 -5
- package/src/workflow/context-manager.ts +1 -1
- package/src/workflow/definitions.ts +8 -3
- package/src/workflow/index.ts +0 -1
- package/src/workflow/span-exporter.ts +10 -2
- package/src/workflow-interceptors.ts +14 -0
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -24,6 +24,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.OpenTelemetryWorkflowClientCallsInterceptor = exports.OpenTelemetryWorkflowClientInterceptor = void 0;
|
|
27
|
+
__exportStar(require("./plugin"), exports);
|
|
27
28
|
__exportStar(require("./workflow"), exports);
|
|
28
29
|
__exportStar(require("./worker"), exports);
|
|
29
30
|
var client_1 = require("./client");
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;AAEH,6CAA2B;AAC3B,2CAAyB;AACzB,mCAIkB;AAHhB,gIAAA,sCAAsC,OAAA;AACtC,qEAAqE;AACrE,qIAAA,sCAAsC,OAA+C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,6CAA2B;AAC3B,2CAAyB;AACzB,mCAIkB;AAHhB,gIAAA,sCAAsC,OAAA;AACtC,qEAAqE;AACrE,qIAAA,sCAAsC,OAA+C"}
|
package/lib/plugin.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
2
|
+
import { Resource } from '@opentelemetry/resources';
|
|
3
|
+
import { SimplePlugin } from '@temporalio/plugin';
|
|
4
|
+
import { ReplayWorkerOptions, WorkerOptions } from '@temporalio/worker';
|
|
5
|
+
import { InterceptorOptions } from './client';
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for {@link OpenTelemetryPlugin}.
|
|
8
|
+
*
|
|
9
|
+
* @experimental Plugins is an experimental feature; APIs may change without notice.
|
|
10
|
+
*/
|
|
11
|
+
export interface OpenTelemetryPluginOptions extends InterceptorOptions {
|
|
12
|
+
/** OpenTelemetry resource attributes to attach to exported spans */
|
|
13
|
+
readonly resource: Resource;
|
|
14
|
+
/** Exporter used to send spans to a tracing backend */
|
|
15
|
+
readonly spanProcessor: SpanProcessor;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A plugin that adds OpenTelemetry tracing.
|
|
19
|
+
*
|
|
20
|
+
* Configures Client, Activity, and Workflow interceptors for trace propagation and injects
|
|
21
|
+
* a span exporter sink for Workflow spans.
|
|
22
|
+
*
|
|
23
|
+
* @experimental Plugins is an experimental feature; APIs may change without notice.
|
|
24
|
+
*/
|
|
25
|
+
export declare class OpenTelemetryPlugin extends SimplePlugin {
|
|
26
|
+
readonly otelOptions: OpenTelemetryPluginOptions;
|
|
27
|
+
constructor(otelOptions: OpenTelemetryPluginOptions);
|
|
28
|
+
configureWorker(options: WorkerOptions): WorkerOptions;
|
|
29
|
+
configureReplayWorker(options: ReplayWorkerOptions): ReplayWorkerOptions;
|
|
30
|
+
private injectSinks;
|
|
31
|
+
}
|
package/lib/plugin.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenTelemetryPlugin = void 0;
|
|
4
|
+
const plugin_1 = require("@temporalio/plugin");
|
|
5
|
+
const client_1 = require("./client");
|
|
6
|
+
const worker_1 = require("./worker");
|
|
7
|
+
/**
|
|
8
|
+
* A plugin that adds OpenTelemetry tracing.
|
|
9
|
+
*
|
|
10
|
+
* Configures Client, Activity, and Workflow interceptors for trace propagation and injects
|
|
11
|
+
* a span exporter sink for Workflow spans.
|
|
12
|
+
*
|
|
13
|
+
* @experimental Plugins is an experimental feature; APIs may change without notice.
|
|
14
|
+
*/
|
|
15
|
+
class OpenTelemetryPlugin extends plugin_1.SimplePlugin {
|
|
16
|
+
otelOptions;
|
|
17
|
+
constructor(otelOptions) {
|
|
18
|
+
const workflowInterceptorsPath = require.resolve('./workflow-interceptors');
|
|
19
|
+
const interceptorOptions = otelOptions.tracer ? { tracer: otelOptions.tracer } : {};
|
|
20
|
+
super({
|
|
21
|
+
name: 'OpenTelemetryPlugin',
|
|
22
|
+
clientInterceptors: {
|
|
23
|
+
workflow: [new client_1.OpenTelemetryWorkflowClientInterceptor(interceptorOptions)],
|
|
24
|
+
},
|
|
25
|
+
workerInterceptors: {
|
|
26
|
+
client: {
|
|
27
|
+
workflow: [new client_1.OpenTelemetryWorkflowClientInterceptor(interceptorOptions)],
|
|
28
|
+
},
|
|
29
|
+
workflowModules: [workflowInterceptorsPath],
|
|
30
|
+
activity: [
|
|
31
|
+
(ctx) => ({
|
|
32
|
+
inbound: new worker_1.OpenTelemetryActivityInboundInterceptor(ctx, interceptorOptions),
|
|
33
|
+
outbound: new worker_1.OpenTelemetryActivityOutboundInterceptor(ctx),
|
|
34
|
+
}),
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
this.otelOptions = otelOptions;
|
|
39
|
+
}
|
|
40
|
+
configureWorker(options) {
|
|
41
|
+
return super.configureWorker(this.injectSinks(options));
|
|
42
|
+
}
|
|
43
|
+
configureReplayWorker(options) {
|
|
44
|
+
return super.configureReplayWorker(this.injectSinks(options));
|
|
45
|
+
}
|
|
46
|
+
injectSinks(options) {
|
|
47
|
+
const sinks = {
|
|
48
|
+
exporter: (0, worker_1.makeWorkflowExporter)(this.otelOptions.spanProcessor, this.otelOptions.resource),
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
...options,
|
|
52
|
+
sinks: {
|
|
53
|
+
...options.sinks,
|
|
54
|
+
...sinks,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.OpenTelemetryPlugin = OpenTelemetryPlugin;
|
|
60
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;AAEA,+CAAkD;AAElD,qCAAsF;AACtF,qCAIkB;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;aACF;SACF,CAAC,CAAC;QApBgB,gBAAW,GAAX,WAAW,CAA4B;IAqB5D,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;AA5CD,kDA4CC"}
|
package/lib/worker/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as otel from '@opentelemetry/api';
|
|
2
2
|
import type { Resource } from '@opentelemetry/resources';
|
|
3
|
-
import type { SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
3
|
+
import type { SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
4
4
|
import type { Context as ActivityContext } from '@temporalio/activity';
|
|
5
5
|
import type { Next, ActivityInboundCallsInterceptor, ActivityOutboundCallsInterceptor, InjectedSink, GetLogAttributesInput, GetMetricTagsInput, ActivityExecuteInput } from '@temporalio/worker';
|
|
6
6
|
import { type OpenTelemetryWorkflowExporter } from '../workflow/definitions';
|
|
@@ -32,5 +32,13 @@ export declare class OpenTelemetryActivityOutboundInterceptor implements Activit
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Takes an opentelemetry SpanExporter and turns it into an injected Workflow span exporter sink
|
|
35
|
+
*
|
|
36
|
+
* @deprecated Do not directly pass a `SpanExporter`. Pass a `SpanProcessor` instead to ensure proper handling of async attributes.
|
|
37
|
+
*/
|
|
38
|
+
export declare function makeWorkflowExporter(spanExporter: SpanExporter, resource: Resource): InjectedSink<OpenTelemetryWorkflowExporter>;
|
|
39
|
+
/**
|
|
40
|
+
* Takes an opentelemetry SpanProcessor and turns it into an injected Workflow span exporter sink.
|
|
41
|
+
*
|
|
42
|
+
* For backward compatibility, passing a `SpanExporter` directly is still supported.
|
|
35
43
|
*/
|
|
36
|
-
export declare function makeWorkflowExporter(
|
|
44
|
+
export declare function makeWorkflowExporter(spanProcessor: SpanProcessor, resource: Resource): InjectedSink<OpenTelemetryWorkflowExporter>;
|
package/lib/worker/index.js
CHANGED
|
@@ -26,6 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.OpenTelemetryActivityOutboundInterceptor = exports.OpenTelemetryActivityInboundInterceptor = void 0;
|
|
27
27
|
exports.makeWorkflowExporter = makeWorkflowExporter;
|
|
28
28
|
const otel = __importStar(require("@opentelemetry/api"));
|
|
29
|
+
const api_1 = require("@opentelemetry/api");
|
|
29
30
|
const instrumentation_1 = require("../instrumentation");
|
|
30
31
|
const definitions_1 = require("../workflow/definitions");
|
|
31
32
|
/**
|
|
@@ -100,10 +101,8 @@ class OpenTelemetryActivityOutboundInterceptor {
|
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
exports.OpenTelemetryActivityOutboundInterceptor = OpenTelemetryActivityOutboundInterceptor;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
*/
|
|
106
|
-
function makeWorkflowExporter(exporter, resource) {
|
|
104
|
+
function makeWorkflowExporter(processorOrExporter, resource) {
|
|
105
|
+
const givenSpanProcessor = isSpanProcessor(processorOrExporter);
|
|
107
106
|
return {
|
|
108
107
|
export: {
|
|
109
108
|
fn: (info, spanData) => {
|
|
@@ -112,17 +111,30 @@ function makeWorkflowExporter(exporter, resource) {
|
|
|
112
111
|
// Spans are copied over from the isolate and are converted to ReadableSpan instances
|
|
113
112
|
return extractReadableSpan(serialized, resource);
|
|
114
113
|
});
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
if (givenSpanProcessor) {
|
|
115
|
+
spans.forEach((span) => processorOrExporter.onEnd(span));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// Ignore the export result for simplicity
|
|
119
|
+
processorOrExporter.export(spans, () => undefined);
|
|
120
|
+
}
|
|
117
121
|
},
|
|
118
122
|
},
|
|
119
123
|
};
|
|
120
124
|
}
|
|
125
|
+
function isSpanProcessor(obj) {
|
|
126
|
+
return 'onEnd' in obj && typeof obj.onEnd === 'function';
|
|
127
|
+
}
|
|
121
128
|
/**
|
|
122
129
|
* Deserialize a serialized span created by the Workflow isolate
|
|
123
130
|
*/
|
|
124
131
|
function extractReadableSpan(serializable, resource) {
|
|
125
|
-
const { spanContext, ...rest } = serializable;
|
|
132
|
+
const { spanContext: { traceState, ...restSpanContext }, ...rest } = serializable;
|
|
133
|
+
const spanContext = {
|
|
134
|
+
// Reconstruct the TraceState from the serialized string.
|
|
135
|
+
traceState: traceState ? (0, api_1.createTraceState)(traceState) : undefined,
|
|
136
|
+
...restSpanContext,
|
|
137
|
+
};
|
|
126
138
|
return {
|
|
127
139
|
spanContext() {
|
|
128
140
|
return spanContext;
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../src/workflow/context-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yDAA2C;AAE3C,MAAa,cAAc;IACzB,sEAAsE;IAC5D,OAAO,GAAoC,IAAK,UAAkB,CAAC,iBAAiB,EAAE,CAAC;IAEjG,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;IACtD,CAAC;IAED,IAAI,CAAI,OAAqB,EAAE,MAAS;QACtC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,SAAS,CAAC,2CAA2C,OAAO,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,8JAA8J;QAC9J,MAAM,cAAc,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,EAAE;YAC9C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC,CAAC;QACH;;;WAGG;
|
|
1
|
+
{"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../src/workflow/context-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yDAA2C;AAE3C,MAAa,cAAc;IACzB,sEAAsE;IAC5D,OAAO,GAAoC,IAAK,UAAkB,CAAC,iBAAiB,EAAE,CAAC;IAEjG,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;IACtD,CAAC;IAED,IAAI,CAAI,OAAqB,EAAE,MAAS;QACtC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,SAAS,CAAC,2CAA2C,OAAO,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,8JAA8J;QAC9J,MAAM,cAAc,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,EAAE;YAC9C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC,CAAC;QACH;;;WAGG;QAEH,OAAO,cAAqB,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,OAAqB,EACrB,EAAK,EACL,OAA8B,EAC9B,GAAG,IAAO;QAEV,MAAM,EAAE,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;CACF;AAjDD,wCAiDC"}
|
|
@@ -2,13 +2,19 @@ import * as otel from '@opentelemetry/api';
|
|
|
2
2
|
import * as tracing from '@opentelemetry/sdk-trace-base';
|
|
3
3
|
import { InstrumentationLibrary } from '@opentelemetry/core';
|
|
4
4
|
import type { Sink, Sinks } from '@temporalio/workflow';
|
|
5
|
+
/**
|
|
6
|
+
* Serializable version of SpanContext where traceState is converted to a string.
|
|
7
|
+
*/
|
|
8
|
+
export type SerializableSpanContext = Omit<otel.SpanContext, 'traceState'> & {
|
|
9
|
+
traceState?: string;
|
|
10
|
+
};
|
|
5
11
|
/**
|
|
6
12
|
* Serializable version of the opentelemetry Span for cross isolate copying
|
|
7
13
|
*/
|
|
8
14
|
export interface SerializableSpan {
|
|
9
15
|
readonly name: string;
|
|
10
16
|
readonly kind: otel.SpanKind;
|
|
11
|
-
readonly spanContext:
|
|
17
|
+
readonly spanContext: SerializableSpanContext;
|
|
12
18
|
readonly parentSpanId?: string;
|
|
13
19
|
readonly startTime: otel.HrTime;
|
|
14
20
|
readonly endTime: otel.HrTime;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/workflow/definitions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/workflow/definitions.ts"],"names":[],"mappings":";;;AA6CA,IAAY,QA0FX;AA1FD,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;AAC/C,CAAC,EA1FW,QAAQ,wBAAR,QAAQ,QA0FnB;AAEY,QAAA,cAAc,GAAG,GAAG,CAAC"}
|
package/lib/workflow/index.js
CHANGED
|
@@ -27,7 +27,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.OpenTelemetryInternalsInterceptor = exports.OpenTelemetryOutboundInterceptor = exports.OpenTelemetryInboundInterceptor = void 0;
|
|
30
|
-
/* eslint-disable import/order */
|
|
31
30
|
// eslint-disable-next-line import/no-unassigned-import
|
|
32
31
|
require("./runtime"); // Patch the Workflow isolate runtime for opentelemetry
|
|
33
32
|
const otel = __importStar(require("@opentelemetry/api"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,10 +16,18 @@ class SpanExporter {
|
|
|
16
16
|
// Nothing to shut down
|
|
17
17
|
}
|
|
18
18
|
makeSerializable(span) {
|
|
19
|
+
const { traceState, ...restSpanContext } = span.spanContext();
|
|
20
|
+
// Serialize traceState to a string because TraceState objects lose their
|
|
21
|
+
// prototype methods when crossing the V8 isolate boundary.
|
|
22
|
+
// See: https://github.com/temporalio/sdk-typescript/issues/1738
|
|
23
|
+
const serializableSpanContext = {
|
|
24
|
+
traceState: traceState?.serialize(),
|
|
25
|
+
...restSpanContext,
|
|
26
|
+
};
|
|
19
27
|
return {
|
|
20
28
|
name: span.name,
|
|
21
29
|
kind: span.kind,
|
|
22
|
-
spanContext:
|
|
30
|
+
spanContext: serializableSpanContext,
|
|
23
31
|
parentSpanId: span.parentSpanId,
|
|
24
32
|
startTime: span.startTime,
|
|
25
33
|
endTime: span.endTime,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-exporter.js","sourceRoot":"","sources":["../../src/workflow/span-exporter.ts"],"names":[],"mappings":";;;AACA,8CAAqE;AAErE,yDAAgD;AAEhD,MAAa,YAAY;IACf,QAAQ,CAAkC;IAE3C,MAAM,CAAC,KAA6B,EAAE,cAA8C;QACzF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAA,6BAAU,GAAsB,CAAC,QAAQ,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvE,cAAc,CAAC,EAAE,IAAI,EAAE,uBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,uBAAuB;IACzB,CAAC;IAEM,gBAAgB,CAAC,IAA0B;QAChD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"span-exporter.js","sourceRoot":"","sources":["../../src/workflow/span-exporter.ts"],"names":[],"mappings":";;;AACA,8CAAqE;AAErE,yDAAgD;AAEhD,MAAa,YAAY;IACf,QAAQ,CAAkC;IAE3C,MAAM,CAAC,KAA6B,EAAE,cAA8C;QACzF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAA,6BAAU,GAAsB,CAAC,QAAQ,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvE,cAAc,CAAC,EAAE,IAAI,EAAE,uBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,uBAAuB;IACzB,CAAC;IAEM,gBAAgB,CAAC,IAA0B;QAChD,MAAM,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9D,yEAAyE;QACzE,2DAA2D;QAC3D,gEAAgE;QAChE,MAAM,uBAAuB,GAA4B;YACvD,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE;YACnC,GAAG,eAAe;SACnB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,uBAAuB;YACpC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;SACpD,CAAC;IACJ,CAAC;CACF;AA3CD,oCA2CC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Not a workflow, just interceptors */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.interceptors = void 0;
|
|
5
|
+
const workflow_1 = require("./workflow");
|
|
6
|
+
const interceptors = () => ({
|
|
7
|
+
inbound: [new workflow_1.OpenTelemetryInboundInterceptor()],
|
|
8
|
+
outbound: [new workflow_1.OpenTelemetryOutboundInterceptor()],
|
|
9
|
+
internals: [new workflow_1.OpenTelemetryInternalsInterceptor()],
|
|
10
|
+
});
|
|
11
|
+
exports.interceptors = interceptors;
|
|
12
|
+
//# sourceMappingURL=workflow-interceptors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-interceptors.js","sourceRoot":"","sources":["../src/workflow-interceptors.ts"],"names":[],"mappings":";AAAA,wCAAwC;;;AAGxC,yCAIoB;AAEb,MAAM,YAAY,GAAG,GAAyB,EAAE,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,IAAI,0CAA+B,EAAE,CAAC;IAChD,QAAQ,EAAE,CAAC,IAAI,2CAAgC,EAAE,CAAC;IAClD,SAAS,EAAE,CAAC,IAAI,4CAAiC,EAAE,CAAC;CACrD,CAAC,CAAC;AAJU,QAAA,YAAY,gBAItB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@temporalio/interceptors-opentelemetry",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0",
|
|
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",
|
|
@@ -16,18 +16,19 @@
|
|
|
16
16
|
"@opentelemetry/api": "^1.9.0",
|
|
17
17
|
"@opentelemetry/core": "^1.25.1",
|
|
18
18
|
"@opentelemetry/resources": "^1.25.1",
|
|
19
|
-
"@opentelemetry/sdk-trace-base": "^1.25.1"
|
|
19
|
+
"@opentelemetry/sdk-trace-base": "^1.25.1",
|
|
20
|
+
"@temporalio/plugin": "1.15.0"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
22
|
-
"@temporalio/activity": "1.
|
|
23
|
-
"@temporalio/
|
|
24
|
-
"@temporalio/
|
|
25
|
-
"@temporalio/
|
|
26
|
-
"@temporalio/
|
|
23
|
+
"@temporalio/activity": "1.15.0",
|
|
24
|
+
"@temporalio/client": "1.15.0",
|
|
25
|
+
"@temporalio/worker": "1.15.0",
|
|
26
|
+
"@temporalio/common": "1.15.0",
|
|
27
|
+
"@temporalio/workflow": "1.15.0"
|
|
27
28
|
},
|
|
28
29
|
"peerDependencies": {
|
|
29
|
-
"@temporalio/common": "1.
|
|
30
|
-
"@temporalio/workflow": "1.
|
|
30
|
+
"@temporalio/common": "1.15.0",
|
|
31
|
+
"@temporalio/workflow": "1.15.0"
|
|
31
32
|
},
|
|
32
33
|
"peerDependenciesMeta": {
|
|
33
34
|
"@temporalio/workflow": {
|
|
@@ -47,7 +48,7 @@
|
|
|
47
48
|
"access": "public"
|
|
48
49
|
},
|
|
49
50
|
"engines": {
|
|
50
|
-
"node": ">=
|
|
51
|
+
"node": ">= 20.0.0"
|
|
51
52
|
},
|
|
52
53
|
"files": [
|
|
53
54
|
"src",
|
package/src/index.ts
CHANGED
package/src/plugin.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
2
|
+
import { Resource } from '@opentelemetry/resources';
|
|
3
|
+
import { SimplePlugin } from '@temporalio/plugin';
|
|
4
|
+
import { InjectedSinks, ReplayWorkerOptions, WorkerOptions } from '@temporalio/worker';
|
|
5
|
+
import { InterceptorOptions, OpenTelemetryWorkflowClientInterceptor } from './client';
|
|
6
|
+
import {
|
|
7
|
+
makeWorkflowExporter,
|
|
8
|
+
OpenTelemetryActivityInboundInterceptor,
|
|
9
|
+
OpenTelemetryActivityOutboundInterceptor,
|
|
10
|
+
} from './worker';
|
|
11
|
+
import { OpenTelemetrySinks } from './workflow';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Configuration options for {@link OpenTelemetryPlugin}.
|
|
15
|
+
*
|
|
16
|
+
* @experimental Plugins is an experimental feature; APIs may change without notice.
|
|
17
|
+
*/
|
|
18
|
+
export interface OpenTelemetryPluginOptions extends InterceptorOptions {
|
|
19
|
+
/** OpenTelemetry resource attributes to attach to exported spans */
|
|
20
|
+
readonly resource: Resource;
|
|
21
|
+
/** Exporter used to send spans to a tracing backend */
|
|
22
|
+
readonly spanProcessor: SpanProcessor;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A plugin that adds OpenTelemetry tracing.
|
|
27
|
+
*
|
|
28
|
+
* Configures Client, Activity, and Workflow interceptors for trace propagation and injects
|
|
29
|
+
* a span exporter sink for Workflow spans.
|
|
30
|
+
*
|
|
31
|
+
* @experimental Plugins is an experimental feature; APIs may change without notice.
|
|
32
|
+
*/
|
|
33
|
+
export class OpenTelemetryPlugin extends SimplePlugin {
|
|
34
|
+
constructor(readonly otelOptions: OpenTelemetryPluginOptions) {
|
|
35
|
+
const workflowInterceptorsPath = require.resolve('./workflow-interceptors');
|
|
36
|
+
const interceptorOptions = otelOptions.tracer ? { tracer: otelOptions.tracer } : {};
|
|
37
|
+
super({
|
|
38
|
+
name: 'OpenTelemetryPlugin',
|
|
39
|
+
clientInterceptors: {
|
|
40
|
+
workflow: [new OpenTelemetryWorkflowClientInterceptor(interceptorOptions)],
|
|
41
|
+
},
|
|
42
|
+
workerInterceptors: {
|
|
43
|
+
client: {
|
|
44
|
+
workflow: [new OpenTelemetryWorkflowClientInterceptor(interceptorOptions)],
|
|
45
|
+
},
|
|
46
|
+
workflowModules: [workflowInterceptorsPath],
|
|
47
|
+
activity: [
|
|
48
|
+
(ctx) => ({
|
|
49
|
+
inbound: new OpenTelemetryActivityInboundInterceptor(ctx, interceptorOptions),
|
|
50
|
+
outbound: new OpenTelemetryActivityOutboundInterceptor(ctx),
|
|
51
|
+
}),
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
configureWorker(options: WorkerOptions): WorkerOptions {
|
|
58
|
+
return super.configureWorker(this.injectSinks(options));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
configureReplayWorker(options: ReplayWorkerOptions): ReplayWorkerOptions {
|
|
62
|
+
return super.configureReplayWorker(this.injectSinks(options));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private injectSinks<T extends { sinks?: InjectedSinks<any> }>(options: T): T {
|
|
66
|
+
const sinks: InjectedSinks<OpenTelemetrySinks> = {
|
|
67
|
+
exporter: makeWorkflowExporter(this.otelOptions.spanProcessor, this.otelOptions.resource),
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
...options,
|
|
71
|
+
sinks: {
|
|
72
|
+
...options.sinks,
|
|
73
|
+
...sinks,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
package/src/worker/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as otel from '@opentelemetry/api';
|
|
2
|
+
import { createTraceState } from '@opentelemetry/api';
|
|
2
3
|
import type { Resource } from '@opentelemetry/resources';
|
|
3
|
-
import type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
4
|
+
import type { ReadableSpan, SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
4
5
|
import type { Context as ActivityContext } from '@temporalio/activity';
|
|
5
6
|
import type {
|
|
6
7
|
Next,
|
|
@@ -109,11 +110,28 @@ export class OpenTelemetryActivityOutboundInterceptor implements ActivityOutboun
|
|
|
109
110
|
|
|
110
111
|
/**
|
|
111
112
|
* Takes an opentelemetry SpanExporter and turns it into an injected Workflow span exporter sink
|
|
113
|
+
*
|
|
114
|
+
* @deprecated Do not directly pass a `SpanExporter`. Pass a `SpanProcessor` instead to ensure proper handling of async attributes.
|
|
112
115
|
*/
|
|
113
116
|
export function makeWorkflowExporter(
|
|
114
|
-
|
|
117
|
+
spanExporter: SpanExporter,
|
|
118
|
+
resource: Resource
|
|
119
|
+
): InjectedSink<OpenTelemetryWorkflowExporter>;
|
|
120
|
+
/**
|
|
121
|
+
* Takes an opentelemetry SpanProcessor and turns it into an injected Workflow span exporter sink.
|
|
122
|
+
*
|
|
123
|
+
* For backward compatibility, passing a `SpanExporter` directly is still supported.
|
|
124
|
+
*/
|
|
125
|
+
export function makeWorkflowExporter(
|
|
126
|
+
spanProcessor: SpanProcessor,
|
|
127
|
+
resource: Resource
|
|
128
|
+
): InjectedSink<OpenTelemetryWorkflowExporter>;
|
|
129
|
+
export function makeWorkflowExporter(
|
|
130
|
+
processorOrExporter: SpanProcessor | SpanExporter,
|
|
115
131
|
resource: Resource
|
|
116
132
|
): InjectedSink<OpenTelemetryWorkflowExporter> {
|
|
133
|
+
const givenSpanProcessor = isSpanProcessor(processorOrExporter);
|
|
134
|
+
|
|
117
135
|
return {
|
|
118
136
|
export: {
|
|
119
137
|
fn: (info, spanData) => {
|
|
@@ -122,18 +140,35 @@ export function makeWorkflowExporter(
|
|
|
122
140
|
// Spans are copied over from the isolate and are converted to ReadableSpan instances
|
|
123
141
|
return extractReadableSpan(serialized, resource);
|
|
124
142
|
});
|
|
125
|
-
|
|
126
|
-
|
|
143
|
+
|
|
144
|
+
if (givenSpanProcessor) {
|
|
145
|
+
spans.forEach((span) => processorOrExporter.onEnd(span));
|
|
146
|
+
} else {
|
|
147
|
+
// Ignore the export result for simplicity
|
|
148
|
+
processorOrExporter.export(spans, () => undefined);
|
|
149
|
+
}
|
|
127
150
|
},
|
|
128
151
|
},
|
|
129
152
|
};
|
|
130
153
|
}
|
|
131
154
|
|
|
155
|
+
function isSpanProcessor(obj: SpanProcessor | SpanExporter): obj is SpanProcessor {
|
|
156
|
+
return 'onEnd' in obj && typeof obj.onEnd === 'function';
|
|
157
|
+
}
|
|
158
|
+
|
|
132
159
|
/**
|
|
133
160
|
* Deserialize a serialized span created by the Workflow isolate
|
|
134
161
|
*/
|
|
135
162
|
function extractReadableSpan(serializable: SerializableSpan, resource: Resource): ReadableSpan {
|
|
136
|
-
const {
|
|
163
|
+
const {
|
|
164
|
+
spanContext: { traceState, ...restSpanContext },
|
|
165
|
+
...rest
|
|
166
|
+
} = serializable;
|
|
167
|
+
const spanContext: otel.SpanContext = {
|
|
168
|
+
// Reconstruct the TraceState from the serialized string.
|
|
169
|
+
traceState: traceState ? createTraceState(traceState) : undefined,
|
|
170
|
+
...restSpanContext,
|
|
171
|
+
};
|
|
137
172
|
return {
|
|
138
173
|
spanContext() {
|
|
139
174
|
return spanContext;
|
|
@@ -28,7 +28,7 @@ export class ContextManager implements otel.ContextManager {
|
|
|
28
28
|
* It isn't possible to tell Typescript that contextWrapper is the same as T
|
|
29
29
|
* so we forced to cast as any here.
|
|
30
30
|
*/
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
return contextWrapper as any;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import * as otel from '@opentelemetry/api';
|
|
2
2
|
import * as tracing from '@opentelemetry/sdk-trace-base';
|
|
3
|
-
import { InstrumentationLibrary } from '@opentelemetry/core'; // eslint-disable
|
|
3
|
+
import { InstrumentationLibrary } from '@opentelemetry/core'; // eslint-disable @typescript-eslint/no-deprecated
|
|
4
4
|
import type { Sink, Sinks } from '@temporalio/workflow';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Serializable version of SpanContext where traceState is converted to a string.
|
|
8
|
+
*/
|
|
9
|
+
export type SerializableSpanContext = Omit<otel.SpanContext, 'traceState'> & { traceState?: string };
|
|
10
|
+
|
|
6
11
|
/**
|
|
7
12
|
* Serializable version of the opentelemetry Span for cross isolate copying
|
|
8
13
|
*/
|
|
9
14
|
export interface SerializableSpan {
|
|
10
15
|
readonly name: string;
|
|
11
16
|
readonly kind: otel.SpanKind;
|
|
12
|
-
readonly spanContext:
|
|
17
|
+
readonly spanContext: SerializableSpanContext;
|
|
13
18
|
readonly parentSpanId?: string;
|
|
14
19
|
readonly startTime: otel.HrTime;
|
|
15
20
|
readonly endTime: otel.HrTime;
|
|
@@ -23,7 +28,7 @@ export interface SerializableSpan {
|
|
|
23
28
|
readonly droppedLinksCount: number;
|
|
24
29
|
readonly droppedEventsCount: number;
|
|
25
30
|
// readonly resource: Resource;
|
|
26
|
-
// eslint-disable-next-line
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
27
32
|
readonly instrumentationLibrary: InstrumentationLibrary;
|
|
28
33
|
}
|
|
29
34
|
|
package/src/workflow/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as tracing from '@opentelemetry/sdk-trace-base';
|
|
2
2
|
import { ExportResult, ExportResultCode } from '@opentelemetry/core';
|
|
3
|
-
import { OpenTelemetrySinks, SerializableSpan } from './definitions';
|
|
3
|
+
import { OpenTelemetrySinks, SerializableSpan, SerializableSpanContext } from './definitions';
|
|
4
4
|
import { proxySinks } from './workflow-imports';
|
|
5
5
|
|
|
6
6
|
export class SpanExporter implements tracing.SpanExporter {
|
|
@@ -19,10 +19,18 @@ export class SpanExporter implements tracing.SpanExporter {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
public makeSerializable(span: tracing.ReadableSpan): SerializableSpan {
|
|
22
|
+
const { traceState, ...restSpanContext } = span.spanContext();
|
|
23
|
+
// Serialize traceState to a string because TraceState objects lose their
|
|
24
|
+
// prototype methods when crossing the V8 isolate boundary.
|
|
25
|
+
// See: https://github.com/temporalio/sdk-typescript/issues/1738
|
|
26
|
+
const serializableSpanContext: SerializableSpanContext = {
|
|
27
|
+
traceState: traceState?.serialize(),
|
|
28
|
+
...restSpanContext,
|
|
29
|
+
};
|
|
22
30
|
return {
|
|
23
31
|
name: span.name,
|
|
24
32
|
kind: span.kind,
|
|
25
|
-
spanContext:
|
|
33
|
+
spanContext: serializableSpanContext,
|
|
26
34
|
parentSpanId: span.parentSpanId,
|
|
27
35
|
startTime: span.startTime,
|
|
28
36
|
endTime: span.endTime,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Not a workflow, just interceptors */
|
|
2
|
+
|
|
3
|
+
import type { WorkflowInterceptors } from '@temporalio/workflow';
|
|
4
|
+
import {
|
|
5
|
+
OpenTelemetryInboundInterceptor,
|
|
6
|
+
OpenTelemetryOutboundInterceptor,
|
|
7
|
+
OpenTelemetryInternalsInterceptor,
|
|
8
|
+
} from './workflow';
|
|
9
|
+
|
|
10
|
+
export const interceptors = (): WorkflowInterceptors => ({
|
|
11
|
+
inbound: [new OpenTelemetryInboundInterceptor()],
|
|
12
|
+
outbound: [new OpenTelemetryOutboundInterceptor()],
|
|
13
|
+
internals: [new OpenTelemetryInternalsInterceptor()],
|
|
14
|
+
});
|