]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/utils.js
Server: improve requests scheduler
[github/Chocobozzz/PeerTube.git] / server / helpers / utils.js
index 1f7839673a1795e94fb738193310bbfe4930abf9..a902850cdd044026247350d479b8de07dd45e51b 100644 (file)
@@ -1,14 +1,63 @@
 'use strict'
 
+const crypto = require('crypto')
+const retry = require('async/retry')
+
 const logger = require('./logger')
 
 const utils = {
-  cleanForExit: cleanForExit
+  badRequest,
+  cleanForExit,
+  generateRandomString,
+  isTestInstance,
+  getFormatedObjects,
+  transactionRetryer
+}
+
+function badRequest (req, res, next) {
+  res.type('json').status(400).end()
+}
+
+function generateRandomString (size, callback) {
+  crypto.pseudoRandomBytes(size, function (err, raw) {
+    if (err) return callback(err)
+
+    callback(null, raw.toString('hex'))
+  })
 }
 
-function cleanForExit (webtorrent_process) {
+function cleanForExit (webtorrentProcess) {
   logger.info('Gracefully exiting.')
-  process.kill(-webtorrent_process.pid)
+  process.kill(-webtorrentProcess.pid)
+}
+
+function isTestInstance () {
+  return (process.env.NODE_ENV === 'test')
+}
+
+function getFormatedObjects (objects, objectsTotal) {
+  const formatedObjects = []
+
+  objects.forEach(function (object) {
+    formatedObjects.push(object.toFormatedJSON())
+  })
+
+  return {
+    total: objectsTotal,
+    data: formatedObjects
+  }
+}
+
+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)
 }
 
 // ---------------------------------------------------------------------------