From: Timo Sirainen Date: Wed, 13 Dec 2017 12:43:43 +0000 (+0200) Subject: stats: Add DUMP-RESET command to reset stats after dumping them X-Git-Tag: 2.3.0.rc1~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c675f5e259c19f9fdc40808439479131b32421e;p=thirdparty%2Fdovecot%2Fcore.git stats: Add DUMP-RESET command to reset stats after dumping them --- diff --git a/src/stats/client-reader.c b/src/stats/client-reader.c index fe9f3cebcd..afd8505742 100644 --- a/src/stats/client-reader.c +++ b/src/stats/client-reader.c @@ -89,6 +89,15 @@ reader_client_input_dump(struct reader_client *client, const char *const *args) return 1; } +static int +reader_client_input_dump_reset(struct reader_client *client, + const char *const *args) +{ + (void)reader_client_input_dump(client, args); + stats_metrics_reset(client->metrics); + return 1; +} + static int reader_client_input_args(struct connection *conn, const char *const *args) { @@ -102,6 +111,8 @@ reader_client_input_args(struct connection *conn, const char *const *args) args++; if (strcmp(cmd, "DUMP") == 0) return reader_client_input_dump(client, args); + else if (strcmp(cmd, "DUMP-RESET") == 0) + return reader_client_input_dump_reset(client, args); return 1; } diff --git a/src/stats/stats-metrics.c b/src/stats/stats-metrics.c index ca50fdd6ff..6f96073ab8 100644 --- a/src/stats/stats-metrics.c +++ b/src/stats/stats-metrics.c @@ -124,6 +124,17 @@ void stats_metrics_deinit(struct stats_metrics **_metrics) pool_unref(&metrics->pool); } +void stats_metrics_reset(struct stats_metrics *metrics) +{ + struct metric *const *metricp; + + array_foreach(&metrics->metrics, metricp) { + timing_reset((*metricp)->duration_timing); + for (unsigned int i = 0; i < (*metricp)->fields_count; i++) + timing_reset((*metricp)->fields[i].timing); + } +} + struct event_filter * stats_metrics_get_event_filter(struct stats_metrics *metrics) { diff --git a/src/stats/stats-metrics.h b/src/stats/stats-metrics.h index 9faabcb076..33cbc77b70 100644 --- a/src/stats/stats-metrics.h +++ b/src/stats/stats-metrics.h @@ -21,6 +21,9 @@ struct metric { struct stats_metrics *stats_metrics_init(const struct stats_settings *set); void stats_metrics_deinit(struct stats_metrics **metrics); +/* Reset all metrics */ +void stats_metrics_reset(struct stats_metrics *metrics); + /* Returns event filter created from the stats_settings. */ struct event_filter * stats_metrics_get_event_filter(struct stats_metrics *metrics);