Move ensureRegistrationEnabled to middlewares
[oweals/peertube.git] / server / controllers / api / request-schedulers.ts
1 import * as express from 'express'
2 import { parallel } from 'async'
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   parallel({
31     requestScheduler: buildRequestSchedulerStats(getRequestScheduler()),
32     requestVideoQaduScheduler: buildRequestSchedulerStats(getRequestVideoQaduScheduler()),
33     requestVideoEventScheduler: buildRequestSchedulerStats(getRequestVideoEventScheduler())
34   }, function (err, result) {
35     if (err) return next(err)
36
37     return res.json(result)
38   })
39 }
40
41 // ---------------------------------------------------------------------------
42
43 function buildRequestSchedulerStats (requestScheduler: AbstractRequestScheduler) {
44   return function (callback) {
45     requestScheduler.remainingRequestsCount(function (err, count) {
46       if (err) return callback(err)
47
48       const result: RequestSchedulerStatsAttributes = {
49         totalRequests: count,
50         requestsLimitPods: requestScheduler.limitPods,
51         requestsLimitPerPod: requestScheduler.limitPerPod,
52         remainingMilliSeconds: requestScheduler.remainingMilliSeconds(),
53         milliSecondsInterval: requestScheduler.requestInterval
54       }
55
56       return callback(null, result)
57     })
58   }
59 }