From 0d9ac5e1bacf08de380c215d0c4a0a4aacce5529 Mon Sep 17 00:00:00 2001 From: Julian Gog Date: Tue, 15 Nov 2022 21:27:02 +0100 Subject: [PATCH] fix(metrics endpoint): fix metrics endpoint to work with the new async web interface --- src/web/web.cpp | 19 ++++++++++--------- src/web/web.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/web/web.cpp b/src/web/web.cpp index d762751b..763fdb16 100644 --- a/src/web/web.cpp +++ b/src/web/web.cpp @@ -695,32 +695,33 @@ std::pair web::convertToPromUnits(String shortUnit) { //----------------------------------------------------------------------------- -void web::showMetrics(void) { +void web::showMetrics(AsyncWebServerRequest *request) { DPRINTLN(DBG_VERBOSE, F("web::showMetrics")); String metrics; char headline[80]; - snprintf(headline, 80, "ahoy_solar_info{version=\"%s\",image=\"\",devicename=\"%s\"} 1", mVersion, mconfig->sys.deviceName); + snprintf(headline, 80, "ahoy_solar_info{version=\"%s\",image=\"\",devicename=\"%s\"} 1", mVersion, mConfig->sys.deviceName); metrics += "# TYPE ahoy_solar_info gauge\n" + String(headline) + "\n"; for(uint8_t id = 0; id < mMain->mSys->getNumInverters(); id++) { Inverter<> *iv = mMain->mSys->getInverterByPos(id); + record_t<> *rec = iv->getRecordStruct(RealTimeRunData_Debug); if(NULL != iv) { char type[60], topic[60], val[25]; - for(uint8_t i = 0; i < iv->listLen; i++) { - uint8_t channel = iv->assign[i].ch; + for(uint8_t i = 0; i < iv->channels; i++) { + uint8_t channel = iv->getChannel(i, rec); if(channel == 0) { String promUnit, promType; - std::tie(promUnit, promType) = convertToPromUnits( iv->getUnit(i) ); - snprintf(type, 60, "# TYPE ahoy_solar_%s_%s %s", iv->getFieldName(i), promUnit.c_str(), promType.c_str()); - snprintf(topic, 60, "ahoy_solar_%s_%s{inverter=\"%s\"}", iv->getFieldName(i), promUnit.c_str(), iv->name); - snprintf(val, 25, "%.3f", iv->getValue(i)); + std::tie(promUnit, promType) = convertToPromUnits( iv->getUnit(i, rec) ); + snprintf(type, 60, "# TYPE ahoy_solar_%s_%s %s", iv->getFieldName(i, rec), promUnit.c_str(), promType.c_str()); + snprintf(topic, 60, "ahoy_solar_%s_%s{inverter=\"%s\"}", iv->getFieldName(i, rec), promUnit.c_str(), iv->config->name); + snprintf(val, 25, "%.3f", iv->getValue(i,rec)); metrics += String(type) + "\n" + String(topic) + " " + String(val) + "\n"; } } } } - mWeb->send(200, F("text/plain"), metrics); + request->send(200, F("text/plain"), metrics); } #endif diff --git a/src/web/web.h b/src/web/web.h index 582b5421..293b8f71 100644 --- a/src/web/web.h +++ b/src/web/web.h @@ -76,7 +76,7 @@ class web { #endif #ifdef ENABLE_PROMETHEUS_EP - void showMetrics(void); + void showMetrics(AsyncWebServerRequest *request); std::pair convertToPromUnits(String shortUnit); #endif