From d7677adab6251b47063cd20696faccc690e2a461 Mon Sep 17 00:00:00 2001
From: Pim van Pelt <pim@ipng.nl>
Date: Sun, 25 Mar 2018 22:27:54 +0200
Subject: [PATCH] Now that mgos_prometheus_metrics_printf() allows for multiple
 lines with the same name, remove the hacks

---
 src/dht.c      | 33 +++++++--------------------------
 src/veml6075.c | 21 +++------------------
 2 files changed, 10 insertions(+), 44 deletions(-)

diff --git a/src/dht.c b/src/dht.c
index 7cfe8fd..b7b8b94 100644
--- a/src/dht.c
+++ b/src/dht.c
@@ -19,36 +19,17 @@ struct dht_sensor {
 static struct dht_sensor *s_dht_sensor[MAX_DHT];
 static int s_num_dht = 0;
 
-static void print_chunk(struct mg_connection *nc, char *name, char *fmt, ...) {
-  char chunk[500];
-  int chunklen=0;
-  va_list ap;
-
-  snprintf(chunk, sizeof(chunk), "%s%s", name, fmt[0]=='{' ? "" : " ");
-  va_start(ap, fmt);
-  vsnprintf(chunk+strlen(chunk), sizeof(chunk)-strlen(chunk), fmt, ap);
-  va_end(ap);
-  strncat(chunk, "\n", sizeof(chunk));
-  chunklen=strlen(chunk);
-  LOG(LL_DEBUG, ("Chunk '%s' with length %d", chunk, chunklen));
-  mg_printf(nc, "%X\r\n%s\r\n", chunklen, chunk);
-
-}
-
 static void dht_prometheus_metrics(struct mg_connection *nc, void *user_data) {
   int i;
 
-  // BUG -- repeated HELP and TYPE makes Prometheus parser bork :(
-  mgos_prometheus_metrics_printf(nc, GAUGE,
-    "temperature", "Temperature in celcius",
-    "{sensor=\"0\",type=\"DHT\"} %f", s_dht_sensor[0]->temp);
-  mgos_prometheus_metrics_printf(nc, GAUGE,
-    "humidity", "Relative humidity percentage",
-    "{sensor=\"0\",type=\"DHT\"} %f", s_dht_sensor[0]->humidity);
+  for (i=0; i<s_num_dht; i++) {
+    mgos_prometheus_metrics_printf(nc, GAUGE,
+      "temperature", "Temperature in Celcius",
+      "{sensor=\"%d\",type=\"DHT\"} %f", i, s_dht_sensor[i]->temp);
+    mgos_prometheus_metrics_printf(nc, GAUGE,
+      "humidity", "Relative humidity percentage",
+      "{sensor=\"%d\",type=\"DHT\"} %f", i, s_dht_sensor[i]->humidity);
 
-  for (i=1; i<s_num_dht; i++) {
-    print_chunk(nc, "temperature", "{sensor=\"%d\",type=\"DHT\"} %f", i, s_dht_sensor[i]->temp);
-    print_chunk(nc, "humidity", "{sensor=\"%d\",type=\"DHT\"} %f", i, s_dht_sensor[i]->humidity);
   }
 
   (void) user_data;
diff --git a/src/veml6075.c b/src/veml6075.c
index 3604f34..f022456 100644
--- a/src/veml6075.c
+++ b/src/veml6075.c
@@ -8,28 +8,13 @@
 
 static struct mgos_veml6075 *s_veml6075;
 
-static void print_chunk(struct mg_connection *nc, char *name, char *fmt, ...) {
-  char chunk[500];
-  int chunklen=0;
-  va_list ap;
-
-  snprintf(chunk, sizeof(chunk), "%s%s", name, fmt[0]=='{' ? "" : " ");
-  va_start(ap, fmt);
-  vsnprintf(chunk+strlen(chunk), sizeof(chunk)-strlen(chunk), fmt, ap);
-  va_end(ap);
-  strncat(chunk, "\n", sizeof(chunk));
-  chunklen=strlen(chunk);
-//  LOG(LL_DEBUG, ("Chunk '%s' with length %d", chunk, chunklen));
-  mg_printf(nc, "%X\r\n%s\r\n", chunklen, chunk);
-}
-
 static void veml6075_prometheus_metrics(struct mg_connection *nc, void *user_data) {
-  // BUG -- repeated HELP and TYPE makes Prometheus parser bork :(
   mgos_prometheus_metrics_printf(nc, GAUGE,
     "UV", "Ultra Violet light intensity, in sensor counts",
     "{band=\"UVA\",type=\"VEML6075\", sensor=\"0\"} %f", mgos_veml6075_getUVA(s_veml6075));
-  print_chunk(nc, "UV", "{band=\"UVB\",type=\"VEML6075\", sensor=\"0\"} %f", mgos_veml6075_getUVB(s_veml6075));
-
+  mgos_prometheus_metrics_printf(nc, GAUGE,
+    "UV", "Ultra Violet light intensity, in sensor counts",
+    "{band=\"UVB\",type=\"VEML6075\", sensor=\"0\"} %f", mgos_veml6075_getUVB(s_veml6075));
   mgos_prometheus_metrics_printf(nc, GAUGE,
     "UVIndex", "2: Low, 5.5 Moderate, 7.5 High, 10.5 Very High, else Extreme",
     "{sensor=\"0\",type=\"VEML6075\"} %f", mgos_veml6075_getUVIndex(s_veml6075));