X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fjobs.ts;h=0a45c33ab1dcb6f994d9b4255ecccf8649114c59;hb=db312c7023bb8263741255f8af1c8a6aef5f88f7;hp=d7cee16054e47de7fa6f6a938bf96da36cdc34ce;hpb=4024c44f9027a32809931de0692d40d001df721c;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/jobs.ts b/server/controllers/api/jobs.ts index d7cee1605..0a45c33ab 100644 --- a/server/controllers/api/jobs.ts +++ b/server/controllers/api/jobs.ts @@ -1,7 +1,6 @@ -import * as express from 'express' -import { ResultList } from '../../../shared' -import { Job, JobState, JobType } from '../../../shared/models' -import { UserRight } from '../../../shared/models/users' +import { Job as BullJob } from 'bullmq' +import express from 'express' +import { HttpStatusCode, Job, JobState, JobType, ResultList, UserRight } from '@shared/models' import { isArray } from '../../helpers/custom-validators/misc' import { JobQueue } from '../../lib/job-queue' import { @@ -9,6 +8,7 @@ import { authenticate, ensureUserHasRight, jobsSortValidator, + openapiOperationDoc, paginationValidatorBuilder, setDefaultPagination, setDefaultSort @@ -17,7 +17,20 @@ 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), + asyncMiddleware(resumeJobQueue) +) + jobsRouter.get('/:state?', + openapiOperationDoc({ operationId: 'getJobs' }), authenticate, ensureUserHasRight(UserRight.MANAGE_JOBS), paginationValidatorBuilder([ 'jobs' ]), @@ -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) +} + +async function resumeJobQueue (req: express.Request, res: express.Response) { + await 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),