import { run, Runner, RunnerOptions } from "graphile-worker"; import { parseCronItems } from "graphile-worker"; // import { initPgp } from "./db.js"; // import logger from "./logger.js"; // import workerUtils from "./utils.js"; import { assertFfmpegAvailable } from "./lib/media-convert.js"; /* const logFactory = (scope: any) => (level: any, message: any, meta: any) => { const pinoLevel = level === "warning" ? "warn" : level; const childLogger = logger.child({ scope }); if (meta) childLogger[pinoLevel](meta, message); else childLogger[pinoLevel](message); }; */ const getConfig = (): RunnerOptions => { // logger.info({ concurrency, pollInterval }, "Starting worker"); return { concurrency: 10, pollInterval: 1000, // logger: new Worker.Logger(logFactory), connectionString: process.env.DATABASE_URL, // eslint-disable-next-line unicorn/prefer-module taskDirectory: `${__dirname}/tasks`, // parsedCronItems: parseCronItems( // leafcutterEnabled // ? [ // { task: "import-label-studio", pattern: "*/15 * * * *" }, // { task: "import-leafcutter", pattern: "*/17 * * * *" }, // ] // : [], // ) }; }; export const startWorker = async (): Promise => { // ensure ffmpeg is installed and working await assertFfmpegAvailable(); // logger.info("ffmpeg found"); // await workerUtils.migrate(); // logger.info("worker database migrated"); // initPgp(); const workerConfig = await configWorker(); const worker = await Worker.run(workerConfig); return worker; }; export const stopWorker = async (): Promise => { await worker.stop(); }; const main = async () => { await worker.start(); process.on("SIGTERM", async () => { await worker.stop(); process.exit(0); }); }; main().catch((err) => { console.error(err); process.exit(1); });