]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: Add functions for adding or removing metrics
authorsergey.kitov <sergey.kitov@open-xchange.com>
Tue, 20 Apr 2021 14:06:58 +0000 (17:06 +0300)
committersergey.kitov <sergey.kitov@open-xchange.com>
Fri, 3 Sep 2021 12:44:32 +0000 (15:44 +0300)
src/stats/stats-metrics.c
src/stats/stats-metrics.h

index 5ff68b5db057c9cced334a856cffc7ba966690a3..ba7f91980f1369f06e7a2da6ed2becb179f3154d 100644 (file)
@@ -10,6 +10,7 @@
 #include "event-exporter.h"
 #include "stats-settings.h"
 #include "stats-metrics.h"
+#include "settings-parser.h"
 
 #include <ctype.h>
 
@@ -156,6 +157,27 @@ static void stats_metrics_add_set(struct stats_metrics *metrics,
        }
 }
 
+bool stats_metrics_add_dynamic(struct stats_metrics *metrics,
+                              struct stats_metric_settings *set,
+                              const char **error_r)
+{
+        if (!stats_metric_setting_parser_info.check_func(set, metrics->pool, error_r))
+               return FALSE;
+       stats_metrics_add_set(metrics, set);
+       return TRUE;
+}
+
+bool stats_metrics_remove_dynamic(struct stats_metrics *metrics,
+                                 const char *name)
+{
+       struct metric *m;
+       array_foreach_elem(&metrics->metrics, m) {
+               if (strcmp(m->name, name) == 0)
+                       return event_filter_remove_queries_with_context(metrics->filter, m);
+        }
+       return FALSE;
+}
+
 static void
 stats_metrics_add_from_settings(struct stats_metrics *metrics,
                                const struct stats_settings *set)
index 91e67f6c39416cf7e94886a830f93c064e8827f5..6d7d7458b856179250e008fd5dca0f1104d2ab30 100644 (file)
@@ -7,6 +7,7 @@
 #define STATS_EVENT_FIELD_NAME_DURATION "duration"
 
 struct metric;
+struct stats_metrics;
 
 struct exporter {
        const char *name;
@@ -103,6 +104,13 @@ struct metric {
        struct metric_export_info export_info;
 };
 
+bool stats_metrics_add_dynamic(struct stats_metrics *metrics,
+                              struct stats_metric_settings *set,
+                              const char **error_r);
+
+bool stats_metrics_remove_dynamic(struct stats_metrics *metrics,
+                                 const char *name);
+
 struct stats_metrics *stats_metrics_init(const struct stats_settings *set);
 void stats_metrics_deinit(struct stats_metrics **metrics);