fixdangling.coffee 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. Settings = require "settings-sharelatex"
  2. logger = require "logger-sharelatex"
  3. TrackChangesLogger = logger.initialize("track-changes").logger
  4. async = require "async"
  5. fs = require "fs"
  6. request = require "request"
  7. cli = require "cli"
  8. mongojs = require "mongojs"
  9. bson = require "bson"
  10. db = mongojs(Settings.mongo.url, ["docs"])
  11. ObjectId = mongojs.ObjectId
  12. options = cli.parse({
  13. port: ['p', 'port number for track changes', 'number'],
  14. force: ['f', 'actually make the fix']
  15. });
  16. if cli.args.length < 1
  17. console.log "fixdangling -p PORT file_of_doc_ids"
  18. process.exit()
  19. file = cli.args.pop()
  20. doc_ids = fs.readFileSync(file).toString().trim().split("\n")
  21. missing = 0
  22. errored = 0
  23. success = 0
  24. fixDangling = (doc_id, callback) ->
  25. # look up project id from doc id
  26. db.docs.find {_id:ObjectId(doc_id)}, {project_id:1}, (err, result) ->
  27. #console.log "doc_id", doc_id, "err", err, "result", result
  28. if err?
  29. errored++
  30. return callback()
  31. if !result? or result.length == 0
  32. missing++
  33. return callback()
  34. project_id = result[0].project_id
  35. console.log "found project_id", project_id, "for doc_id", doc_id
  36. url = "http://localhost:#{options.port}/project/#{project_id}/doc/#{doc_id}/flush"
  37. if options.force
  38. request.post url, (err, response, body) ->
  39. if err? then errored++ else success++
  40. callback()
  41. else
  42. console.log "URL:", url
  43. success++
  44. callback()
  45. async.eachSeries doc_ids, fixDangling, (err) ->
  46. console.log "final result", err, "missing", missing, "errored", errored, "success", success
  47. db.close()