2016-02-07 11:23:23 +01:00
|
|
|
'use strict'
|
2015-06-09 17:41:40 +02:00
|
|
|
|
2016-05-10 21:19:24 +02:00
|
|
|
const crypto = require('crypto')
|
2017-01-06 23:24:47 +01:00
|
|
|
const retry = require('async/retry')
|
2016-05-10 21:19:24 +02:00
|
|
|
|
2016-03-16 22:29:27 +01:00
|
|
|
const logger = require('./logger')
|
2015-06-09 17:41:40 +02:00
|
|
|
|
2016-03-16 22:29:27 +01:00
|
|
|
const utils = {
|
2016-12-30 12:53:41 +01:00
|
|
|
badRequest,
|
2016-10-02 12:19:02 +02:00
|
|
|
cleanForExit,
|
2016-11-16 20:22:17 +01:00
|
|
|
generateRandomString,
|
2017-01-04 20:59:23 +01:00
|
|
|
isTestInstance,
|
2017-01-06 23:24:47 +01:00
|
|
|
getFormatedObjects,
|
|
|
|
transactionRetryer
|
2016-05-10 21:19:24 +02:00
|
|
|
}
|
|
|
|
|
2016-12-30 12:53:41 +01:00
|
|
|
function badRequest (req, res, next) {
|
|
|
|
res.type('json').status(400).end()
|
|
|
|
}
|
|
|
|
|
2016-05-10 21:19:24 +02:00
|
|
|
function generateRandomString (size, callback) {
|
|
|
|
crypto.pseudoRandomBytes(size, function (err, raw) {
|
|
|
|
if (err) return callback(err)
|
|
|
|
|
|
|
|
callback(null, raw.toString('hex'))
|
|
|
|
})
|
2016-02-07 11:23:23 +01:00
|
|
|
}
|
2015-06-09 17:41:40 +02:00
|
|
|
|
2016-05-11 21:19:34 +02:00
|
|
|
function cleanForExit (webtorrentProcess) {
|
2016-02-07 11:23:23 +01:00
|
|
|
logger.info('Gracefully exiting.')
|
2016-05-11 21:19:34 +02:00
|
|
|
process.kill(-webtorrentProcess.pid)
|
2016-02-07 11:23:23 +01:00
|
|
|
}
|
2015-11-02 22:19:39 +01:00
|
|
|
|
2016-11-16 20:22:17 +01:00
|
|
|
function isTestInstance () {
|
|
|
|
return (process.env.NODE_ENV === 'test')
|
|
|
|
}
|
|
|
|
|
2017-01-04 20:59:23 +01:00
|
|
|
function getFormatedObjects (objects, objectsTotal) {
|
|
|
|
const formatedObjects = []
|
|
|
|
|
|
|
|
objects.forEach(function (object) {
|
|
|
|
formatedObjects.push(object.toFormatedJSON())
|
|
|
|
})
|
|
|
|
|
|
|
|
return {
|
|
|
|
total: objectsTotal,
|
|
|
|
data: formatedObjects
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-01-06 23:24:47 +01:00
|
|
|
function transactionRetryer (func, callback) {
|
|
|
|
retry({
|
|
|
|
times: 5,
|
|
|
|
|
|
|
|
errorFilter: function (err) {
|
|
|
|
const willRetry = (err.name === 'SequelizeDatabaseError')
|
|
|
|
logger.debug('Maybe retrying the transaction function.', { willRetry })
|
|
|
|
return willRetry
|
|
|
|
}
|
|
|
|
}, func, callback)
|
|
|
|
}
|
|
|
|
|
2016-02-07 11:23:23 +01:00
|
|
|
// ---------------------------------------------------------------------------
|
2016-01-31 11:23:52 +01:00
|
|
|
|
2016-02-07 11:23:23 +01:00
|
|
|
module.exports = utils
|