Skip to content

Commit 32d77ce

Browse files
committed
Add annotations to task runs
1 parent 54d95ee commit 32d77ce

File tree

24 files changed

+133
-28
lines changed

24 files changed

+133
-28
lines changed

apps/webapp/app/routes/api.v1.runs.$runParam.replay.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export async function action({ request, params }: ActionFunctionArgs) {
4242
}
4343

4444
const service = new ReplayTaskRunService();
45-
const newRun = await service.call(taskRun);
45+
const newRun = await service.call(taskRun, { triggerSource: "api" });
4646

4747
if (!newRun) {
4848
return json({ error: "Failed to create new run" }, { status: 400 });

apps/webapp/app/routes/api.v1.tasks.$taskId.trigger.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export const HeadersSchema = z.object({
3636
"x-trigger-engine-version": RunEngineVersionSchema.nullish(),
3737
"x-trigger-request-idempotency-key": z.string().nullish(),
3838
"x-trigger-realtime-streams-version": z.string().nullish(),
39+
"x-trigger-source": z.string().nullish(),
3940
traceparent: z.string().optional(),
4041
tracestate: z.string().optional(),
4142
});
@@ -67,6 +68,7 @@ const { action, loader } = createActionApiRoute(
6768
"x-trigger-engine-version": engineVersion,
6869
"x-trigger-request-idempotency-key": requestIdempotencyKey,
6970
"x-trigger-realtime-streams-version": realtimeStreamsVersion,
71+
"x-trigger-source": triggerSourceHeader,
7072
} = headers;
7173

7274
const cachedResponse = await handleRequestIdempotency(requestIdempotencyKey, {
@@ -119,6 +121,10 @@ const { action, loader } = createActionApiRoute(
119121
realtimeStreamsVersion: determineRealtimeStreamsVersion(
120122
realtimeStreamsVersion ?? undefined
121123
),
124+
triggerSource: body.options?.parentRunId
125+
? "sdk"
126+
: triggerSourceHeader ?? "api",
127+
triggerAction: "trigger",
122128
},
123129
engineVersion ?? undefined
124130
);

apps/webapp/app/routes/api.v1.tasks.batch.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ const { action, loader } = createActionApiRoute(
7272
"x-trigger-engine-version": engineVersion,
7373
"batch-processing-strategy": batchProcessingStrategy,
7474
"x-trigger-realtime-streams-version": realtimeStreamsVersion,
75+
"x-trigger-source": triggerSourceHeader,
7576
traceparent,
7677
tracestate,
7778
} = headers;
@@ -113,6 +114,8 @@ const { action, loader } = createActionApiRoute(
113114
realtimeStreamsVersion: determineRealtimeStreamsVersion(
114115
realtimeStreamsVersion ?? undefined
115116
),
117+
triggerSource: triggerSourceHeader ?? undefined,
118+
triggerAction: "trigger",
116119
});
117120

118121
const $responseHeaders = await responseHeaders(

apps/webapp/app/routes/api.v2.tasks.batch.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ const { action, loader } = createActionApiRoute(
6262
"batch-processing-strategy": batchProcessingStrategy,
6363
"x-trigger-request-idempotency-key": requestIdempotencyKey,
6464
"x-trigger-realtime-streams-version": realtimeStreamsVersion,
65+
"x-trigger-source": triggerSourceHeader,
6566
traceparent,
6667
tracestate,
6768
} = headers;
@@ -127,6 +128,8 @@ const { action, loader } = createActionApiRoute(
127128
realtimeStreamsVersion: determineRealtimeStreamsVersion(
128129
realtimeStreamsVersion ?? undefined
129130
),
131+
triggerSource: triggerSourceHeader ?? undefined,
132+
triggerAction: "trigger",
130133
});
131134

132135
const $responseHeaders = await responseHeaders(

apps/webapp/app/routes/resources.taskruns.$runParam.replay.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ export const action: ActionFunction = async ({ request, params }) => {
214214
ttlSeconds: submission.value.ttlSeconds,
215215
version: submission.value.version,
216216
prioritySeconds: submission.value.prioritySeconds,
217+
triggerSource: "dashboard",
217218
});
218219

219220
if (!newRun) {

apps/webapp/app/runEngine/services/batchTrigger.server.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ export type BatchTriggerTaskServiceOptions = {
4848
spanParentAsLink?: boolean;
4949
oneTimeUseToken?: string;
5050
realtimeStreamsVersion?: "v1" | "v2";
51+
triggerSource?: string;
52+
triggerAction?: string;
5153
};
5254

5355
/**
@@ -678,6 +680,8 @@ export class RunEngineBatchTriggerService extends WithRunEngine {
678680
batchId: batch.id,
679681
batchIndex: currentIndex,
680682
realtimeStreamsVersion: options?.realtimeStreamsVersion,
683+
triggerSource: parentRunId ? "sdk" : options?.triggerSource ?? "api",
684+
triggerAction: options?.triggerAction ?? "trigger",
681685
},
682686
"V2"
683687
);

apps/webapp/app/runEngine/services/triggerTask.server.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
import { Tracer } from "@opentelemetry/api";
77
import { tryCatch } from "@trigger.dev/core/utils";
88
import {
9+
RunAnnotations,
910
TaskRunError,
1011
taskRunErrorEnhancer,
1112
taskRunErrorToString,
@@ -289,6 +290,17 @@ export class RunEngineTriggerTaskService {
289290

290291
const workerQueue = await this.queueConcern.getWorkerQueue(environment, body.options?.region);
291292

293+
// Build annotations for this run
294+
const triggerSource = options.triggerSource ?? "api";
295+
const triggerAction = options.triggerAction ?? "trigger";
296+
const parentAnnotations = RunAnnotations.safeParse(parentRun?.annotations).data;
297+
const annotations = {
298+
triggerSource,
299+
triggerAction,
300+
rootTriggerSource: parentAnnotations?.rootTriggerSource ?? triggerSource,
301+
rootScheduleId: parentAnnotations?.rootScheduleId || options.scheduleId || undefined,
302+
};
303+
292304
try {
293305
return await this.traceEventConcern.traceRun(
294306
triggerRequest,
@@ -369,6 +381,7 @@ export class RunEngineTriggerTaskService {
369381
planType,
370382
realtimeStreamsVersion: options.realtimeStreamsVersion,
371383
debounce: body.options?.debounce,
384+
annotations,
372385
// When debouncing with triggerAndWait, create a span for the debounced trigger
373386
onDebounced:
374387
body.options?.debounce && body.options?.resumeParentOnCompletion

apps/webapp/app/v3/runEngineHandlers.server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ export function setupBatchQueueCallbacks() {
750750
batchIndex: itemIndex,
751751
realtimeStreamsVersion: meta.realtimeStreamsVersion,
752752
planType: meta.planType,
753+
triggerSource: meta.parentRunId ? "sdk" : "api",
754+
triggerAction: "trigger",
753755
},
754756
"V2"
755757
);

apps/webapp/app/v3/scheduleEngine.server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ function createScheduleEngine() {
106106
scheduleInstanceId,
107107
queueTimestamp: exactScheduleTime,
108108
overrideCreatedAt: exactScheduleTime,
109+
triggerSource: "schedule",
110+
triggerAction: "trigger",
109111
}
110112
);
111113

apps/webapp/app/v3/services/batchTriggerV3.server.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ export type BatchTriggerTaskServiceOptions = {
5757
spanParentAsLink?: boolean;
5858
oneTimeUseToken?: string;
5959
realtimeStreamsVersion?: "v1" | "v2";
60+
triggerSource?: string;
61+
triggerAction?: string;
6062
};
6163

6264
type RunItemData = {
@@ -853,6 +855,10 @@ export class BatchTriggerV3Service extends BaseService {
853855
skipChecks: true,
854856
runFriendlyId: task.runId,
855857
realtimeStreamsVersion: options?.realtimeStreamsVersion,
858+
triggerSource: task.item.options?.parentRunId
859+
? "sdk"
860+
: options?.triggerSource ?? "api",
861+
triggerAction: options?.triggerAction ?? "trigger",
856862
}
857863
);
858864

0 commit comments

Comments
 (0)