This repository has been archived on 2023-12-05. You can view files and clone it, but cannot push or open issues or pull requests.
futureporn-qa/manager.ts

93 lines
2.4 KiB
TypeScript

import dotenv from "dotenv";
dotenv.config();
import pkg from './package.json' assert {type: 'json'};
import { Queue } from 'bullmq';
import { REDIS_HOST, REDIS_PORT, PORT, TASK_LIST } from './src/env.js';
import express, { Request, Response } from 'express';
import { createBullBoard } from "@bull-board/api";
import { ExpressAdapter } from '@bull-board/express';
import { BullMQAdapter } from '@bull-board/api/bullMQAdapter.js';
import { default as Redis } from 'ioredis'
import { registerRoutes } from "./src/register-routes.js";
import * as swaggerJson from './dist/futureporn-qa/swagger/swagger.json';
import * as swaggerUI from 'swagger-ui-express';
console.log(`futureporn-qa manager version ${pkg.version}`)
const connection = new Redis.default({
port: parseInt(REDIS_PORT),
host: REDIS_HOST,
maxRetriesPerRequest: null,
});
const taskList = TASK_LIST.split(',');
let adapters: BullMQAdapter[] = [];
async function main() {
for (const task of taskList) {
console.log(`> setting up ${task}`)
const queue: Queue = new Queue(task, {
connection
});
adapters.push(new BullMQAdapter(queue));
if (task === 'identifyVodIssues') {
await queue.add(
'identifyVodIssues',
{
foo: 'blah',
},
{
repeat: {
every: 10000
}
}
)
}
}
const serverAdapter = new ExpressAdapter();
serverAdapter.setBasePath('/admin/queues');
const { addQueue, removeQueue, setQueues, replaceQueues } = createBullBoard({
queues: adapters,
serverAdapter: serverAdapter,
});
const app = express();
app.use('/admin/queues', serverAdapter.getRouter());
registerRoutes(app);
app.use(["/openapi", "/docs", "/swagger"], swaggerUI.serve, swaggerUI.setup(swaggerJson));
app.get('/', (req: Request, res: Response) => {
res.send(`
<h1>futureporn-qa</h1>
<h2>Meta</h2>
<ul>
<li>version ${pkg.version}</li>
<li><a href="https://gitea.futureporn.net/futureporn/futureporn-qa">git repo</a></li>
</ul>
<h2>Pages</h2>
<ul>
<li><a href="/admin/queues">Bull Dashboard (queues)</a></li>
<li><a href="/openapi">Swagger (API reference)</a></li>
</ul>
`)
})
app.listen(PORT, () => {
console.log(`Listening on ${PORT}`);
console.log(`For the UI, open http://localhost:${PORT}/admin/queues`);
});
}
main();