From 0b25571d77ea4cf9a0f4e06e6c7049a52bfcb236 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Wed, 28 May 2025 17:50:14 +0100 Subject: [PATCH 1/5] disable run debug logs by default --- apps/supervisor/src/env.ts | 1 + apps/supervisor/src/workloadServer/index.ts | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/apps/supervisor/src/env.ts b/apps/supervisor/src/env.ts index a4f6596011..a781bf5097 100644 --- a/apps/supervisor/src/env.ts +++ b/apps/supervisor/src/env.ts @@ -87,6 +87,7 @@ const Env = z.object({ // Debug DEBUG: BoolEnv.default(false), + SEND_RUN_DEBUG_LOGS: BoolEnv.default(false), }); export const env = Env.parse(stdEnv); diff --git a/apps/supervisor/src/workloadServer/index.ts b/apps/supervisor/src/workloadServer/index.ts index fb7c12c17a..e7e391bce3 100644 --- a/apps/supervisor/src/workloadServer/index.ts +++ b/apps/supervisor/src/workloadServer/index.ts @@ -24,6 +24,7 @@ import { import { HttpServer, type CheckpointClient } from "@trigger.dev/core/v3/serverOnly"; import { type IncomingMessage } from "node:http"; import { register } from "../metrics.js"; +import { env } from "../env.js"; // Use the official export when upgrading to socket.io@4.8.0 interface DefaultEventsMap { @@ -374,6 +375,10 @@ export class WorkloadServer extends EventEmitter { handler: async ({ req, reply, params, body }) => { reply.empty(204); + if (!env.SEND_RUN_DEBUG_LOGS) { + return; + } + await this.workerClient.sendDebugLog( params.runFriendlyId, body, From 42b9b46984c091b3d30113d75a26808db639715c Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Wed, 28 May 2025 17:55:47 +0100 Subject: [PATCH 2/5] lightweight webapp health check --- apps/webapp/app/routes/healthcheck.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/webapp/app/routes/healthcheck.tsx b/apps/webapp/app/routes/healthcheck.tsx index 05c00945ae..4f8f3f6307 100644 --- a/apps/webapp/app/routes/healthcheck.tsx +++ b/apps/webapp/app/routes/healthcheck.tsx @@ -3,7 +3,7 @@ import type { LoaderFunction } from "@remix-run/node"; export const loader: LoaderFunction = async ({ request }) => { try { - await prisma.user.count(); + await prisma.$queryRaw`SELECT 1`; return new Response("OK"); } catch (error: unknown) { console.log("healthcheck ❌", { error }); From 7494100032367d65b7fb7bac065040e7be65a134 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Wed, 28 May 2025 18:02:39 +0100 Subject: [PATCH 3/5] disable debug logs for dev runs --- ...e.v1.dev.runs.$runFriendlyId.logs.debug.ts | 115 +++++++++--------- 1 file changed, 60 insertions(+), 55 deletions(-) diff --git a/apps/webapp/app/routes/engine.v1.dev.runs.$runFriendlyId.logs.debug.ts b/apps/webapp/app/routes/engine.v1.dev.runs.$runFriendlyId.logs.debug.ts index 9bdc4d16d2..4e24006025 100644 --- a/apps/webapp/app/routes/engine.v1.dev.runs.$runFriendlyId.logs.debug.ts +++ b/apps/webapp/app/routes/engine.v1.dev.runs.$runFriendlyId.logs.debug.ts @@ -11,64 +11,69 @@ import { logger } from "~/services/logger.server"; import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server"; import { recordRunDebugLog } from "~/v3/eventRepository.server"; -const { action } = createActionApiRoute( - { - params: z.object({ - runFriendlyId: z.string(), - }), - body: WorkerApiDebugLogBody, - method: "POST", - }, - async ({ - authentication, - body, - params, - }): Promise> => { - const { runFriendlyId } = params; +// const { action } = createActionApiRoute( +// { +// params: z.object({ +// runFriendlyId: z.string(), +// }), +// body: WorkerApiDebugLogBody, +// method: "POST", +// }, +// async ({ +// authentication, +// body, +// params, +// }): Promise> => { +// const { runFriendlyId } = params; - try { - const run = await prisma.taskRun.findFirst({ - where: { - friendlyId: params.runFriendlyId, - runtimeEnvironmentId: authentication.environment.id, - }, - }); +// try { +// const run = await prisma.taskRun.findFirst({ +// where: { +// friendlyId: params.runFriendlyId, +// runtimeEnvironmentId: authentication.environment.id, +// }, +// }); - if (!run) { - throw new Response("You don't have permissions for this run", { status: 401 }); - } +// if (!run) { +// throw new Response("You don't have permissions for this run", { status: 401 }); +// } - const eventResult = await recordRunDebugLog( - RunId.fromFriendlyId(runFriendlyId), - body.message, - { - attributes: { - properties: body.properties, - }, - startTime: body.time, - } - ); +// const eventResult = await recordRunDebugLog( +// RunId.fromFriendlyId(runFriendlyId), +// body.message, +// { +// attributes: { +// properties: body.properties, +// }, +// startTime: body.time, +// } +// ); - if (eventResult.success) { - return new Response(null, { status: 204 }); - } +// if (eventResult.success) { +// return new Response(null, { status: 204 }); +// } - switch (eventResult.code) { - case "FAILED_TO_RECORD_EVENT": - return new Response(null, { status: 400 }); // send a 400 to prevent retries - case "RUN_NOT_FOUND": - return new Response(null, { status: 404 }); - default: - return assertExhaustive(eventResult.code); - } - } catch (error) { - logger.error("Failed to record dev log", { - environmentId: authentication.environment.id, - error, - }); - throw error; - } - } -); +// switch (eventResult.code) { +// case "FAILED_TO_RECORD_EVENT": +// return new Response(null, { status: 400 }); // send a 400 to prevent retries +// case "RUN_NOT_FOUND": +// return new Response(null, { status: 404 }); +// default: +// return assertExhaustive(eventResult.code); +// } +// } catch (error) { +// logger.error("Failed to record dev log", { +// environmentId: authentication.environment.id, +// error, +// }); +// throw error; +// } +// } +// ); -export { action }; +// export { action }; + +// Create a generic JSON action in remix +export function action() { + return new Response(null, { status: 204 }); +} From 12937517f147277abcf748a7fb5b7cebf56869d3 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Wed, 28 May 2025 18:08:51 +0100 Subject: [PATCH 4/5] disable run debug logs for supervisor client --- apps/supervisor/src/index.ts | 1 + packages/core/src/v3/runEngineWorker/supervisor/http.ts | 6 ++++++ packages/core/src/v3/runEngineWorker/supervisor/session.ts | 1 + packages/core/src/v3/runEngineWorker/supervisor/types.ts | 1 + 4 files changed, 9 insertions(+) diff --git a/apps/supervisor/src/index.ts b/apps/supervisor/src/index.ts index eb5ca4679f..bfaf6abaed 100644 --- a/apps/supervisor/src/index.ts +++ b/apps/supervisor/src/index.ts @@ -130,6 +130,7 @@ class ManagedSupervisor { maxConsumerCount: env.TRIGGER_DEQUEUE_MAX_CONSUMER_COUNT, runNotificationsEnabled: env.TRIGGER_WORKLOAD_API_ENABLED, heartbeatIntervalSeconds: env.TRIGGER_WORKER_HEARTBEAT_INTERVAL_SECONDS, + sendRunDebugLogs: env.SEND_RUN_DEBUG_LOGS, preDequeue: async () => { if (!env.RESOURCE_MONITOR_ENABLED) { return {}; diff --git a/packages/core/src/v3/runEngineWorker/supervisor/http.ts b/packages/core/src/v3/runEngineWorker/supervisor/http.ts index 407b9deb5f..aee6c6bf65 100644 --- a/packages/core/src/v3/runEngineWorker/supervisor/http.ts +++ b/packages/core/src/v3/runEngineWorker/supervisor/http.ts @@ -33,6 +33,7 @@ export class SupervisorHttpClient { private readonly workerToken: string; private readonly instanceName: string; private readonly defaultHeaders: Record; + private readonly sendRunDebugLogs: boolean; private readonly logger = new SimpleStructuredLogger("supervisor-http-client"); @@ -41,6 +42,7 @@ export class SupervisorHttpClient { this.workerToken = opts.workerToken; this.instanceName = opts.instanceName; this.defaultHeaders = getDefaultWorkerHeaders(opts); + this.sendRunDebugLogs = opts.sendRunDebugLogs ?? false; if (!this.apiUrl) { throw new Error("apiURL is required and needs to be a non-empty string"); @@ -204,6 +206,10 @@ export class SupervisorHttpClient { } async sendDebugLog(runId: string, body: WorkerApiDebugLogBody, runnerId?: string): Promise { + if (!this.sendRunDebugLogs) { + return; + } + try { const res = await wrapZodFetch( z.unknown(), diff --git a/packages/core/src/v3/runEngineWorker/supervisor/session.ts b/packages/core/src/v3/runEngineWorker/supervisor/session.ts index b97a147216..91c829d437 100644 --- a/packages/core/src/v3/runEngineWorker/supervisor/session.ts +++ b/packages/core/src/v3/runEngineWorker/supervisor/session.ts @@ -21,6 +21,7 @@ type SupervisorSessionOptions = SupervisorClientCommonOptions & { preSkip?: PreSkipFn; maxRunCount?: number; maxConsumerCount?: number; + sendRunDebugLogs?: boolean; }; export class SupervisorSession extends EventEmitter { diff --git a/packages/core/src/v3/runEngineWorker/supervisor/types.ts b/packages/core/src/v3/runEngineWorker/supervisor/types.ts index 7e94f2ca32..a61e89e46d 100644 --- a/packages/core/src/v3/runEngineWorker/supervisor/types.ts +++ b/packages/core/src/v3/runEngineWorker/supervisor/types.ts @@ -6,6 +6,7 @@ export type SupervisorClientCommonOptions = { instanceName: string; deploymentId?: string; managedWorkerSecret?: string; + sendRunDebugLogs?: boolean; }; export type PreDequeueFn = () => Promise<{ From e5e901f96552cedbb3ebbf00f60c7007a33af7db Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Wed, 28 May 2025 18:21:46 +0100 Subject: [PATCH 5/5] add changeset --- .changeset/fuzzy-snakes-beg.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fuzzy-snakes-beg.md diff --git a/.changeset/fuzzy-snakes-beg.md b/.changeset/fuzzy-snakes-beg.md new file mode 100644 index 0000000000..f5bd55cdeb --- /dev/null +++ b/.changeset/fuzzy-snakes-beg.md @@ -0,0 +1,5 @@ +--- +"@trigger.dev/core": patch +--- + +Add supervisor http client option to disable debug logs