mirror of
https://github.com/esphome/esphome.git
synced 2024-11-14 02:58:11 +01:00
Add more prometheus metrics (#7683)
This commit is contained in:
parent
444c0fc67f
commit
90b076eccd
3 changed files with 64 additions and 0 deletions
|
@ -50,6 +50,12 @@ void PrometheusHandler::handleRequest(AsyncWebServerRequest *req) {
|
|||
this->lock_row_(stream, obj);
|
||||
#endif
|
||||
|
||||
#ifdef USE_TEXT_SENSOR
|
||||
this->text_sensor_type_(stream);
|
||||
for (auto *obj : App.get_text_sensors())
|
||||
this->text_sensor_row_(stream, obj);
|
||||
#endif
|
||||
|
||||
req->send(stream);
|
||||
}
|
||||
|
||||
|
@ -349,6 +355,43 @@ void PrometheusHandler::lock_row_(AsyncResponseStream *stream, lock::Lock *obj)
|
|||
}
|
||||
#endif
|
||||
|
||||
// Type-specific implementation
|
||||
#ifdef USE_TEXT_SENSOR
|
||||
void PrometheusHandler::text_sensor_type_(AsyncResponseStream *stream) {
|
||||
stream->print(F("#TYPE esphome_text_sensor_value gauge\n"));
|
||||
stream->print(F("#TYPE esphome_text_sensor_failed gauge\n"));
|
||||
}
|
||||
void PrometheusHandler::text_sensor_row_(AsyncResponseStream *stream, text_sensor::TextSensor *obj) {
|
||||
if (obj->is_internal() && !this->include_internal_)
|
||||
return;
|
||||
if (obj->has_state()) {
|
||||
// We have a valid value, output this value
|
||||
stream->print(F("esphome_text_sensor_failed{id=\""));
|
||||
stream->print(relabel_id_(obj).c_str());
|
||||
stream->print(F("\",name=\""));
|
||||
stream->print(relabel_name_(obj).c_str());
|
||||
stream->print(F("\"} 0\n"));
|
||||
// Data itself
|
||||
stream->print(F("esphome_text_sensor_value{id=\""));
|
||||
stream->print(relabel_id_(obj).c_str());
|
||||
stream->print(F("\",name=\""));
|
||||
stream->print(relabel_name_(obj).c_str());
|
||||
stream->print(F("\",value=\""));
|
||||
stream->print(obj->state.c_str());
|
||||
stream->print(F("\"} "));
|
||||
stream->print(F("1.0"));
|
||||
stream->print(F("\n"));
|
||||
} else {
|
||||
// Invalid state
|
||||
stream->print(F("esphome_text_sensor_failed{id=\""));
|
||||
stream->print(relabel_id_(obj).c_str());
|
||||
stream->print(F("\",name=\""));
|
||||
stream->print(relabel_name_(obj).c_str());
|
||||
stream->print(F("\"} 1\n"));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace prometheus
|
||||
} // namespace esphome
|
||||
#endif
|
||||
|
|
|
@ -110,6 +110,13 @@ class PrometheusHandler : public AsyncWebHandler, public Component {
|
|||
void lock_row_(AsyncResponseStream *stream, lock::Lock *obj);
|
||||
#endif
|
||||
|
||||
#ifdef USE_TEXT_SENSOR
|
||||
/// Return the type for prometheus
|
||||
void text_sensor_type_(AsyncResponseStream *stream);
|
||||
/// Return the lock Values state as prometheus data point
|
||||
void text_sensor_row_(AsyncResponseStream *stream, text_sensor::TextSensor *obj);
|
||||
#endif
|
||||
|
||||
web_server_base::WebServerBase *base_;
|
||||
bool include_internal_{false};
|
||||
std::map<EntityBase *, std::string> relabel_map_id_;
|
||||
|
|
|
@ -13,9 +13,23 @@ sensor:
|
|||
}
|
||||
update_interval: 60s
|
||||
|
||||
text_sensor:
|
||||
- platform: template
|
||||
id: template_text_sensor1
|
||||
lambda: |-
|
||||
if (millis() > 10000) {
|
||||
return {"Hello World"};
|
||||
} else {
|
||||
return {"Goodbye (cruel) World"};
|
||||
}
|
||||
update_interval: 60s
|
||||
|
||||
prometheus:
|
||||
include_internal: true
|
||||
relabel:
|
||||
template_sensor1:
|
||||
id: hellow_world
|
||||
name: Hello World
|
||||
template_text_sensor1:
|
||||
id: hello_text
|
||||
name: Text Substitution
|
||||
|
|
Loading…
Reference in a new issue