@temporalio/interceptors-opentelemetry 1.11.3 → 1.11.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as otel from '@opentelemetry/api';
2
- import { Next, WorkflowClientInterceptor, WorkflowStartInput } from '@temporalio/client';
2
+ import { Next, WorkflowClientInterceptor, WorkflowSignalInput, WorkflowStartInput } from '@temporalio/client';
3
3
  export interface InterceptorOptions {
4
4
  readonly tracer?: otel.Tracer;
5
5
  }
@@ -12,4 +12,5 @@ export declare class OpenTelemetryWorkflowClientInterceptor implements WorkflowC
12
12
  protected readonly tracer: otel.Tracer;
13
13
  constructor(options?: InterceptorOptions);
14
14
  start(input: WorkflowStartInput, next: Next<WorkflowClientInterceptor, 'start'>): Promise<string>;
15
+ signal(input: WorkflowSignalInput, next: Next<WorkflowClientInterceptor, 'signal'>): Promise<void>;
15
16
  }
@@ -48,6 +48,16 @@ class OpenTelemetryWorkflowClientInterceptor {
48
48
  },
49
49
  });
50
50
  }
51
+ async signal(input, next) {
52
+ return await (0, instrumentation_1.instrument)({
53
+ tracer: this.tracer,
54
+ spanName: `${workflow_1.SpanName.WORKFLOW_SIGNAL}${workflow_1.SPAN_DELIMITER}${input.signalName}`,
55
+ fn: async () => {
56
+ const headers = await (0, instrumentation_1.headersWithContext)(input.headers);
57
+ await next({ ...input, headers });
58
+ },
59
+ });
60
+ }
51
61
  }
52
62
  exports.OpenTelemetryWorkflowClientInterceptor = OpenTelemetryWorkflowClientInterceptor;
53
63
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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"}
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;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,mBAAQ,CAAC,eAAe,GAAG,yBAAc,GAAG,KAAK,CAAC,UAAU,EAAE;YAC3E,EAAE,EAAE,KAAK,IAAI,EAAE;gBACb,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACpC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AA9BD,wFA8BC"}
@@ -23,7 +23,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.instrument = exports.headersWithContext = exports.extractContextFromHeaders = exports.RUN_ID_ATTR_KEY = exports.TRACE_HEADER = void 0;
26
+ exports.RUN_ID_ATTR_KEY = exports.TRACE_HEADER = void 0;
27
+ exports.extractContextFromHeaders = extractContextFromHeaders;
28
+ exports.headersWithContext = headersWithContext;
29
+ exports.instrument = instrument;
27
30
  /**
28
31
  * opentelemetry instrumentation helper functions
29
32
  * @module
@@ -46,7 +49,6 @@ async function extractContextFromHeaders(headers) {
46
49
  const textMap = payloadConverter.fromPayload(encodedSpanContext);
47
50
  return otel.propagation.extract(otel.context.active(), textMap, otel.defaultTextMapGetter);
48
51
  }
49
- exports.extractContextFromHeaders = extractContextFromHeaders;
50
52
  /**
51
53
  * Given headers, return new headers with the current otel context inserted
52
54
  */
@@ -55,7 +57,6 @@ async function headersWithContext(headers) {
55
57
  otel.propagation.inject(otel.context.active(), carrier, otel.defaultTextMapSetter);
56
58
  return { ...headers, [exports.TRACE_HEADER]: payloadConverter.toPayload(carrier) };
57
59
  }
58
- exports.headersWithContext = headersWithContext;
59
60
  async function wrapWithSpan(span, fn, acceptableErrors) {
60
61
  try {
61
62
  const ret = await fn(span);
@@ -87,5 +88,4 @@ async function instrument({ tracer, spanName, fn, context, acceptableErrors, })
87
88
  }
88
89
  return await tracer.startActiveSpan(spanName, async (span) => await wrapWithSpan(span, fn, acceptableErrors));
89
90
  }
90
- exports.instrument = instrument;
91
91
  //# sourceMappingURL=instrumentation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import * as otel from '@opentelemetry/api';
2
2
  import { Resource } from '@opentelemetry/resources';
3
3
  import { SpanExporter } from '@opentelemetry/sdk-trace-base';
4
4
  import { Context as ActivityContext } from '@temporalio/activity';
