cvsa/src/worker.ts

69 lines
1.6 KiB
TypeScript

import { Job, Worker } from "bullmq";
import { getLatestVideosWorker } from "lib/mq/executors.ts";
import { redis } from "lib/db/redis.ts";
import logger from "lib/log/logger.ts";
import {getVideoTagsWorker} from "lib/mq/exec/getVideoTags.ts";
import { getVideoTagsInitializer } from "lib/mq/exec/getVideoTags.ts";
export class WorkerError extends Error {
public service?: string;
public codePath?: string;
public rawError: Error;
constructor(rawError: Error, service?: string, codePath?: string) {
super(rawError.message);
this.name = "WorkerFailure";
this.codePath = codePath;
this.service = service;
this.rawError = rawError;
}
}
const latestVideoWorker = new Worker(
"latestVideos",
async (job: Job) => {
switch (job.name) {
case "getLatestVideos":
await getLatestVideosWorker(job);
break;
default:
break;
}
},
{ connection: redis, concurrency: 1 },
);
latestVideoWorker.on("active", () => {
logger.log("Worker activated.", "mq");
});
latestVideoWorker.on("error", (err) => {
const e = err as WorkerError;
logger.error(e.rawError, e.service, e.codePath);
});
const videoTagsWorker = new Worker(
"videoTags",
async (job: Job) => {
switch (job.name) {
case "getVideoTags":
return await getVideoTagsWorker(job);
case "getVideosTags":
return await getVideoTagsInitializer();
default:
break;
}
},
{ connection: redis, concurrency: 6 },
);
videoTagsWorker.on("active", () => {
logger.log("Worker activated.", "mq");
});
videoTagsWorker.on("error", (err) => {
const e = err as WorkerError;
logger.error(e.rawError, e.service, e.codePath);
});