cleanup and sort metrics

This commit is contained in:
Hendrik Schutter 2024-12-19 21:15:09 +01:00
parent e5bb620a37
commit bf8038d9e2
2 changed files with 128 additions and 93 deletions

View File

@ -55,133 +55,113 @@ void taskMetrics(void *pvParameters)
u16MetricCounter = 0U; u16MetricCounter = 0U;
/*Uptime*/ /*Circulation Pump State*/
strcpy(aMetrics[u16MetricCounter].caMetricName, "uptime_seconds"); if (getCirculationPumpState() == ENABLED)
aMetrics[u16MetricCounter].fMetricValue = (esp_timer_get_time() / 1000000U); {
u16MetricCounter++; 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*/ /*Burner Error State*/
strcpy(aMetrics[u16MetricCounter].caMetricName, "sntp_status"); strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_fault_pending");
aMetrics[u16MetricCounter].fMetricValue = getSntpState(); aMetrics[u16MetricCounter].type = INTEGER_U8;
u16MetricCounter++; aMetrics[u16MetricCounter].u8MetricValue = getBurnerError();
/*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;
u16MetricCounter++; u16MetricCounter++;
/*Burner State*/ /*Burner State*/
if (getBurnerState() == ENABLED) if (getBurnerState() == ENABLED)
{ {
strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_enabled"); strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_enabled");
aMetrics[u16MetricCounter].fMetricValue = 1.0f; aMetrics[u16MetricCounter].type = INTEGER_U8;
aMetrics[u16MetricCounter].u8MetricValue = 1U;
u16MetricCounter++; u16MetricCounter++;
} }
else else
{ {
strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_enabled"); strcpy(aMetrics[u16MetricCounter].caMetricName, "burner_enabled");
aMetrics[u16MetricCounter].fMetricValue = 0.0f; aMetrics[u16MetricCounter].type = INTEGER_U8;
u16MetricCounter++; aMetrics[u16MetricCounter].u8MetricValue = 0U;
}
/*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;
u16MetricCounter++; u16MetricCounter++;
} }
/*Chamber Temperature*/ /*Chamber Temperature*/
strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature"); strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature");
aMetrics[u16MetricCounter].type = FLOAT;
aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().fCurrentValue; aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().fCurrentValue;
u16MetricCounter++; 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*/ /*Chamber Temperature Average 10s*/
strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature_avg10"); strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature_avg10");
aMetrics[u16MetricCounter].type = FLOAT;
aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().average10s.fValue; aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().average10s.fValue;
u16MetricCounter++; 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*/ /*Chamber Temperature Average 60s*/
strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature_avg60"); strcpy(aMetrics[u16MetricCounter].caMetricName, "chamber_temperature_avg60");
aMetrics[u16MetricCounter].type = FLOAT;
aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().average60s.fValue; aMetrics[u16MetricCounter].fMetricValue = getChamberTemperature().average60s.fValue;
u16MetricCounter++; 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*/ /*Outdoor Temperature Average 60s*/
strcpy(aMetrics[u16MetricCounter].caMetricName, "outdoor_temperature_avg60"); strcpy(aMetrics[u16MetricCounter].caMetricName, "outdoor_temperature_avg60");
aMetrics[u16MetricCounter].type = FLOAT;
aMetrics[u16MetricCounter].fMetricValue = getOutdoorTemperature().average60s.fValue; aMetrics[u16MetricCounter].fMetricValue = getOutdoorTemperature().average60s.fValue;
u16MetricCounter++; u16MetricCounter++;
/*Chamber Temperature Average 60s*/ /*Return Flow Temperature*/
strcpy(aMetrics[u16MetricCounter].caMetricName, "inlet_flow_temperature_avg60"); strcpy(aMetrics[u16MetricCounter].caMetricName, "return_flow_temperature");
aMetrics[u16MetricCounter].fMetricValue = getInletFlowTemperature().average60s.fValue; aMetrics[u16MetricCounter].type = FLOAT;
aMetrics[u16MetricCounter].fMetricValue = getReturnFlowTemperature().fCurrentValue;
u16MetricCounter++; 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"); strcpy(aMetrics[u16MetricCounter].caMetricName, "return_flow_temperature_avg60");
aMetrics[u16MetricCounter].type = FLOAT;
aMetrics[u16MetricCounter].fMetricValue = getReturnFlowTemperature().average60s.fValue; aMetrics[u16MetricCounter].fMetricValue = getReturnFlowTemperature().average60s.fValue;
u16MetricCounter++; u16MetricCounter++;
@ -192,13 +172,43 @@ void taskMetrics(void *pvParameters)
{ {
strcpy(aMetrics[u16MetricCounter].caMetricName, aChecks[i].name); strcpy(aMetrics[u16MetricCounter].caMetricName, aChecks[i].name);
strcat(aMetrics[u16MetricCounter].caMetricName, "_status"); strcat(aMetrics[u16MetricCounter].caMetricName, "_status");
aMetrics[u16MetricCounter].fMetricValue = aChecks[i].status; aMetrics[u16MetricCounter].type = INTEGER_U8;
aMetrics[u16MetricCounter].u8MetricValue = aChecks[i].status;
u16MetricCounter++; u16MetricCounter++;
} }
/*Safety state*/ /*Safety State*/
strcpy(aMetrics[u16MetricCounter].caMetricName, "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++; u16MetricCounter++;
vSetMetrics(aMetrics, u16MetricCounter); vSetMetrics(aMetrics, u16MetricCounter);
@ -214,7 +224,22 @@ void vSetMetrics(sMetric *paMetrics, uint16_t u16Size)
for (uint16_t u16Index = 0U; u16Index < u16Size; u16Index++) for (uint16_t u16Index = 0U; u16Index < u16Size; u16Index++)
{ {
char caValueBuffer[64]; 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); // printf("%s\n", caValueBuffer);
strcat(caHtmlResponse, paMetrics[u16Index].caMetricName); strcat(caHtmlResponse, paMetrics[u16Index].caMetricName);
strcat(caHtmlResponse, caValueBuffer); strcat(caHtmlResponse, caValueBuffer);

View File

@ -6,10 +6,20 @@
#define METRIC_NAME_MAX_SIZE 256U #define METRIC_NAME_MAX_SIZE 256U
#define METRIC_MAX_COUNT 64U #define METRIC_MAX_COUNT 64U
typedef enum _MetricValueType
{
FLOAT,
INTEGER_U8,
INTEGER_64,
} eMetricValueType;
typedef struct _metric typedef struct _metric
{ {
char caMetricName[METRIC_NAME_MAX_SIZE]; char caMetricName[METRIC_NAME_MAX_SIZE];
eMetricValueType type;
float fMetricValue; float fMetricValue;
uint8_t u8MetricValue;
int64_t i64MetricValue;
} sMetric; } sMetric;
void initMetrics(void); void initMetrics(void);