5
- import { ActivityExecuteInput, ActivityInboundCallsInterceptor, InjectedSink, Next } from '@temporalio/worker';
5
+ import { ActivityExecuteInput, ActivityInboundCallsInterceptor, ActivityOutboundCallsInterceptor, GetLogAttributesInput, InjectedSink, Next } from '@temporalio/worker';
6
6
  import { OpenTelemetryWorkflowExporter } from '../workflow';
7
7
  export interface InterceptorOptions {
8
8
  readonly tracer?: otel.Tracer;
@@ -19,6 +19,16 @@ export declare class OpenTelemetryActivityInboundInterceptor implements Activity
19
19
  constructor(ctx: ActivityContext, options?: InterceptorOptions);
20
20
  execute(input: ActivityExecuteInput, next: Next<ActivityInboundCallsInterceptor, 'execute'>): Promise<unknown>;
21
21
  }
22
+ /**
23
+ * Intercepts calls to emit logs from an Activity.
24
+ *
25
+ * Attach OpenTelemetry context tracing attributes to emitted log messages, if appropriate.
26
+ */
27
+ export declare class OpenTelemetryActivityOutboundInterceptor implements ActivityOutboundCallsInterceptor {
28
+ protected readonly ctx: ActivityContext;
29
+ constructor(ctx: ActivityContext);
30
+ getLogAttributes(input: GetLogAttributesInput, next: Next<ActivityOutboundCallsInterceptor, 'getLogAttributes'>): Record<string, unknown>;
31
+ }
22
32
  /**
23
33
  * Takes an opentelemetry SpanExporter and turns it into an injected Workflow span exporter sink
24
34
  */
@@ -23,7 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.makeWorkflowExporter = exports.OpenTelemetryActivityInboundInterceptor = void 0;
26
+ exports.OpenTelemetryActivityOutboundInterceptor = exports.OpenTelemetryActivityInboundInterceptor = void 0;
27
+ exports.makeWorkflowExporter = makeWorkflowExporter;
27
28
  const otel = __importStar(require("@opentelemetry/api"));
28
29
  const instrumentation_1 = require("../instrumentation");
29
30
  const workflow_1 = require("../workflow");
@@ -45,6 +46,32 @@ class OpenTelemetryActivityInboundInterceptor {
45
46
  }
46
47
  }
47
48
  exports.OpenTelemetryActivityInboundInterceptor = OpenTelemetryActivityInboundInterceptor;
49
+ /**
50
+ * Intercepts calls to emit logs from an Activity.
51
+ *
52
+ * Attach OpenTelemetry context tracing attributes to emitted log messages, if appropriate.
53
+ */
54
+ class OpenTelemetryActivityOutboundInterceptor {
55
+ constructor(ctx) {
56
+ this.ctx = ctx;
57
+ }
58
+ getLogAttributes(input, next) {
59
+ const span = otel.trace.getSpan(otel.context.active());
60
+ const spanContext = span?.spanContext();
61
+ if (spanContext && otel.isSpanContextValid(spanContext)) {
62
+ return next({
63
+ trace_id: spanContext.traceId,
64
+ span_id: spanContext.spanId,
65
+ trace_flags: `0${spanContext.traceFlags.toString(16)}`,
66
+ ...input,
67
+ });
68
+ }
69
+ else {
70
+ return next(input);
71
+ }
72
+ }
73
+ }
74
+ exports.OpenTelemetryActivityOutboundInterceptor = OpenTelemetryActivityOutboundInterceptor;
48
75
  /**
49
76
  * Takes an opentelemetry SpanExporter and turns it into an injected Workflow span exporter sink
50
77
  */
@@ -63,7 +90,6 @@ function makeWorkflowExporter(exporter, resource) {
63
90
  },
64
91
  };
65
92
  }
66
- exports.makeWorkflowExporter = makeWorkflowExporter;
67
93
  /**
68
94
  * Deserialize a serialized span created by the Workflow isolate
69
95
  */
