]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/utils.js
Server: do not break remote videos processing on error
[github/Chocobozzz/PeerTube.git] / server / helpers / utils.js
1 'use strict'
2
3 const crypto = require('crypto')
4 const retry = require('async/retry')
5
6 const logger = require('./logger')
7
8 const utils = {
9 badRequest,
10 cleanForExit,
11 generateRandomString,
12 isTestInstance,
13 getFormatedObjects,
14 transactionRetryer
15 }
16
17 function badRequest (req, res, next) {
18 res.type('json').status(400).end()
19 }
20
21 function generateRandomString (size, callback) {
22 crypto.pseudoRandomBytes(size, function (err, raw) {
23 if (err) return callback(err)
24
25 callback(null, raw.toString('hex'))
26 })
27 }
28
29 function cleanForExit (webtorrentProcess) {
30 logger.info('Gracefully exiting.')
31 process.kill(-webtorrentProcess.pid)
32 }
33
34 function isTestInstance () {
35 return (process.env.NODE_ENV === 'test')
36 }
37
38 function getFormatedObjects (objects, objectsTotal) {
39 const formatedObjects = []
40
41 objects.forEach(function (object) {
42 formatedObjects.push(object.toFormatedJSON())
43 })
44
45 return {
46 total: objectsTotal,
47 data: formatedObjects
48 }
49 }
50
51 function transactionRetryer (func, callback) {
52 retry({
53 times: 5,
54
55 errorFilter: function (err) {
56 const willRetry = (err.name === 'SequelizeDatabaseError')
57 logger.debug('Maybe retrying the transaction function.', { willRetry })
58 return willRetry
59 }
60 }, func, callback)
61 }
62
63 // ---------------------------------------------------------------------------
64
65 module.exports = utils