mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 17:10:50 +00:00
Merge pull request #3935 from itamarhaber/module-cmdstats
Changes command stats iteration to being dict-based
This commit is contained in:
commit
34a79c353f
27
src/server.c
27
src/server.c
@ -1987,15 +1987,18 @@ void populateCommandTable(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void resetCommandTableStats(void) {
|
void resetCommandTableStats(void) {
|
||||||
int numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand);
|
struct redisCommand *c;
|
||||||
int j;
|
dictEntry *de;
|
||||||
|
dictIterator *di;
|
||||||
for (j = 0; j < numcommands; j++) {
|
|
||||||
struct redisCommand *c = redisCommandTable+j;
|
|
||||||
|
|
||||||
|
di = dictGetSafeIterator(server.commands);
|
||||||
|
while((de = dictNext(di)) != NULL) {
|
||||||
|
c = (struct redisCommand *) dictGetVal(de);
|
||||||
c->microseconds = 0;
|
c->microseconds = 0;
|
||||||
c->calls = 0;
|
c->calls = 0;
|
||||||
}
|
}
|
||||||
|
dictReleaseIterator(di);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================== Redis OP Array API ============================ */
|
/* ========================== Redis OP Array API ============================ */
|
||||||
@ -2794,7 +2797,7 @@ void bytesToHuman(char *s, unsigned long long n) {
|
|||||||
sds genRedisInfoString(char *section) {
|
sds genRedisInfoString(char *section) {
|
||||||
sds info = sdsempty();
|
sds info = sdsempty();
|
||||||
time_t uptime = server.unixtime-server.stat_starttime;
|
time_t uptime = server.unixtime-server.stat_starttime;
|
||||||
int j, numcommands;
|
int j;
|
||||||
struct rusage self_ru, c_ru;
|
struct rusage self_ru, c_ru;
|
||||||
unsigned long lol, bib;
|
unsigned long lol, bib;
|
||||||
int allsections = 0, defsections = 0;
|
int allsections = 0, defsections = 0;
|
||||||
@ -3255,20 +3258,24 @@ sds genRedisInfoString(char *section) {
|
|||||||
(float)c_ru.ru_utime.tv_sec+(float)c_ru.ru_utime.tv_usec/1000000);
|
(float)c_ru.ru_utime.tv_sec+(float)c_ru.ru_utime.tv_usec/1000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cmdtime */
|
/* Command statistics */
|
||||||
if (allsections || !strcasecmp(section,"commandstats")) {
|
if (allsections || !strcasecmp(section,"commandstats")) {
|
||||||
if (sections++) info = sdscat(info,"\r\n");
|
if (sections++) info = sdscat(info,"\r\n");
|
||||||
info = sdscatprintf(info, "# Commandstats\r\n");
|
info = sdscatprintf(info, "# Commandstats\r\n");
|
||||||
numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand);
|
|
||||||
for (j = 0; j < numcommands; j++) {
|
|
||||||
struct redisCommand *c = redisCommandTable+j;
|
|
||||||
|
|
||||||
|
struct redisCommand *c;
|
||||||
|
dictEntry *de;
|
||||||
|
dictIterator *di;
|
||||||
|
di = dictGetSafeIterator(server.commands);
|
||||||
|
while((de = dictNext(di)) != NULL) {
|
||||||
|
c = (struct redisCommand *) dictGetVal(de);
|
||||||
if (!c->calls) continue;
|
if (!c->calls) continue;
|
||||||
info = sdscatprintf(info,
|
info = sdscatprintf(info,
|
||||||
"cmdstat_%s:calls=%lld,usec=%lld,usec_per_call=%.2f\r\n",
|
"cmdstat_%s:calls=%lld,usec=%lld,usec_per_call=%.2f\r\n",
|
||||||
c->name, c->calls, c->microseconds,
|
c->name, c->calls, c->microseconds,
|
||||||
(c->calls == 0) ? 0 : ((float)c->microseconds/c->calls));
|
(c->calls == 0) ? 0 : ((float)c->microseconds/c->calls));
|
||||||
}
|
}
|
||||||
|
dictReleaseIterator(di);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cluster */
|
/* Cluster */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user