Ghost/core/server/web/api/testmode.js
Hannah Wolfe bbbd011074 Added job-manager & wired up shutdown and testmode
- Bottom line - we need to manage shutting down gracefully when doing long-running tasks
- To achieve that, we're going to use job queues

In this commit:
- added new @tryghost/job-manager dependency
- added a minimal job service, that handles in passing things like logging and (maybe later) config
- job service is wired up to server shutdown, so that the queue finishes before the server exits
- also added a new job endpoint to testmode so that it's easy to test job behaviour without needing to do real work
2020-08-11 21:31:34 +01:00

45 lines
1.5 KiB
JavaScript

const logging = require('../../../shared/logging');
const express = require('../../../shared/express');
const jobService = require('../../services/jobs');
/** A bunch of helper routes for testing purposes */
module.exports = function testRoutes() {
const router = express.Router('canary admin');
router.get('/500', (req, res) => res.sendStatus(500));
router.get('/400', (req, res) => res.sendStatus(400));
router.get('/404', (req, res) => res.sendStatus(404));
router.get('/slow/:timeout', (req, res) => {
if (!req.params || !req.params.timeout) {
return res.sendStatus(200);
}
const timeout = req.params.timeout * 1000;
logging.info('Begin Slow Request with timeout of', timeout);
setTimeout(() => {
logging.info('End Slow Request', timeout);
res.sendStatus(200);
}, timeout);
});
router.get('/job/:timeout', (req, res) => {
if (!req.params || !req.params.timeout) {
return res.sendStatus(200);
}
const timeout = req.params.timeout * 1000;
logging.info('Create Slow Job with timeout of', timeout);
jobService.addJob(() => {
return new Promise((resolve) => {
logging.info('Start Slow Job');
setTimeout(() => {
logging.info('End Slow Job', timeout);
resolve();
}, timeout);
}, {timeout});
});
res.sendStatus(202);
});
return router;
};