]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/utils.js
fb4dd08cc6df36e2f97676fbb5c04723fdb78741
[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 retryWrapper,
15 transactionRetryer
16 }
17
18 function badRequest (req, res, next) {
19 res.type('json').status(400).end()
20 }
21
22 function generateRandomString (size, callback) {
23 crypto.pseudoRandomBytes(size, function (err, raw) {
24 if (err) return callback(err)
25
26 callback(null, raw.toString('hex'))
27 })
28 }
29
30 function cleanForExit (webtorrentProcess) {
31 logger.info('Gracefully exiting.')
32 process.kill(-webtorrentProcess.pid)
33 }
34
35 function isTestInstance () {
36 return (process.env.NODE_ENV === 'test')
37 }
38
39 function getFormatedObjects (objects, objectsTotal) {
40 const formatedObjects = []
41
42 objects.forEach(function (object) {
43 formatedObjects.push(object.toFormatedJSON())
44 })
45
46 return {
47 total: objectsTotal,
48 data: formatedObjects
49 }
50 }
51
52 // { arguments, errorMessage }
53 function retryWrapper (functionToRetry, options, finalCallback) {
54 const args = options.arguments ? options.arguments : []
55
56 utils.transactionRetryer(
57 function (callback) {
58 return functionToRetry.apply(this, args.concat([ callback ]))
59 },
60 function (err) {
61 if (err) {
62 logger.error(options.errorMessage, { error: err })
63 }
64
65 // Do not return the error, continue the process
66 return finalCallback(null)
67 }
68 )
69 }
70
71 function transactionRetryer (func, callback) {
72 retry({
73 times: 5,
74
75 errorFilter: function (err) {
76 const willRetry = (err.name === 'SequelizeDatabaseError')
77 logger.debug('Maybe retrying the transaction function.', { willRetry })
78 return willRetry
79 }
80 }, func, callback)
81 }
82
83 // ---------------------------------------------------------------------------
84
85 module.exports = utils