@temporalio/interceptors-opentelemetry 1.8.5 → 1.9.0-rc.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/client/index.js +2 -3
- package/lib/client/index.js.map +1 -1
- package/lib/instrumentation.d.ts +13 -0
- package/lib/instrumentation.js +28 -1
- package/lib/instrumentation.js.map +1 -1
- package/lib/worker/index.js +1 -2
- package/lib/worker/index.js.map +1 -1
- package/lib/workflow/index.js +4 -5
- package/lib/workflow/index.js.map +1 -1
- package/package.json +7 -7
- package/src/client/index.ts +1 -2
- package/src/instrumentation.ts +30 -0
- package/src/worker/index.ts +1 -2
- package/src/workflow/index.ts +1 -2
package/lib/client/index.js
CHANGED
|
@@ -25,7 +25,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.OpenTelemetryWorkflowClientInterceptor = void 0;
|
|
27
27
|
const otel = __importStar(require("@opentelemetry/api"));
|
|
28
|
-
const otel_1 = require("@temporalio/common/lib/otel");
|
|
29
28
|
const instrumentation_1 = require("../instrumentation");
|
|
30
29
|
const workflow_1 = require("../workflow");
|
|
31
30
|
/**
|
|
@@ -42,9 +41,9 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
42
41
|
tracer: this.tracer,
|
|
43
42
|
spanName: `${workflow_1.SpanName.WORKFLOW_START}${workflow_1.SPAN_DELIMITER}${input.workflowType}`,
|
|
44
43
|
fn: async (span) => {
|
|
45
|
-
const headers = await (0,
|
|
44
|
+
const headers = await (0, instrumentation_1.headersWithContext)(input.headers);
|
|
46
45
|
const runId = await next({ ...input, headers });
|
|
47
|
-
span.setAttribute(
|
|
46
|
+
span.setAttribute(instrumentation_1.RUN_ID_ATTR_KEY, runId);
|
|
48
47
|
return runId;
|
|
49
48
|
},
|
|
50
49
|
});
|
package/lib/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAE3C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAE3C,wDAAqF;AACrF,0CAAuD;AAMvD;;;;GAIG;AACH,MAAa,sCAAsC;IAGjD,YAAY,OAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAyB,EAAE,IAA8C;QACnF,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,GAAG,mBAAQ,CAAC,cAAc,GAAG,yBAAc,GAAG,KAAK,CAAC,YAAY,EAAE;YAC5E,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBAChD,IAAI,CAAC,YAAY,CAAC,iCAAe,EAAE,KAAK,CAAC,CAAC;gBAC1C,OAAO,KAAK,CAAC;YACf,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAnBD,wFAmBC"}
|
package/lib/instrumentation.d.ts
CHANGED
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
* @module
|
|
4
4
|
*/
|
|
5
5
|
import * as otel from '@opentelemetry/api';
|
|
6
|
+
import { Headers } from '@temporalio/common';
|
|
7
|
+
/** Default trace header for opentelemetry interceptors */
|
|
8
|
+
export declare const TRACE_HEADER = "_tracer-data";
|
|
9
|
+
/** As in workflow run id */
|
|
10
|
+
export declare const RUN_ID_ATTR_KEY = "run_id";
|
|
11
|
+
/**
|
|
12
|
+
* If found, return an otel Context deserialized from the provided headers
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractContextFromHeaders(headers: Headers): Promise<otel.Context | undefined>;
|
|
15
|
+
/**
|
|
16
|
+
* Given headers, return new headers with the current otel context inserted
|
|
17
|
+
*/
|
|
18
|
+
export declare function headersWithContext(headers: Headers): Promise<Headers>;
|
|
6
19
|
export interface InstrumentOptions<T> {
|
|
7
20
|
tracer: otel.Tracer;
|
|
8
21
|
spanName: string;
|
package/lib/instrumentation.js
CHANGED
|
@@ -23,12 +23,39 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.instrument = void 0;
|
|
26
|
+
exports.instrument = exports.headersWithContext = exports.extractContextFromHeaders = exports.RUN_ID_ATTR_KEY = exports.TRACE_HEADER = void 0;
|
|
27
27
|
/**
|
|
28
28
|
* opentelemetry instrumentation helper functions
|
|
29
29
|
* @module
|
|
30
30
|
*/
|
|
31
31
|
const otel = __importStar(require("@opentelemetry/api"));
|
|
32
|
+
const common_1 = require("@temporalio/common");
|
|
33
|
+
/** Default trace header for opentelemetry interceptors */
|
|
34
|
+
exports.TRACE_HEADER = '_tracer-data';
|
|
35
|
+
/** As in workflow run id */
|
|
36
|
+
exports.RUN_ID_ATTR_KEY = 'run_id';
|
|
37
|
+
const payloadConverter = common_1.defaultPayloadConverter;
|
|
38
|
+
/**
|
|
39
|
+
* If found, return an otel Context deserialized from the provided headers
|
|
40
|
+
*/
|
|
41
|
+
async function extractContextFromHeaders(headers) {
|
|
42
|
+
const encodedSpanContext = headers[exports.TRACE_HEADER];
|
|
43
|
+
if (encodedSpanContext === undefined) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const textMap = payloadConverter.fromPayload(encodedSpanContext);
|
|
47
|
+
return otel.propagation.extract(otel.context.active(), textMap, otel.defaultTextMapGetter);
|
|
48
|
+
}
|
|
49
|
+
exports.extractContextFromHeaders = extractContextFromHeaders;
|
|
50
|
+
/**
|
|
51
|
+
* Given headers, return new headers with the current otel context inserted
|
|
52
|
+
*/
|
|
53
|
+
async function headersWithContext(headers) {
|
|
54
|
+
const carrier = {};
|
|
55
|
+
otel.propagation.inject(otel.context.active(), carrier, otel.defaultTextMapSetter);
|
|
56
|
+
return { ...headers, [exports.TRACE_HEADER]: payloadConverter.toPayload(carrier) };
|
|
57
|
+
}
|
|
58
|
+
exports.headersWithContext = headersWithContext;
|
|
32
59
|
async function wrapWithSpan(span, fn, acceptableErrors) {
|
|
33
60
|
try {
|
|
34
61
|
const ret = await fn(span);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,yDAA2C;
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,yDAA2C;AAC3C,+CAAsE;AAEtE,0DAA0D;AAC7C,QAAA,YAAY,GAAG,cAAc,CAAC;AAC3C,4BAA4B;AACf,QAAA,eAAe,GAAG,QAAQ,CAAC;AAExC,MAAM,gBAAgB,GAAG,gCAAuB,CAAC;AAEjD;;GAEG;AACI,KAAK,UAAU,yBAAyB,CAAC,OAAgB;IAC9D,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAY,CAAC,CAAC;IACjD,IAAI,kBAAkB,KAAK,SAAS,EAAE;QACpC,OAAO,SAAS,CAAC;KAClB;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;AAPD,8DAOC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,OAAgB;IACvD,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;AAJD,gDAIC;AAED,KAAK,UAAU,YAAY,CACzB,IAAe,EACf,EAAmC,EACnC,gBAA4C;IAE5C,IAAI;QACF,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;KACZ;IAAC,OAAO,GAAQ,EAAE;QACjB,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;YAC5D,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;SAC3B;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;SAClD;QACD,MAAM,GAAG,CAAC;KACX;YAAS;QACR,IAAI,CAAC,GAAG,EAAE,CAAC;KACZ;AACH,CAAC;AAUD;;GAEG;AACI,KAAK,UAAU,UAAU,CAAI,EAClC,MAAM,EACN,QAAQ,EACR,EAAE,EACF,OAAO,EACP,gBAAgB,GACK;IACrB,IAAI,OAAO,EAAE;QACX,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;KACJ;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;AAbD,gCAaC"}
|
package/lib/worker/index.js
CHANGED
|
@@ -25,7 +25,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.makeWorkflowExporter = exports.OpenTelemetryActivityInboundInterceptor = void 0;
|
|
27
27
|
const otel = __importStar(require("@opentelemetry/api"));
|
|
28
|
-
const otel_1 = require("@temporalio/common/lib/otel");
|
|
29
28
|
const instrumentation_1 = require("../instrumentation");
|
|
30
29
|
const workflow_1 = require("../workflow");
|
|
31
30
|
/**
|
|
@@ -40,7 +39,7 @@ class OpenTelemetryActivityInboundInterceptor {
|
|
|
40
39
|
this.tracer = options?.tracer ?? otel.trace.getTracer('@temporalio/interceptor-activity');
|
|
41
40
|
}
|
|
42
41
|
async execute(input, next) {
|
|
43
|
-
const context = await (0,
|
|
42
|
+
const context = await (0, instrumentation_1.extractContextFromHeaders)(input.headers);
|
|
44
43
|
const spanName = `${workflow_1.SpanName.ACTIVITY_EXECUTE}${workflow_1.SPAN_DELIMITER}${this.ctx.info.activityType}`;
|
|
45
44
|
return await (0, instrumentation_1.instrument)({ tracer: this.tracer, spanName, fn: () => next(input), context });
|
|
46
45
|
}
|
package/lib/worker/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAK3C,wDAA2E;AAC3E,0CAAwG;AAMxG;;;;;GAKG;AACH,MAAa,uCAAuC;IAGlD,YAA+B,GAAoB,EAAE,OAA4B;QAAlD,QAAG,GAAH,GAAG,CAAiB;QACjD,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;IAC5F,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA2B,EAAE,IAAsD;QAC/F,MAAM,OAAO,GAAG,MAAM,IAAA,2CAAyB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,GAAG,mBAAQ,CAAC,gBAAgB,GAAG,yBAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9F,OAAO,MAAM,IAAA,4BAAU,EAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;CACF;AAZD,0FAYC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,QAAsB,EACtB,QAAkB;IAElB,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;oBACxC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBAC3C,qFAAqF;oBACrF,OAAO,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;gBACH,0CAA0C;gBAC1C,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC1C,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAjBD,oDAiBC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,YAA8B,EAAE,QAAkB;IAC7E,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC;IAC9C,OAAO;QACL,WAAW;YACT,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,QAAQ;QACR,GAAG,IAAI;KACR,CAAC;AACJ,CAAC"}
|
package/lib/workflow/index.js
CHANGED
|
@@ -31,7 +31,6 @@ exports.OpenTelemetryInternalsInterceptor = exports.OpenTelemetryOutboundInterce
|
|
|
31
31
|
// eslint-disable-next-line import/no-unassigned-import
|
|
32
32
|
require("./runtime"); // Patch the Workflow isolate runtime for opentelemetry
|
|
33
33
|
const tracing = __importStar(require("@opentelemetry/sdk-trace-base"));
|
|
34
|
-
const otel_1 = require("@temporalio/common/lib/otel");
|
|
35
34
|
const workflow_1 = require("@temporalio/workflow");
|
|
36
35
|
const instrumentation_1 = require("../instrumentation");
|
|
37
36
|
const context_manager_1 = require("./context-manager");
|
|
@@ -63,7 +62,7 @@ class OpenTelemetryInboundInterceptor {
|
|
|
63
62
|
this.tracer = getTracer();
|
|
64
63
|
}
|
|
65
64
|
async execute(input, next) {
|
|
66
|
-
const context = await (0,
|
|
65
|
+
const context = await (0, instrumentation_1.extractContextFromHeaders)(input.headers);
|
|
67
66
|
return await (0, instrumentation_1.instrument)({
|
|
68
67
|
tracer: this.tracer,
|
|
69
68
|
spanName: `${definitions_1.SpanName.WORKFLOW_EXECUTE}${definitions_1.SPAN_DELIMITER}${(0, workflow_1.workflowInfo)().workflowType}`,
|
|
@@ -88,7 +87,7 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
88
87
|
tracer: this.tracer,
|
|
89
88
|
spanName: `${definitions_1.SpanName.ACTIVITY_START}${definitions_1.SPAN_DELIMITER}${input.activityType}`,
|
|
90
89
|
fn: async () => {
|
|
91
|
-
const headers = await (0,
|
|
90
|
+
const headers = await (0, instrumentation_1.headersWithContext)(input.headers);
|
|
92
91
|
return next({
|
|
93
92
|
...input,
|
|
94
93
|
headers,
|
|
@@ -101,7 +100,7 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
101
100
|
tracer: this.tracer,
|
|
102
101
|
spanName: `${definitions_1.SpanName.CHILD_WORKFLOW_START}${definitions_1.SPAN_DELIMITER}${input.workflowType}`,
|
|
103
102
|
fn: async () => {
|
|
104
|
-
const headers = await (0,
|
|
103
|
+
const headers = await (0, instrumentation_1.headersWithContext)(input.headers);
|
|
105
104
|
return next({
|
|
106
105
|
...input,
|
|
107
106
|
headers,
|
|
@@ -114,7 +113,7 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
114
113
|
tracer: this.tracer,
|
|
115
114
|
spanName: `${definitions_1.SpanName.CONTINUE_AS_NEW}${definitions_1.SPAN_DELIMITER}${input.options.workflowType}`,
|
|
116
115
|
fn: async () => {
|
|
117
|
-
const headers = await (0,
|
|
116
|
+
const headers = await (0, instrumentation_1.headersWithContext)(input.headers);
|
|
118
117
|
return next({
|
|
119
118
|
...input,
|
|
120
119
|
headers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAiC;AACjC,uDAAuD;AACvD,qBAAmB,CAAC,uDAAuD;AAE3E,uEAAyD;AACzD,
|
|
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.9.0-rc.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",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
"@opentelemetry/core": "^1.12.0",
|
|
19
19
|
"@opentelemetry/resources": "^1.12.0",
|
|
20
20
|
"@opentelemetry/sdk-trace-base": "^1.12.0",
|
|
21
|
-
"@temporalio/activity": "1.
|
|
22
|
-
"@temporalio/client": "1.
|
|
23
|
-
"@temporalio/common": "1.
|
|
24
|
-
"@temporalio/worker": "1.
|
|
25
|
-
"@temporalio/workflow": "1.
|
|
21
|
+
"@temporalio/activity": "1.9.0-rc.0",
|
|
22
|
+
"@temporalio/client": "1.9.0-rc.0",
|
|
23
|
+
"@temporalio/common": "1.9.0-rc.0",
|
|
24
|
+
"@temporalio/worker": "1.9.0-rc.0",
|
|
25
|
+
"@temporalio/workflow": "1.9.0-rc.0"
|
|
26
26
|
},
|
|
27
27
|
"bugs": {
|
|
28
28
|
"url": "https://github.com/temporalio/sdk-typescript/issues"
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"src",
|
|
41
41
|
"lib"
|
|
42
42
|
],
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "ca3e508e62de02b2c9bb40d0d889003cebba282d"
|
|
44
44
|
}
|
package/src/client/index.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as otel from '@opentelemetry/api';
|
|
2
2
|
import { Next, WorkflowClientInterceptor, WorkflowStartInput } from '@temporalio/client';
|
|
3
|
-
import { headersWithContext, RUN_ID_ATTR_KEY } from '
|
|
4
|
-
import { instrument } from '../instrumentation';
|
|
3
|
+
import { instrument, headersWithContext, RUN_ID_ATTR_KEY } from '../instrumentation';
|
|
5
4
|
import { SpanName, SPAN_DELIMITER } from '../workflow';
|
|
6
5
|
|
|
7
6
|
export interface InterceptorOptions {
|
package/src/instrumentation.ts
CHANGED
|
@@ -3,6 +3,35 @@
|
|
|
3
3
|
* @module
|
|
4
4
|
*/
|
|
5
5
|
import * as otel from '@opentelemetry/api';
|
|
6
|
+
import { Headers, defaultPayloadConverter } from '@temporalio/common';
|
|
7
|
+
|
|
8
|
+
/** Default trace header for opentelemetry interceptors */
|
|
9
|
+
export const TRACE_HEADER = '_tracer-data';
|
|
10
|
+
/** As in workflow run id */
|
|
11
|
+
export const RUN_ID_ATTR_KEY = 'run_id';
|
|
12
|
+
|
|
13
|
+
const payloadConverter = defaultPayloadConverter;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* If found, return an otel Context deserialized from the provided headers
|
|
17
|
+
*/
|
|
18
|
+
export async function extractContextFromHeaders(headers: Headers): Promise<otel.Context | undefined> {
|
|
19
|
+
const encodedSpanContext = headers[TRACE_HEADER];
|
|
20
|
+
if (encodedSpanContext === undefined) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const textMap: Record<string, string> = payloadConverter.fromPayload(encodedSpanContext);
|
|
24
|
+
return otel.propagation.extract(otel.context.active(), textMap, otel.defaultTextMapGetter);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Given headers, return new headers with the current otel context inserted
|
|
29
|
+
*/
|
|
30
|
+
export async function headersWithContext(headers: Headers): Promise<Headers> {
|
|
31
|
+
const carrier = {};
|
|
32
|
+
otel.propagation.inject(otel.context.active(), carrier, otel.defaultTextMapSetter);
|
|
33
|
+
return { ...headers, [TRACE_HEADER]: payloadConverter.toPayload(carrier) };
|
|
34
|
+
}
|
|
6
35
|
|
|
7
36
|
async function wrapWithSpan<T>(
|
|
8
37
|
span: otel.Span,
|
|
@@ -33,6 +62,7 @@ export interface InstrumentOptions<T> {
|
|
|
33
62
|
context?: otel.Context;
|
|
34
63
|
acceptableErrors?: (err: unknown) => boolean;
|
|
35
64
|
}
|
|
65
|
+
|
|
36
66
|
/**
|
|
37
67
|
* Wraps `fn` in a span which ends when function returns or throws
|
|
38
68
|
*/
|
package/src/worker/index.ts
CHANGED
|
@@ -2,9 +2,8 @@ import * as otel from '@opentelemetry/api';
|
|
|
2
2
|
import { Resource } from '@opentelemetry/resources';
|
|
3
3
|
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
4
4
|
import { Context as ActivityContext } from '@temporalio/activity';
|
|
5
|
-
import { extractContextFromHeaders } from '@temporalio/common/lib/otel';
|
|
6
5
|
import { ActivityExecuteInput, ActivityInboundCallsInterceptor, InjectedSink, Next } from '@temporalio/worker';
|
|
7
|
-
import { instrument } from '../instrumentation';
|
|
6
|
+
import { instrument, extractContextFromHeaders } from '../instrumentation';
|
|
8
7
|
import { OpenTelemetryWorkflowExporter, SerializableSpan, SpanName, SPAN_DELIMITER } from '../workflow';
|
|
9
8
|
|
|
10
9
|
export interface InterceptorOptions {
|
package/src/workflow/index.ts
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import './runtime'; // Patch the Workflow isolate runtime for opentelemetry
|
|
4
4
|
import * as otel from '@opentelemetry/api';
|
|
5
5
|
import * as tracing from '@opentelemetry/sdk-trace-base';
|
|
6
|
-
import { extractContextFromHeaders, headersWithContext } from '@temporalio/common/lib/otel';
|
|
7
6
|
import {
|
|
8
7
|
ActivityInput,
|
|
9
8
|
ContinueAsNew,
|
|
@@ -17,7 +16,7 @@ import {
|
|
|
17
16
|
WorkflowInternalsInterceptor,
|
|
18
17
|
WorkflowOutboundCallsInterceptor,
|
|
19
18
|
} from '@temporalio/workflow';
|
|
20
|
-
import { instrument } from '../instrumentation';
|
|
19
|
+
import { instrument, extractContextFromHeaders, headersWithContext } from '../instrumentation';
|
|
21
20
|
import { ContextManager } from './context-manager';
|
|
22
21
|
import { SpanName, SPAN_DELIMITER } from './definitions';
|
|
23
22
|
import { SpanExporter } from './span-exporter';
|