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.
45 lines
1.2 KiB
45 lines
1.2 KiB
2 years ago
|
import { glob } from '../lib/builderator.js';
|
||
|
import logging from '../lib/logging.js';
|
||
|
import path from 'path';
|
||
|
|
||
|
export const description = "Runs the queue server (needs redis).";
|
||
|
|
||
|
export const options = [];
|
||
|
|
||
|
const ACTIVE_QUEUES = {};
|
||
|
|
||
|
export const main = async (opts) => {
|
||
|
const log = logging.create("/commands/queue.js");
|
||
|
const queues = await import("../lib/queues.js");
|
||
|
|
||
|
const files = glob("./queues/*.js");
|
||
|
|
||
|
for(let file_name of files) {
|
||
|
log.info(`Loading queue ${file_name}`);
|
||
|
|
||
|
try {
|
||
|
const route = await import(`../${file_name}`);
|
||
|
|
||
|
let base = `${path.basename(file_name, '.js')}`;
|
||
|
|
||
|
for(let func_name of Object.getOwnPropertyNames(route)) {
|
||
|
const route_name = `${base}/${func_name}`;
|
||
|
|
||
|
log.info(`Creating queue for ${file_name}:${func_name} named ${route_name}`);
|
||
|
|
||
|
const queue = queues.create(route_name);
|
||
|
|
||
|
queue.process(route[func_name]);
|
||
|
ACTIVE_QUEUES[route_name] = queue;
|
||
|
}
|
||
|
} catch(error) {
|
||
|
log.error(error, `Failed to load ${file_name}.`);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
log.info("Queues loading, waiting for messages.");
|
||
|
|
||
|
// see: https://github.com/nodejs/node/issues/35212
|
||
|
process.on('SIGINT', () => process.exit());
|
||
|
}
|