@@ -1 +1 @@
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,YACqB,GAAoB,EACvC,OAA4B;QADT,QAAG,GAAH,GAAG,CAAiB;QAGvC,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;AAfD,0FAeC;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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA,oDAiBC;AAzFD,yDAA2C;AAY3C,wDAA2E;AAC3E,0CAAwG;AAMxG;;;;;GAKG;AACH,MAAa,uCAAuC;IAGlD,YACqB,GAAoB,EACvC,OAA4B;QADT,QAAG,GAAH,GAAG,CAAiB;QAGvC,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;AAfD,0FAeC;AAED;;;;GAIG;AACH,MAAa,wCAAwC;IACnD,YAA+B,GAAoB;QAApB,QAAG,GAAH,GAAG,CAAiB;IAAG,CAAC;IAEhD,gBAAgB,CACrB,KAA4B,EAC5B,IAAgE;QAEhE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC;QACxC,IAAI,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;gBACV,QAAQ,EAAE,WAAW,CAAC,OAAO;gBAC7B,OAAO,EAAE,WAAW,CAAC,MAAM;gBAC3B,WAAW,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBACtD,GAAG,KAAK;aACT,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AApBD,4FAoBC;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;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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import * as otel from '@opentelemetry/api';
3
2
  export declare class ContextManager implements otel.ContextManager {
4
3
  protected storage: import("async_hooks").AsyncLocalStorage<otel.Context>;
@@ -37,6 +37,10 @@ export declare enum SpanName {
37
37
  * Workflow is scheduled by a client
38
38
  */
39
39
  WORKFLOW_START = "StartWorkflow",
40
+ /**
41
+ * Workflow is signalled
42
+ */
43
+ WORKFLOW_SIGNAL = "SignalWorkflow",
40
44
  /**
41
45
  * Workflow is client calls signalWithStart
42
46
  */
@@ -7,6 +7,10 @@ var SpanName;
7
7
  * Workflow is scheduled by a client
8
8
  */
9
9
  SpanName["WORKFLOW_START"] = "StartWorkflow";
10
+ /**
11
+ * Workflow is signalled
12
+ */
13
+ SpanName["WORKFLOW_SIGNAL"] = "SignalWorkflow";
10
14
  /**
11
15
  * Workflow is client calls signalWithStart
12
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/workflow/definitions.ts"],"names":[],"mappings":";;;AAwCA,IAAY,QA+BX;AA/BD,WAAY,QAAQ;IAClB;;OAEG;IACH,4CAAgC,CAAA;IAEhC;;OAEG;IACH,kEAAsD,CAAA;IAEtD;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,uDAA2C,CAAA;IAC3C;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,6CAAiC,CAAA;AACnC,CAAC,EA/BW,QAAQ,wBAAR,QAAQ,QA+BnB;AAEY,QAAA,cAAc,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/workflow/definitions.ts"],"names":[],"mappings":";;;AAwCA,IAAY,QAoCX;AApCD,WAAY,QAAQ;IAClB;;OAEG;IACH,4CAAgC,CAAA;IAEhC;;OAEG;IACH,8CAAkC,CAAA;IAElC;;OAEG;IACH,kEAAsD,CAAA;IAEtD;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,uDAA2C,CAAA;IAC3C;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,4CAAgC,CAAA;IAChC;;OAEG;IACH,6CAAiC,CAAA;AACnC,CAAC,EApCW,QAAQ,wBAAR,QAAQ,QAoCnB;AAEY,QAAA,cAAc,GAAG,GAAG,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import './runtime';
2
2
  import * as otel from '@opentelemetry/api';
3
- import { ActivityInput, ContinueAsNewInput, DisposeInput, Next, StartChildWorkflowExecutionInput, WorkflowExecuteInput, WorkflowInboundCallsInterceptor, WorkflowInternalsInterceptor, WorkflowOutboundCallsInterceptor } from '@temporalio/workflow';
3
+ import { ActivityInput, ContinueAsNewInput, DisposeInput, GetLogAttributesInput, Next, SignalInput, SignalWorkflowInput, StartChildWorkflowExecutionInput, WorkflowExecuteInput, WorkflowInboundCallsInterceptor, WorkflowInternalsInterceptor, WorkflowOutboundCallsInterceptor } from '@temporalio/workflow';
4
4
  export * from './definitions';
5
5
  /**
6
6
  * Intercepts calls to run a Workflow
@@ -11,6 +11,7 @@ export * from './definitions';
11
11
  export declare class OpenTelemetryInboundInterceptor implements WorkflowInboundCallsInterceptor {
12
12
  protected readonly tracer: otel.Tracer;
13
13
  execute(input: WorkflowExecuteInput, next: Next<WorkflowInboundCallsInterceptor, 'execute'>): Promise<unknown>;
14
+ handleSignal(input: SignalInput, next: Next<WorkflowInboundCallsInterceptor, 'handleSignal'>): Promise<void>;
14
15
  }
15
16
  /**
16
17
  * Intercepts outbound calls to schedule an Activity
@@ -22,6 +23,8 @@ export declare class OpenTelemetryOutboundInterceptor implements WorkflowOutboun
22
23
  scheduleActivity(input: ActivityInput, next: Next<WorkflowOutboundCallsInterceptor, 'scheduleActivity'>): Promise<unknown>;
23
24
  startChildWorkflowExecution(input: StartChildWorkflowExecutionInput, next: Next<WorkflowOutboundCallsInterceptor, 'startChildWorkflowExecution'>): Promise<[Promise<string>, Promise<unknown>]>;
24
25
  continueAsNew(input: ContinueAsNewInput, next: Next<WorkflowOutboundCallsInterceptor, 'continueAsNew'>): Promise<never>;
26
+ signalWorkflow(input: SignalWorkflowInput, next: Next<WorkflowOutboundCallsInterceptor, 'signalWorkflow'>): Promise<void>;
27
+ getLogAttributes(input: GetLogAttributesInput, next: Next<WorkflowOutboundCallsInterceptor, 'getLogAttributes'>): Record<string, unknown>;
25
28
  }
26
29
  export declare class OpenTelemetryInternalsInterceptor implements WorkflowInternalsInterceptor {
27
30
  dispose(input: DisposeInput, next: Next<WorkflowInternalsInterceptor, 'dispose'>): Promise<void>;
@@ -30,6 +30,7 @@ exports.OpenTelemetryInternalsInterceptor = exports.OpenTelemetryOutboundInterce
30
30
  /* eslint-disable import/order */
31
31
  // eslint-disable-next-line import/no-unassigned-import
32
32
  require("./runtime"); // Patch the Workflow isolate runtime for opentelemetry
33
+ const otel = __importStar(require("@opentelemetry/api"));
33
34
  const tracing = __importStar(require("@opentelemetry/sdk-trace-base"));
34
35
  const workflow_1 = require("@temporalio/workflow");
35
36
  const instrumentation_1 = require("../instrumentation");
@@ -71,6 +72,15 @@ class OpenTelemetryInboundInterceptor {
71
72
  acceptableErrors: (err) => err instanceof workflow_1.ContinueAsNew,
72
73
  });
73
74
  }
