]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: Support exporting event string lists
authorAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 27 Jan 2021 11:10:07 +0000 (13:10 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 29 Sep 2021 10:09:58 +0000 (10:09 +0000)
src/stats/event-exporter-fmt-json.c
src/stats/event-exporter-fmt-tab-text.c

index fe70a2dd607eae72951e404b80b76040b5a4a79d..25c6116af4f91f3abba6307c76b48853fae25b7b 100644 (file)
@@ -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;
        }
 }
index 415bd661a783da555ba45b564b9b1a7ab7b97380..49a065bcfd60aef6d06f36ba270a52a736257e99 100644 (file)
@@ -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;
        }
 }