Fix request schedulers stats
[oweals/peertube.git] / server / controllers / api / requests.js
1 'use strict'
2
3 const express = require('express')
4 const parallel = require('async/parallel')
5
6 const constants = require('../../initializers/constants')
7 const friends = require('../../lib/friends')
8 const middlewares = require('../../middlewares')
9 const admin = middlewares.admin
10 const oAuth = middlewares.oauth
11
12 const router = express.Router()
13
14 router.get('/stats',
15   oAuth.authenticate,
16   admin.ensureIsAdmin,
17   getStatsRequests
18 )
19
20 // ---------------------------------------------------------------------------
21
22 module.exports = router
23
24 // ---------------------------------------------------------------------------
25
26 function getStatsRequests (req, res, next) {
27   parallel({
28     requestScheduler: buildRequestSchedulerFunction(friends.getRequestScheduler()),
29     requestVideoQaduScheduler: buildRequestSchedulerFunction(friends.getRequestVideoQaduScheduler()),
30     requestVideoEventScheduler: buildRequestSchedulerFunction(friends.getRequestVideoEventScheduler())
31   }, function (err, result) {
32     if (err) return next(err)
33
34     return res.json(result)
35   })
36 }
37
38 // ---------------------------------------------------------------------------
39
40 function buildRequestSchedulerFunction (requestScheduler) {
41   return function (callback) {
42     requestScheduler.remainingRequestsCount(function (err, count) {
43       if (err) return callback(err)
44
45       const result = {
46         totalRequests: count,
47         requestsLimitPods: requestScheduler.limitPods,
48         requestsLimitPerPod: requestScheduler.limitPerPod,
49         remainingMilliSeconds: requestScheduler.remainingMilliSeconds(),
50         milliSecondsInterval: requestScheduler.requestInterval
51       }
52
53       return callback(null, result)
54     })
55   }
56 }