mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
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
72 lines
2.4 KiB
JavaScript
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;
|
|
};
|