mirror of
https://github.com/esphome/esphome.git
synced 2024-11-26 08:55:22 +01:00
Allow Prometheus component to export internal components (#3508)
Co-authored-by: Jan Grewe <jan.grewe@flixbus.com>
This commit is contained in:
parent
adb7aa6950
commit
d2cefbf224
3 changed files with 22 additions and 8 deletions
|
@ -1,6 +1,9 @@
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
from esphome.const import CONF_ID
|
from esphome.const import (
|
||||||
|
CONF_ID,
|
||||||
|
CONF_INCLUDE_INTERNAL,
|
||||||
|
)
|
||||||
from esphome.components.web_server_base import CONF_WEB_SERVER_BASE_ID
|
from esphome.components.web_server_base import CONF_WEB_SERVER_BASE_ID
|
||||||
from esphome.components import web_server_base
|
from esphome.components import web_server_base
|
||||||
|
|
||||||
|
@ -15,6 +18,7 @@ CONFIG_SCHEMA = cv.Schema(
|
||||||
cv.GenerateID(CONF_WEB_SERVER_BASE_ID): cv.use_id(
|
cv.GenerateID(CONF_WEB_SERVER_BASE_ID): cv.use_id(
|
||||||
web_server_base.WebServerBase
|
web_server_base.WebServerBase
|
||||||
),
|
),
|
||||||
|
cv.Optional(CONF_INCLUDE_INTERNAL, default=False): cv.boolean,
|
||||||
},
|
},
|
||||||
cv.only_with_arduino,
|
cv.only_with_arduino,
|
||||||
).extend(cv.COMPONENT_SCHEMA)
|
).extend(cv.COMPONENT_SCHEMA)
|
||||||
|
@ -27,3 +31,5 @@ async def to_code(config):
|
||||||
|
|
||||||
var = cg.new_Pvariable(config[CONF_ID], paren)
|
var = cg.new_Pvariable(config[CONF_ID], paren)
|
||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
|
|
||||||
|
cg.add(var.set_include_internal(config[CONF_INCLUDE_INTERNAL]))
|
||||||
|
|
|
@ -61,7 +61,7 @@ void PrometheusHandler::sensor_type_(AsyncResponseStream *stream) {
|
||||||
stream->print(F("#TYPE esphome_sensor_failed GAUGE\n"));
|
stream->print(F("#TYPE esphome_sensor_failed GAUGE\n"));
|
||||||
}
|
}
|
||||||
void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor *obj) {
|
void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor *obj) {
|
||||||
if (obj->is_internal())
|
if (obj->is_internal() && !this->include_internal_)
|
||||||
return;
|
return;
|
||||||
if (!std::isnan(obj->state)) {
|
if (!std::isnan(obj->state)) {
|
||||||
// We have a valid value, output this value
|
// We have a valid value, output this value
|
||||||
|
@ -98,7 +98,7 @@ void PrometheusHandler::binary_sensor_type_(AsyncResponseStream *stream) {
|
||||||
stream->print(F("#TYPE esphome_binary_sensor_failed GAUGE\n"));
|
stream->print(F("#TYPE esphome_binary_sensor_failed GAUGE\n"));
|
||||||
}
|
}
|
||||||
void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_sensor::BinarySensor *obj) {
|
void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_sensor::BinarySensor *obj) {
|
||||||
if (obj->is_internal())
|
if (obj->is_internal() && !this->include_internal_)
|
||||||
return;
|
return;
|
||||||
if (obj->has_state()) {
|
if (obj->has_state()) {
|
||||||
// We have a valid value, output this value
|
// We have a valid value, output this value
|
||||||
|
@ -134,7 +134,7 @@ void PrometheusHandler::fan_type_(AsyncResponseStream *stream) {
|
||||||
stream->print(F("#TYPE esphome_fan_oscillation GAUGE\n"));
|
stream->print(F("#TYPE esphome_fan_oscillation GAUGE\n"));
|
||||||
}
|
}
|
||||||
void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj) {
|
void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj) {
|
||||||
if (obj->is_internal())
|
if (obj->is_internal() && !this->include_internal_)
|
||||||
return;
|
return;
|
||||||
stream->print(F("esphome_fan_failed{id=\""));
|
stream->print(F("esphome_fan_failed{id=\""));
|
||||||
stream->print(obj->get_object_id().c_str());
|
stream->print(obj->get_object_id().c_str());
|
||||||
|
@ -179,7 +179,7 @@ void PrometheusHandler::light_type_(AsyncResponseStream *stream) {
|
||||||
stream->print(F("#TYPE esphome_light_effect_active GAUGE\n"));
|
stream->print(F("#TYPE esphome_light_effect_active GAUGE\n"));
|
||||||
}
|
}
|
||||||
void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightState *obj) {
|
void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightState *obj) {
|
||||||
if (obj->is_internal())
|
if (obj->is_internal() && !this->include_internal_)
|
||||||
return;
|
return;
|
||||||
// State
|
// State
|
||||||
stream->print(F("esphome_light_state{id=\""));
|
stream->print(F("esphome_light_state{id=\""));
|
||||||
|
@ -255,7 +255,7 @@ void PrometheusHandler::cover_type_(AsyncResponseStream *stream) {
|
||||||
stream->print(F("#TYPE esphome_cover_failed GAUGE\n"));
|
stream->print(F("#TYPE esphome_cover_failed GAUGE\n"));
|
||||||
}
|
}
|
||||||
void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *obj) {
|
void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *obj) {
|
||||||
if (obj->is_internal())
|
if (obj->is_internal() && !this->include_internal_)
|
||||||
return;
|
return;
|
||||||
if (!std::isnan(obj->position)) {
|
if (!std::isnan(obj->position)) {
|
||||||
// We have a valid value, output this value
|
// We have a valid value, output this value
|
||||||
|
@ -298,7 +298,7 @@ void PrometheusHandler::switch_type_(AsyncResponseStream *stream) {
|
||||||
stream->print(F("#TYPE esphome_switch_failed GAUGE\n"));
|
stream->print(F("#TYPE esphome_switch_failed GAUGE\n"));
|
||||||
}
|
}
|
||||||
void PrometheusHandler::switch_row_(AsyncResponseStream *stream, switch_::Switch *obj) {
|
void PrometheusHandler::switch_row_(AsyncResponseStream *stream, switch_::Switch *obj) {
|
||||||
if (obj->is_internal())
|
if (obj->is_internal() && !this->include_internal_)
|
||||||
return;
|
return;
|
||||||
stream->print(F("esphome_switch_failed{id=\""));
|
stream->print(F("esphome_switch_failed{id=\""));
|
||||||
stream->print(obj->get_object_id().c_str());
|
stream->print(obj->get_object_id().c_str());
|
||||||
|
@ -322,7 +322,7 @@ void PrometheusHandler::lock_type_(AsyncResponseStream *stream) {
|
||||||
stream->print(F("#TYPE esphome_lock_failed GAUGE\n"));
|
stream->print(F("#TYPE esphome_lock_failed GAUGE\n"));
|
||||||
}
|
}
|
||||||
void PrometheusHandler::lock_row_(AsyncResponseStream *stream, lock::Lock *obj) {
|
void PrometheusHandler::lock_row_(AsyncResponseStream *stream, lock::Lock *obj) {
|
||||||
if (obj->is_internal())
|
if (obj->is_internal() && !this->include_internal_)
|
||||||
return;
|
return;
|
||||||
stream->print(F("esphome_lock_failed{id=\""));
|
stream->print(F("esphome_lock_failed{id=\""));
|
||||||
stream->print(obj->get_object_id().c_str());
|
stream->print(obj->get_object_id().c_str());
|
||||||
|
|
|
@ -13,6 +13,13 @@ class PrometheusHandler : public AsyncWebHandler, public Component {
|
||||||
public:
|
public:
|
||||||
PrometheusHandler(web_server_base::WebServerBase *base) : base_(base) {}
|
PrometheusHandler(web_server_base::WebServerBase *base) : base_(base) {}
|
||||||
|
|
||||||
|
/** Determine whether internal components should be exported as metrics.
|
||||||
|
* Defaults to false.
|
||||||
|
*
|
||||||
|
* @param include_internal Whether internal components should be exported.
|
||||||
|
*/
|
||||||
|
void set_include_internal(bool include_internal) { include_internal_ = include_internal; }
|
||||||
|
|
||||||
bool canHandle(AsyncWebServerRequest *request) override {
|
bool canHandle(AsyncWebServerRequest *request) override {
|
||||||
if (request->method() == HTTP_GET) {
|
if (request->method() == HTTP_GET) {
|
||||||
if (request->url() == "/metrics")
|
if (request->url() == "/metrics")
|
||||||
|
@ -84,6 +91,7 @@ class PrometheusHandler : public AsyncWebHandler, public Component {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
web_server_base::WebServerBase *base_;
|
web_server_base::WebServerBase *base_;
|
||||||
|
bool include_internal_{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace prometheus
|
} // namespace prometheus
|
||||||
|
|
Loading…
Reference in a new issue