X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fjobs.ts;h=c19596dde2c5518c2048616c38721afab19e1d4b;hb=44b9c0ba31c4a97e3d874f33226ad935c3a90dd5;hp=4e7cd1ee3edd23525ffda96583f772e7c8c943a3;hpb=3fd3ab2d34d512b160a5e6084d7609be7b4f4452;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/jobs.ts b/server/controllers/api/jobs.ts index 4e7cd1ee3..c19596dde 100644 --- a/server/controllers/api/jobs.ts +++ b/server/controllers/api/jobs.ts @@ -1,19 +1,30 @@ import * as express from 'express' +import { ResultList } from '../../../shared' +import { Job, JobType, JobState } from '../../../shared/models' import { UserRight } from '../../../shared/models/users' -import { getFormattedObjects } from '../../helpers' -import { asyncMiddleware, authenticate, ensureUserHasRight, jobsSortValidator, setJobsSort, setPagination } from '../../middlewares' +import { JobQueue } from '../../lib/job-queue' +import { + asyncMiddleware, + authenticate, + ensureUserHasRight, + jobsSortValidator, + setDefaultPagination, + setDefaultSort +} from '../../middlewares' import { paginationValidator } from '../../middlewares/validators' -import { JobModel } from '../../models/job/job' +import { listJobsValidator } from '../../middlewares/validators/jobs' +import { isArray } from '../../helpers/custom-validators/misc' const jobsRouter = express.Router() -jobsRouter.get('/', +jobsRouter.get('/:state', authenticate, ensureUserHasRight(UserRight.MANAGE_JOBS), paginationValidator, jobsSortValidator, - setJobsSort, - setPagination, + setDefaultSort, + setDefaultPagination, + asyncMiddleware(listJobsValidator), asyncMiddleware(listJobs) ) @@ -26,7 +37,30 @@ export { // --------------------------------------------------------------------------- async function listJobs (req: express.Request, res: express.Response, next: express.NextFunction) { - const resultList = await JobModel.listForApi(req.query.start, req.query.count, req.query.sort) + const state: JobState = req.params.state + const asc = req.query.sort === 'createdAt' + + const jobs = await JobQueue.Instance.listForApi(state, req.query.start, req.query.count, asc) + const total = await JobQueue.Instance.count(state) + + const result: ResultList = { + total, + data: jobs.map(j => formatJob(j, state)) + } + return res.json(result) +} + +function formatJob (job: any, state: JobState): Job { + const error = isArray(job.stacktrace) && job.stacktrace.length !== 0 ? job.stacktrace[0] : null - return res.json(getFormattedObjects(resultList.data, resultList.total)) + return { + id: job.id, + state: state, + type: job.queue.name as JobType, + data: job.data, + error, + createdAt: new Date(job.timestamp), + finishedOn: new Date(job.finishedOn), + processedOn: new Date(job.processedOn) + } }