From b7c2d86c84864c0e4490d0674cf87bcf3b30cf42 Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Tue, 10 Dec 2024 12:52:07 +0000 Subject: [PATCH] Add run metadata to runs.list endpoint --- .../v3/ApiRunListPresenter.server.ts | 72 +++++++++++-------- .../presenters/v3/RunListPresenter.server.ts | 8 ++- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/apps/webapp/app/presenters/v3/ApiRunListPresenter.server.ts b/apps/webapp/app/presenters/v3/ApiRunListPresenter.server.ts index fe52834efc..766ca0367f 100644 --- a/apps/webapp/app/presenters/v3/ApiRunListPresenter.server.ts +++ b/apps/webapp/app/presenters/v3/ApiRunListPresenter.server.ts @@ -1,4 +1,4 @@ -import { ListRunResponse, ListRunResponseItem, RunStatus } from "@trigger.dev/core/v3"; +import { ListRunResponse, ListRunResponseItem, parsePacket, RunStatus } from "@trigger.dev/core/v3"; import { Project, RuntimeEnvironment, TaskRunStatus } from "@trigger.dev/database"; import assertNever from "assert-never"; import { z } from "zod"; @@ -220,36 +220,46 @@ export class ApiRunListPresenter extends BasePresenter { const results = await presenter.call(options); - const data: ListRunResponseItem[] = results.runs.map((run) => { - return { - id: run.friendlyId, - status: ApiRetrieveRunPresenter.apiStatusFromRunStatus(run.status), - taskIdentifier: run.taskIdentifier, - idempotencyKey: run.idempotencyKey, - version: run.version ?? undefined, - createdAt: new Date(run.createdAt), - updatedAt: new Date(run.updatedAt), - startedAt: run.startedAt ? new Date(run.startedAt) : undefined, - finishedAt: run.finishedAt ? new Date(run.finishedAt) : undefined, - delayedUntil: run.delayUntil ? new Date(run.delayUntil) : undefined, - isTest: run.isTest, - ttl: run.ttl ?? undefined, - expiredAt: run.expiredAt ? new Date(run.expiredAt) : undefined, - env: { - id: run.environment.id, - name: run.environment.slug, - user: run.environment.userName, - }, - tags: run.tags, - costInCents: run.costInCents, - baseCostInCents: run.baseCostInCents, - durationMs: run.usageDurationMs, - depth: run.depth, - ...ApiRetrieveRunPresenter.apiBooleanHelpersFromRunStatus( - ApiRetrieveRunPresenter.apiStatusFromRunStatus(run.status) - ), - }; - }); + logger.debug("RunListPresenter results", { results }); + + const data: ListRunResponseItem[] = await Promise.all( + results.runs.map(async (run) => { + const metadata = await parsePacket({ + data: run.metadata ?? undefined, + dataType: run.metadataType, + }); + + return { + id: run.friendlyId, + status: ApiRetrieveRunPresenter.apiStatusFromRunStatus(run.status), + taskIdentifier: run.taskIdentifier, + idempotencyKey: run.idempotencyKey, + version: run.version ?? undefined, + createdAt: new Date(run.createdAt), + updatedAt: new Date(run.updatedAt), + startedAt: run.startedAt ? new Date(run.startedAt) : undefined, + finishedAt: run.finishedAt ? new Date(run.finishedAt) : undefined, + delayedUntil: run.delayUntil ? new Date(run.delayUntil) : undefined, + isTest: run.isTest, + ttl: run.ttl ?? undefined, + expiredAt: run.expiredAt ? new Date(run.expiredAt) : undefined, + env: { + id: run.environment.id, + name: run.environment.slug, + user: run.environment.userName, + }, + tags: run.tags, + costInCents: run.costInCents, + baseCostInCents: run.baseCostInCents, + durationMs: run.usageDurationMs, + depth: run.depth, + metadata, + ...ApiRetrieveRunPresenter.apiBooleanHelpersFromRunStatus( + ApiRetrieveRunPresenter.apiStatusFromRunStatus(run.status) + ), + }; + }) + ); return { data, diff --git a/apps/webapp/app/presenters/v3/RunListPresenter.server.ts b/apps/webapp/app/presenters/v3/RunListPresenter.server.ts index 566a08703b..2deecbaa78 100644 --- a/apps/webapp/app/presenters/v3/RunListPresenter.server.ts +++ b/apps/webapp/app/presenters/v3/RunListPresenter.server.ts @@ -216,6 +216,8 @@ export class RunListPresenter extends BasePresenter { depth: number; rootTaskRunId: string | null; batchId: string | null; + metadata: string | null; + metadataType: string; }[] >` SELECT @@ -241,7 +243,9 @@ export class RunListPresenter extends BasePresenter { tr."usageDurationMs" AS "usageDurationMs", tr."depth" AS "depth", tr."rootTaskRunId" AS "rootTaskRunId", - tr."runTags" AS "tags" + tr."runTags" AS "tags", + tr."metadata" AS "metadata", + tr."metadataType" AS "metadataType" FROM ${sqlDatabaseSchema}."TaskRun" tr LEFT JOIN @@ -374,6 +378,8 @@ WHERE tags: run.tags ? run.tags.sort((a, b) => a.localeCompare(b)) : [], depth: run.depth, rootTaskRunId: run.rootTaskRunId, + metadata: run.metadata, + metadataType: run.metadataType, }; }), pagination: {