]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/api/jobs.ts
Cleanup express locals typings
[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'
94a5ff8a 15import { listJobsValidator } from '../../middlewares/validators/jobs'
94831479 16import { isArray } from '../../helpers/custom-validators/misc'
5cd80545
C
17
18const jobsRouter = express.Router()
19
94a5ff8a 20jobsRouter.get('/:state',
5cd80545
C
21 authenticate,
22 ensureUserHasRight(UserRight.MANAGE_JOBS),
23 paginationValidator,
24 jobsSortValidator,
1174a847 25 setDefaultSort,
f05a1c30 26 setDefaultPagination,
94a5ff8a 27 asyncMiddleware(listJobsValidator),
5cd80545
C
28 asyncMiddleware(listJobs)
29)
30
31// ---------------------------------------------------------------------------
32
33export {
34 jobsRouter
35}
36
37// ---------------------------------------------------------------------------
38
39async function listJobs (req: express.Request, res: express.Response, next: express.NextFunction) {
94831479
C
40 const state: JobState = req.params.state
41 const asc = req.query.sort === 'createdAt'
94a5ff8a 42
94831479
C
43 const jobs = await JobQueue.Instance.listForApi(state, req.query.start, req.query.count, asc)
44 const total = await JobQueue.Instance.count(state)
94a5ff8a
C
45
46 const result: ResultList<any> = {
47 total,
94831479 48 data: jobs.map(j => formatJob(j, state))
94a5ff8a
C
49 }
50 return res.json(result)
51}
5cd80545 52
94831479
C
53function formatJob (job: any, state: JobState): Job {
54 const error = isArray(job.stacktrace) && job.stacktrace.length !== 0 ? job.stacktrace[0] : null
55
94a5ff8a
C
56 return {
57 id: job.id,
94831479
C
58 state: state,
59 type: job.queue.name as JobType,
94a5ff8a 60 data: job.data,
94831479
C
61 error,
62 createdAt: new Date(job.timestamp),
63 finishedOn: new Date(job.finishedOn),
64 processedOn: new Date(job.processedOn)
94a5ff8a 65 }
5cd80545 66}