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.

82 lines
2.1 KiB

11 months ago
  1. const path = require("path");
  2. const Graceful = require("@ladjs/graceful");
  3. const Bree = require("@mintplex-labs/bree");
  4. const setLogger = require("../logger");
  5. class BackgroundService {
  6. name = "BackgroundWorkerService";
  7. static _instance = null;
  8. #root = path.resolve(__dirname, "../../jobs");
  9. constructor() {
  10. if (BackgroundService._instance) {
  11. this.#log("SINGLETON LOCK: Using existing BackgroundService.");
  12. return BackgroundService._instance;
  13. }
  14. this.logger = setLogger();
  15. BackgroundService._instance = this;
  16. }
  17. #log(text, ...args) {
  18. console.log(`\x1b[36m[${this.name}]\x1b[0m ${text}`, ...args);
  19. }
  20. async boot() {
  21. const { DocumentSyncQueue } = require("../../models/documentSyncQueue");
  22. if (!(await DocumentSyncQueue.enabled())) {
  23. this.#log("Feature is not enabled and will not be started.");
  24. return;
  25. }
  26. this.#log("Starting...");
  27. this.bree = new Bree({
  28. logger: this.logger,
  29. root: this.#root,
  30. jobs: this.jobs(),
  31. errorHandler: this.onError,
  32. workerMessageHandler: this.onWorkerMessageHandler,
  33. runJobsAs: "process",
  34. });
  35. this.graceful = new Graceful({ brees: [this.bree], logger: this.logger });
  36. this.graceful.listen();
  37. this.bree.start();
  38. this.#log("Service started");
  39. }
  40. async stop() {
  41. this.#log("Stopping...");
  42. if (!!this.graceful && !!this.bree) this.graceful.stopBree(this.bree, 0);
  43. this.bree = null;
  44. this.graceful = null;
  45. this.#log("Service stopped");
  46. }
  47. /** @returns {import("@mintplex-labs/bree").Job[]} */
  48. jobs() {
  49. return [
  50. // Job for auto-sync of documents
  51. // https://github.com/breejs/bree
  52. {
  53. name: "sync-watched-documents",
  54. interval: "1hr",
  55. },
  56. ];
  57. }
  58. onError(error, _workerMetadata) {
  59. this.logger.error(`${error.message}`, {
  60. service: "bg-worker",
  61. origin: error.name,
  62. });
  63. }
  64. onWorkerMessageHandler(message, _workerMetadata) {
  65. this.logger.info(`${message.message}`, {
  66. service: "bg-worker",
  67. origin: message.name,
  68. });
  69. }
  70. }
  71. module.exports.BackgroundService = BackgroundService;