75
+ async handleSignal(input, next) {
76
+ const context = await (0, instrumentation_1.extractContextFromHeaders)(input.headers);
77
+ return await (0, instrumentation_1.instrument)({
78
+ tracer: this.tracer,
79
+ spanName: `${definitions_1.SpanName.WORKFLOW_SIGNAL}${definitions_1.SPAN_DELIMITER}${input.signalName}`,
80
+ fn: () => next(input),
81
+ context,
82
+ });
83
+ }
74
84
  }
75
85
  exports.OpenTelemetryInboundInterceptor = OpenTelemetryInboundInterceptor;
76
86
  /**
@@ -122,6 +132,34 @@ class OpenTelemetryOutboundInterceptor {
122
132
  acceptableErrors: (err) => err instanceof workflow_1.ContinueAsNew,
123
133
  });
124
134
  }
135
+ async signalWorkflow(input, next) {
136
+ return await (0, instrumentation_1.instrument)({
137
+ tracer: this.tracer,
138
+ spanName: `${definitions_1.SpanName.WORKFLOW_SIGNAL}${definitions_1.SPAN_DELIMITER}${input.signalName}`,
139
+ fn: async () => {
140
+ const headers = await (0, instrumentation_1.headersWithContext)(input.headers);
141
+ return next({
142
+ ...input,
143
+ headers,
144
+ });
145
+ },
146
+ });
147
+ }
148
+ getLogAttributes(input, next) {
149
+ const span = otel.trace.getSpan(otel.context.active());
150
+ const spanContext = span?.spanContext();
151
+ if (spanContext && otel.isSpanContextValid(spanContext)) {
152
+ return next({
153
+ trace_id: spanContext.traceId,
154
+ span_id: spanContext.spanId,
155
+ trace_flags: `0${spanContext.traceFlags.toString(16)}`,
156
+ ...input,
157
+ });
158
+ }
159
+ else {
160
+ return next(input);
161
+ }
162
+ }
125
163
  }
126
164
  exports.OpenTelemetryOutboundInterceptor = OpenTelemetryOutboundInterceptor;
127
165
  class OpenTelemetryInternalsInterceptor {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"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"}
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.11.3",
3
+ "version": "1.11.5",
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",
@@ -20,18 +20,18 @@
20
20
  "@opentelemetry/sdk-trace-base": "^1.19.0"
21
21
  },
22
22
  "devDependencies": {
23
- "@temporalio/activity": "1.11.3",
24
- "@temporalio/client": "1.11.3",
25
- "@temporalio/common": "1.11.3",
26
- "@temporalio/worker": "1.11.3",
27
- "@temporalio/workflow": "1.11.3"
23
+ "@temporalio/activity": "1.11.5",
24
+ "@temporalio/client": "1.11.5",
25
+ "@temporalio/common": "1.11.5",
26
+ "@temporalio/worker": "1.11.5",
27
+ "@temporalio/workflow": "1.11.5"
28
28
  },
29
29
  "peerDependencies": {
30
- "@temporalio/activity": "1.11.3",
31
- "@temporalio/client": "1.11.3",
32
- "@temporalio/common": "1.11.3",
33
- "@temporalio/worker": "1.11.3",
34
- "@temporalio/workflow": "1.11.3"
30
+ "@temporalio/activity": "1.11.5",
31
+ "@temporalio/client": "1.11.5",
32
+ "@temporalio/common": "1.11.5",
33
+ "@temporalio/worker": "1.11.5",
34
+ "@temporalio/workflow": "1.11.5"
35
35
  },
36
36
  "bugs": {
37
37
  "url": "https://github.com/temporalio/sdk-typescript/issues"
@@ -49,5 +49,5 @@
49
49
  "src",
50
50
  "lib"
51
51
  ],
52
- "gitHead": "4c90f9d844710abf7e085662373aac226ec09017"
52
+ "gitHead": "a7b946cd5d4d58432509ead0f8d0c0c40742c107"
53
53
  }
@@ -1,5 +1,5 @@
1
1
  import * as otel from '@opentelemetry/api';
2
- import { Next, WorkflowClientInterceptor, WorkflowStartInput } from '@temporalio/client';
2
+ import { Next, WorkflowClientInterceptor, WorkflowSignalInput, WorkflowStartInput } from '@temporalio/client';
3
3
  import { instrument, headersWithContext, RUN_ID_ATTR_KEY } from '../instrumentation';
4
4
  import { SpanName, SPAN_DELIMITER } from '../workflow';
5
5
 
@@ -31,4 +31,15 @@ export class OpenTelemetryWorkflowClientInterceptor implements WorkflowClientInt
31
31
  },
32
32
  });
33
33
  }
34
+
35
+ async signal(input: WorkflowSignalInput, next: Next<WorkflowClientInterceptor, 'signal'>): Promise<void> {
36
+ return await instrument({
37
+ tracer: this.tracer,
38
+ spanName: `${SpanName.WORKFLOW_SIGNAL}${SPAN_DELIMITER}${input.signalName}`,
39
+ fn: async () => {
40
+ const headers = await headersWithContext(input.headers);
41
+ await next({ ...input, headers });
42
+ },
43
+ });
44
+ }
34
45
  }
@@ -2,7 +2,14 @@ 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 { ActivityExecuteInput, ActivityInboundCallsInterceptor, InjectedSink, Next } from '@temporalio/worker';
5
+ import {
6
+ ActivityExecuteInput,
7
+ ActivityInboundCallsInterceptor,
8
+ ActivityOutboundCallsInterceptor,
9
+ GetLogAttributesInput,
10
+ InjectedSink,
11
+ Next,
12
+ } from '@temporalio/worker';
6
13
  import { instrument, extractContextFromHeaders } from '../instrumentation';
7
14
  import { OpenTelemetryWorkflowExporter, SerializableSpan, SpanName, SPAN_DELIMITER } from '../workflow';
8
15
 
@@ -33,6 +40,33 @@ export class OpenTelemetryActivityInboundInterceptor implements ActivityInboundC
33
40
  }
34
41
  }
35
42
 
43
+ /**
44
+ * Intercepts calls to emit logs from an Activity.
45
+ *
46
+ * Attach OpenTelemetry context tracing attributes to emitted log messages, if appropriate.
47
+ */
48
+ export class OpenTelemetryActivityOutboundInterceptor implements ActivityOutboundCallsInterceptor {
49
+ constructor(protected readonly ctx: ActivityContext) {}
50
+
51
+ public getLogAttributes(
52
+ input: GetLogAttributesInput,
53
+ next: Next<ActivityOutboundCallsInterceptor, 'getLogAttributes'>
54
+ ): Record<string, unknown> {
55
+ const span = otel.trace.getSpan(otel.context.active());
56
+ const spanContext = span?.spanContext();
57
+ if (spanContext && otel.isSpanContextValid(spanContext)) {
58
+ return next({
59
+ trace_id: spanContext.traceId,
60
+ span_id: spanContext.spanId,
61
+ trace_flags: `0${spanContext.traceFlags.toString(16)}`,
62
+ ...input,
63
+ });
64
+ } else {
65
+ return next(input);
66
+ }
67
+ }
68
+ }
69
+
36
70
  /**
37
71
  * Takes an opentelemetry SpanExporter and turns it into an injected Workflow span exporter sink
38
72
  */
