You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-04 15:02:09 +03:00
Fix monitoring mode
This commit is contained in:
@@ -33,6 +33,41 @@ RedisClient.prototype.select = RedisClient.prototype.SELECT = function select (d
|
||||
});
|
||||
};
|
||||
|
||||
RedisClient.prototype.monitor = RedisClient.prototype.MONITOR = function (callback) {
|
||||
// Use a individual command, as this is a special case that does not has to be checked for any other command
|
||||
var self = this;
|
||||
return this.send_command('monitor', [], function (err, res) {
|
||||
if (err === null) {
|
||||
self.reply_parser.returnReply = function (reply) {
|
||||
// If in monitor mode, all normal commands are still working and we only want to emit the streamlined commands
|
||||
// As this is not the average use case and monitor is expensive anyway, let's change the code here, to improve
|
||||
// the average performance of all other commands in case of no monitor mode
|
||||
if (self.monitoring) {
|
||||
var replyStr;
|
||||
if (self.buffers && Buffer.isBuffer(reply)) {
|
||||
replyStr = reply.toString();
|
||||
} else {
|
||||
replyStr = reply;
|
||||
}
|
||||
// While reconnecting the redis server does not recognize the client as in monitor mode anymore
|
||||
// Therefor the monitor command has to finish before it catches further commands
|
||||
if (typeof replyStr === 'string' && utils.monitor_regex.test(replyStr)) {
|
||||
var timestamp = replyStr.slice(0, replyStr.indexOf(' '));
|
||||
var args = replyStr.slice(replyStr.indexOf('"') + 1, -1).split('" "').map(function (elem) {
|
||||
return elem.replace(/\\"/g, '"');
|
||||
});
|
||||
self.emit('monitor', timestamp, args, replyStr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
self.return_reply(reply);
|
||||
};
|
||||
self.monitoring = true;
|
||||
}
|
||||
utils.callback_or_emit(self, callback, err, res);
|
||||
});
|
||||
};
|
||||
|
||||
// Store info in this.server_info after each call
|
||||
RedisClient.prototype.info = RedisClient.prototype.INFO = function info (section, callback) {
|
||||
var self = this;
|
||||
|
Reference in New Issue
Block a user