]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: Output multi level sub-metrics correctly
authorAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 20 Dec 2019 10:31:17 +0000 (12:31 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 20 Dec 2019 10:32:56 +0000 (12:32 +0200)
src/stats/client-reader.c

index bd220ea03e36c4965b78d09446ea6100a0daae05..30ef71d2cc1131972481658cc95f511be27b5819 100644 (file)
@@ -82,20 +82,22 @@ static void
 reader_client_dump_sub_metrics(struct ostream *output, const struct metric *metric,
                               const char *sub_name, const char *const *fields)
 {
-       size_t pos;
+       size_t root_pos, name_pos;
        struct metric *const *sub_metrics;
        if (!array_is_created(&metric->sub_metrics))
                return;
        string_t *str = t_str_new(128);
        str_append_tabescaped(str, sub_name);
        str_append_c(str, '_');
-       pos = str->used;
+       root_pos = str->used;
 
        array_foreach(&metric->sub_metrics, sub_metrics) {
+               str_truncate(str, root_pos);
                str_append_tabescaped(str, (*sub_metrics)->sub_name);
+               name_pos = str->used;
                reader_client_dump_metric(str, *sub_metrics, fields);
                o_stream_nsend(output, str_data(str), str_len(str));
-               str_truncate(str, pos);
+               str_truncate(str, name_pos);
                reader_client_dump_sub_metrics(output, *sub_metrics,
                                               str_c(str), fields);
        }