@@ -44,6 +44,11 @@ export enum SpanName {
44
44
  */
45
45
  WORKFLOW_START = 'StartWorkflow',
46
46
 
47
+ /**
48
+ * Workflow is signalled
49
+ */
50
+ WORKFLOW_SIGNAL = 'SignalWorkflow',
51
+
47
52
  /**
48
53
  * Workflow is client calls signalWithStart
49
54
  */
@@ -8,7 +8,10 @@ import {
8
8
  ContinueAsNew,
9
9
  ContinueAsNewInput,
10
10
  DisposeInput,
11
+ GetLogAttributesInput,
11
12
  Next,
13
+ SignalInput,
14
+ SignalWorkflowInput,
12
15
  StartChildWorkflowExecutionInput,
13
16
  WorkflowExecuteInput,
14
17
  WorkflowInboundCallsInterceptor,
@@ -61,6 +64,19 @@ export class OpenTelemetryInboundInterceptor implements WorkflowInboundCallsInte
61
64
  acceptableErrors: (err) => err instanceof ContinueAsNew,
62
65
  });
63
66
  }
67
+
68
+ public async handleSignal(
69
+ input: SignalInput,
70
+ next: Next<WorkflowInboundCallsInterceptor, 'handleSignal'>
71
+ ): Promise<void> {
72
+ const context = await extractContextFromHeaders(input.headers);
73
+ return await instrument({
74
+ tracer: this.tracer,
75
+ spanName: `${SpanName.WORKFLOW_SIGNAL}${SPAN_DELIMITER}${input.signalName}`,
76
+ fn: () => next(input),
77
+ context,
78
+ });
79
+ }
64
80
  }
