Handle blacklist (#84)
[oweals/peertube.git] / server / controllers / api / request-schedulers.ts
1 import * as express from 'express'
2 import * as Promise from 'bluebird'
3
4 import {
5   AbstractRequestScheduler,
6   getRequestScheduler,
7   getRequestVideoQaduScheduler,
8   getRequestVideoEventScheduler
9 } from '../../lib'
10 import { authenticate, ensureIsAdmin } from '../../middlewares'
11 import { RequestSchedulerStatsAttributes } from '../../../shared'
12
13 const requestSchedulerRouter = express.Router()
14
15 requestSchedulerRouter.get('/stats',
16   authenticate,
17   ensureIsAdmin,
18   getRequestSchedulersStats
19 )
20
21 // ---------------------------------------------------------------------------
22
23 export {
24   requestSchedulerRouter
25 }
26
27 // ---------------------------------------------------------------------------
28
29 function getRequestSchedulersStats (req: express.Request, res: express.Response, next: express.NextFunction) {
30   Promise.props({
31     requestScheduler: buildRequestSchedulerStats(getRequestScheduler()),
32     requestVideoQaduScheduler: buildRequestSchedulerStats(getRequestVideoQaduScheduler()),
33     requestVideoEventScheduler: buildRequestSchedulerStats(getRequestVideoEventScheduler())
34   })
35   .then(result => res.json(result))
36   .catch(err => next(err))
37 }
38
39 // ---------------------------------------------------------------------------
40
41 function buildRequestSchedulerStats (requestScheduler: AbstractRequestScheduler<any>) {
42   return requestScheduler.remainingRequestsCount().then(count => {
43     const result: RequestSchedulerStatsAttributes = {
44       totalRequests: count,
45       requestsLimitPods: requestScheduler.limitPods,
46       requestsLimitPerPod: requestScheduler.limitPerPod,
47       remainingMilliSeconds: requestScheduler.remainingMilliSeconds(),
48       milliSecondsInterval: requestScheduler.requestInterval
49     }
50
51     return result
52   })
53 }