summaryrefslogtreecommitdiff
path: root/src/latency.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/latency.c')
-rw-r--r--src/latency.c40
1 files changed, 19 insertions, 21 deletions
diff --git a/src/latency.c b/src/latency.c
index 1eac48191..95e5a8a1d 100644
--- a/src/latency.c
+++ b/src/latency.c
@@ -522,33 +522,24 @@ void fillCommandCDF(client *c, struct hdr_histogram* histogram) {
/* latencyCommand() helper to produce for all commands,
* a per command cumulative distribution of latencies. */
-void latencyAllCommandsFillCDF(client *c) {
- dictIterator *di = dictGetSafeIterator(server.commands);
+void latencyAllCommandsFillCDF(client *c, dict *commands, int *command_with_data) {
+ dictIterator *di = dictGetSafeIterator(commands);
dictEntry *de;
struct redisCommand *cmd;
- void *replylen = addReplyDeferredLen(c);
- int command_with_data = 0;
+
while((de = dictNext(di)) != NULL) {
cmd = (struct redisCommand *) dictGetVal(de);
if (cmd->latency_histogram) {
- addReplyBulkCString(c,cmd->name);
+ addReplyBulkCBuffer(c, cmd->fullname, sdslen(cmd->fullname));
fillCommandCDF(c, cmd->latency_histogram);
- command_with_data++;
+ (*command_with_data)++;
}
if (cmd->subcommands) {
- for (int j = 0; cmd->subcommands[j].name; j++) {
- struct redisCommand *sub = cmd->subcommands+j;
- if (sub->latency_histogram) {
- addReplyBulkSds(c,getFullCommandName(sub));
- fillCommandCDF(c, sub->latency_histogram);
- command_with_data++;
- }
- }
+ latencyAllCommandsFillCDF(c, cmd->subcommands_dict, command_with_data);
}
}
dictReleaseIterator(di);
- setDeferredMapLen(c,replylen,command_with_data);
}
/* latencyCommand() helper to produce for a specific command set,
@@ -564,20 +555,24 @@ void latencySpecificCommandsFillCDF(client *c) {
}
if (cmd->latency_histogram) {
- addReplyBulkSds(c,getFullCommandName(cmd));
+ addReplyBulkCBuffer(c, cmd->fullname, sdslen(cmd->fullname));
fillCommandCDF(c, cmd->latency_histogram);
command_with_data++;
}
- if (cmd->subcommands) {
- for (int j = 0; cmd->subcommands[j].name; j++) {
- struct redisCommand *sub = cmd->subcommands+j;
+ if (cmd->subcommands_dict) {
+ dictEntry *de;
+ dictIterator *di = dictGetSafeIterator(cmd->subcommands_dict);
+
+ while ((de = dictNext(di)) != NULL) {
+ struct redisCommand *sub = dictGetVal(de);
if (sub->latency_histogram) {
- addReplyBulkSds(c,getFullCommandName(sub));
+ addReplyBulkCBuffer(c, sub->fullname, sdslen(sub->fullname));
fillCommandCDF(c, sub->latency_histogram);
command_with_data++;
}
}
+ dictReleaseIterator(di);
}
}
setDeferredMapLen(c,replylen,command_with_data);
@@ -725,7 +720,10 @@ void latencyCommand(client *c) {
} else if (!strcasecmp(c->argv[1]->ptr,"histogram") && c->argc >= 2) {
/* LATENCY HISTOGRAM*/
if (c->argc == 2) {
- latencyAllCommandsFillCDF(c);
+ int command_with_data = 0;
+ void *replylen = addReplyDeferredLen(c);
+ latencyAllCommandsFillCDF(c, server.commands, &command_with_data);
+ setDeferredMapLen(c, replylen, command_with_data);
} else {
latencySpecificCommandsFillCDF(c);
}