diff --git a/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsUpdateSender.coffee b/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsUpdateSender.coffee index f964720115..73426a0005 100644 --- a/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsUpdateSender.coffee +++ b/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsUpdateSender.coffee @@ -4,6 +4,7 @@ path = require('path') Project = require('../../models/Project').Project keys = require('../../infrastructure/Keys') metrics = require("../../infrastructure/Metrics") +request = require("request") buildPath = (user_id, project_name, filePath)-> projectPath = path.join(project_name, "/", filePath) @@ -11,9 +12,26 @@ buildPath = (user_id, project_name, filePath)-> fullPath = path.join("/user/", "#{user_id}", "/entity/",projectPath) return fullPath -queue = require('fairy').connect(settings.redis.fairy).queue(keys.queue.web_to_tpds_http_requests) -module.exports = + + + +module.exports = TpdsUpdateSender = + + _enqueue: (group, method, job, callback)-> + opts = + uri:"http://localhost:3030/enqueue/web_to_tpds_http_requests" + json : + group:group + method:method + job:job + method:"post" + + request opts, (err)-> + if err? + callback(err) + else + callback() _addEntity: (options, callback = (err)->)-> getProjectsUsersIds options.project_id, (err, user_id, allUserIds)-> @@ -27,9 +45,9 @@ module.exports = uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}" title: "addFile" streamOrigin : options.streamOrigin - queue.enqueue options.project_id, "pipeStreamFrom", postOptions, -> + TpdsUpdateSender._enqueue options.project_id, "pipeStreamFrom", postOptions, (err)-> 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" - callback() + callback(err) addFile : (options, callback = (err)->)-> metrics.inc("tpds.add-file") @@ -64,7 +82,7 @@ module.exports = user_id : user_id endPath: endPath startPath: startPath - queue.enqueue options.project_id, "standardHttpRequest", moveOptions, callback + TpdsUpdateSender._enqueue options.project_id, "standardHttpRequest", moveOptions, callback deleteEntity : (options, callback = (err)->)-> metrics.inc("tpds.delete-entity") @@ -78,7 +96,7 @@ module.exports = uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}" title:"deleteEntity" sl_all_user_ids:JSON.stringify(allUserIds) - queue.enqueue options.project_id, "standardHttpRequest", deleteOptions, callback + TpdsUpdateSender._enqueue options.project_id, "standardHttpRequest", deleteOptions, callback pollDropboxForUser: (user_id, callback = (err) ->) -> metrics.inc("tpds.poll-dropbox") @@ -88,7 +106,7 @@ module.exports = uri:"#{settings.apis.thirdPartyDataStore.url}/user/poll" json: user_ids: [user_id] - queue.enqueue "poll-dropbox:#{user_id}", "standardHttpRequest", options, callback + TpdsUpdateSender._enqueue "poll-dropbox:#{user_id}", "standardHttpRequest", options, callback getProjectsUsersIds = (project_id, callback = (err, owner_id, allUserIds)->)-> Project.findById project_id, "_id owner_ref readOnly_refs collaberator_refs", (err, project)-> diff --git a/services/web/package.json b/services/web/package.json index c5a6078db5..be11190a9b 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -17,7 +17,6 @@ "connect-redis": "1.4.5", "dateformat": "1.0.4-1.2.3", "express": "3.3.4", - "fairy": "git+https://github.com/sharelatex/fairy.git#cluster", "http-proxy": "^1.8.1", "jade": "~1.3.1", "ldapjs": "^0.7.1", diff --git a/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsUpdateSenderTests.coffee b/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsUpdateSenderTests.coffee index 2b7b691d8b..2957c8b48a 100644 --- a/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsUpdateSenderTests.coffee +++ b/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsUpdateSenderTests.coffee @@ -19,12 +19,11 @@ filestoreUrl = "filestore.sharelatex.com" describe 'TpdsUpdateSender', -> beforeEach -> - @requestQueuer = regist:(queue, meth, opts, callback)-> + @requestQueuer = (queue, meth, opts, callback)-> project = {owner_ref:user_id,readOnly_refs:[read_only_ref_1], collaberator_refs:[collaberator_ref_1]} @Project = findById:sinon.stub().callsArgWith(2, null, project) @docstoreUrl = "docstore.sharelatex.env" @updateSender = SandboxedModule.require modulePath, requires: - 'fairy':{connect:=>{queue:=>@requestQueuer}} "settings-sharelatex": siteUrl:siteUrl httpAuthSiteUrl:httpAuthSiteUrl, @@ -34,17 +33,17 @@ describe 'TpdsUpdateSender', -> url: filestoreUrl docstore: pubUrl: @docstoreUrl - redis:fairy:{} + "logger-sharelatex":{log:->} '../../models/Project': Project:@Project 'request':->{pipe:->} describe 'sending updates', -> - it 'ques a post the file with user and file id', (done)-> + it 'queues a post the file with user and file id', (done)-> file_id = '4545345' path = '/some/path/here.jpg' - @requestQueuer.enqueue = (uid, method, job, callback)-> + @updateSender._enqueue = (uid, method, job, callback)-> uid.should.equal project_id job.method.should.equal "post" job.streamOrigin.should.equal "#{filestoreUrl}/project/#{project_id}/file/#{file_id}" @@ -59,7 +58,7 @@ describe 'TpdsUpdateSender', -> path = "/some/path/here.tex" lines = ["line1", "line2", "line3"] - @requestQueuer.enqueue = (uid, method, job, callback)=> + @updateSender._enqueue = (uid, method, job, callback)=> uid.should.equal project_id job.method.should.equal "post" expectedUrl = "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity/#{encodeURIComponent(project_name)}#{encodeURIComponent(path)}" @@ -71,7 +70,7 @@ describe 'TpdsUpdateSender', -> it 'deleting entity', (done)-> path = "/path/here/t.tex" - @requestQueuer.enqueue = (uid, method, job, callback)-> + @updateSender._enqueue = (uid, method, job, callback)-> uid.should.equal project_id job.method.should.equal "DELETE" expectedUrl = "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity/#{encodeURIComponent(project_name)}#{encodeURIComponent(path)}" @@ -83,7 +82,7 @@ describe 'TpdsUpdateSender', -> it 'moving entity', (done)-> startPath = "staring/here/file.tex" endPath = "ending/here/file.tex" - @requestQueuer.enqueue = (uid, method, job, callback)-> + @updateSender._enqueue = (uid, method, job, callback)-> uid.should.equal project_id job.method.should.equal "put" job.uri.should.equal "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity" @@ -96,7 +95,7 @@ describe 'TpdsUpdateSender', -> it 'should be able to rename a project using the move entity func', (done)-> oldProjectName = "/oldProjectName/" newProjectName = "/newProjectName/" - @requestQueuer.enqueue = (uid, method, job, callback)-> + @updateSender._enqueue = (uid, method, job, callback)-> uid.should.equal project_id job.method.should.equal "put" job.uri.should.equal "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity" @@ -107,9 +106,9 @@ describe 'TpdsUpdateSender', -> @updateSender.moveEntity {project_id:project_id, project_name:oldProjectName, newProjectName:newProjectName} it "pollDropboxForUser", (done) -> - @requestQueuer.enqueue = sinon.stub().callsArg(3) + @updateSender._enqueue = sinon.stub().callsArg(3) @updateSender.pollDropboxForUser user_id, (error) => - @requestQueuer.enqueue + @updateSender._enqueue .calledWith( "poll-dropbox:#{user_id}", "standardHttpRequest",