diff --git a/services/track-changes/app.coffee b/services/track-changes/app.coffee index 7e208764b6..4ed177e91c 100644 --- a/services/track-changes/app.coffee +++ b/services/track-changes/app.coffee @@ -49,6 +49,7 @@ app.post "/project/:project_id/flush", HttpController.flushProject app.post "/project/:project_id/doc/:doc_id/version/:version/restore", HttpController.restore app.post "/doc/:doc_id/pack", HttpController.packDoc +app.get "/doc/list", HttpController.listDocs app.post '/project/:project_id/archive', HttpController.archiveProject app.post '/project/:project_id/unarchive', HttpController.unArchiveProject diff --git a/services/track-changes/app/coffee/HttpController.coffee b/services/track-changes/app/coffee/HttpController.coffee index 1a90c16fd4..71a3c2a770 100644 --- a/services/track-changes/app/coffee/HttpController.coffee +++ b/services/track-changes/app/coffee/HttpController.coffee @@ -6,6 +6,7 @@ logger = require "logger-sharelatex" DocArchiveManager = require "./DocArchiveManager" HealthChecker = require "./HealthChecker" LockManager = require "./LockManager" +_ = require "underscore" module.exports = HttpController = flushDoc: (req, res, next = (error) ->) -> @@ -23,6 +24,15 @@ module.exports = HttpController = return next(error) if error? res.send 204 + listDocs: (req, res, next = (error) ->) -> + logger.log "listing packing doc history" + limit = +req.query?.limit || 100 + PackManager.listDocs {limit}, (error, doc_ids) -> + return next(error) if error? + ids = (doc.doc_id.toString() for doc in doc_ids) + output = _.uniq(ids).join("\n") + "\n" + res.send output + packDoc: (req, res, next = (error) ->) -> doc_id = req.params.doc_id logger.log doc_id: doc_id, "packing doc history" diff --git a/services/track-changes/app/coffee/PackManager.coffee b/services/track-changes/app/coffee/PackManager.coffee index c7cad2ad9e..2c877f4a0c 100644 --- a/services/track-changes/app/coffee/PackManager.coffee +++ b/services/track-changes/app/coffee/PackManager.coffee @@ -532,3 +532,7 @@ module.exports = PackManager = logger.log {project_id, doc_id, lastUpdate, newUpdates}, "appending updates to existing pack" db.docHistory.findAndModify {query, update}, callback + listDocs: (options, callback) -> + db.docHistory.find({"op.p":{$exists:true}}, {doc_id:true}).limit (options.limit||100), (err, docs) -> + return callback(err) if err? + callback(null, docs) diff --git a/services/track-changes/pack.sh b/services/track-changes/pack.sh new file mode 100755 index 0000000000..6a389a2f0b --- /dev/null +++ b/services/track-changes/pack.sh @@ -0,0 +1,7 @@ +while docs=$(curl "localhost:3015/doc/list?limit=1000"); do + if [ -z "$docs" ] ; then break ; fi + for d in $docs ; do + echo "packing $d" + curl -X POST "localhost:3015/doc/$d/pack" + done +done