From 5f8775fc40a639ffa7143bf6f1e99cb2d0bd0657 Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Wed, 27 Jan 2021 13:10:07 +0200 Subject: [PATCH] stats: Support exporting event string lists --- src/stats/event-exporter-fmt-json.c | 19 +++++++++++++++++++ src/stats/event-exporter-fmt-tab-text.c | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/stats/event-exporter-fmt-json.c b/src/stats/event-exporter-fmt-json.c index fe70a2dd60..25c6116af4 100644 --- a/src/stats/event-exporter-fmt-json.c +++ b/src/stats/event-exporter-fmt-json.c @@ -32,6 +32,24 @@ static void append_str_max_len(string_t *dest, const char *str, str_append_c(dest, '"'); } +static void +append_strlist(string_t *dest, const ARRAY_TYPE(const_string) *strlist, + const struct metric_export_info *info) +{ + const char *value; + bool first = TRUE; + + str_append_c(dest, '['); + array_foreach_elem(strlist, value) { + if (first) + first = FALSE; + else + str_append_c(dest, ','); + append_str_max_len(dest, value, info); + } + str_append_c(dest, ']'); +} + static void append_int(string_t *dest, intmax_t val) { str_printfa(dest, "%jd", val); @@ -69,6 +87,7 @@ static void append_field_value(string_t *dest, const struct event_field *field, info->exporter->time_format); break; case EVENT_FIELD_VALUE_TYPE_STRLIST: + append_strlist(dest, &field->value.strlist, info); break; } } diff --git a/src/stats/event-exporter-fmt-tab-text.c b/src/stats/event-exporter-fmt-tab-text.c index 415bd661a7..49a065bcfd 100644 --- a/src/stats/event-exporter-fmt-tab-text.c +++ b/src/stats/event-exporter-fmt-tab-text.c @@ -9,6 +9,24 @@ #include "strescape.h" #include "hostpid.h" +static void append_strlist(string_t *dest, const ARRAY_TYPE(const_string) *strlist) +{ + string_t *str = t_str_new(64); + const char *value; + bool first = TRUE; + + /* append the strings first escaped into a temporary string */ + array_foreach_elem(strlist, value) { + if (first) + first = FALSE; + else + str_append_c(str, '\t'); + str_append_tabescaped(str, value); + } + /* append the temporary string (double-)escaped as the value */ + str_append_tabescaped(dest, str_c(str)); +} + static void append_int(string_t *dest, intmax_t val) { str_printfa(dest, "%jd", val); @@ -58,6 +76,7 @@ static void append_field_value(string_t *dest, const struct event_field *field, info->exporter->time_format); break; case EVENT_FIELD_VALUE_TYPE_STRLIST: + append_strlist(dest, &field->value.strlist); break; } } -- 2.47.3