From bf8038d9e291166e5343b8b841a8356c500f076fb5fa514d5455eee4cb4a9dc8 Mon Sep 17 00:00:00 2001 From: localhorst Date: Thu, 19 Dec 2024 21:15:09 +0100 Subject: [PATCH] cleanup and sort metrics --- main/metrics.c | 211 +++++++++++++++++++++++++++---------------------- main/metrics.h | 10 +++ 2 files changed, 128 insertions(+), 93 deletions(-) diff --git a/main/metrics.c b/main/metrics.c index dcb90cf..e0c8719 100644 --- a/main/metrics.c +++ b/main/metrics.c @@ -55,133 +55,113 @@ void taskMetrics(void *pvParameters) u16MetricCounter = 0U; - /*Uptime*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "uptime_seconds"); - aMetrics[u16MetricCounter].fMetricValue = (esp_timer_get_time() / 1000000U); - u16MetricCounter++; + /*Circulation Pump State*/ + if (getCirculationPumpState() == ENABLED) + { + strcpy(aMetrics[u16MetricCounter].caMetricName, "circulation_pump_enabled"); + aMetrics[u16MetricCounter].type = INTEGER_U8; + aMetrics[u16MetricCounter].u8MetricValue = 1U; + u16MetricCounter++; + } + else + { + strcpy(aMetrics[u16MetricCounter].caMetricName, "circulation_pump_enabled"); + aMetrics[u16MetricCounter].type = INTEGER_U8; + aMetrics[u16MetricCounter].u8MetricValue = 0U; + u16MetricCounter++; + } - /*SNTP Status*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "sntp_status"); - aMetrics[u16MetricCounter].fMetricValue = getSntpState(); - u16MetricCounter++; - - /*System time - time_t now; - struct tm timeinfo; - time(&now); - localtime_r(&now, &timeinfo); - strcpy(aMetrics[u16MetricCounter].caMetricName, "system_unixtime"); - aMetrics[u16MetricCounter].fMetricValue = (float) now; - u16MetricCounter++; - */ - - /*Wifi RSSI*/ - wifi_ap_record_t ap; - esp_wifi_sta_get_ap_info(&ap); - // printf("WiFi RSSI: %d\n", ap.rssi); - strcpy(aMetrics[u16MetricCounter].caMetricName, "wifi_rssi"); - aMetrics[u16MetricCounter].fMetricValue = ap.rssi; + /*Burner Error State*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_fault_pending"); + aMetrics[u16MetricCounter].type = INTEGER_U8; + aMetrics[u16MetricCounter].u8MetricValue = getBurnerError(); u16MetricCounter++; /*Burner State*/ if (getBurnerState() == ENABLED) { strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_enabled"); - aMetrics[u16MetricCounter].fMetricValue = 1.0f; + aMetrics[u16MetricCounter].type = INTEGER_U8; + aMetrics[u16MetricCounter].u8MetricValue = 1U; u16MetricCounter++; } else { strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_enabled"); - aMetrics[u16MetricCounter].fMetricValue = 0.0f; - u16MetricCounter++; - } - - /*Circulation Pump State*/ - if (getCirculationPumpState() == ENABLED) - { - strcpy(aMetrics[u16MetricCounter].caMetricName, "circulation_pump_enabled"); - aMetrics[u16MetricCounter].fMetricValue = 1.0f; - u16MetricCounter++; - } - else - { - strcpy(aMetrics[u16MetricCounter].caMetricName, "circulation_pump_enabled"); - aMetrics[u16MetricCounter].fMetricValue = 0.0f; - u16MetricCounter++; - } - - /*Burner Error State*/ - if (getBurnerError() == FAULT) - { - strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_fault_pending"); - aMetrics[u16MetricCounter].fMetricValue = 1.0f; - u16MetricCounter++; - } - else - { - strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_fault_pending"); - aMetrics[u16MetricCounter].fMetricValue = 0.0f; + aMetrics[u16MetricCounter].type = INTEGER_U8; + aMetrics[u16MetricCounter].u8MetricValue = 0U; u16MetricCounter++; } /*Chamber Temperature*/ strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature"); + aMetrics[u16MetricCounter].type = FLOAT; aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().fCurrentValue; u16MetricCounter++; - /*Outdoor Temperature*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "outdoor_temperature"); - aMetrics[u16MetricCounter].fMetricValue = getOutdoorTemperature().fCurrentValue; - u16MetricCounter++; - - /*Chamber Temperature*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "inlet_flow_temperature"); - aMetrics[u16MetricCounter].fMetricValue = getInletFlowTemperature().fCurrentValue; - u16MetricCounter++; - - /*Chamber Temperature*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "return_flow_temperature"); - aMetrics[u16MetricCounter].fMetricValue = getReturnFlowTemperature().fCurrentValue; - u16MetricCounter++; - /*Chamber Temperature Average 10s*/ strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature_avg10"); + aMetrics[u16MetricCounter].type = FLOAT; aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().average10s.fValue; u16MetricCounter++; - /*Outdoor Temperature Average 10s*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "outdoor_temperature_avg10"); - aMetrics[u16MetricCounter].fMetricValue = getOutdoorTemperature().average10s.fValue; - u16MetricCounter++; - - /*Chamber Temperature Average 10s*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "inlet_flow_temperature_avg10"); - aMetrics[u16MetricCounter].fMetricValue = getInletFlowTemperature().average10s.fValue; - u16MetricCounter++; - - /*Chamber Temperature Average 10s*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "return_flow_temperature_avg10"); - aMetrics[u16MetricCounter].fMetricValue = getReturnFlowTemperature().average10s.fValue; - u16MetricCounter++; - /*Chamber Temperature Average 60s*/ strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature_avg60"); + aMetrics[u16MetricCounter].type = FLOAT; aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().average60s.fValue; u16MetricCounter++; + /*Inlet Flow Temperature*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "inlet_flow_temperature"); + aMetrics[u16MetricCounter].type = FLOAT; + aMetrics[u16MetricCounter].fMetricValue = getInletFlowTemperature().fCurrentValue; + u16MetricCounter++; + + /*Inlet Flow Temperature Average 10s*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "inlet_flow_temperature_avg10"); + aMetrics[u16MetricCounter].type = FLOAT; + aMetrics[u16MetricCounter].fMetricValue = getInletFlowTemperature().average10s.fValue; + u16MetricCounter++; + + /*Inlet Flow Temperature Average 60s*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "inlet_flow_temperature_avg60"); + aMetrics[u16MetricCounter].type = FLOAT; + aMetrics[u16MetricCounter].fMetricValue = getInletFlowTemperature().average60s.fValue; + u16MetricCounter++; + + /*Outdoor Temperature*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "outdoor_temperature"); + aMetrics[u16MetricCounter].type = FLOAT; + aMetrics[u16MetricCounter].fMetricValue = getOutdoorTemperature().fCurrentValue; + u16MetricCounter++; + + /*Outdoor Temperature Average 10s*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "outdoor_temperature_avg10"); + aMetrics[u16MetricCounter].type = FLOAT; + aMetrics[u16MetricCounter].fMetricValue = getOutdoorTemperature().average10s.fValue; + u16MetricCounter++; + /*Outdoor Temperature Average 60s*/ strcpy(aMetrics[u16MetricCounter].caMetricName, "outdoor_temperature_avg60"); + aMetrics[u16MetricCounter].type = FLOAT; aMetrics[u16MetricCounter].fMetricValue = getOutdoorTemperature().average60s.fValue; u16MetricCounter++; - /*Chamber Temperature Average 60s*/ - strcpy(aMetrics[u16MetricCounter].caMetricName, "inlet_flow_temperature_avg60"); - aMetrics[u16MetricCounter].fMetricValue = getInletFlowTemperature().average60s.fValue; + /*Return Flow Temperature*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "return_flow_temperature"); + aMetrics[u16MetricCounter].type = FLOAT; + aMetrics[u16MetricCounter].fMetricValue = getReturnFlowTemperature().fCurrentValue; u16MetricCounter++; - /*Chamber Temperature Average 60s*/ + /*Return Flow Temperature Average 10s*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "return_flow_temperature_avg10"); + aMetrics[u16MetricCounter].type = FLOAT; + aMetrics[u16MetricCounter].fMetricValue = getReturnFlowTemperature().average10s.fValue; + u16MetricCounter++; + + /*Return Flow Temperature Average 60s*/ strcpy(aMetrics[u16MetricCounter].caMetricName, "return_flow_temperature_avg60"); + aMetrics[u16MetricCounter].type = FLOAT; aMetrics[u16MetricCounter].fMetricValue = getReturnFlowTemperature().average60s.fValue; u16MetricCounter++; @@ -192,13 +172,43 @@ void taskMetrics(void *pvParameters) { strcpy(aMetrics[u16MetricCounter].caMetricName, aChecks[i].name); strcat(aMetrics[u16MetricCounter].caMetricName, "_status"); - aMetrics[u16MetricCounter].fMetricValue = aChecks[i].status; + aMetrics[u16MetricCounter].type = INTEGER_U8; + aMetrics[u16MetricCounter].u8MetricValue = aChecks[i].status; u16MetricCounter++; } - /*Safety state*/ + /*Safety State*/ strcpy(aMetrics[u16MetricCounter].caMetricName, "safety_state"); - aMetrics[u16MetricCounter].fMetricValue = getSafetyState(); + aMetrics[u16MetricCounter].type = INTEGER_U8; + aMetrics[u16MetricCounter].u8MetricValue = getSafetyState(); + u16MetricCounter++; + + /*SNTP Status*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "sntp_status"); + aMetrics[u16MetricCounter].type = INTEGER_U8; + aMetrics[u16MetricCounter].u8MetricValue = getSntpState(); + u16MetricCounter++; + + /*System Time*/ + time_t now; + time(&now); + strcpy(aMetrics[u16MetricCounter].caMetricName, "system_unixtime"); + aMetrics[u16MetricCounter].type = INTEGER_64; + aMetrics[u16MetricCounter].i64MetricValue = now; + u16MetricCounter++; + + /*Uptime*/ + strcpy(aMetrics[u16MetricCounter].caMetricName, "uptime_seconds"); + aMetrics[u16MetricCounter].type = INTEGER_64; + aMetrics[u16MetricCounter].i64MetricValue = (esp_timer_get_time() / 1000000U); + u16MetricCounter++; + + /*Wifi RSSI*/ + wifi_ap_record_t ap; + esp_wifi_sta_get_ap_info(&ap); + strcpy(aMetrics[u16MetricCounter].caMetricName, "wifi_rssi"); + aMetrics[u16MetricCounter].type = INTEGER_64; + aMetrics[u16MetricCounter].i64MetricValue = ap.rssi; u16MetricCounter++; vSetMetrics(aMetrics, u16MetricCounter); @@ -214,7 +224,22 @@ void vSetMetrics(sMetric *paMetrics, uint16_t u16Size) for (uint16_t u16Index = 0U; u16Index < u16Size; u16Index++) { char caValueBuffer[64]; - sprintf(caValueBuffer, " %f", paMetrics[u16Index].fMetricValue); + + switch (paMetrics[u16Index].type) + { + case FLOAT: + sprintf(caValueBuffer, " %f", paMetrics[u16Index].fMetricValue); + break; + case INTEGER_64: + sprintf(caValueBuffer, " %lli", paMetrics[u16Index].i64MetricValue); + break; + case INTEGER_U8: + sprintf(caValueBuffer, " %u", paMetrics[u16Index].u8MetricValue); + break; + default: + break; + } + // printf("%s\n", caValueBuffer); strcat(caHtmlResponse, paMetrics[u16Index].caMetricName); strcat(caHtmlResponse, caValueBuffer); diff --git a/main/metrics.h b/main/metrics.h index ad7dd23..b02342a 100644 --- a/main/metrics.h +++ b/main/metrics.h @@ -6,10 +6,20 @@ #define METRIC_NAME_MAX_SIZE 256U #define METRIC_MAX_COUNT 64U +typedef enum _MetricValueType +{ + FLOAT, + INTEGER_U8, + INTEGER_64, +} eMetricValueType; + typedef struct _metric { char caMetricName[METRIC_NAME_MAX_SIZE]; + eMetricValueType type; float fMetricValue; + uint8_t u8MetricValue; + int64_t i64MetricValue; } sMetric; void initMetrics(void);