# HG changeset patch # User Aki Tuomi # Date 1452519995 -7200 # Node ID d9189bd0121913a8a6b0ce3f2da115c380664974 # Parent 845fb37ef97224f80ec0cfff97de485031113124 doveadm-stats: Add stats reset command line diff -r 845fb37ef972 -r d9189bd01219 src/doveadm/doveadm-cmd.h --- a/src/doveadm/doveadm-cmd.h Mon Jan 11 15:46:28 2016 +0200 +++ b/src/doveadm/doveadm-cmd.h Mon Jan 11 15:46:35 2016 +0200 @@ -23,6 +23,7 @@ extern struct doveadm_cmd doveadm_cmd_sis_find; extern struct doveadm_cmd doveadm_cmd_stats_dump; extern struct doveadm_cmd doveadm_cmd_stats_top; +extern struct doveadm_cmd doveadm_cmd_stats_reset; extern struct doveadm_cmd doveadm_cmd_zlibconnect; void doveadm_register_cmd(const struct doveadm_cmd *cmd); diff -r 845fb37ef972 -r d9189bd01219 src/doveadm/doveadm-stats.c --- a/src/doveadm/doveadm-stats.c Mon Jan 11 15:46:28 2016 +0200 +++ b/src/doveadm/doveadm-stats.c Mon Jan 11 15:46:35 2016 +0200 @@ -495,6 +495,52 @@ i_close_fd(&ctx.fd); } +static void stats_reset(const char *path, const char **items ATTR_UNUSED) +{ + const char **ptr ATTR_UNUSED; + int fd,ret; + string_t *cmd; + struct istream *input; + const char *line; + + fd = doveadm_connect(path); + net_set_nonblock(fd, FALSE); + input = i_stream_create_fd(fd, (size_t)-1, FALSE); + + cmd = t_str_new(10); + str_append(cmd, "RESET"); +/* XXX: Not supported yet. + for(ptr = items; *ptr; ptr++) + { + str_append_c(cmd, '\t'); + str_append(cmd, *ptr); + } +*/ + str_append_c(cmd, '\n'); + + /* send command */ + ret = write_full(fd, str_c(cmd), str_len(cmd)); + + if (ret < 0) { + i_close_fd(&fd); + i_error("write(%s) failed: %m", path); + return; + } + + line = i_stream_read_next_line(input); + + if (line == NULL) { + i_error("read(%s) failed: %s", path, i_stream_get_error(input)); + } else if (strncmp(line, "OK", 2) != 0) { + i_error("%s",line); + } else { + i_info("Stats reset"); + } + + i_stream_destroy(&input); + i_close_fd(&fd); +} + static void cmd_stats_top(int argc, char *argv[]) { const char *path, *sort_type; @@ -527,6 +573,30 @@ stats_top(path, sort_type); } +static void cmd_stats_reset(int argc, char *argv[]) +{ + const char *path; + int c; + + path = t_strconcat(doveadm_settings->base_dir, "/stats", NULL); + while((c = getopt(argc, argv, "s:")) > 0) { + switch (c) { + case 's': + path = optarg; + break; + default: + help(&doveadm_cmd_stats_reset); + } + } + argv += optind - 1; + /* items is now argv */ +/* if (optind >= argc) { + i_fatal("missing item(s) to reset"); + } +*/ + stats_reset(path, (const char**)argv); +} + struct doveadm_cmd doveadm_cmd_stats_dump = { cmd_stats_dump, "stats dump", "[-s ] []" }; @@ -534,3 +604,7 @@ struct doveadm_cmd doveadm_cmd_stats_top = { cmd_stats_top, "stats top", "[-s ] [-b] []" }; + +struct doveadm_cmd doveadm_cmd_stats_reset = { + cmd_stats_reset, "stats reset", "[-s ]" +}; diff -r 845fb37ef972 -r d9189bd01219 src/doveadm/doveadm.c --- a/src/doveadm/doveadm.c Mon Jan 11 15:46:28 2016 +0200 +++ b/src/doveadm/doveadm.c Mon Jan 11 15:46:35 2016 +0200 @@ -252,6 +252,7 @@ &doveadm_cmd_dump, &doveadm_cmd_pw, &doveadm_cmd_stats_top, + &doveadm_cmd_stats_reset, &doveadm_cmd_zlibconnect };