0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-03 23:00:14 -05:00
ghost/core/server/web/api/testmode/index.js
Naz 5c4e884070 Added support for graceful job shutdown and worker threads
refs #12402

- With bumped version of job-manager it offloads job procesing into separate worker thread. Having jobs run out of main Ghost process even loop allows for safe job execution, which does not block Ghost from serving requests or performing other functions without a delay
- Added experimental data access to 'testmode' jobs. This should serve as an illustration of how to access data from the job layer
2020-11-23 17:17:49 +13:00

72 lines
2.4 KiB
JavaScript

const path = require('path');
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);
});
});
res.sendStatus(202);
});
router.get('/schedule/:schedule/:name*?', (req, res) => {
if (!req.params.schedule) {
return res.sendStatus(400, 'schedule parameter cannot be mepty');
}
const schedule = req.params.schedule;
logging.info('Achedule a Job with schedule of:', schedule, req.params.name);
if (req.params.name) {
const jobPath = path.resolve(__dirname, 'jobs', `${req.params.name}.js`);
jobService.scheduleJob(schedule, jobPath);
} else {
jobService.scheduleJob(schedule, () => {
return new Promise((resolve) => {
logging.info('Start scheduled Job');
setTimeout(() => {
logging.info('End scheduled Job run', schedule);
resolve();
}, 20 * 1000);
});
}, {});
}
res.sendStatus(202);
});
return router;
};