4 var async
= require('async')
5 var pluck
= require('lodash-node/compat/collection/pluck')
7 var constants
= require('../initializers/constants')
8 var logger
= require('../helpers/logger')
9 var Pods
= require('../models/pods')
10 var PoolRequests
= require('../models/poolRequests')
11 var requests
= require('../helpers/requests')
12 var Videos
= require('../models/videos')
18 deactivate: deactivate
,
22 function deactivate () {
23 logger
.info('Pool requests deactivated.')
27 function forceSend () {
28 logger
.info('Force pool requests sending.')
32 function activate () {
33 logger
.info('Pool requests activated.')
34 timer
= setInterval(makePoolRequests
, constants
.INTERVAL
)
37 // ---------------------------------------------------------------------------
39 module
.exports
= poolRequests
41 // ---------------------------------------------------------------------------
43 function makePoolRequest (type
, requests_to_make
, callback
) {
44 if (!callback
) callback = function () {}
46 Pods
.list(function (err
, pods
) {
54 data: requests_to_make
58 params
.path
= '/api/' + constants
.API_VERSION
+ '/remotevideos/add'
59 } else if (type
=== 'remove') {
60 params
.path
= '/api/' + constants
.API_VERSION
+ '/remotevideos/remove'
62 throw new Error('Unkown pool request type.')
68 requests
.makeMultipleRetryRequest(params
, pods
, callbackEachPodFinished
, callbackAllPodsFinished
)
70 function callbackEachPodFinished (err
, response
, body
, url
, pod
, callback_each_pod_finished
) {
71 if (err
|| (response
.statusCode
!== 200 && response
.statusCode
!== 204)) {
72 bad_pods
.push(pod
._id
)
73 logger
.error('Error sending secure request to %s pod.', url
, { error: err
|| new Error('Status code not 20x') })
75 good_pods
.push(pod
._id
)
78 return callback_each_pod_finished()
81 function callbackAllPodsFinished (err
) {
82 if (err
) return callback(err
)
84 updatePodsScore(good_pods
, bad_pods
)
90 function makePoolRequests () {
91 logger
.info('Making pool requests to friends.')
93 PoolRequests
.list(function (err
, pool_requests
) {
96 if (pool_requests
.length
=== 0) return
98 var requests_to_make
= {
109 async
.each(pool_requests
, function (pool_request
, callback_each
) {
110 if (pool_request
.type
=== 'add') {
111 requests_to_make
.add
.requests
.push(pool_request
.request
)
112 requests_to_make
.add
.ids
.push(pool_request
._id
)
113 } else if (pool_request
.type
=== 'remove') {
114 requests_to_make
.remove
.requests
.push(pool_request
.request
)
115 requests_to_make
.remove
.ids
.push(pool_request
._id
)
117 throw new Error('Unkown pool request type.')
122 // Send the add requests
123 if (requests_to_make
.add
.requests
.length
!== 0) {
124 makePoolRequest('add', requests_to_make
.add
.requests
, function (err
) {
125 if (err
) logger
.error('Errors when sent add pool requests.', { error: err
})
127 PoolRequests
.removeRequests(requests_to_make
.add
.ids
)
131 // Send the remove requests
132 if (requests_to_make
.remove
.requests
.length
!== 0) {
133 makePoolRequest('remove', requests_to_make
.remove
.requests
, function (err
) {
134 if (err
) logger
.error('Errors when sent remove pool requests.', { error: err
})
136 PoolRequests
.removeRequests(requests_to_make
.remove
.ids
)
143 function removeBadPods () {
144 Pods
.findBadPods(function (err
, pods
) {
147 if (pods
.length
=== 0) return
149 var urls
= pluck(pods
, 'url')
150 var ids
= pluck(pods
, '_id')
152 Videos
.removeAllRemotesOf(urls
, function (err
, r
) {
153 if (err
) logger
.error('Cannot remove videos from a pod that we removing.', { error: err
})
154 var videos_removed
= r
.result
.n
155 logger
.info('Removed %d videos.', videos_removed
)
157 Pods
.removeAllByIds(ids
, function (err
, r
) {
158 if (err
) logger
.error('Cannot remove bad pods.', { error: err
})
160 var pods_removed
= r
.result
.n
161 logger
.info('Removed %d pods.', pods_removed
)
167 function updatePodsScore (good_pods
, bad_pods
) {
168 logger
.info('Updating %d good pods and %d bad pods scores.', good_pods
.length
, bad_pods
.length
)
170 Pods
.incrementScores(good_pods
, constants
.PODS_SCORE
.BONUS
)
171 Pods
.incrementScores(bad_pods
, constants
.PODS_SCORE
.MALUS
, function (err
) {