Skip to content

Commit b35a685

Browse files
committed
Merge pull request #855 from fintura/info
Improve server keyspace info in .server_info. Closing #610. Thx to @SinisterLight
2 parents a6357d6 + 28f31f1 commit b35a685

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

index.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -325,20 +325,23 @@ RedisClient.prototype.on_ready = function () {
325325
};
326326

327327
RedisClient.prototype.on_info_cmd = function (err, res) {
328-
var self = this, obj = {}, lines, retry_time;
328+
var self = this;
329+
var obj = {};
330+
var lines = res.toString().split("\r\n");
331+
var i = 0;
332+
var key = 'db' + i;
333+
var line, retry_time, parts, sub_parts;
329334

330335
if (err) {
331336
return self.emit("error", new Error("Ready check failed: " + err.message));
332337
}
333338

334-
lines = res.toString().split("\r\n");
335-
336-
lines.forEach(function (line) {
337-
var parts = line.split(':');
339+
for (i = 0; i < lines.length; i++) {
340+
parts = lines[i].split(':');
338341
if (parts[1]) {
339342
obj[parts[0]] = parts[1];
340343
}
341-
});
344+
}
342345

343346
obj.versions = [];
344347
/* istanbul ignore else: some redis servers do not send the version */
@@ -348,6 +351,19 @@ RedisClient.prototype.on_info_cmd = function (err, res) {
348351
});
349352
}
350353

354+
while (obj[key]) {
355+
parts = obj[key].split(',');
356+
obj[key] = {};
357+
while (line = parts.pop()) {
358+
sub_parts = line.split('=');
359+
if (sub_parts[1]) {
360+
obj[key][sub_parts[0]] = +sub_parts[1];
361+
}
362+
}
363+
i++;
364+
key = 'db' + i;
365+
}
366+
351367
// expose info key/vals to users
352368
this.server_info = obj;
353369

test/node_redis.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ describe("The node_redis client", function () {
227227
var end = helper.callFuncAfter(function () {
228228
client.removeListener("connect", on_connect);
229229
client.removeListener("reconnecting", on_recon);
230+
assert.strictEqual(client.server_info.db0.keys, 2);
231+
assert.strictEqual(Object.keys(client.server_info.db0).length, 3);
230232
done();
231233
}, 4);
232234
client.get("recon 1", helper.isString("one", end));

0 commit comments

Comments
 (0)