Skip to content

Commit 2c014f7

Browse files
authored
Override log retention (#1385)
* set full log retention as admin * If run.logsDeletedAt is set, don’t bother getting the trace
1 parent a69e04f commit 2c014f7

File tree

2 files changed

+37
-41
lines changed

2 files changed

+37
-41
lines changed

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

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ export class RunPresenter {
2121
projectSlug,
2222
organizationSlug,
2323
runFriendlyId,
24+
showDeletedLogs,
2425
}: {
2526
userId: string;
2627
projectSlug: string;
2728
organizationSlug: string;
2829
runFriendlyId: string;
30+
showDeletedLogs: boolean;
2931
}) {
3032
const run = await this.#prismaClient.taskRun.findFirstOrThrow({
3133
select: {
@@ -72,31 +74,41 @@ export class RunPresenter {
7274
},
7375
});
7476

77+
const showLogs = showDeletedLogs ? true : run.logsDeletedAt ? false : true;
78+
79+
const runData = {
80+
id: run.id,
81+
number: run.number,
82+
friendlyId: run.friendlyId,
83+
traceId: run.traceId,
84+
spanId: run.spanId,
85+
status: run.status,
86+
isFinished: isFinalRunStatus(run.status),
87+
completedAt: run.completedAt,
88+
logsDeletedAt: showDeletedLogs ? null : run.logsDeletedAt,
89+
rootTaskRun: run.rootTaskRun,
90+
environment: {
91+
id: run.runtimeEnvironment.id,
92+
organizationId: run.runtimeEnvironment.organizationId,
93+
type: run.runtimeEnvironment.type,
94+
slug: run.runtimeEnvironment.slug,
95+
userId: run.runtimeEnvironment.orgMember?.user.id,
96+
userName: getUsername(run.runtimeEnvironment.orgMember?.user),
97+
},
98+
};
99+
100+
if (!showLogs) {
101+
return {
102+
run: runData,
103+
trace: undefined,
104+
};
105+
}
106+
75107
// get the events
76108
const traceSummary = await eventRepository.getTraceSummary(run.traceId);
77-
78109
if (!traceSummary) {
79110
return {
80-
run: {
81-
id: run.id,
82-
number: run.number,
83-
friendlyId: run.friendlyId,
84-
traceId: run.traceId,
85-
spanId: run.spanId,
86-
status: run.status,
87-
isFinished: isFinalRunStatus(run.status),
88-
completedAt: run.completedAt,
89-
logsDeletedAt: run.logsDeletedAt,
90-
rootTaskRun: run.rootTaskRun,
91-
environment: {
92-
id: run.runtimeEnvironment.id,
93-
organizationId: run.runtimeEnvironment.organizationId,
94-
type: run.runtimeEnvironment.type,
95-
slug: run.runtimeEnvironment.slug,
96-
userId: run.runtimeEnvironment.orgMember?.user.id,
97-
userName: getUsername(run.runtimeEnvironment.orgMember?.user),
98-
},
99-
},
111+
run: runData,
100112
trace: undefined,
101113
};
102114
}
@@ -139,26 +151,7 @@ export class RunPresenter {
139151
}
140152

141153
return {
142-
run: {
143-
id: run.id,
144-
number: run.number,
145-
friendlyId: run.friendlyId,
146-
traceId: run.traceId,
147-
spanId: run.spanId,
148-
status: run.status,
149-
isFinished: isFinalRunStatus(run.status),
150-
completedAt: run.completedAt,
151-
logsDeletedAt: run.logsDeletedAt,
152-
rootTaskRun: run.rootTaskRun,
153-
environment: {
154-
id: run.runtimeEnvironment.id,
155-
organizationId: run.runtimeEnvironment.organizationId,
156-
type: run.runtimeEnvironment.type,
157-
slug: run.runtimeEnvironment.slug,
158-
userId: run.runtimeEnvironment.orgMember?.user.id,
159-
userName: getUsername(run.runtimeEnvironment.orgMember?.user),
160-
},
161-
},
154+
run: runData,
162155
trace: {
163156
rootSpanStatus,
164157
events: events,

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ import {
8080
import { SpanView } from "../resources.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam.spans.$spanParam/route";
8181
import { useCurrentPlan } from "../_app.orgs.$organizationSlug/route";
8282
import { getResizableSnapshot } from "~/services/resizablePanel.server";
83+
import { getImpersonationId } from "~/services/impersonation.server";
8384

8485
const resizableSettings = {
8586
parent: {
@@ -115,12 +116,14 @@ type TraceEvent = NonNullable<SerializeFrom<typeof loader>["trace"]>["events"][0
115116

116117
export const loader = async ({ request, params }: LoaderFunctionArgs) => {
117118
const userId = await requireUserId(request);
119+
const impersonationId = await getImpersonationId(request);
118120
const { projectParam, organizationSlug, runParam } = v3RunParamsSchema.parse(params);
119121

120122
const presenter = new RunPresenter();
121123
const result = await presenter.call({
122124
userId,
123125
organizationSlug,
126+
showDeletedLogs: !!impersonationId,
124127
projectSlug: projectParam,
125128
runFriendlyId: runParam,
126129
});

0 commit comments

Comments
 (0)