From 8b9a26d6f38f700ae524d2f5267d693eb74fd9fb Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 19 Nov 2014 14:12:37 +0000 Subject: [PATCH] Add in http health check end points for redis subscription channels --- .../Features/Editor/EditorRealTimeController.coffee | 5 ++++- .../Features/Editor/EditorUpdatesController.coffee | 5 ++++- services/web/app/coffee/router.coffee | 13 +++++++++++++ .../Editor/EditorRealTimeControllerTests.coffee | 2 +- .../Editor/EditorUpdatesControllerTests.coffee | 2 +- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/services/web/app/coffee/Features/Editor/EditorRealTimeController.coffee b/services/web/app/coffee/Features/Editor/EditorRealTimeController.coffee index 924b8c66c6..b5c1f511a4 100644 --- a/services/web/app/coffee/Features/Editor/EditorRealTimeController.coffee +++ b/services/web/app/coffee/Features/Editor/EditorRealTimeController.coffee @@ -1,11 +1,14 @@ Settings = require 'settings-sharelatex' redis = require("redis-sharelatex") rclientPub = redis.createClient(Settings.redis.web) -rclientSub = redis.createRobustSubscriptionClient(Settings.redis.web) +rclientSub = redis.createMonitoredSubscriptionClient(Settings.redis.web) module.exports = EditorRealTimeController = rclientPub: rclientPub rclientSub: rclientSub + + isRedisPubSubAlive: () -> + rclientSub.isAlive() emitToRoom: (room_id, message, payload...) -> @rclientPub.publish "editor-events", JSON.stringify diff --git a/services/web/app/coffee/Features/Editor/EditorUpdatesController.coffee b/services/web/app/coffee/Features/Editor/EditorUpdatesController.coffee index f626a7a3ca..23e206c504 100644 --- a/services/web/app/coffee/Features/Editor/EditorUpdatesController.coffee +++ b/services/web/app/coffee/Features/Editor/EditorUpdatesController.coffee @@ -5,7 +5,7 @@ redis = require("redis-sharelatex") DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler') EditorRealTimeController = require("./EditorRealTimeController") -rclient = redis.createRobustSubscriptionClient(Settings.redis.web) +rclient = redis.createMonitoredSubscriptionClient(Settings.redis.web) module.exports = EditorUpdatesController = _applyUpdate: (client, project_id, doc_id, update, callback = (error) ->) -> @@ -29,6 +29,9 @@ module.exports = EditorUpdatesController = update.meta.user_id = user_id EditorUpdatesController._applyUpdate client, project_id, doc_id, update + isRedisPubSubAlive: () -> + rclient.isAlive() + listenForUpdatesFromDocumentUpdater: () -> rclient.subscribe "applied-ops" rclient.on "message", (channel, message) -> diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index aaf81a8f16..ae5436cfd7 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -8,6 +8,7 @@ AuthorizationManager = require('./Features/Security/AuthorizationManager') EditorController = require("./Features/Editor/EditorController") EditorRouter = require("./Features/Editor/EditorRouter") EditorUpdatesController = require("./Features/Editor/EditorUpdatesController") +EditorRealTimeController = require("./Features/Editor/EditorRealTimeController") Settings = require('settings-sharelatex') TpdsController = require('./Features/ThirdPartyDataStore/TpdsController') SubscriptionRouter = require './Features/Subscription/SubscriptionRouter' @@ -175,6 +176,18 @@ module.exports = class Router req.session.destroy() app.get '/health_check', HealthCheckController.check + + app.get '/health_check/redis/doc_updates', (req, res, next) -> + if EditorUpdatesController.isRedisPubSubAlive() + res.send(200) + else + res.send(500) + + app.get '/health_check/redis/websockets', (req, res, next) -> + if EditorRealTimeController.isRedisPubSubAlive() + res.send(200) + else + res.send(500) app.get "/status/compiler/:Project_id", SecurityManager.requestCanAccessProject, (req, res) -> sendRes = _.once (statusCode, message)-> diff --git a/services/web/test/UnitTests/coffee/Editor/EditorRealTimeControllerTests.coffee b/services/web/test/UnitTests/coffee/Editor/EditorRealTimeControllerTests.coffee index 80b5800758..e4d174228d 100644 --- a/services/web/test/UnitTests/coffee/Editor/EditorRealTimeControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Editor/EditorRealTimeControllerTests.coffee @@ -9,7 +9,7 @@ describe "EditorRealTimeController", -> "redis-sharelatex": createClient: () -> auth:-> - createRobustSubscriptionClient: () -> + createMonitoredSubscriptionClient: () -> auth:-> "../../infrastructure/Server" : io: @io = {} @EditorRealTimeController.rclientPub = publish: sinon.stub() diff --git a/services/web/test/UnitTests/coffee/Editor/EditorUpdatesControllerTests.coffee b/services/web/test/UnitTests/coffee/Editor/EditorUpdatesControllerTests.coffee index ba39e921f1..1410e82473 100644 --- a/services/web/test/UnitTests/coffee/Editor/EditorUpdatesControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Editor/EditorUpdatesControllerTests.coffee @@ -18,7 +18,7 @@ describe "EditorUpdatesController", -> "../../infrastructure/Metrics" : @metrics = { set: sinon.stub(), inc: sinon.stub() } "../../infrastructure/Server" : io: @io = {} "redis-sharelatex" : - createRobustSubscriptionClient: ()=> + createMonitoredSubscriptionClient: ()=> @rclient = {auth:->} describe "_applyUpdate", ->