@temporalio/interceptors-opentelemetry 1.14.2 → 1.15.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/client/index.js +11 -11
- package/lib/client/index.js.map +1 -1
- 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 +11 -3
- package/lib/worker/index.js +21 -9
- package/lib/worker/index.js.map +1 -1
- package/lib/workflow/context-manager.d.ts +2 -2
- package/lib/workflow/context-manager.js +2 -9
- package/lib/workflow/context-manager.js.map +1 -1
- package/lib/workflow/definitions.d.ts +8 -2
- package/lib/workflow/definitions.js.map +1 -1
- package/lib/workflow/index.d.ts +0 -2
- package/lib/workflow/index.js +17 -26
- package/lib/workflow/index.js.map +1 -1
- package/lib/workflow/runtime.js +2 -3
- package/lib/workflow/runtime.js.map +1 -1
- package/lib/workflow/span-exporter.d.ts +1 -1
- package/lib/workflow/span-exporter.js +15 -7
- package/lib/workflow/span-exporter.js.map +1 -1
- package/lib/workflow/workflow-imports-impl.d.ts +9 -0
- package/lib/workflow/workflow-imports-impl.js +20 -0
- package/lib/workflow/workflow-imports-impl.js.map +1 -0
- package/lib/workflow/workflow-imports.d.ts +19 -0
- package/lib/workflow/workflow-imports.js +26 -0
- package/lib/workflow/workflow-imports.js.map +1 -0
- 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/client/index.ts +1 -1
- package/src/index.ts +1 -0
- package/src/plugin.ts +77 -0
- package/src/worker/index.ts +46 -6
- package/src/workflow/context-manager.ts +7 -14
- package/src/workflow/definitions.ts +9 -4
- package/src/workflow/index.ts +14 -26
- package/src/workflow/runtime.ts +2 -4
- package/src/workflow/span-exporter.ts +16 -9
- package/src/workflow/workflow-imports-impl.ts +9 -0
- package/src/workflow/workflow-imports.ts +42 -0
- package/src/workflow-interceptors.ts +14 -0
- package/lib/workflow/workflow-module-loader.d.ts +0 -28
- package/lib/workflow/workflow-module-loader.js +0 -56
- package/lib/workflow/workflow-module-loader.js.map +0 -1
- package/src/workflow/workflow-module-loader.ts +0 -64
package/lib/client/index.js
CHANGED
|
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.OpenTelemetryWorkflowClientInterceptor = void 0;
|
|
27
27
|
const otel = __importStar(require("@opentelemetry/api"));
|
|
28
28
|
const instrumentation_1 = require("../instrumentation");
|
|
29
|
-
const
|
|
29
|
+
const definitions_1 = require("../workflow/definitions");
|
|
30
30
|
/**
|
|
31
31
|
* Intercepts calls to start a Workflow.
|
|
32
32
|
*
|
|
@@ -40,7 +40,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
40
40
|
async start(input, next) {
|
|
41
41
|
return await (0, instrumentation_1.instrument)({
|
|
42
42
|
tracer: this.tracer,
|
|
43
|
-
spanName: `${
|
|
43
|
+
spanName: `${definitions_1.SpanName.WORKFLOW_START}${definitions_1.SPAN_DELIMITER}${input.workflowType}`,
|
|
44
44
|
fn: async (span) => {
|
|
45
45
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
46
46
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.options.workflowId);
|
|
@@ -53,7 +53,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
53
53
|
async signal(input, next) {
|
|
54
54
|
return await (0, instrumentation_1.instrument)({
|
|
55
55
|
tracer: this.tracer,
|
|
56
|
-
spanName: `${
|
|
56
|
+
spanName: `${definitions_1.SpanName.WORKFLOW_SIGNAL}${definitions_1.SPAN_DELIMITER}${input.signalName}`,
|
|
57
57
|
fn: async (span) => {
|
|
58
58
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.workflowExecution.workflowId);
|
|
59
59
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
@@ -64,7 +64,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
64
64
|
async startWithDetails(input, next) {
|
|
65
65
|
return await (0, instrumentation_1.instrument)({
|
|
66
66
|
tracer: this.tracer,
|
|
67
|
-
spanName: `${
|
|
67
|
+
spanName: `${definitions_1.SpanName.WORKFLOW_START}${definitions_1.SPAN_DELIMITER}${input.workflowType}`,
|
|
68
68
|
fn: async (span) => {
|
|
69
69
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
70
70
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.options.workflowId);
|
|
@@ -77,7 +77,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
77
77
|
async startUpdate(input, next) {
|
|
78
78
|
return await (0, instrumentation_1.instrument)({
|
|
79
79
|
tracer: this.tracer,
|
|
80
|
-
spanName: `${
|
|
80
|
+
spanName: `${definitions_1.SpanName.WORKFLOW_START_UPDATE}${definitions_1.SPAN_DELIMITER}${input.updateName}`,
|
|
81
81
|
fn: async (span) => {
|
|
82
82
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.workflowExecution.workflowId);
|
|
83
83
|
if (input.options.updateId) {
|
|
@@ -93,7 +93,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
93
93
|
async startUpdateWithStart(input, next) {
|
|
94
94
|
return await (0, instrumentation_1.instrument)({
|
|
95
95
|
tracer: this.tracer,
|
|
96
|
-
spanName: `${
|
|
96
|
+
spanName: `${definitions_1.SpanName.WORKFLOW_UPDATE_WITH_START}${definitions_1.SPAN_DELIMITER}${input.updateName}`,
|
|
97
97
|
fn: async (span) => {
|
|
98
98
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.workflowStartOptions.workflowId);
|
|
99
99
|
if (input.updateOptions.updateId) {
|
|
@@ -112,7 +112,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
112
112
|
async signalWithStart(input, next) {
|
|
113
113
|
return await (0, instrumentation_1.instrument)({
|
|
114
114
|
tracer: this.tracer,
|
|
115
|
-
spanName: `${
|
|
115
|
+
spanName: `${definitions_1.SpanName.WORKFLOW_SIGNAL_WITH_START}${definitions_1.SPAN_DELIMITER}${input.workflowType}`,
|
|
116
116
|
fn: async (span) => {
|
|
117
117
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.options.workflowId);
|
|
118
118
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
@@ -125,7 +125,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
125
125
|
async query(input, next) {
|
|
126
126
|
return await (0, instrumentation_1.instrument)({
|
|
127
127
|
tracer: this.tracer,
|
|
128
|
-
spanName: `${
|
|
128
|
+
spanName: `${definitions_1.SpanName.WORKFLOW_QUERY}${definitions_1.SPAN_DELIMITER}${input.queryType}`,
|
|
129
129
|
fn: async (span) => {
|
|
130
130
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
131
131
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.workflowExecution.workflowId);
|
|
@@ -139,7 +139,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
139
139
|
async terminate(input, next) {
|
|
140
140
|
return await (0, instrumentation_1.instrument)({
|
|
141
141
|
tracer: this.tracer,
|
|
142
|
-
spanName:
|
|
142
|
+
spanName: definitions_1.SpanName.WORKFLOW_TERMINATE,
|
|
143
143
|
fn: async (span) => {
|
|
144
144
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.workflowExecution.workflowId);
|
|
145
145
|
if (input.workflowExecution.runId) {
|
|
@@ -155,7 +155,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
155
155
|
async cancel(input, next) {
|
|
156
156
|
return await (0, instrumentation_1.instrument)({
|
|
157
157
|
tracer: this.tracer,
|
|
158
|
-
spanName:
|
|
158
|
+
spanName: definitions_1.SpanName.WORKFLOW_CANCEL,
|
|
159
159
|
fn: async (span) => {
|
|
160
160
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.workflowExecution.workflowId);
|
|
161
161
|
if (input.workflowExecution.runId) {
|
|
@@ -168,7 +168,7 @@ class OpenTelemetryWorkflowClientInterceptor {
|
|
|
168
168
|
async describe(input, next) {
|
|
169
169
|
return await (0, instrumentation_1.instrument)({
|
|
170
170
|
tracer: this.tracer,
|
|
171
|
-
spanName:
|
|
171
|
+
spanName: definitions_1.SpanName.WORKFLOW_DESCRIBE,
|
|
172
172
|
fn: async (span) => {
|
|
173
173
|
span.setAttribute(instrumentation_1.WORKFLOW_ID_ATTR_KEY, input.workflowExecution.workflowId);
|
|
174
174
|
if (input.workflowExecution.runId) {
|
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;AAoB3C,wDAO4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAoB3C,wDAO4B;AAC5B,yDAAmE;AAMnE;;;;GAIG;AACH,MAAa,sCAAsC;IAC9B,MAAM,CAAc;IAEvC,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,sBAAQ,CAAC,cAAc,GAAG,4BAAc,GAAG,KAAK,CAAC,YAAY,EAAE;YAC5E,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,IAAA,oCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAClE,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;IAED,KAAK,CAAC,MAAM,CAAC,KAA0B,EAAE,IAA+C;QACtF,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,GAAG,sBAAQ,CAAC,eAAe,GAAG,4BAAc,GAAG,KAAK,CAAC,UAAU,EAAE;YAC3E,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC5E,MAAM,OAAO,GAAG,IAAA,oCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACpC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,KAAyB,EACzB,IAAyD;QAEzD,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,GAAG,sBAAQ,CAAC,cAAc,GAAG,4BAAc,GAAG,KAAK,CAAC,YAAY,EAAE;YAC5E,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,IAAA,oCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,YAAY,CAAC,iCAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjD,OAAO,MAAM,CAAC;YAChB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CACf,KAA+B,EAC/B,IAAoD;QAEpD,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,GAAG,sBAAQ,CAAC,qBAAqB,GAAG,4BAAc,GAAG,KAAK,CAAC,UAAU,EAAE;YACjF,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC3B,IAAI,CAAC,YAAY,CAAC,oCAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAChE,CAAC;gBACD,MAAM,OAAO,GAAG,IAAA,oCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,YAAY,CAAC,iCAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;gBACzD,OAAO,MAAM,CAAC;YAChB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,KAAwC,EACxC,IAA6D;QAE7D,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,GAAG,sBAAQ,CAAC,0BAA0B,GAAG,4BAAc,GAAG,KAAK,CAAC,UAAU,EAAE;YACtF,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;gBAC/E,IAAI,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;oBACjC,IAAI,CAAC,YAAY,CAAC,oCAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACtE,CAAC;gBACD,MAAM,oBAAoB,GAAG,IAAA,oCAAkB,EAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC5E,MAAM,aAAa,GAAG,IAAA,oCAAkB,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC7E,IAAI,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;oBACnC,IAAI,CAAC,YAAY,CAAC,iCAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACrE,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAmC,EACnC,IAAwD;QAExD,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,GAAG,sBAAQ,CAAC,0BAA0B,GAAG,4BAAc,GAAG,KAAK,CAAC,YAAY,EAAE;YACxF,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAClE,MAAM,OAAO,GAAG,IAAA,oCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClD,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;IAED,KAAK,CAAC,KAAK,CAAC,KAAyB,EAAE,IAA8C;QACnF,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,GAAG,sBAAQ,CAAC,cAAc,GAAG,4BAAc,GAAG,KAAK,CAAC,SAAS,EAAE;YACzE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,IAAA,oCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC5E,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;oBAClC,IAAI,CAAC,YAAY,CAAC,iCAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACpE,CAAC;gBACD,OAAO,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CACb,KAA6B,EAC7B,IAAkD;QAElD,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,sBAAQ,CAAC,kBAAkB;YACrC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC5E,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;oBAClC,IAAI,CAAC,YAAY,CAAC,iCAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACpE,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,YAAY,CAAC,2CAAyB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7D,CAAC;gBACD,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAA0B,EAC1B,IAA+C;QAE/C,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,sBAAQ,CAAC,eAAe;YAClC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC5E,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;oBAClC,IAAI,CAAC,YAAY,CAAC,iCAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACpE,CAAC;gBACD,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,KAA4B,EAC5B,IAAiD;QAEjD,OAAO,MAAM,IAAA,4BAAU,EAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,sBAAQ,CAAC,iBAAiB;YACpC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACjB,IAAI,CAAC,YAAY,CAAC,sCAAoB,EAAE,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC5E,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;oBAClC,IAAI,CAAC,YAAY,CAAC,iCAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACpE,CAAC;gBACD,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAlLD,wFAkLC"}
|
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,9 +1,9 @@
|
|
|
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
|
-
import { type OpenTelemetryWorkflowExporter } from '../workflow';
|
|
6
|
+
import { type OpenTelemetryWorkflowExporter } from '../workflow/definitions';
|
|
7
7
|
export interface InterceptorOptions {
|
|
8
8
|
readonly tracer?: otel.Tracer;
|
|
9
9
|
}
|
|
@@ -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,8 +26,9 @@ 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
|
-
const
|
|
31
|
+
const definitions_1 = require("../workflow/definitions");
|
|
31
32
|
/**
|
|
32
33
|
* Intercepts calls to start an Activity.
|
|
33
34
|
*
|
|
@@ -43,7 +44,7 @@ class OpenTelemetryActivityInboundInterceptor {
|
|
|
43
44
|
}
|
|
44
45
|
async execute(input, next) {
|
|
45
46
|
const context = (0, instrumentation_1.extractContextFromHeaders)(input.headers);
|
|
46
|
-
const spanName = `${
|
|
47
|
+
const spanName = `${definitions_1.SpanName.ACTIVITY_EXECUTE}${definitions_1.SPAN_DELIMITER}${this.ctx.info.activityType}`;
|
|
47
48
|
return await (0, instrumentation_1.instrument)({
|
|
48
49
|
tracer: this.tracer,
|
|
49
50
|
spanName,
|
|
@@ -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,7 +1,7 @@
|
|
|
1
|
+
import { type AsyncLocalStorage } from 'async_hooks';
|
|
1
2
|
import * as otel from '@opentelemetry/api';
|
|
2
3
|
export declare class ContextManager implements otel.ContextManager {
|
|
3
|
-
protected storage:
|
|
4
|
-
constructor();
|
|
4
|
+
protected storage: AsyncLocalStorage<otel.Context>;
|
|
5
5
|
active(): otel.Context;
|
|
6
6
|
bind<T>(context: otel.Context, target: T): T;
|
|
7
7
|
enable(): this;
|
|
@@ -25,15 +25,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.ContextManager = void 0;
|
|
27
27
|
const otel = __importStar(require("@opentelemetry/api"));
|
|
28
|
-
const workflow_module_loader_1 = require("./workflow-module-loader");
|
|
29
|
-
const AsyncLocalStorage = (0, workflow_module_loader_1.getWorkflowModuleIfAvailable)()?.AsyncLocalStorage;
|
|
30
28
|
class ContextManager {
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
storage = AsyncLocalStorage ? new AsyncLocalStorage() : undefined;
|
|
34
|
-
constructor() {
|
|
35
|
-
(0, workflow_module_loader_1.ensureWorkflowModuleLoaded)();
|
|
36
|
-
}
|
|
29
|
+
// The workflow sandbox provides AsyncLocalStorage through globalThis.
|
|
30
|
+
storage = new globalThis.AsyncLocalStorage();
|
|
37
31
|
active() {
|
|
38
32
|
return this.storage.getStore() || otel.ROOT_CONTEXT;
|
|
39
33
|
}
|
|
@@ -55,7 +49,6 @@ class ContextManager {
|
|
|
55
49
|
* It isn't possible to tell Typescript that contextWrapper is the same as T
|
|
56
50
|
* so we forced to cast as any here.
|
|
57
51
|
*/
|
|
58
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
52
|
return contextWrapper;
|
|
60
53
|
}
|
|
61
54
|
enable() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../src/workflow/context-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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"}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import * as otel from '@opentelemetry/api';
|
|
2
2
|
import * as tracing from '@opentelemetry/sdk-trace-base';
|
|
3
3
|
import { InstrumentationLibrary } from '@opentelemetry/core';
|
|
4
|
-
import { Sink, Sinks } from '@temporalio/workflow';
|
|
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.d.ts
CHANGED
|
@@ -12,7 +12,6 @@ export * from './definitions';
|
|
|
12
12
|
*/
|
|
13
13
|
export declare class OpenTelemetryInboundInterceptor implements WorkflowInboundCallsInterceptor {
|
|
14
14
|
protected readonly tracer: otel.Tracer;
|
|
15
|
-
constructor();
|
|
16
15
|
execute(input: WorkflowExecuteInput, next: Next<WorkflowInboundCallsInterceptor, 'execute'>): Promise<unknown>;
|
|
17
16
|
handleSignal(input: SignalInput, next: Next<WorkflowInboundCallsInterceptor, 'handleSignal'>): Promise<void>;
|
|
18
17
|
handleUpdate(input: UpdateInput, next: Next<WorkflowInboundCallsInterceptor, 'handleUpdate'>): Promise<unknown>;
|
|
@@ -28,7 +27,6 @@ export declare class OpenTelemetryInboundInterceptor implements WorkflowInboundC
|
|
|
28
27
|
*/
|
|
29
28
|
export declare class OpenTelemetryOutboundInterceptor implements WorkflowOutboundCallsInterceptor {
|
|
30
29
|
protected readonly tracer: otel.Tracer;
|
|
31
|
-
constructor();
|
|
32
30
|
scheduleActivity(input: ActivityInput, next: Next<WorkflowOutboundCallsInterceptor, 'scheduleActivity'>): Promise<unknown>;
|
|
33
31
|
scheduleLocalActivity(input: LocalActivityInput, next: Next<WorkflowOutboundCallsInterceptor, 'scheduleLocalActivity'>): Promise<unknown>;
|
|
34
32
|
startNexusOperation(input: StartNexusOperationInput, next: Next<WorkflowOutboundCallsInterceptor, 'startNexusOperation'>): Promise<StartNexusOperationOutput>;
|
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"));
|
|
@@ -36,7 +35,7 @@ const instrumentation_1 = require("../instrumentation");
|
|
|
36
35
|
const context_manager_1 = require("./context-manager");
|
|
37
36
|
const definitions_1 = require("./definitions");
|
|
38
37
|
const span_exporter_1 = require("./span-exporter");
|
|
39
|
-
const
|
|
38
|
+
const workflow_imports_1 = require("./workflow-imports");
|
|
40
39
|
__exportStar(require("./definitions"), exports);
|
|
41
40
|
let tracer = undefined;
|
|
42
41
|
let contextManager = undefined;
|
|
@@ -62,28 +61,24 @@ function getTracer() {
|
|
|
62
61
|
*/
|
|
63
62
|
class OpenTelemetryInboundInterceptor {
|
|
64
63
|
tracer = getTracer();
|
|
65
|
-
constructor() {
|
|
66
|
-
(0, workflow_module_loader_1.ensureWorkflowModuleLoaded)();
|
|
67
|
-
}
|
|
68
64
|
async execute(input, next) {
|
|
69
|
-
const { workflowInfo, ContinueAsNew } = (0, workflow_module_loader_1.getWorkflowModule)();
|
|
70
65
|
const context = (0, instrumentation_1.extractContextFromHeaders)(input.headers);
|
|
71
|
-
if (!(0,
|
|
66
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceporsAvoidsExtraYields))
|
|
72
67
|
await Promise.resolve();
|
|
73
68
|
return await (0, instrumentation_1.instrument)({
|
|
74
69
|
tracer: this.tracer,
|
|
75
|
-
spanName: `${definitions_1.SpanName.WORKFLOW_EXECUTE}${definitions_1.SPAN_DELIMITER}${workflowInfo().workflowType}`,
|
|
70
|
+
spanName: `${definitions_1.SpanName.WORKFLOW_EXECUTE}${definitions_1.SPAN_DELIMITER}${(0, workflow_imports_1.workflowInfo)().workflowType}`,
|
|
76
71
|
fn: () => next(input),
|
|
77
72
|
context,
|
|
78
|
-
acceptableErrors: (err) => err instanceof ContinueAsNew,
|
|
73
|
+
acceptableErrors: (err) => err instanceof workflow_imports_1.ContinueAsNew,
|
|
79
74
|
});
|
|
80
75
|
}
|
|
81
76
|
async handleSignal(input, next) {
|
|
82
77
|
// Tracing of inbound signals was added in v1.11.5.
|
|
83
|
-
if (!(0,
|
|
78
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceptorsTracesInboundSignals))
|
|
84
79
|
return next(input);
|
|
85
80
|
const context = (0, instrumentation_1.extractContextFromHeaders)(input.headers);
|
|
86
|
-
if (!(0,
|
|
81
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceporsAvoidsExtraYields))
|
|
87
82
|
await Promise.resolve();
|
|
88
83
|
return await (0, instrumentation_1.instrument)({
|
|
89
84
|
tracer: this.tracer,
|
|
@@ -93,7 +88,7 @@ class OpenTelemetryInboundInterceptor {
|
|
|
93
88
|
});
|
|
94
89
|
}
|
|
95
90
|
async handleUpdate(input, next) {
|
|
96
|
-
if (!(0,
|
|
91
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceptorsInstrumentsAllMethods))
|
|
97
92
|
return next(input);
|
|
98
93
|
const context = (0, instrumentation_1.extractContextFromHeaders)(input.headers);
|
|
99
94
|
return await (0, instrumentation_1.instrument)({
|
|
@@ -107,7 +102,7 @@ class OpenTelemetryInboundInterceptor {
|
|
|
107
102
|
});
|
|
108
103
|
}
|
|
109
104
|
validateUpdate(input, next) {
|
|
110
|
-
if (!(0,
|
|
105
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceptorsInstrumentsAllMethods))
|
|
111
106
|
return next(input);
|
|
112
107
|
const context = (0, instrumentation_1.extractContextFromHeaders)(input.headers);
|
|
113
108
|
(0, instrumentation_1.instrumentSync)({
|
|
@@ -121,7 +116,7 @@ class OpenTelemetryInboundInterceptor {
|
|
|
121
116
|
});
|
|
122
117
|
}
|
|
123
118
|
async handleQuery(input, next) {
|
|
124
|
-
if (!(0,
|
|
119
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceptorsInstrumentsAllMethods))
|
|
125
120
|
return next(input);
|
|
126
121
|
const context = (0, instrumentation_1.extractContextFromHeaders)(input.headers);
|
|
127
122
|
return await (0, instrumentation_1.instrument)({
|
|
@@ -142,16 +137,13 @@ exports.OpenTelemetryInboundInterceptor = OpenTelemetryInboundInterceptor;
|
|
|
142
137
|
*/
|
|
143
138
|
class OpenTelemetryOutboundInterceptor {
|
|
144
139
|
tracer = getTracer();
|
|
145
|
-
constructor() {
|
|
146
|
-
(0, workflow_module_loader_1.ensureWorkflowModuleLoaded)();
|
|
147
|
-
}
|
|
148
140
|
async scheduleActivity(input, next) {
|
|
149
141
|
return await (0, instrumentation_1.instrument)({
|
|
150
142
|
tracer: this.tracer,
|
|
151
143
|
spanName: `${definitions_1.SpanName.ACTIVITY_START}${definitions_1.SPAN_DELIMITER}${input.activityType}`,
|
|
152
144
|
fn: async () => {
|
|
153
145
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
154
|
-
if (!(0,
|
|
146
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceporsAvoidsExtraYields))
|
|
155
147
|
await Promise.resolve();
|
|
156
148
|
return next({
|
|
157
149
|
...input,
|
|
@@ -162,14 +154,14 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
162
154
|
}
|
|
163
155
|
async scheduleLocalActivity(input, next) {
|
|
164
156
|
// Tracing of local activities was added in v1.11.6.
|
|
165
|
-
if (!(0,
|
|
157
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceptorsTracesLocalActivities))
|
|
166
158
|
return next(input);
|
|
167
159
|
return await (0, instrumentation_1.instrument)({
|
|
168
160
|
tracer: this.tracer,
|
|
169
161
|
spanName: `${definitions_1.SpanName.ACTIVITY_START}${definitions_1.SPAN_DELIMITER}${input.activityType}`,
|
|
170
162
|
fn: async () => {
|
|
171
163
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
172
|
-
if (!(0,
|
|
164
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceporsAvoidsExtraYields))
|
|
173
165
|
await Promise.resolve();
|
|
174
166
|
return next({
|
|
175
167
|
...input,
|
|
@@ -179,7 +171,7 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
179
171
|
});
|
|
180
172
|
}
|
|
181
173
|
async startNexusOperation(input, next) {
|
|
182
|
-
if (!(0,
|
|
174
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceptorsInstrumentsAllMethods))
|
|
183
175
|
return next(input);
|
|
184
176
|
return await (0, instrumentation_1.instrument)({
|
|
185
177
|
tracer: this.tracer,
|
|
@@ -198,7 +190,7 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
198
190
|
spanName: `${definitions_1.SpanName.CHILD_WORKFLOW_START}${definitions_1.SPAN_DELIMITER}${input.workflowType}`,
|
|
199
191
|
fn: async () => {
|
|
200
192
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
201
|
-
if (!(0,
|
|
193
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceporsAvoidsExtraYields))
|
|
202
194
|
await Promise.resolve();
|
|
203
195
|
return next({
|
|
204
196
|
...input,
|
|
@@ -208,20 +200,19 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
208
200
|
});
|
|
209
201
|
}
|
|
210
202
|
async continueAsNew(input, next) {
|
|
211
|
-
const { ContinueAsNew } = (0, workflow_module_loader_1.getWorkflowModule)();
|
|
212
203
|
return await (0, instrumentation_1.instrument)({
|
|
213
204
|
tracer: this.tracer,
|
|
214
205
|
spanName: `${definitions_1.SpanName.CONTINUE_AS_NEW}${definitions_1.SPAN_DELIMITER}${input.options.workflowType}`,
|
|
215
206
|
fn: async () => {
|
|
216
207
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
217
|
-
if (!(0,
|
|
208
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceporsAvoidsExtraYields))
|
|
218
209
|
await Promise.resolve();
|
|
219
210
|
return next({
|
|
220
211
|
...input,
|
|
221
212
|
headers,
|
|
222
213
|
});
|
|
223
214
|
},
|
|
224
|
-
acceptableErrors: (err) => err instanceof ContinueAsNew,
|
|
215
|
+
acceptableErrors: (err) => err instanceof workflow_imports_1.ContinueAsNew,
|
|
225
216
|
});
|
|
226
217
|
}
|
|
227
218
|
async signalWorkflow(input, next) {
|
|
@@ -230,7 +221,7 @@ class OpenTelemetryOutboundInterceptor {
|
|
|
230
221
|
spanName: `${definitions_1.SpanName.WORKFLOW_SIGNAL}${definitions_1.SPAN_DELIMITER}${input.signalName}`,
|
|
231
222
|
fn: async () => {
|
|
232
223
|
const headers = (0, instrumentation_1.headersWithContext)(input.headers);
|
|
233
|
-
if (!(0,
|
|
224
|
+
if (!(0, workflow_imports_1.getActivator)().hasFlag(workflow_imports_1.SdkFlags.OpenTelemetryInterceporsAvoidsExtraYields))
|
|
234
225
|
await Promise.resolve();
|
|
235
226
|
return next({
|
|
236
227
|
...input,
|