From: sergey.kitov Date: Tue, 20 Apr 2021 14:06:58 +0000 (+0300) Subject: stats: Add functions for adding or removing metrics X-Git-Tag: 2.3.17~157 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a2a79fb3766d4133541fd86cd23c15e33467850e;p=thirdparty%2Fdovecot%2Fcore.git stats: Add functions for adding or removing metrics --- diff --git a/src/stats/stats-metrics.c b/src/stats/stats-metrics.c index 5ff68b5db0..ba7f91980f 100644 --- a/src/stats/stats-metrics.c +++ b/src/stats/stats-metrics.c @@ -10,6 +10,7 @@ #include "event-exporter.h" #include "stats-settings.h" #include "stats-metrics.h" +#include "settings-parser.h" #include @@ -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) diff --git a/src/stats/stats-metrics.h b/src/stats/stats-metrics.h index 91e67f6c39..6d7d7458b8 100644 --- a/src/stats/stats-metrics.h +++ b/src/stats/stats-metrics.h @@ -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);