summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-07-01 16:17:33 +0200
committerantirez <antirez@gmail.com>2014-07-01 16:17:33 +0200
commit83beaa886cd33e2b08ffb193be27faf7403024ea (patch)
tree28e93fa11218fce952d2c519d1771e661edb9b86
parent753b707d2ad15a4d6588f94ac82ff22b0567d052 (diff)
downloadredis-83beaa886cd33e2b08ffb193be27faf7403024ea.tar.gz
LATENCY LATEST implemented.
-rw-r--r--src/latency.c24
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;