Skip to content

Commit b78b3dc

Browse files
authored
feat: link the original run from replayed runs (#2262)
* Add ID of the replayedFrom run to the TaskRun schema * Propagate the replayedFrom run ID in the replay flow * Link the replayed run in the run details pane
1 parent 630e955 commit b78b3dc

File tree

10 files changed

+27
-0
lines changed

10 files changed

+27
-0
lines changed

apps/webapp/app/presenters/v3/SpanPresenter.server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ export class SpanPresenter extends BasePresenter {
218218
friendlyId: true,
219219
},
220220
},
221+
replayedFromTaskRunFriendlyId: true,
221222
},
222223
where: span.originalRun
223224
? {
@@ -331,6 +332,7 @@ export class SpanPresenter extends BasePresenter {
331332
runtime: run.lockedToVersion?.runtime,
332333
runtimeVersion: run.lockedToVersion?.runtimeVersion,
333334
isTest: run.isTest,
335+
replayedFromTaskRunFriendlyId: run.replayedFromTaskRunFriendlyId,
334336
environmentId: run.runtimeEnvironment.id,
335337
idempotencyKey: run.idempotencyKey,
336338
idempotencyKeyExpiresAt: run.idempotencyKeyExpiresAt,

apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.spans.$spanParam/route.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ import {
6363
v3DeploymentVersionPath,
6464
v3RunDownloadLogsPath,
6565
v3RunPath,
66+
v3RunRedirectPath,
6667
v3RunSpanPath,
6768
v3RunsPath,
6869
v3SchedulePath,
@@ -592,6 +593,20 @@ function RunBody({
592593
{run.isTest ? <CheckIcon className="size-4 text-text-dimmed" /> : "–"}
593594
</Property.Value>
594595
</Property.Item>
596+
{run.replayedFromTaskRunFriendlyId && (
597+
<Property.Item>
598+
<Property.Label>Replayed from</Property.Label>
599+
<Property.Value>
600+
<TextLink
601+
to={v3RunRedirectPath(organization, project, {
602+
friendlyId: run.replayedFromTaskRunFriendlyId,
603+
})}
604+
>
605+
{run.replayedFromTaskRunFriendlyId}
606+
</TextLink>
607+
</Property.Value>
608+
</Property.Item>
609+
)}
595610
{environment && (
596611
<Property.Item>
597612
<Property.Label>Environment</Property.Label>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ export class RunEngineTriggerTaskService {
264264
spanId: event.spanId,
265265
parentSpanId:
266266
options.parentAsLinkType === "replay" ? undefined : event.traceparent?.spanId,
267+
replayedFromTaskRunFriendlyId: options.replayedFromTaskRunFriendlyId,
267268
lockedToVersionId: lockedToBackgroundWorker?.id,
268269
taskVersion: lockedToBackgroundWorker?.version,
269270
sdkVersion: lockedToBackgroundWorker?.sdkVersion,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export class ReplayTaskRunService extends BaseService {
8787
{
8888
spanParentAsLink: true,
8989
parentAsLinkType: "replay",
90+
replayedFromTaskRunFriendlyId: existingTaskRun.friendlyId,
9091
traceContext: {
9192
traceparent: `00-${existingTaskRun.traceId}-${existingTaskRun.spanId}-01`,
9293
},

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export type TriggerTaskServiceOptions = {
3333
scheduleInstanceId?: string;
3434
queueTimestamp?: Date;
3535
overrideCreatedAt?: Date;
36+
replayedFromTaskRunFriendlyId?: string;
3637
};
3738

3839
export class OutOfEntitlementError extends Error {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ export class TriggerTaskServiceV1 extends BaseService {
427427
parentAttempt?.taskRun.id ??
428428
dependentBatchRun?.dependentTaskAttempt?.taskRun.rootTaskRunId ??
429429
dependentBatchRun?.dependentTaskAttempt?.taskRun.id,
430+
replayedFromTaskRunFriendlyId: options.replayedFromTaskRunFriendlyId,
430431
batchId: dependentBatchRun?.id ?? parentBatchRun?.id,
431432
resumeParentOnCompletion: !!(dependentAttempt ?? dependentBatchRun),
432433
depth,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE "TaskRun" ADD COLUMN "replayedFromTaskRunFriendlyId" TEXT;

internal-packages/database/prisma/schema.prisma

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,8 @@ model TaskRun {
648648
649649
logsDeletedAt DateTime?
650650
651+
replayedFromTaskRunFriendlyId String?
652+
651653
/// This represents the original task that that was triggered outside of a Trigger.dev task
652654
rootTaskRun TaskRun? @relation("TaskRootRun", fields: [rootTaskRunId], references: [id], onDelete: SetNull, onUpdate: NoAction)
653655
rootTaskRunId String?

internal-packages/run-engine/src/engine/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ export class RunEngine {
372372
tags,
373373
parentTaskRunId,
374374
rootTaskRunId,
375+
replayedFromTaskRunFriendlyId,
375376
batch,
376377
resumeParentOnCompletion,
377378
depth,
@@ -451,6 +452,7 @@ export class RunEngine {
451452
oneTimeUseToken,
452453
parentTaskRunId,
453454
rootTaskRunId,
455+
replayedFromTaskRunFriendlyId,
454456
batchId: batch?.id,
455457
resumeParentOnCompletion,
456458
depth,

internal-packages/run-engine/src/engine/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ export type TriggerParams = {
126126
tags: { id: string; name: string }[];
127127
parentTaskRunId?: string;
128128
rootTaskRunId?: string;
129+
replayedFromTaskRunFriendlyId?: string;
129130
batch?: {
130131
id: string;
131132
index: number;

0 commit comments

Comments
 (0)