]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/api/jobs.ts
Try to fix weird CI test crashes
[github/Chocobozzz/PeerTube.git] / server / controllers / api / jobs.ts
CommitLineData
5cd80545 1import * as express from 'express'
94a5ff8a 2import { ResultList } from '../../../shared'
402145b8 3import { Job, JobState, JobType } from '../../../shared/models'
3fd3ab2d 4import { UserRight } from '../../../shared/models/users'
402145b8 5import { isArray } from '../../helpers/custom-validators/misc'
94a5ff8a 6import { JobQueue } from '../../lib/job-queue'
f05a1c30 7import {
94a5ff8a
C
8 asyncMiddleware,
9 authenticate,
10 ensureUserHasRight,
11 jobsSortValidator,
1333ab1f 12 openapiOperationDoc,
18b24b2d 13 paginationValidatorBuilder,
94a5ff8a 14 setDefaultPagination,
f05a1c30
C
15 setDefaultSort
16} from '../../middlewares'
402145b8 17import { listJobsValidator } from '../../middlewares/validators/jobs'
5cd80545
C
18
19const jobsRouter = express.Router()
20
402145b8 21jobsRouter.get('/:state?',
1333ab1f 22 openapiOperationDoc({ operationId: 'getJobs' }),
040d6896
RK
23 authenticate,
24 ensureUserHasRight(UserRight.MANAGE_JOBS),
18b24b2d 25 paginationValidatorBuilder([ 'jobs' ]),
040d6896
RK
26 jobsSortValidator,
27 setDefaultSort,
28 setDefaultPagination,
29 listJobsValidator,
30 asyncMiddleware(listJobs)
31)
32
5cd80545
C
33// ---------------------------------------------------------------------------
34
35export {
36 jobsRouter
37}
38
39// ---------------------------------------------------------------------------
40
d5d9b6d7 41async function listJobs (req: express.Request, res: express.Response) {
402145b8 42 const state = req.params.state as JobState
94831479 43 const asc = req.query.sort === 'createdAt'
1061c73f 44 const jobType = req.query.jobType
94a5ff8a 45
1061c73f
C
46 const jobs = await JobQueue.Instance.listForApi({
47 state,
48 start: req.query.start,
49 count: req.query.count,
50 asc,
51 jobType
52 })
439d68e5 53 const total = await JobQueue.Instance.count(state, jobType)
94a5ff8a 54
a1587156 55 const result: ResultList<Job> = {
94a5ff8a 56 total,
3b01f4c0 57 data: await Promise.all(jobs.map(j => formatJob(j, state)))
94a5ff8a 58 }
402145b8 59
94a5ff8a
C
60 return res.json(result)
61}
5cd80545 62
3b01f4c0 63async function formatJob (job: any, state?: JobState): Promise<Job> {
402145b8
C
64 const error = isArray(job.stacktrace) && job.stacktrace.length !== 0
65 ? job.stacktrace[0]
66 : null
94831479 67
94a5ff8a
C
68 return {
69 id: job.id,
3b01f4c0 70 state: state || await job.getState(),
94831479 71 type: job.queue.name as JobType,
94a5ff8a 72 data: job.data,
3b01f4c0 73 progress: await job.progress(),
77d7e851 74 priority: job.opts.priority,
94831479
C
75 error,
76 createdAt: new Date(job.timestamp),
77 finishedOn: new Date(job.finishedOn),
78 processedOn: new Date(job.processedOn)
94a5ff8a 79 }
5cd80545 80}