mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
ee85d948e2
GitOrigin-RevId: ef2ef77e26df59d1af3df6dc664e284d3c70102d
93 lines
2.2 KiB
JavaScript
Executable file
93 lines
2.2 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
// To run in dev:
|
|
//
|
|
// docker-compose run --rm project-history scripts/flush_all.js <limit>
|
|
//
|
|
// In production:
|
|
//
|
|
// docker run --rm $(docker ps -lq) scripts/flush_all.js <limit>
|
|
|
|
import _ from 'lodash'
|
|
import async from 'async'
|
|
import logger from '@overleaf/logger'
|
|
import * as RedisManager from '../app/js/RedisManager.js'
|
|
import * as UpdatesProcessor from '../app/js/UpdatesProcessor.js'
|
|
|
|
logger.logger.level('fatal')
|
|
|
|
const argv = process.argv.slice(2)
|
|
const limit = parseInt(argv[0], 10) || null
|
|
const parallelism = Math.min(parseInt(argv[1], 10) || 1, 10)
|
|
|
|
// flush all outstanding changes
|
|
RedisManager.getProjectIdsWithHistoryOps(limit, flushProjects)
|
|
|
|
function flushProjects(error, projectIds) {
|
|
if (error) {
|
|
throw error
|
|
}
|
|
let ts = new Date()
|
|
console.log(
|
|
'found projects',
|
|
JSON.stringify({ project_ids: projectIds.length, limit, ts })
|
|
)
|
|
projectIds = _.shuffle(projectIds) // randomise to avoid hitting same projects each time
|
|
if (limit > 0) {
|
|
projectIds = projectIds.slice(0, limit)
|
|
}
|
|
|
|
let succeededProjects = 0
|
|
let failedProjects = 0
|
|
let attempts = 0
|
|
|
|
async.eachLimit(
|
|
projectIds,
|
|
parallelism,
|
|
function (projectId, cb) {
|
|
attempts++
|
|
UpdatesProcessor.processUpdatesForProject(
|
|
projectId,
|
|
function (err, queueSize) {
|
|
const progress = attempts + '/' + projectIds.length
|
|
ts = new Date()
|
|
if (err) {
|
|
failedProjects++
|
|
console.log(
|
|
'failed',
|
|
progress,
|
|
JSON.stringify({
|
|
projectId,
|
|
queueSize,
|
|
ts,
|
|
err: err.toString(),
|
|
})
|
|
)
|
|
} else {
|
|
succeededProjects++
|
|
console.log(
|
|
'succeeded',
|
|
progress,
|
|
JSON.stringify({
|
|
projectId,
|
|
queueSize,
|
|
ts,
|
|
})
|
|
)
|
|
}
|
|
return cb()
|
|
}
|
|
)
|
|
},
|
|
function () {
|
|
console.log(
|
|
'total',
|
|
JSON.stringify({
|
|
succeededProjects,
|
|
failedProjects,
|
|
})
|
|
)
|
|
process.exit(0)
|
|
}
|
|
)
|
|
}
|