Expose mgos_*_stats in Prometheus

This commit is contained in:
Pim van Pelt
2018-04-04 14:03:50 +02:00
parent b4b81f7542
commit 9a71d580c0
6 changed files with 130 additions and 17 deletions

View File

@ -29,7 +29,6 @@ static void dht_prometheus_metrics(struct mg_connection *nc, void *user_data) {
mgos_prometheus_metrics_printf(nc, GAUGE, mgos_prometheus_metrics_printf(nc, GAUGE,
"humidity", "Relative humidity percentage", "humidity", "Relative humidity percentage",
"{sensor=\"%d\",type=\"DHT\"} %f", i, s_dht_sensor[i]->humidity); "{sensor=\"%d\",type=\"DHT\"} %f", i, s_dht_sensor[i]->humidity);
} }
(void) user_data; (void) user_data;

View File

@ -9,6 +9,8 @@
static struct mgos_htu21df *s_htu21df; static struct mgos_htu21df *s_htu21df;
static void htu21df_prometheus_metrics(struct mg_connection *nc, void *user_data) { static void htu21df_prometheus_metrics(struct mg_connection *nc, void *user_data) {
struct mgos_htu21df_stats stats;
mgos_prometheus_metrics_printf(nc, GAUGE, mgos_prometheus_metrics_printf(nc, GAUGE,
"temperature", "Temperature in Celcius", "temperature", "Temperature in Celcius",
"{sensor=\"0\",type=\"HTU21DF\"} %f", mgos_htu21df_getTemperature(s_htu21df)); "{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", "humidity", "Relative humidity percentage",
"{sensor=\"0\",type=\"HTU21DF\"} %f", mgos_htu21df_getHumidity(s_htu21df)); "{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; (void) user_data;
} }
static void htu21df_timer_cb(void *user_data) { static void htu21df_timer_cb(void *user_data) {
double start;
uint32_t usecs=0;
float temperature, humidity; 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); temperature=mgos_htu21df_getTemperature(s_htu21df);
humidity=mgos_htu21df_getHumidity(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)); LOG(LL_INFO, ("HTU21DF sensor=0 temperature=%.2fC humidity=%.1f%% usecs=%u", temperature, humidity, usecs));
(void) user_data; (void) user_data;

View File

@ -9,20 +9,44 @@
static struct mgos_mcp9808 *s_mcp9808; static struct mgos_mcp9808 *s_mcp9808;
static void mcp9808_prometheus_metrics(struct mg_connection *nc, void *user_data) { static void mcp9808_prometheus_metrics(struct mg_connection *nc, void *user_data) {
struct mgos_mcp9808_stats stats;
mgos_prometheus_metrics_printf(nc, GAUGE, mgos_prometheus_metrics_printf(nc, GAUGE,
"temperature", "Temperature in Celcius", "temperature", "Temperature in Celcius",
"{sensor=\"0\",type=\"MCP9808\"} %f", mgos_mcp9808_getTemperature(s_mcp9808)); "{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; (void) user_data;
} }
static void mcp9808_timer_cb(void *user_data) { static void mcp9808_timer_cb(void *user_data) {
double start;
uint32_t usecs=0;
float temperature; 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); 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)); LOG(LL_INFO, ("MCP9808 sensor=0 temperature=%.2fC usecs=%u", temperature, usecs));
(void) user_data; (void) user_data;

View File

@ -9,6 +9,8 @@
static struct mgos_sht31 *s_sht31; static struct mgos_sht31 *s_sht31;
static void sht31_prometheus_metrics(struct mg_connection *nc, void *user_data) { static void sht31_prometheus_metrics(struct mg_connection *nc, void *user_data) {
struct mgos_sht31_stats stats;
mgos_prometheus_metrics_printf(nc, GAUGE, mgos_prometheus_metrics_printf(nc, GAUGE,
"temperature", "Temperature in Celcius", "temperature", "Temperature in Celcius",
"{sensor=\"0\",type=\"SHT31\"} %f", mgos_sht31_getTemperature(s_sht31)); "{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", "humidity", "Relative humidity percentage",
"{sensor=\"0\",type=\"SHT31\"} %f", mgos_sht31_getHumidity(s_sht31)); "{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; (void) user_data;
} }
static void sht31_timer_cb(void *user_data) { static void sht31_timer_cb(void *user_data) {
double start;
uint32_t usecs=0;
float temperature, humidity; 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); temperature=mgos_sht31_getTemperature(s_sht31);
humidity=mgos_sht31_getHumidity(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)); LOG(LL_INFO, ("SHT31 sensor=0 temperature=%.2fC humidity=%.1f%% usecs=%u", temperature, humidity, usecs));
(void) user_data; (void) user_data;

View File

@ -9,6 +9,8 @@
static struct mgos_si7021 *s_si7021; static struct mgos_si7021 *s_si7021;
static void si7021_prometheus_metrics(struct mg_connection *nc, void *user_data) { static void si7021_prometheus_metrics(struct mg_connection *nc, void *user_data) {
struct mgos_si7021_stats stats;
mgos_prometheus_metrics_printf(nc, GAUGE, mgos_prometheus_metrics_printf(nc, GAUGE,
"temperature", "Temperature in Celcius", "temperature", "Temperature in Celcius",
"{sensor=\"0\",type=\"SI7021\"} %f", mgos_si7021_getTemperature(s_si7021)); "{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", "humidity", "Relative humidity percentage",
"{sensor=\"0\",type=\"SI7021\"} %f", mgos_si7021_getHumidity(s_si7021)); "{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; (void) user_data;
} }
static void si7021_timer_cb(void *user_data) { static void si7021_timer_cb(void *user_data) {
double start;
uint32_t usecs=0;
float temperature, humidity; 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); temperature=mgos_si7021_getTemperature(s_si7021);
humidity=mgos_si7021_getHumidity(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)); LOG(LL_INFO, ("SI7021 sensor=0 temperature=%.2fC humidity=%.1f%% usecs=%u", temperature, humidity, usecs));
(void) user_data; (void) user_data;

View File

@ -9,6 +9,8 @@
static struct mgos_veml6075 *s_veml6075; static struct mgos_veml6075 *s_veml6075;
static void veml6075_prometheus_metrics(struct mg_connection *nc, void *user_data) { static void veml6075_prometheus_metrics(struct mg_connection *nc, void *user_data) {
struct mgos_veml6075_stats stats;
mgos_prometheus_metrics_printf(nc, GAUGE, mgos_prometheus_metrics_printf(nc, GAUGE,
"UV", "Ultra Violet light intensity, in sensor counts", "UV", "Ultra Violet light intensity, in sensor counts",
"{band=\"UVA\",type=\"VEML6075\", sensor=\"0\"} %f", mgos_veml6075_getUVA(s_veml6075)); "{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", "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)); "{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; (void) user_data;
} }