overleaf/services/web/scripts/increase_compile_timeouts.js

94 lines
2.2 KiB
JavaScript
Raw Normal View History

const mongojs = require('../app/src/infrastructure/mongojs')
const { db } = mongojs
const async = require('async')
const minilist = require('minimist')
const newTimeout = 240
const oldTimeoutLimits = { $gt: 60, $lt: 240 }
const updateUser = function(user, callback) {
console.log(`Updating user ${user._id}`)
const update = {
$set: {
'features.compileTimeout': newTimeout
}
}
db.users.update(
{
_id: user._id,
'features.compileTimeout': oldTimeoutLimits
},
update,
callback
)
}
const updateUsers = (users, callback) =>
async.eachLimit(users, ASYNC_LIMIT, updateUser, function(error) {
if (error) {
callback(error)
return
}
counter += users.length
2018-08-02 13:14:23 +00:00
console.log(`${counter} users updated`)
if (DO_ALL) {
return loopForUsers(callback)
} else {
console.log('*** run again to continue updating ***')
return callback()
}
})
var loopForUsers = callback =>
db.users
.find(
{ 'features.compileTimeout': oldTimeoutLimits },
{ 'features.compileTimeout': 1 }
)
.limit(FETCH_LIMIT, function(error, users) {
if (error) {
callback(error)
return
}
if (users.length === 0) {
console.log(`DONE (${counter} users updated)`)
return callback()
}
updateUsers(users, callback)
})
var counter = 0
var run = () =>
loopForUsers(function(error) {
if (error) {
throw error
}
process.exit()
})
let FETCH_LIMIT, ASYNC_LIMIT, DO_ALL
var setup = function() {
let args = minilist(process.argv.slice(2))
// --fetch N get N users each time
FETCH_LIMIT = args.fetch ? args.fetch : 100
// --async M run M updates in parallel
ASYNC_LIMIT = args.async ? args.async : 10
// --all means run to completion
if (args.all) {
if (args.fetch) {
console.error('error: do not use --fetch with --all')
process.exit(1)
} else {
DO_ALL = true
// if we are updating for all users then ignore the fetch limit.
FETCH_LIMIT = 0
// A limit() value of 0 (i.e. .limit(0)) is equivalent to setting
// no limit.
// https://docs.mongodb.com/manual/reference/method/cursor.limit
}
}
}
setup()
run()