]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: Add DUMP-RESET command to reset stats after dumping them
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 13 Dec 2017 12:43:43 +0000 (14:43 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 13 Dec 2017 16:51:26 +0000 (18:51 +0200)
src/stats/client-reader.c
src/stats/stats-metrics.c
src/stats/stats-metrics.h

index fe9f3cebcda5c62ed99d6024859caca767082d75..afd85057429a030870e902979b910f8ed97e037b 100644 (file)
@@ -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;
 }
 
index ca50fdd6ffacbb4d2708235e0fcd39f9c27708f6..6f96073ab897a25473f97c65b21829bad0dffcff 100644 (file)
@@ -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)
 {
index 9faabcb0767fccd2e313855a56fef4ef298c9158..33cbc77b70732c3b3ad56e2c2a6ff4f7bd877c1e 100644 (file)
@@ -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);