7746302b51
* Add new ProjectAlertType ‘TASK_RUN’ and then migrate channels to it * WIP new alerts for run failures * Consolidate failed run status into taskStatus.ts * Added the read replica into BaseService, could be useful * Send task run alerts code * Revert "Added the read replica into BaseService, could be useful" This reverts commit cc2348a40254ea3f9e11c0feaf303ecd8794433a. * Allow adding task run alerts in the UI * Use task run alert not attempt alert… * Use the primary
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import { type Prisma, type TaskRun } from "@trigger.dev/database";
|
|
import { logger } from "~/services/logger.server";
|
|
import { marqs } from "~/v3/marqs/index.server";
|
|
import { BaseService } from "./baseService.server";
|
|
import { isFailedRunStatus, type FINAL_RUN_STATUSES } from "../taskStatus";
|
|
import { PerformTaskAttemptAlertsService } from "./alerts/performTaskAttemptAlerts.server";
|
|
import { PerformTaskRunAlertsService } from "./alerts/performTaskRunAlerts.server";
|
|
|
|
type BaseInput = {
|
|
id: string;
|
|
status?: FINAL_RUN_STATUSES;
|
|
expiredAt?: Date;
|
|
completedAt?: Date;
|
|
};
|
|
|
|
type InputWithInclude<T extends Prisma.TaskRunInclude> = BaseInput & {
|
|
include: T;
|
|
};
|
|
|
|
type InputWithoutInclude = BaseInput & {
|
|
include?: undefined;
|
|
};
|
|
|
|
type Output<T extends Prisma.TaskRunInclude | undefined> = T extends Prisma.TaskRunInclude
|
|
? Prisma.TaskRunGetPayload<{ include: T }>
|
|
: TaskRun;
|
|
|
|
export class FinalizeTaskRunService extends BaseService {
|
|
public async call<T extends Prisma.TaskRunInclude | undefined>({
|
|
id,
|
|
status,
|
|
expiredAt,
|
|
completedAt,
|
|
include,
|
|
}: T extends Prisma.TaskRunInclude ? InputWithInclude<T> : InputWithoutInclude): Promise<
|
|
Output<T>
|
|
> {
|
|
logger.debug("Finalizing run marqs ack", {
|
|
id,
|
|
status,
|
|
expiredAt,
|
|
completedAt,
|
|
});
|
|
await marqs?.acknowledgeMessage(id);
|
|
|
|
logger.debug("Finalizing run updating run status", {
|
|
id,
|
|
status,
|
|
expiredAt,
|
|
completedAt,
|
|
});
|
|
|
|
const run = await this._prisma.taskRun.update({
|
|
where: { id },
|
|
data: { status, expiredAt, completedAt },
|
|
...(include ? { include } : {}),
|
|
});
|
|
|
|
//enqueue alert
|
|
if (isFailedRunStatus(run.status)) {
|
|
await PerformTaskRunAlertsService.enqueue(run.id, this._prisma);
|
|
}
|
|
|
|
return run as Output<T>;
|
|
}
|
|
}
|