From dbe03e2757e8330ceda15f3d8f4f4e18c6ad9ee0 Mon Sep 17 00:00:00 2001
From: James Allen <james@sharelatex.com>
Date: Tue, 28 Jun 2016 16:49:15 +0100
Subject: [PATCH] Track metrics of when backends match or disagree

---
 .../app/coffee/RedisBackend.coffee            |  5 ++-
 .../RedisBackend/RedisBackendTests.coffee     | 34 ++++++++++---------
 2 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/services/document-updater/app/coffee/RedisBackend.coffee b/services/document-updater/app/coffee/RedisBackend.coffee
index ca9e3de9e7..807737510e 100644
--- a/services/document-updater/app/coffee/RedisBackend.coffee
+++ b/services/document-updater/app/coffee/RedisBackend.coffee
@@ -2,6 +2,7 @@ Settings = require "settings-sharelatex"
 async = require "async"
 _ = require "underscore"
 logger = require "logger-sharelatex"
+Metrics = require "metrics-sharelatex"
 
 class Client
 	constructor: (@clients) ->
@@ -136,7 +137,9 @@ compareResults = (results) ->
 	first = results[0]
 	for result in results.slice(1)
 		if not _.isEqual(first, result)
-			logger.warn { results }, "redis return values do not match"
+			Metrics.inc "backend-conflict"
+		else
+			Metrics.inc "backend-match"
 
 module.exports =
 	createClient: () ->
diff --git a/services/document-updater/test/unit/coffee/RedisBackend/RedisBackendTests.coffee b/services/document-updater/test/unit/coffee/RedisBackend/RedisBackendTests.coffee
index 9ad9ea5ad4..a5cf885296 100644
--- a/services/document-updater/test/unit/coffee/RedisBackend/RedisBackendTests.coffee
+++ b/services/document-updater/test/unit/coffee/RedisBackend/RedisBackendTests.coffee
@@ -53,6 +53,8 @@ describe "RedisBackend", ->
 				activeHealthCheck: sinon.stub()
 			"ioredis": @ioredis =
 				Cluster: Cluster
+			"metrics-sharelatex":
+				@Metrics = inc: sinon.stub()
 		@client = @RedisBackend.createClient()
 		
 		@doc_id = "mock-doc-id"
@@ -96,6 +98,11 @@ describe "RedisBackend", ->
 				@rclient_ioredis.get
 					.calledWith("doclines:{#{@doc_id}}")
 					.should.equal true
+				
+			it "should send a metric", ->
+				@Metrics.inc
+					.calledWith("backend-match")
+					.should.equal true
 
 		describe "with different results", ->
 			beforeEach (done) ->
@@ -110,14 +117,9 @@ describe "RedisBackend", ->
 			it "should return the primary result", ->
 				@result.should.equal "primary-result"
 			
-			it "should log out the difference", ->
-				@logger.warn
-					.calledWith({
-						results: [
-							"primary-result",
-							"secondary-result"
-						]
-					}, "redis return values do not match")
+			it "should send a metric", ->
+				@Metrics.inc
+					.calledWith("backend-conflict")
 					.should.equal true
 
 		describe "when the secondary errors", ->
@@ -233,6 +235,11 @@ describe "RedisBackend", ->
 				@rclient_ioredis.exec
 					.called
 					.should.equal true
+				
+			it "should send a metric", ->
+				@Metrics.inc
+					.calledWith("backend-match")
+					.should.equal true
 
 		describe "with different results", ->
 			beforeEach (done) ->
@@ -251,14 +258,9 @@ describe "RedisBackend", ->
 			it "should return the primary result", ->
 				@result.should.deep.equal [@doclines, @version]
 			
-			it "should log out the difference", ->
-				@logger.warn
-					.calledWith({
-						results: [
-							[@doclines, @version],
-							["different-doc-lines", @version]
-						]
-					}, "redis return values do not match")
+			it "should send a metric", ->
+				@Metrics.inc
+					.calledWith("backend-conflict")
 					.should.equal true
 
 		describe "when the secondary errors", ->