BaseRequestScheduler -> AbstractRequestScheduler
[oweals/peertube.git] / server / controllers / api / requests.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
12 const requestsRouter = express.Router()
13
14 requestsRouter.get('/stats',
15   authenticate,
16   ensureIsAdmin,
17   getStatsRequests
18 )
19
20 // ---------------------------------------------------------------------------
21
22 export {
23   requestsRouter
24 }
25
26 // ---------------------------------------------------------------------------
27
28 function getStatsRequests (req: express.Request, res: express.Response, next: express.NextFunction) {
29   parallel({
30     requestScheduler: buildRequestSchedulerFunction(getRequestScheduler()),
31     requestVideoQaduScheduler: buildRequestSchedulerFunction(getRequestVideoQaduScheduler()),
32     requestVideoEventScheduler: buildRequestSchedulerFunction(getRequestVideoEventScheduler())
33   }, function (err, result) {
34     if (err) return next(err)
35
36     return res.json(result)
37   })
38 }
39
40 // ---------------------------------------------------------------------------
41
42 function buildRequestSchedulerFunction (requestScheduler: AbstractRequestScheduler) {
43   return function (callback) {
44     requestScheduler.remainingRequestsCount(function (err, count) {
45       if (err) return callback(err)
46
47       const result = {
48         totalRequests: count,
49         requestsLimitPods: requestScheduler.limitPods,
50         requestsLimitPerPod: requestScheduler.limitPerPod,
51         remainingMilliSeconds: requestScheduler.remainingMilliSeconds(),
52         milliSecondsInterval: requestScheduler.requestInterval
53       }
54
55       return callback(null, result)
56     })
57   }
58 }