X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fjobs.ts;h=6a53e308363e522f4b4aed3da9b4d3b1faa629db;hb=09f3d81e0c8edebbe8f5698811ecfb165f942378;hp=eebd195b0e0a603857a933d8e780159fd42af724;hpb=c3edc5b074aa4bb1861ed0a94d3713808e87170f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/jobs.ts b/server/controllers/api/jobs.ts index eebd195b0..6a53e3083 100644 --- a/server/controllers/api/jobs.ts +++ b/server/controllers/api/jobs.ts @@ -1,5 +1,6 @@ +import { Job as BullJob } from 'bullmq' import express from 'express' -import { Job, JobState, JobType, ResultList, UserRight } from '@shared/models' +import { HttpStatusCode, Job, JobState, JobType, ResultList, UserRight } from '@shared/models' import { isArray } from '../../helpers/custom-validators/misc' import { JobQueue } from '../../lib/job-queue' import { @@ -16,6 +17,18 @@ import { listJobsValidator } from '../../middlewares/validators/jobs' const jobsRouter = express.Router() +jobsRouter.post('/pause', + authenticate, + ensureUserHasRight(UserRight.MANAGE_JOBS), + asyncMiddleware(pauseJobQueue) +) + +jobsRouter.post('/resume', + authenticate, + ensureUserHasRight(UserRight.MANAGE_JOBS), + resumeJobQueue +) + jobsRouter.get('/:state?', openapiOperationDoc({ operationId: 'getJobs' }), authenticate, @@ -36,6 +49,18 @@ export { // --------------------------------------------------------------------------- +async function pauseJobQueue (req: express.Request, res: express.Response) { + await JobQueue.Instance.pause() + + return res.sendStatus(HttpStatusCode.NO_CONTENT_204) +} + +function resumeJobQueue (req: express.Request, res: express.Response) { + JobQueue.Instance.resume() + + return res.sendStatus(HttpStatusCode.NO_CONTENT_204) +} + async function listJobs (req: express.Request, res: express.Response) { const state = req.params.state as JobState const asc = req.query.sort === 'createdAt' @@ -58,7 +83,7 @@ async function listJobs (req: express.Request, res: express.Response) { return res.json(result) } -async function formatJob (job: any, state?: JobState): Promise { +async function formatJob (job: BullJob, state?: JobState): Promise { const error = isArray(job.stacktrace) && job.stacktrace.length !== 0 ? job.stacktrace[0] : null @@ -66,9 +91,9 @@ async function formatJob (job: any, state?: JobState): Promise { return { id: job.id, state: state || await job.getState(), - type: job.queue.name as JobType, + type: job.queueName as JobType, data: job.data, - progress: await job.progress(), + progress: job.progress as number, priority: job.opts.priority, error, createdAt: new Date(job.timestamp),