core/apps/webapp/app/services/jobManager.server.ts
Harshith Mullapudi f39c7cc6d0
feat: remove trigger and run base on bullmq (#126)
* feat: remove trigger and run base on bullmq
* fix: telemetry and trigger deploymen
* feat: add Ollama container and update ingestion status for unchanged documents
* feat: add logger to bullmq workers
* 1. Remove chat and deep-search from trigger
2. Add ai/sdk for chat UI
3. Added a better model manager

* refactor: simplify clustered graph query and add stop conditions for AI responses

* fix: streaming

* fix: docker docs

---------

Co-authored-by: Manoj <saimanoj58@gmail.com>
2025-10-26 12:56:12 +05:30

88 lines
2.0 KiB
TypeScript

/**
* Job Manager Service
*
* Unified interface for managing background jobs across both
* Trigger.dev and BullMQ queue providers.
*/
import { env } from "~/env.server";
type QueueProvider = "trigger" | "bullmq";
interface JobInfo {
id: string;
isCompleted: boolean;
status?: string;
}
/**
* Find running jobs by tags/identifiers
*/
export async function findRunningJobs(params: {
tags: string[];
taskIdentifier?: string;
}): Promise<JobInfo[]> {
const provider = env.QUEUE_PROVIDER as QueueProvider;
if (provider === "trigger") {
const { runs } = await import("@trigger.dev/sdk");
const runningTasks = await runs.list({
tag: params.tags,
taskIdentifier: params.taskIdentifier,
});
return runningTasks.data.map((task) => ({
id: task.id,
isCompleted: task.isCompleted,
status: task.status,
}));
} else {
// BullMQ
const { getJobsByTags } = await import("~/bullmq/utils/job-finder");
const jobs = await getJobsByTags(params.tags, params.taskIdentifier);
return jobs;
}
}
/**
* Cancel a running job
*/
export async function cancelJob(jobId: string): Promise<void> {
const provider = env.QUEUE_PROVIDER as QueueProvider;
if (provider === "trigger") {
const { runs } = await import("@trigger.dev/sdk");
await runs.cancel(jobId);
} else {
// BullMQ
const { cancelJobById } = await import("~/bullmq/utils/job-finder");
await cancelJobById(jobId);
}
}
/**
* Get job status
*/
export async function getJobStatus(jobId: string): Promise<JobInfo | null> {
const provider = env.QUEUE_PROVIDER as QueueProvider;
if (provider === "trigger") {
const { runs } = await import("@trigger.dev/sdk");
try {
const run = await runs.retrieve(jobId);
return {
id: run.id,
isCompleted: run.isCompleted,
status: run.status,
};
} catch {
return null;
}
} else {
// BullMQ
const { getJobById } = await import("~/bullmq/utils/job-finder");
return await getJobById(jobId);
}
}