Преглед изворни кода

add endpoint to clear project state

Brian Gough пре 9 година
родитељ
комит
f34c12fdc7

+ 1 - 0
services/document-updater/app.coffee

@@ -39,6 +39,7 @@ app.param 'doc_id', (req, res, next, doc_id) ->
 
 app.get    '/project/:project_id/doc/:doc_id',                          HttpController.getDoc
 app.get    '/project/:project_id/doc',                                  HttpController.getProjectDocs
+app.post   '/project/:project_id/clear',                                HttpController.clearProjectState
 app.post   '/project/:project_id/doc/:doc_id',                          HttpController.setDoc
 app.post   '/project/:project_id/doc/:doc_id/flush',                    HttpController.flushDocIfLoaded
 app.delete '/project/:project_id/doc/:doc_id',                          HttpController.flushAndDeleteDoc

+ 11 - 0
services/document-updater/app/coffee/HttpController.coffee

@@ -59,6 +59,17 @@ module.exports = HttpController =
 				logger.log project_id: project_id, result: ("#{doc._id}:#{doc.v}" for doc in result), "got docs via http"
 				res.send result
 
+	clearProjectState: (req, res, next = (error) ->) ->
+		project_id = req.params.project_id
+		timer = new Metrics.Timer("http.clearProjectState")
+		logger.log project_id: project_id, "clearing project state via http"
+		ProjectManager.clearProjectState project_id, (error) ->
+			timer.done()
+			if error?
+				return next(error)
+			else
+				res.send 200
+
 	setDoc: (req, res, next = (error) ->) ->
 		doc_id = req.params.doc_id
 		project_id = req.params.project_id

+ 3 - 0
services/document-updater/app/coffee/ProjectManager.coffee

@@ -96,3 +96,6 @@ module.exports = ProjectManager =
 				async.series jobs, (error) ->
 					return callback(error) if error?
 					callback(null, docs)
+
+	clearProjectState: (project_id, callback = (error) ->) ->
+		RedisManager.clearProjectState project_id, callback

+ 3 - 0
services/document-updater/app/coffee/RedisManager.coffee

@@ -102,6 +102,9 @@ module.exports = RedisManager =
 			logger.log project_id: project_id, newState:newState, oldState: response[0], "checking project state"
 			callback(null, response[0] isnt newState)
 
+	clearProjectState: (project_id, callback = (error) ->) ->
+		rclient.del keys.projectState(project_id:project_id), callback
+
 	getDoc : (project_id, doc_id, callback = (error, lines, version, ranges) ->)->
 		timer = new metrics.Timer("redis.get-doc")
 		multi = rclient.multi()

+ 15 - 0
services/document-updater/test/unit/coffee/ProjectManager/getProjectDocsTests.coffee

@@ -99,3 +99,18 @@ describe "ProjectManager - getProjectDocs", ->
 
 		it "should time the execution", ->
 			@Metrics.Timer::done.called.should.equal true
+
+	describe "clearing the project state with clearProjectState", ->
+		beforeEach (done) ->
+			@RedisManager.clearProjectState = sinon.stub().callsArg(1)
+			@ProjectManager.clearProjectState @project_id, (error) =>
+				@callback(error)
+				done()
+
+		it "should clear the project state", ->
+			@RedisManager.clearProjectState
+			.calledWith(@project_id)
+			.should.equal true
+
+		it "should call the callback", ->
+			@callback.called.should.equal true

+ 9 - 0
services/document-updater/test/unit/coffee/RedisManager/RedisManagerTests.coffee

@@ -581,3 +581,12 @@ describe "RedisManager", ->
 				.calledWith("DocsIn:#{@project_id}", @doc_id)
 				.should.equal true
 
+	describe "clearProjectState", ->
+		beforeEach (done) ->
+			@rclient.del = sinon.stub().callsArg(1)
+			@RedisManager.clearProjectState @project_id, done
+
+		it "should delete the project state", ->
+			@rclient.del
+				.calledWith("ProjectState:#{@project_id}")
+				.should.equal true