diff --git a/src/dht_drv.c b/src/dht_drv.c index da7daeb..1735a0e 100644 --- a/src/dht_drv.c +++ b/src/dht_drv.c @@ -29,7 +29,6 @@ static void dht_prometheus_metrics(struct mg_connection *nc, void *user_data) { mgos_prometheus_metrics_printf(nc, GAUGE, "humidity", "Relative humidity percentage", "{sensor=\"%d\",type=\"DHT\"} %f", i, s_dht_sensor[i]->humidity); - } (void) user_data; diff --git a/src/htu21df_drv.c b/src/htu21df_drv.c index 1604615..868dc80 100644 --- a/src/htu21df_drv.c +++ b/src/htu21df_drv.c @@ -9,6 +9,8 @@ static struct mgos_htu21df *s_htu21df; static void htu21df_prometheus_metrics(struct mg_connection *nc, void *user_data) { + struct mgos_htu21df_stats stats; + mgos_prometheus_metrics_printf(nc, GAUGE, "temperature", "Temperature in Celcius", "{sensor=\"0\",type=\"HTU21DF\"} %f", mgos_htu21df_getTemperature(s_htu21df)); @@ -16,18 +18,39 @@ static void htu21df_prometheus_metrics(struct mg_connection *nc, void *user_data "humidity", "Relative humidity percentage", "{sensor=\"0\",type=\"HTU21DF\"} %f", mgos_htu21df_getHumidity(s_htu21df)); + if (mgos_htu21df_getStats(s_htu21df, &stats)) { + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_total", "Total reads from sensor", + "{sensor=\"0\",type=\"HTU21DF\"} %u", stats.read); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_total", "Total successful reads from sensor", + "{sensor=\"0\",type=\"HTU21DF\"} %u", stats.read_success); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_cached_total", "Total successful cached reads from sensor", + "{sensor=\"0\",type=\"HTU21DF\"} %u", stats.read_success_cached); + uint32_t errors = stats.read - stats.read_success - stats.read_success_cached; + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_error_total", "Total unsuccessful reads from sensor", + "{sensor=\"0\",type=\"HTU21DF\"} %u", errors); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_usecs_total", "Total microseconds spent in reads from sensor", + "{sensor=\"0\",type=\"HTU21DF\"} %f", stats.read_success_usecs); + } + (void) user_data; } static void htu21df_timer_cb(void *user_data) { - double start; - uint32_t usecs=0; float temperature, humidity; + struct mgos_htu21df_stats stats_before, stats_after; + uint32_t usecs=0; - start=mgos_uptime(); + mgos_htu21df_getStats(s_htu21df, &stats_before); temperature=mgos_htu21df_getTemperature(s_htu21df); humidity=mgos_htu21df_getHumidity(s_htu21df); - usecs=1000000*(mgos_uptime()-start); + mgos_htu21df_getStats(s_htu21df, &stats_after); + + usecs=stats_after.read_success_usecs - stats_before.read_success_usecs; LOG(LL_INFO, ("HTU21DF sensor=0 temperature=%.2fC humidity=%.1f%% usecs=%u", temperature, humidity, usecs)); (void) user_data; diff --git a/src/mcp9808_drv.c b/src/mcp9808_drv.c index 2a762e7..8dedd2f 100644 --- a/src/mcp9808_drv.c +++ b/src/mcp9808_drv.c @@ -9,20 +9,44 @@ static struct mgos_mcp9808 *s_mcp9808; static void mcp9808_prometheus_metrics(struct mg_connection *nc, void *user_data) { + struct mgos_mcp9808_stats stats; + mgos_prometheus_metrics_printf(nc, GAUGE, "temperature", "Temperature in Celcius", "{sensor=\"0\",type=\"MCP9808\"} %f", mgos_mcp9808_getTemperature(s_mcp9808)); + + if (mgos_mcp9808_getStats(s_mcp9808, &stats)) { + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_total", "Total reads from sensor", + "{sensor=\"0\",type=\"MCP9808\"} %u", stats.read); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_total", "Total successful reads from sensor", + "{sensor=\"0\",type=\"MCP9808\"} %u", stats.read_success); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_cached_total", "Total successful cached reads from sensor", + "{sensor=\"0\",type=\"MCP9808\"} %u", stats.read_success_cached); + uint32_t errors = stats.read - stats.read_success - stats.read_success_cached; + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_error_total", "Total unsuccessful reads from sensor", + "{sensor=\"0\",type=\"MCP9808\"} %u", errors); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_usecs_total", "Total microseconds spent in reads from sensor", + "{sensor=\"0\",type=\"MCP9808\"} %f", stats.read_success_usecs); + } + (void) user_data; } static void mcp9808_timer_cb(void *user_data) { - double start; - uint32_t usecs=0; float temperature; + struct mgos_mcp9808_stats stats_before, stats_after; + uint32_t usecs=0; - start=mgos_uptime(); + mgos_mcp9808_getStats(s_mcp9808, &stats_before); temperature=mgos_mcp9808_getTemperature(s_mcp9808); - usecs=1000000*(mgos_uptime()-start); + mgos_mcp9808_getStats(s_mcp9808, &stats_after); + + usecs=stats_after.read_success_usecs - stats_before.read_success_usecs; LOG(LL_INFO, ("MCP9808 sensor=0 temperature=%.2fC usecs=%u", temperature, usecs)); (void) user_data; diff --git a/src/sht31_drv.c b/src/sht31_drv.c index bdec08c..42a8f84 100644 --- a/src/sht31_drv.c +++ b/src/sht31_drv.c @@ -9,6 +9,8 @@ static struct mgos_sht31 *s_sht31; static void sht31_prometheus_metrics(struct mg_connection *nc, void *user_data) { + struct mgos_sht31_stats stats; + mgos_prometheus_metrics_printf(nc, GAUGE, "temperature", "Temperature in Celcius", "{sensor=\"0\",type=\"SHT31\"} %f", mgos_sht31_getTemperature(s_sht31)); @@ -16,18 +18,39 @@ static void sht31_prometheus_metrics(struct mg_connection *nc, void *user_data) "humidity", "Relative humidity percentage", "{sensor=\"0\",type=\"SHT31\"} %f", mgos_sht31_getHumidity(s_sht31)); + if (mgos_sht31_getStats(s_sht31, &stats)) { + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_total", "Total reads from sensor", + "{sensor=\"0\",type=\"SHT31\"} %u", stats.read); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_total", "Total successful reads from sensor", + "{sensor=\"0\",type=\"SHT31\"} %u", stats.read_success); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_cached_total", "Total successful cached reads from sensor", + "{sensor=\"0\",type=\"SHT31\"} %u", stats.read_success_cached); + uint32_t errors = stats.read - stats.read_success - stats.read_success_cached; + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_error_total", "Total unsuccessful reads from sensor", + "{sensor=\"0\",type=\"SHT31\"} %u", errors); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_usecs_total", "Total microseconds spent in reads from sensor", + "{sensor=\"0\",type=\"SHT31\"} %f", stats.read_success_usecs); + } + (void) user_data; } static void sht31_timer_cb(void *user_data) { - double start; - uint32_t usecs=0; float temperature, humidity; + struct mgos_sht31_stats stats_before, stats_after; + uint32_t usecs=0; - start=mgos_uptime(); + mgos_sht31_getStats(s_sht31, &stats_before); temperature=mgos_sht31_getTemperature(s_sht31); humidity=mgos_sht31_getHumidity(s_sht31); - usecs=1000000*(mgos_uptime()-start); + mgos_sht31_getStats(s_sht31, &stats_after); + + usecs=stats_after.read_success_usecs - stats_before.read_success_usecs; LOG(LL_INFO, ("SHT31 sensor=0 temperature=%.2fC humidity=%.1f%% usecs=%u", temperature, humidity, usecs)); (void) user_data; diff --git a/src/si7021_drv.c b/src/si7021_drv.c index facf04e..4fc0bc4 100644 --- a/src/si7021_drv.c +++ b/src/si7021_drv.c @@ -9,6 +9,8 @@ static struct mgos_si7021 *s_si7021; static void si7021_prometheus_metrics(struct mg_connection *nc, void *user_data) { + struct mgos_si7021_stats stats; + mgos_prometheus_metrics_printf(nc, GAUGE, "temperature", "Temperature in Celcius", "{sensor=\"0\",type=\"SI7021\"} %f", mgos_si7021_getTemperature(s_si7021)); @@ -16,18 +18,39 @@ static void si7021_prometheus_metrics(struct mg_connection *nc, void *user_data) "humidity", "Relative humidity percentage", "{sensor=\"0\",type=\"SI7021\"} %f", mgos_si7021_getHumidity(s_si7021)); + if (mgos_si7021_getStats(s_si7021, &stats)) { + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_total", "Total reads from sensor", + "{sensor=\"0\",type=\"SI7021\"} %u", stats.read); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_total", "Total successful reads from sensor", + "{sensor=\"0\",type=\"SI7021\"} %u", stats.read_success); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_cached_total", "Total successful cached reads from sensor", + "{sensor=\"0\",type=\"SI7021\"} %u", stats.read_success_cached); + uint32_t errors = stats.read - stats.read_success - stats.read_success_cached; + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_error_total", "Total unsuccessful reads from sensor", + "{sensor=\"0\",type=\"SI7021\"} %u", errors); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_usecs_total", "Total microseconds spent in reads from sensor", + "{sensor=\"0\",type=\"SI7021\"} %f", stats.read_success_usecs); + } + (void) user_data; } static void si7021_timer_cb(void *user_data) { - double start; - uint32_t usecs=0; float temperature, humidity; + struct mgos_si7021_stats stats_before, stats_after; + uint32_t usecs=0; - start=mgos_uptime(); + mgos_si7021_getStats(s_si7021, &stats_before); temperature=mgos_si7021_getTemperature(s_si7021); humidity=mgos_si7021_getHumidity(s_si7021); - usecs=1000000*(mgos_uptime()-start); + mgos_si7021_getStats(s_si7021, &stats_after); + + usecs=stats_after.read_success_usecs - stats_before.read_success_usecs; LOG(LL_INFO, ("SI7021 sensor=0 temperature=%.2fC humidity=%.1f%% usecs=%u", temperature, humidity, usecs)); (void) user_data; diff --git a/src/veml6075_drv.c b/src/veml6075_drv.c index cc70a57..ad94326 100644 --- a/src/veml6075_drv.c +++ b/src/veml6075_drv.c @@ -9,6 +9,8 @@ static struct mgos_veml6075 *s_veml6075; static void veml6075_prometheus_metrics(struct mg_connection *nc, void *user_data) { + struct mgos_veml6075_stats stats; + 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)); @@ -19,6 +21,25 @@ static void veml6075_prometheus_metrics(struct mg_connection *nc, void *user_dat "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)); + if (mgos_veml6075_getStats(s_veml6075, &stats)) { + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_total", "Total reads from sensor", + "{sensor=\"0\",type=\"VEML6075\"} %u", stats.read); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_total", "Total successful reads from sensor", + "{sensor=\"0\",type=\"VEML6075\"} %u", stats.read_success); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_cached_total", "Total successful cached reads from sensor", + "{sensor=\"0\",type=\"VEML6075\"} %u", stats.read_success_cached); + uint32_t errors = stats.read - stats.read_success - stats.read_success_cached; + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_error_total", "Total unsuccessful reads from sensor", + "{sensor=\"0\",type=\"VEML6075\"} %u", errors); + mgos_prometheus_metrics_printf(nc, COUNTER, + "sensor_read_success_usecs_total", "Total microseconds spent in reads from sensor", + "{sensor=\"0\",type=\"VEML6075\"} %f", stats.read_success_usecs); + } + (void) user_data; }