From 0324dc1fb2bfed16e7b2ba8a2a09341360306fd3 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Mon, 28 Oct 2024 15:52:40 +0000 Subject: [PATCH] add missing service --- .../v3/services/updateFatalRunError.server.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 apps/webapp/app/v3/services/updateFatalRunError.server.ts diff --git a/apps/webapp/app/v3/services/updateFatalRunError.server.ts b/apps/webapp/app/v3/services/updateFatalRunError.server.ts new file mode 100644 index 000000000..79db0e1e8 --- /dev/null +++ b/apps/webapp/app/v3/services/updateFatalRunError.server.ts @@ -0,0 +1,63 @@ +import { BaseService } from "./baseService.server"; +import { logger } from "~/services/logger.server"; +import { isFatalRunStatus } from "../taskStatus"; +import { TaskRunErrorCodes, TaskRunInternalError } from "@trigger.dev/core/v3"; +import { FinalizeTaskRunService } from "./finalizeTaskRun.server"; + +export type UpdateFatalRunErrorServiceOptions = { + reason?: string; + exitCode?: number; + logs?: string; + crashAttempts?: boolean; + crashedAt?: Date; + overrideCompletion?: boolean; + errorCode?: TaskRunInternalError["code"]; +}; + +export class UpdateFatalRunErrorService extends BaseService { + public async call(runId: string, options?: UpdateFatalRunErrorServiceOptions) { + const opts = { + reason: "Worker crashed", + crashAttempts: true, + crashedAt: new Date(), + ...options, + }; + + logger.debug("UpdateFatalRunErrorService.call", { runId, opts }); + + const taskRun = await this._prisma.taskRun.findFirst({ + where: { + id: runId, + }, + }); + + if (!taskRun) { + logger.error("[UpdateFatalRunErrorService] Task run not found", { runId }); + return; + } + + if (!isFatalRunStatus(taskRun.status)) { + logger.warn("[UpdateFatalRunErrorService] Task run is not in a fatal state", { + runId, + status: taskRun.status, + }); + + return; + } + + logger.debug("[UpdateFatalRunErrorService] Updating crash error", { runId, options }); + + const finalizeService = new FinalizeTaskRunService(); + await finalizeService.call({ + id: taskRun.id, + status: "CRASHED", + completedAt: new Date(), + error: { + type: "INTERNAL_ERROR", + code: opts.errorCode ?? TaskRunErrorCodes.TASK_RUN_CRASHED, + message: opts.reason, + stackTrace: opts.logs, + }, + }); + } +}