]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
format_graphite: Implement support for metric_family_t.
authorFlorian Forster <octo@google.com>
Sun, 28 Jun 2020 20:20:20 +0000 (22:20 +0200)
committerFlorian Forster <octo@google.com>
Wed, 29 Jul 2020 11:40:03 +0000 (13:40 +0200)
src/utils/format_graphite/format_graphite.c
src/utils/format_graphite/format_graphite.h

index e1131f808c40b7e877062b978d0f69b7a4b88561..efc10eaf3b981ed6ce55970d7a888d56d8ed82a9 100644 (file)
 /* Utils functions to format data sets in graphite format.
  * Largely taken from write_graphite.c as it remains the same formatting */
 
-static int gr_format_values(strbuf_t *buf, metric_single_t const *m,
-                            gauge_t rate) {
-  if (m->value_type == DS_TYPE_GAUGE)
+static int gr_format_values(strbuf_t *buf, metric_t const *m, gauge_t rate) {
+  if (m->family->type == DS_TYPE_GAUGE)
     return strbuf_printf(buf, GAUGE_FORMAT, m->value.gauge);
   else if (rate != -1)
     return strbuf_printf(buf, "%f", rate);
-  else if (m->value_type == DS_TYPE_COUNTER)
+  else if (m->family->type == DS_TYPE_COUNTER)
     return strbuf_printf(buf, "%" PRIu64, (uint64_t)m->value.counter);
-  else if (m->value_type == DS_TYPE_DERIVE)
+  else if (m->family->type == DS_TYPE_DERIVE)
     return strbuf_printf(buf, "%" PRIi64, m->value.derive);
 
-  P_ERROR("gr_format_values: Unknown data source type: %d", m->value_type);
+  P_ERROR("gr_format_values: Unknown data source type: %d", m->family->type);
   return EINVAL;
 }
 
@@ -89,31 +88,29 @@ static int graphite_print_escaped(strbuf_t *buf, char const *s,
   return 0;
 }
 
-static int gr_format_name(strbuf_t *buf, metric_single_t const *m,
-                          char const *prefix, char const *suffix,
-                          char const escape_char, unsigned int flags) {
+static int gr_format_name(strbuf_t *buf, metric_t const *m, char const *prefix,
+                          char const *suffix, char const escape_char,
+                          unsigned int flags) {
   if (prefix != NULL) {
     strbuf_print(buf, prefix);
   }
-  graphite_print_escaped(buf, m->identity->name, escape_char);
+  graphite_print_escaped(buf, m->family->name, escape_char);
   if (suffix != NULL) {
     strbuf_print(buf, suffix);
   }
 
-  c_avl_iterator_t *iter = c_avl_get_iterator(m->identity->labels);
-  char *k = NULL, *v = NULL;
-  while ((c_avl_iterator_next(iter, (void **)&k, (void **)&v)) == 0) {
+  for (size_t i = 0; i < m->label.num; i++) {
+    label_pair_t *l = m->label.ptr + i;
     strbuf_print(buf, ".");
-    graphite_print_escaped(buf, k, escape_char);
+    graphite_print_escaped(buf, l->name, escape_char);
     strbuf_print(buf, (flags & GRAPHITE_SEPARATE_INSTANCES) ? "." : "=");
-    graphite_print_escaped(buf, v, escape_char);
+    graphite_print_escaped(buf, l->value, escape_char);
   }
-  c_avl_iterator_destroy(iter);
 
   return 0;
 }
 
-int format_graphite(strbuf_t *buf, metric_single_t const *m, char const *prefix,
+int format_graphite(strbuf_t *buf, metric_t const *m, char const *prefix,
                     char const *postfix, char const escape_char,
                     unsigned int flags) {
   gauge_t rate = -1;
index dced705d8b5d088345f766498bd1d74289624727..7ba471d9d775b2edce0e9d11024899aebbe82b56 100644 (file)
@@ -35,7 +35,7 @@
 #define GRAPHITE_USE_TAGS 0x20
 #define GRAPHITE_REVERSE_HOST 0x40
 
-int format_graphite(strbuf_t *buf, metric_single_t const *m, const char *prefix,
+int format_graphite(strbuf_t *buf, metric_t const *m, const char *prefix,
                     const char *suffix, const char escape_char,
                     unsigned int flags);