diff --git a/services/real-time/app.coffee b/services/real-time/app.coffee index 6161e63a46..0ddfe406e9 100644 --- a/services/real-time/app.coffee +++ b/services/real-time/app.coffee @@ -2,6 +2,7 @@ Metrics = require("metrics-sharelatex") Settings = require "settings-sharelatex" Metrics.initialize(Settings.appName or "real-time") async = require("async") +_ = require "underscore" logger = require "logger-sharelatex" logger.initialize("real-time") @@ -60,6 +61,7 @@ app.get "/debug/events", (req, res, next) -> res.send "debug mode will log next #{Settings.debugEvents} events" rclient = require("redis-sharelatex").createClient(Settings.redis.realtime) + app.get "/health_check/redis", (req, res, next) -> rclient.healthCheck (error) -> if error? @@ -132,16 +134,20 @@ if Settings.forceDrainMsDelay? if Settings.continualPubsubTraffic console.log "continualPubsubTraffic enabled" - pubSubClient = redis.createClient(Settings.redis.documentupdater) + redisClients = [redis.createClient(Settings.redis.documentupdater), redis.createClient(Settings.redis.realtime)] - publishJob = (channel, cb)-> + publishJob = (channel, callback)-> checker = new HealthCheckManager(channel) logger.debug {channel:channel}, "sending pub to keep connection alive" json = JSON.stringify({health_check:true, key: checker.id, date: new Date().toString()}) - pubSubClient.publish channel, json, (err)-> - if err? - logger.err {err, channel}, "error publishing pubsub traffic to redis" - cb(err) + jobs = _.map redisClients, (rclient)-> + return (cb)-> + rclient.publish channel, json, (err)-> + if err? + logger.err {err, channel}, "error publishing pubsub traffic to redis" + return cb(err) + + async.series jobs, callback runPubSubTraffic = -> async.map ["applied-ops", "editor-events"], publishJob, (err)-> diff --git a/services/real-time/app/coffee/DocumentUpdaterController.coffee b/services/real-time/app/coffee/DocumentUpdaterController.coffee index 1eb5d21274..490902a837 100644 --- a/services/real-time/app/coffee/DocumentUpdaterController.coffee +++ b/services/real-time/app/coffee/DocumentUpdaterController.coffee @@ -1,7 +1,7 @@ logger = require "logger-sharelatex" settings = require 'settings-sharelatex' redis = require("redis-sharelatex") -rclient = redis.createClient(settings.redis.documentupdater) +rclient = redis.createClient(settings.redis.pubsub) SafeJsonParse = require "./SafeJsonParse" EventLogger = require "./EventLogger" HealthCheckManager = require "./HealthCheckManager" diff --git a/services/real-time/app/coffee/WebsocketLoadBalancer.coffee b/services/real-time/app/coffee/WebsocketLoadBalancer.coffee index ffe6e820ca..e4ed673f8a 100644 --- a/services/real-time/app/coffee/WebsocketLoadBalancer.coffee +++ b/services/real-time/app/coffee/WebsocketLoadBalancer.coffee @@ -2,8 +2,8 @@ Settings = require 'settings-sharelatex' logger = require 'logger-sharelatex' redis = require("redis-sharelatex") SafeJsonParse = require "./SafeJsonParse" -rclientPub = redis.createClient(Settings.redis.realtime) -rclientSub = redis.createClient(Settings.redis.realtime) +rclientPub = redis.createClient(Settings.redis.pubsub) +rclientSub = redis.createClient(Settings.redis.pubsub) EventLogger = require "./EventLogger" HealthCheckManager = require "./HealthCheckManager" diff --git a/services/real-time/config/settings.defaults.coffee b/services/real-time/config/settings.defaults.coffee index 28c51f79be..cc091a83f1 100644 --- a/services/real-time/config/settings.defaults.coffee +++ b/services/real-time/config/settings.defaults.coffee @@ -1,5 +1,11 @@ settings = redis: + + pubsub: + host: process.env['PUBSUB_REDIS_HOST'] or process.env['REDIS_HOST'] or "localhost" + port: process.env['PUBSUB_REDIS_PORT'] or process.env['REDIS_PORT'] or "6379" + password: process.env["PUBSUB_REDIS_PASSWORD"] or process.env["REDIS_PASSWORD"] or "" + realtime: host: process.env['REAL_TIME_REDIS_HOST'] or process.env['REDIS_HOST'] or "localhost" port: process.env['REAL_TIME_REDIS_PORT'] or process.env['REDIS_PORT'] or "6379"