diff --git a/apps/webapp/app/presenters/v3/RunPresenter.server.ts b/apps/webapp/app/presenters/v3/RunPresenter.server.ts index 3ac7f73fda..cd082c5ee3 100644 --- a/apps/webapp/app/presenters/v3/RunPresenter.server.ts +++ b/apps/webapp/app/presenters/v3/RunPresenter.server.ts @@ -21,11 +21,13 @@ export class RunPresenter { projectSlug, organizationSlug, runFriendlyId, + showDeletedLogs, }: { userId: string; projectSlug: string; organizationSlug: string; runFriendlyId: string; + showDeletedLogs: boolean; }) { const run = await this.#prismaClient.taskRun.findFirstOrThrow({ select: { @@ -72,31 +74,41 @@ export class RunPresenter { }, }); + const showLogs = showDeletedLogs ? true : run.logsDeletedAt ? false : true; + + const runData = { + id: run.id, + number: run.number, + friendlyId: run.friendlyId, + traceId: run.traceId, + spanId: run.spanId, + status: run.status, + isFinished: isFinalRunStatus(run.status), + completedAt: run.completedAt, + logsDeletedAt: showDeletedLogs ? null : run.logsDeletedAt, + rootTaskRun: run.rootTaskRun, + environment: { + id: run.runtimeEnvironment.id, + organizationId: run.runtimeEnvironment.organizationId, + type: run.runtimeEnvironment.type, + slug: run.runtimeEnvironment.slug, + userId: run.runtimeEnvironment.orgMember?.user.id, + userName: getUsername(run.runtimeEnvironment.orgMember?.user), + }, + }; + + if (!showLogs) { + return { + run: runData, + trace: undefined, + }; + } + // get the events const traceSummary = await eventRepository.getTraceSummary(run.traceId); - if (!traceSummary) { return { - run: { - id: run.id, - number: run.number, - friendlyId: run.friendlyId, - traceId: run.traceId, - spanId: run.spanId, - status: run.status, - isFinished: isFinalRunStatus(run.status), - completedAt: run.completedAt, - logsDeletedAt: run.logsDeletedAt, - rootTaskRun: run.rootTaskRun, - environment: { - id: run.runtimeEnvironment.id, - organizationId: run.runtimeEnvironment.organizationId, - type: run.runtimeEnvironment.type, - slug: run.runtimeEnvironment.slug, - userId: run.runtimeEnvironment.orgMember?.user.id, - userName: getUsername(run.runtimeEnvironment.orgMember?.user), - }, - }, + run: runData, trace: undefined, }; } @@ -139,26 +151,7 @@ export class RunPresenter { } return { - run: { - id: run.id, - number: run.number, - friendlyId: run.friendlyId, - traceId: run.traceId, - spanId: run.spanId, - status: run.status, - isFinished: isFinalRunStatus(run.status), - completedAt: run.completedAt, - logsDeletedAt: run.logsDeletedAt, - rootTaskRun: run.rootTaskRun, - environment: { - id: run.runtimeEnvironment.id, - organizationId: run.runtimeEnvironment.organizationId, - type: run.runtimeEnvironment.type, - slug: run.runtimeEnvironment.slug, - userId: run.runtimeEnvironment.orgMember?.user.id, - userName: getUsername(run.runtimeEnvironment.orgMember?.user), - }, - }, + run: runData, trace: { rootSpanStatus, events: events, diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx index 39a4a49ec7..aade64dce9 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx @@ -80,6 +80,7 @@ import { import { SpanView } from "../resources.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam.spans.$spanParam/route"; import { useCurrentPlan } from "../_app.orgs.$organizationSlug/route"; import { getResizableSnapshot } from "~/services/resizablePanel.server"; +import { getImpersonationId } from "~/services/impersonation.server"; const resizableSettings = { parent: { @@ -115,12 +116,14 @@ type TraceEvent = NonNullable["trace"]>["events"][0 export const loader = async ({ request, params }: LoaderFunctionArgs) => { const userId = await requireUserId(request); + const impersonationId = await getImpersonationId(request); const { projectParam, organizationSlug, runParam } = v3RunParamsSchema.parse(params); const presenter = new RunPresenter(); const result = await presenter.call({ userId, organizationSlug, + showDeletedLogs: !!impersonationId, projectSlug: projectParam, runFriendlyId: runParam, });