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