diff options
author | antirez <antirez@gmail.com> | 2014-07-01 16:17:33 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2014-07-01 16:17:33 +0200 |
commit | 83beaa886cd33e2b08ffb193be27faf7403024ea (patch) | |
tree | 28e93fa11218fce952d2c519d1771e661edb9b86 | |
parent | 753b707d2ad15a4d6588f94ac82ff22b0567d052 (diff) | |
download | redis-83beaa886cd33e2b08ffb193be27faf7403024ea.tar.gz |
LATENCY LATEST implemented.
-rw-r--r-- | src/latency.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/latency.c b/src/latency.c index bb05e8e71..198036df3 100644 --- a/src/latency.c +++ b/src/latency.c @@ -107,6 +107,27 @@ void latencyCommandReplyWithSamples(redisClient *c, struct latencyTimeSeries *ts setDeferredMultiBulkLength(c,replylen,samples); } +/* latencyCommand() helper to produce the reply for the LATEST subcommand, + * listing the last latency sample for every event type registered so far. */ +void latencyCommandReplyWithLatestEvents(redisClient *c) { + dictIterator *di; + dictEntry *de; + + addReplyMultiBulkLen(c,dictSize(server.latency_events)); + di = dictGetIterator(server.latency_events); + while((de = dictNext(di)) != NULL) { + char *event = dictGetKey(de); + struct latencyTimeSeries *ts = dictGetVal(de); + int last = (ts->idx + LATENCY_TS_LEN - 1) % LATENCY_TS_LEN; + + addReplyMultiBulkLen(c,3); + addReplyBulkCString(c,event); + addReplyLongLong(c,ts->samples[last].time); + addReplyLongLong(c,ts->samples[last].latency); + } + dictReleaseIterator(di); +} + /* LATENCY command implementations. * * LATENCY SAMPLES: return time-latency samples for the specified event. @@ -122,6 +143,9 @@ void latencyCommand(redisClient *c) { ts = dictFetchValue(server.latency_events,c->argv[2]->ptr); if (ts == NULL) goto nodataerr; latencyCommandReplyWithSamples(c,ts); + } else if (!strcasecmp(c->argv[1]->ptr,"latest") && c->argc == 2) { + /* LATENCY LATEST */ + latencyCommandReplyWithLatestEvents(c); } else { addReply(c,shared.syntaxerr); return; |