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));