X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fjobs.ts;h=6a53e308363e522f4b4aed3da9b4d3b1faa629db;hb=09f3d81e0c8edebbe8f5698811ecfb165f942378;hp=d7cee16054e47de7fa6f6a938bf96da36cdc34ce;hpb=dc48fdbe68e9dd3a3a6028181e61d8595d98e654;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/jobs.ts b/server/controllers/api/jobs.ts index d7cee1605..6a53e3083 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), + 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) +} + +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),