65
81
 
66
82
  /**
@@ -122,6 +138,41 @@ export class OpenTelemetryOutboundInterceptor implements WorkflowOutboundCallsIn
122
138
  acceptableErrors: (err) => err instanceof ContinueAsNew,
123
139
  });
124
140
  }
141
+
142
+ public async signalWorkflow(
143
+ input: SignalWorkflowInput,
144
+ next: Next<WorkflowOutboundCallsInterceptor, 'signalWorkflow'>
145
+ ): Promise<void> {
146
+ return await instrument({
147
+ tracer: this.tracer,
148
+ spanName: `${SpanName.WORKFLOW_SIGNAL}${SPAN_DELIMITER}${input.signalName}`,
149
+ fn: async () => {
150
+ const headers = await headersWithContext(input.headers);
151
+ return next({
152
+ ...input,
153
+ headers,
154
+ });
155
+ },
156
+ });
157
+ }
158
+
159
+ public getLogAttributes(
160
+ input: GetLogAttributesInput,
161
+ next: Next<WorkflowOutboundCallsInterceptor, 'getLogAttributes'>
162
+ ): Record<string, unknown> {
163
+ const span = otel.trace.getSpan(otel.context.active());
164
+ const spanContext = span?.spanContext();
165
+ if (spanContext && otel.isSpanContextValid(spanContext)) {
166
+ return next({
167
+ trace_id: spanContext.traceId,
168
+ span_id: spanContext.spanId,
169
+ trace_flags: `0${spanContext.traceFlags.toString(16)}`,
170
+ ...input,
171
+ });
172
+ } else {
173
+ return next(input);
174
+ }
175
+ }
125
176
  }
126
177
 
127
178
  export class OpenTelemetryInternalsInterceptor implements WorkflowInternalsInterceptor {