Skip to content

Commit dac7f6c

Browse files
refactor sdk access with runtime workflow access
1 parent 061de4b commit dac7f6c

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

packages/interceptors-opentelemetry/src/workflow/index.ts

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { instrument, extractContextFromHeaders, headersWithContext } from '../in
2222
import { ContextManager } from './context-manager';
2323
import { SpanName, SPAN_DELIMITER } from './definitions';
2424
import { SpanExporter } from './span-exporter';
25-
import { ensureWorkflowModuleLoaded, getSdkFlagsChecking, getWorkflowModule } from './workflow-module-loader';
25+
import { ensureWorkflowModuleLoaded, getWorkflowModule, hasSdkFlag } from './workflow-module-loader';
2626

2727
export * from './definitions';
2828

@@ -63,8 +63,7 @@ export class OpenTelemetryInboundInterceptor implements WorkflowInboundCallsInte
6363
next: Next<WorkflowInboundCallsInterceptor, 'execute'>
6464
): Promise<unknown> {
6565
const { workflowInfo, ContinueAsNew } = getWorkflowModule();
66-
const { getActivator, SdkFlags } = getSdkFlagsChecking();
67-
const shouldInjectYield = getActivator().hasFlag(SdkFlags.OpenTelemetryInterceptorInsertYield);
66+
const shouldInjectYield = hasSdkFlag('OpenTelemetryInterceptorInsertYield');
6867
const context = extractContextFromHeaders(input.headers);
6968
if (shouldInjectYield) await Promise.resolve();
7069
return await instrument({
@@ -80,8 +79,7 @@ export class OpenTelemetryInboundInterceptor implements WorkflowInboundCallsInte
8079
input: SignalInput,
8180
next: Next<WorkflowInboundCallsInterceptor, 'handleSignal'>
8281
): Promise<void> {
83-
const { getActivator, SdkFlags } = getSdkFlagsChecking();
84-
const shouldInjectYield = getActivator().hasFlag(SdkFlags.OpenTelemetryHandleSignalInterceptorInsertYield);
82+
const shouldInjectYield = hasSdkFlag('OpenTelemetryHandleSignalInterceptorInsertYield');
8583
const context = extractContextFromHeaders(input.headers);
8684
if (shouldInjectYield) await Promise.resolve();
8785
return await instrument({
@@ -111,8 +109,7 @@ export class OpenTelemetryOutboundInterceptor implements WorkflowOutboundCallsIn
111109
input: ActivityInput,
112110
next: Next<WorkflowOutboundCallsInterceptor, 'scheduleActivity'>
113111
): Promise<unknown> {
114-
const { getActivator, SdkFlags } = getSdkFlagsChecking();
115-
const shouldInjectYield = getActivator().hasFlag(SdkFlags.OpenTelemetryInterceptorInsertYield);
112+
const shouldInjectYield = hasSdkFlag('OpenTelemetryInterceptorInsertYield');
116113
return await instrument({
117114
tracer: this.tracer,
118115
spanName: `${SpanName.ACTIVITY_START}${SPAN_DELIMITER}${input.activityType}`,
@@ -131,8 +128,7 @@ export class OpenTelemetryOutboundInterceptor implements WorkflowOutboundCallsIn
131128
input: LocalActivityInput,
132129
next: Next<WorkflowOutboundCallsInterceptor, 'scheduleLocalActivity'>
133130
): Promise<unknown> {
134-
const { getActivator, SdkFlags } = getSdkFlagsChecking();
135-
const shouldInjectYield = getActivator().hasFlag(SdkFlags.OpenTelemetryScheduleLocalActivityInterceptorInsertYield);
131+
const shouldInjectYield = hasSdkFlag('OpenTelemetryScheduleLocalActivityInterceptorInsertYield');
136132
return await instrument({
137133
tracer: this.tracer,
138134
spanName: `${SpanName.ACTIVITY_START}${SPAN_DELIMITER}${input.activityType}`,
@@ -151,8 +147,7 @@ export class OpenTelemetryOutboundInterceptor implements WorkflowOutboundCallsIn
151147
input: StartChildWorkflowExecutionInput,
152148
next: Next<WorkflowOutboundCallsInterceptor, 'startChildWorkflowExecution'>
153149
): Promise<[Promise<string>, Promise<unknown>]> {
154-
const { getActivator, SdkFlags } = getSdkFlagsChecking();
155-
const shouldInjectYield = getActivator().hasFlag(SdkFlags.OpenTelemetryInterceptorInsertYield);
150+
const shouldInjectYield = hasSdkFlag('OpenTelemetryInterceptorInsertYield');
156151
return await instrument({
157152
tracer: this.tracer,
158153
spanName: `${SpanName.CHILD_WORKFLOW_START}${SPAN_DELIMITER}${input.workflowType}`,
@@ -172,8 +167,7 @@ export class OpenTelemetryOutboundInterceptor implements WorkflowOutboundCallsIn
172167
next: Next<WorkflowOutboundCallsInterceptor, 'continueAsNew'>
173168
): Promise<never> {
174169
const { ContinueAsNew } = getWorkflowModule();
175-
const { getActivator, SdkFlags } = getSdkFlagsChecking();
176-
const shouldInjectYield = getActivator().hasFlag(SdkFlags.OpenTelemetryInterceptorInsertYield);
170+
const shouldInjectYield = hasSdkFlag('OpenTelemetryInterceptorInsertYield');
177171
return await instrument({
178172
tracer: this.tracer,
179173
spanName: `${SpanName.CONTINUE_AS_NEW}${SPAN_DELIMITER}${input.options.workflowType}`,
@@ -193,8 +187,7 @@ export class OpenTelemetryOutboundInterceptor implements WorkflowOutboundCallsIn
193187
input: SignalWorkflowInput,
194188
next: Next<WorkflowOutboundCallsInterceptor, 'signalWorkflow'>
195189
): Promise<void> {
196-
const { getActivator, SdkFlags } = getSdkFlagsChecking();
197-
const shouldInjectYield = getActivator().hasFlag(SdkFlags.OpenTelemetryInterceptorInsertYield);
190+
const shouldInjectYield = hasSdkFlag('OpenTelemetryInterceptorInsertYield');
198191
return await instrument({
199192
tracer: this.tracer,
200193
spanName: `${SpanName.WORKFLOW_SIGNAL}${SPAN_DELIMITER}${input.signalName}`,

packages/interceptors-opentelemetry/src/workflow/workflow-module-loader.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
*/
55
import type * as WorkflowModule from '@temporalio/workflow';
66
import type { SdkFlags as SdkFlagsT } from '@temporalio/workflow/lib/flags';
7-
import type { getActivator as getActivatorT } from '@temporalio/workflow/lib/global-attributes';
7+
8+
type SdkFlags = typeof SdkFlagsT;
89

910
// @temporalio/workflow is an optional peer dependency.
1011
// It can be missing as long as the user isn't attempting to construct a workflow interceptor.
@@ -32,10 +33,17 @@ export function getWorkflowModule(): typeof WorkflowModule {
3233
return workflowModule!;
3334
}
3435

35-
export function getSdkFlagsChecking(): { getActivator: typeof getActivatorT; SdkFlags: typeof SdkFlagsT } {
36+
/**
37+
* Returns if an SDK flag was set
38+
*
39+
* Expects to be called only after `ensureWorkflowModuleLoaded`.
40+
* Will throw if `@temporalio/workflow` is not available
41+
*/
42+
export function hasSdkFlag(flag: keyof SdkFlags): boolean {
3643
const { SdkFlags } = require('@temporalio/workflow/lib/flags');
3744
const { getActivator } = require('@temporalio/workflow/lib/global-attributes');
38-
return { getActivator, SdkFlags };
45+
46+
return getActivator().hasFlag(SdkFlags[flag]);
3947
}
4048

4149
/**

0 commit comments

Comments
 (0)