From: Timo Sirainen Date: Thu, 29 Aug 2024 10:55:44 +0000 (+0300) Subject: stats: file event exporter - Convert to using global settings X-Git-Tag: 2.4.1~722 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=174cb3d6835bcf5bf7ee1207a8467cd76c79d97d;p=thirdparty%2Fdovecot%2Fcore.git stats: file event exporter - Convert to using global settings --- diff --git a/src/stats/event-exporter-transport-file.c b/src/stats/event-exporter-transport-file.c index 6a4ab8218f..432a9368ba 100644 --- a/src/stats/event-exporter-transport-file.c +++ b/src/stats/event-exporter-transport-file.c @@ -7,6 +7,8 @@ #include "eacces-error.h" #include "ostream.h" #include "ostream-unix.h" +#include "settings.h" +#include "settings-parser.h" #include "event-exporter.h" #include @@ -26,6 +28,45 @@ struct file_event_exporter { #define EXPORTER_LAST_ERROR_DELAY 60 +struct event_exporter_file_settings { + pool_t pool; + + const char *event_exporter_file_path; + const char *event_exporter_unix_path; + unsigned int event_exporter_unix_connect_timeout_msecs; +}; + +#undef DEF +#define DEF(type, name) \ + SETTING_DEFINE_STRUCT_##type(#name, name, struct event_exporter_file_settings) +#undef DEF_MSECS +#define DEF_MSECS(type, name) \ + SETTING_DEFINE_STRUCT_##type(#name, name##_msecs, struct event_exporter_file_settings) + +static const struct setting_define event_exporter_file_setting_defines[] = { + DEF(STR, event_exporter_file_path), + DEF(STR, event_exporter_unix_path), + DEF_MSECS(TIME_MSECS, event_exporter_unix_connect_timeout), + + SETTING_DEFINE_LIST_END +}; + +static const struct event_exporter_file_settings event_exporter_file_default_settings = { + .event_exporter_file_path = "", + .event_exporter_unix_path = "", + .event_exporter_unix_connect_timeout_msecs = 250, +}; + +const struct setting_parser_info event_exporter_file_setting_parser_info = { + .name = "event_exporter_file", + + .defines = event_exporter_file_setting_defines, + .defaults = &event_exporter_file_default_settings, + + .struct_size = sizeof(struct event_exporter_file_settings), + .pool_offset1 = 1 + offsetof(struct event_exporter_file_settings, pool), +}; + static void exporter_file_close(struct file_event_exporter *node) { if (node->fd == -1) @@ -48,24 +89,49 @@ static void event_exporter_file_deinit(struct event_exporter *_exporter) i_free(node->fname); } -static void -exporter_file_init(struct file_event_exporter *node, bool unix_socket) +static int +event_exporter_file_init_common(pool_t pool, struct event *event, + bool unix_socket, + struct event_exporter **exporter_r, + const char **error_r) { - node->fname = i_strdup(t_strcut(node->exporter.transport_args, ' ')); + struct file_event_exporter *node = + p_new(pool, struct file_event_exporter, 1); node->fd = -1; node->unix_socket = unix_socket; - node->connect_timeout_msecs = node->exporter.transport_timeout; + + const struct event_exporter_file_settings *set; + if (settings_get(event, &event_exporter_file_setting_parser_info, 0, + &set, error_r) < 0) + return -1; + + if (unix_socket) + node->fname = i_strdup(set->event_exporter_unix_path); + else + node->fname = i_strdup(set->event_exporter_file_path); + node->connect_timeout_msecs = set->event_exporter_unix_connect_timeout_msecs; + settings_free(set); + + *exporter_r = &node->exporter; + return 0; } static int -event_exporter_file_init(pool_t pool, struct event *event ATTR_UNUSED, +event_exporter_file_init(pool_t pool, struct event *event, struct event_exporter **exporter_r, - const char **error_r ATTR_UNUSED) + const char **error_r) { - struct file_event_exporter *node = - p_new(pool, struct file_event_exporter, 1); - *exporter_r = &node->exporter; - return 0; + return event_exporter_file_init_common(pool, event, FALSE, + exporter_r, error_r); +} + +static int +event_exporter_unix_init(pool_t pool, struct event *event, + struct event_exporter **exporter_r, + const char **error_r) +{ + return event_exporter_file_init_common(pool, event, TRUE, + exporter_r, error_r); } static void exporter_file_open_error(struct file_event_exporter *node, const char *func) @@ -139,21 +205,6 @@ event_exporter_file_send(struct event_exporter *_exporter, const buffer_t *buf) { struct file_event_exporter *node = container_of(_exporter, struct file_event_exporter, exporter); - if (node->fname == NULL) - exporter_file_init(node, FALSE); - if (!exporter_file_open(node)) - return; - event_exporter_file_write(node, buf); -} - -static void -event_exporter_unix_send(struct event_exporter *_exporter, - const buffer_t *buf) -{ - struct file_event_exporter *node = - container_of(_exporter, struct file_event_exporter, exporter); - if (node->fname == NULL) - exporter_file_init(node, TRUE); if (!exporter_file_open(node)) return; event_exporter_file_write(node, buf); @@ -177,7 +228,7 @@ const struct event_exporter_transport event_exporter_transport_file = { const struct event_exporter_transport event_exporter_transport_unix = { .name = "unix", - .init = event_exporter_file_init, + .init = event_exporter_unix_init, .deinit = event_exporter_file_deinit, - .send = event_exporter_unix_send, + .send = event_exporter_file_send, };