You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
const path = require("path");const Graceful = require("@ladjs/graceful");const Bree = require("@mintplex-labs/bree");const setLogger = require("../logger");
class BackgroundService { name = "BackgroundWorkerService"; static _instance = null; #root = path.resolve(__dirname, "../../jobs");
constructor() { if (BackgroundService._instance) { this.#log("SINGLETON LOCK: Using existing BackgroundService."); return BackgroundService._instance; }
this.logger = setLogger(); BackgroundService._instance = this; }
#log(text, ...args) { console.log(`\x1b[36m[${this.name}]\x1b[0m ${text}`, ...args); }
async boot() { const { DocumentSyncQueue } = require("../../models/documentSyncQueue"); if (!(await DocumentSyncQueue.enabled())) { this.#log("Feature is not enabled and will not be started."); return; }
this.#log("Starting..."); this.bree = new Bree({ logger: this.logger, root: this.#root, jobs: this.jobs(), errorHandler: this.onError, workerMessageHandler: this.onWorkerMessageHandler, runJobsAs: "process", }); this.graceful = new Graceful({ brees: [this.bree], logger: this.logger }); this.graceful.listen(); this.bree.start(); this.#log("Service started"); }
async stop() { this.#log("Stopping..."); if (!!this.graceful && !!this.bree) this.graceful.stopBree(this.bree, 0); this.bree = null; this.graceful = null; this.#log("Service stopped"); }
/** @returns {import("@mintplex-labs/bree").Job[]} */ jobs() { return [ // Job for auto-sync of documents
// https://github.com/breejs/bree
{ name: "sync-watched-documents", interval: "1hr", }, ]; }
onError(error, _workerMetadata) { this.logger.error(`${error.message}`, { service: "bg-worker", origin: error.name, }); }
onWorkerMessageHandler(message, _workerMetadata) { this.logger.info(`${message.message}`, { service: "bg-worker", origin: message.name, }); }}
module.exports.BackgroundService = BackgroundService;
|