TpdsUpdateSender.coffee 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. settings = require('settings-sharelatex')
  2. logger = require('logger-sharelatex')
  3. path = require('path')
  4. Project = require('../../models/Project').Project
  5. keys = require('../../infrastructure/Keys')
  6. metrics = require("../../infrastructure/Metrics")
  7. buildPath = (user_id, project_name, filePath)->
  8. projectPath = path.join(project_name, "/", filePath)
  9. projectPath = encodeURIComponent(projectPath)
  10. fullPath = path.join("/user/", "#{user_id}", "/entity/",projectPath)
  11. return fullPath
  12. queue = require('fairy').connect(settings.redis.fairy).queue(keys.queue.web_to_tpds_http_requests)
  13. module.exports =
  14. _addEntity: (options, callback = (err)->)->
  15. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  16. logger.log project_id: options.project_id, user_id:user_id, path: options.path, uri:options.uri, rev:options.rev, "sending file to third party data store"
  17. postOptions =
  18. method : "post"
  19. headers:
  20. sl_entity_rev:options.rev
  21. sl_project_id:options.project_id
  22. sl_all_user_ids:JSON.stringify(allUserIds)
  23. uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}"
  24. title: "addFile"
  25. streamOrigin : options.streamOrigin
  26. queue.enqueue options.project_id, "pipeStreamFrom", postOptions, ->
  27. logger.log project_id: options.project_id, user_id:user_id, path: options.path, uri:options.uri, rev:options.rev, "sending file to third party data store queued up for processing"
  28. callback()
  29. addFile : (options, callback = (err)->)->
  30. metrics.inc("tpds.add-file")
  31. options.streamOrigin = settings.apis.filestore.url + path.join("/project/#{options.project_id}/file/","#{options.file_id}")
  32. @_addEntity(options, callback)
  33. addDoc : (options, callback = (err)->)->
  34. metrics.inc("tpds.add-doc")
  35. options.streamOrigin = settings.apis.docstore.pubUrl + path.join("/project/#{options.project_id}/doc/","#{options.doc_id}/raw")
  36. @_addEntity(options, callback)
  37.   
  38. moveEntity : (options, callback = (err)->)->
  39. metrics.inc("tpds.move-entity")
  40. if options.newProjectName?
  41. startPath = path.join("/#{options.project_name}/")
  42. endPath = path.join("/#{options.newProjectName}/")
  43. else
  44. startPath = mergeProjectNameAndPath(options.project_name, options.startPath)
  45. endPath = mergeProjectNameAndPath(options.project_name, options.endPath)
  46. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  47. logger.log project_id: options.project_id, user_id:user_id, startPath:startPath, endPath:endPath, uri:options.uri, "moving entity in third party data store"
  48. moveOptions =
  49. method : "put"
  50. title:"moveEntity"
  51. uri : "#{settings.apis.thirdPartyDataStore.url}/user/#{user_id}/entity"
  52. headers:
  53. sl_project_id:options.project_id,
  54. sl_entity_rev:options.rev
  55. sl_all_user_ids:JSON.stringify(allUserIds)
  56. json :
  57. user_id : user_id
  58. endPath: endPath
  59. startPath: startPath
  60. queue.enqueue options.project_id, "standardHttpRequest", moveOptions, callback
  61. deleteEntity : (options, callback = (err)->)->
  62. metrics.inc("tpds.delete-entity")
  63. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  64. logger.log project_id: options.project_id, user_id:user_id, path: options.path, uri:options.uri, "deleting entity in third party data store"
  65. deleteOptions =
  66. method : "DELETE"
  67. headers:
  68. sl_project_id:options.project_id
  69. sl_all_user_ids:JSON.stringify(allUserIds)
  70. uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}"
  71. title:"deleteEntity"
  72. sl_all_user_ids:JSON.stringify(allUserIds)
  73. queue.enqueue options.project_id, "standardHttpRequest", deleteOptions, callback
  74. pollDropboxForUser: (user_id, callback = (err) ->) ->
  75. metrics.inc("tpds.poll-dropbox")
  76. logger.log user_id: user_id, "polling dropbox for user"
  77. options =
  78. method: "POST"
  79. uri:"#{settings.apis.thirdPartyDataStore.url}/user/poll"
  80. json:
  81. user_ids: [user_id]
  82. queue.enqueue "poll-dropbox:#{user_id}", "standardHttpRequest", options, callback
  83. getProjectsUsersIds = (project_id, callback = (err, owner_id, allUserIds)->)->
  84. Project.findById project_id, "_id owner_ref readOnly_refs collaberator_refs", (err, project)->
  85. allUserIds = [].concat(project.collaberator_refs).concat(project.readOnly_refs).concat(project.owner_ref)
  86. callback err, project.owner_ref, allUserIds
  87. mergeProjectNameAndPath = (project_name, path)->
  88. if(path.indexOf('/') == 0)
  89. path = path.substring(1)
  90. fullPath = "/#{project_name}/#{path}"
  91. return fullPath