UNPKG

linagora-rse

Version:
127 lines (105 loc) 2.99 kB
'use strict'; var logger = require('../../../core/logger'); var esnconfig = require('../../../core/esn-config'); var pubsub = require('../../../core/pubsub').local; var initialized = false; var connected = false; var client; var defaultOptions = { host: process.env.REDIS_HOST || 'localhost', port: process.env.REDIS_PORT || 6379 }; var getRedisConfiguration = function(options) { var redisConfig = options || defaultOptions; if (redisConfig.url) { var url = require('url').parse(redisConfig.url); if (url.protocol === 'redis:') { if (url.auth) { var userparts = url.auth.split(':'); redisConfig.user = userparts[0]; if (userparts.length === 2) { redisConfig.pass = userparts[1]; } } redisConfig.host = url.hostname; redisConfig.port = url.port; if (url.pathname) { redisConfig.db = url.pathname.replace('/', '', 1); } } } pubsub.topic('redis:configurationAvailable').publish(redisConfig); return redisConfig; }; var createClient = function(options, callback) { var redisConfig = getRedisConfiguration(options); var client = redisConfig.client || require('redis').createClient(redisConfig.port || redisConfig.socket, redisConfig.host, redisConfig); if (redisConfig.pass) { client.auth(redisConfig.pass, function(err) { if (err) { callback(err); } }); } if (redisConfig.db) { client.select(redisConfig.db); client.on('connect', function() { client.send_anyways = true; client.select(redisConfig.db); client.send_anyways = false; }); } client.on('error', function(err) { logger.error('Redis connection error', err); }); client.on('connect', function() { logger.info('Connected to Redis', redisConfig); connected = true; }); client.on('ready', function() { logger.info('Redis is Ready'); }); return callback(null, client); }; module.exports.createClient = createClient; var init = function(callback) { esnconfig('redis').get(function(err, config) { if (err) { logger.error('Error while getting the redis configuration', err); return callback(err); } createClient(config, function(err, client) { if (client) { initialized = true; } return callback(err, client); }); }); }; module.exports.init = init; pubsub.topic('mongodb:connectionAvailable').subscribe(function() { init(function(err, c) { if (err) { logger.error('Error while creating redis client', err); } if (c) { client = c; } }); }); module.exports.isInitialized = function() { return initialized; }; module.exports.isConnected = function() { return connected; }; module.exports._getClient = function() { return client; }; module.exports.getClient = function(callback) { if (this.isConnected() && this._getClient()) { return callback(null, client); } else { return this.init(callback); } };