From 28f31f134c8b82640e197b40fdf360f97946c4bd Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Fri, 18 Sep 2015 01:50:26 +0200 Subject: [PATCH] Improve server keyspace info in .server_info --- index.js | 28 ++++++++++++++++++++++------ test/node_redis.spec.js | 2 ++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index e94745ed48..2661c19292 100644 --- a/index.js +++ b/index.js @@ -325,20 +325,23 @@ RedisClient.prototype.on_ready = function () { }; RedisClient.prototype.on_info_cmd = function (err, res) { - var self = this, obj = {}, lines, retry_time; + var self = this; + var obj = {}; + var lines = res.toString().split("\r\n"); + var i = 0; + var key = 'db' + i; + var line, retry_time, parts, sub_parts; if (err) { return self.emit("error", new Error("Ready check failed: " + err.message)); } - lines = res.toString().split("\r\n"); - - lines.forEach(function (line) { - var parts = line.split(':'); + for (i = 0; i < lines.length; i++) { + parts = lines[i].split(':'); if (parts[1]) { obj[parts[0]] = parts[1]; } - }); + } obj.versions = []; /* istanbul ignore else: some redis servers do not send the version */ @@ -348,6 +351,19 @@ RedisClient.prototype.on_info_cmd = function (err, res) { }); } + while (obj[key]) { + parts = obj[key].split(','); + obj[key] = {}; + while (line = parts.pop()) { + sub_parts = line.split('='); + if (sub_parts[1]) { + obj[key][sub_parts[0]] = +sub_parts[1]; + } + } + i++; + key = 'db' + i; + } + // expose info key/vals to users this.server_info = obj; diff --git a/test/node_redis.spec.js b/test/node_redis.spec.js index 821dc170b6..35e8ed5292 100644 --- a/test/node_redis.spec.js +++ b/test/node_redis.spec.js @@ -227,6 +227,8 @@ describe("The node_redis client", function () { var end = helper.callFuncAfter(function () { client.removeListener("connect", on_connect); client.removeListener("reconnecting", on_recon); + assert.strictEqual(client.server_info.db0.keys, 2); + assert.strictEqual(Object.keys(client.server_info.db0).length, 3); done(); }, 4); client.get("recon 1", helper.isString("one", end));