Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prometheus: Always use prefix and update changelog #12842

Merged
merged 3 commits into from
Aug 9, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ All notable changes to this project will be documented in this file.
- Make Sonoff L1 MusicSync persistent (#12008)
- Relax NTP poll if no ntpserver can be resolved by DNS
- Move firmware binaries to https://github.com/arendst/Tasmota-firmware/tree/main/release-firmware
- Prometheus: All metrics are prefixed with ``tasmota_``
memory metrics have been cleaned up to work consistently between ESP8266 and ESP32
the device name is reported as an info metric
- Default disable CORS for enhanced security and provide user compile option ``#define USE_CORS`` (#12827)

### Fixed
Expand Down
21 changes: 9 additions & 12 deletions tasmota/xsns_75_prometheus.ino
Original file line number Diff line number Diff line change
Expand Up @@ -78,16 +78,15 @@ String FormatMetricName(const char *metric) {
}

const uint8_t
kPromMetricNoPrefix = _BV(1),
kPromMetricGauge = _BV(2),
kPromMetricCounter = _BV(3),
kPromMetricGauge = _BV(0),
kPromMetricCounter = _BV(1),
kPromMetricTypeMask = kPromMetricGauge | kPromMetricCounter;

// Format and send a Prometheus metric to the client. Use flags to configure
// the type. Labels must be supplied in tuples of two character array pointers
// and terminated by nullptr.
void WritePromMetric(const char *name, uint8_t flags, const char *value, va_list labels) {
PGM_P const prefix = (flags & kPromMetricNoPrefix) ? PSTR("") : PSTR("tasmota_");
PGM_P const prefix = PSTR("tasmota_");
PGM_P tmp;
String lval;

Expand Down Expand Up @@ -258,29 +257,27 @@ void HandleMetrics(void) {
#endif

#ifdef USE_ENERGY_SENSOR
// TODO: Don't disable prefix on energy metrics
WritePromMetricDec(PSTR("energy_voltage_volts"),
kPromMetricGauge | kPromMetricNoPrefix,
kPromMetricGauge,
Energy.voltage[0], Settings->flag2.voltage_resolution, nullptr);
WritePromMetricDec(PSTR("energy_current_amperes"),
kPromMetricGauge | kPromMetricNoPrefix,
kPromMetricGauge,
Energy.current[0], Settings->flag2.current_resolution, nullptr);
WritePromMetricDec(PSTR("energy_power_active_watts"),
kPromMetricGauge | kPromMetricNoPrefix,
kPromMetricGauge,
Energy.active_power[0], Settings->flag2.wattage_resolution, nullptr);
WritePromMetricDec(PSTR("energy_power_kilowatts_daily"),
kPromMetricCounter | kPromMetricNoPrefix,
kPromMetricCounter,
Energy.daily, Settings->flag2.energy_resolution, nullptr);
WritePromMetricDec(PSTR("energy_power_kilowatts_total"),
kPromMetricCounter | kPromMetricNoPrefix,
kPromMetricCounter,
Energy.total, Settings->flag2.energy_resolution, nullptr);
#endif

for (uint32_t device = 0; device < TasmotaGlobal.devices_present; device++) {
power_t mask = 1 << device;
// TODO: Don't disable prefix
snprintf_P(namebuf, sizeof(namebuf), PSTR("relay%d_state"), device + 1);
WritePromMetricInt32(namebuf, kPromMetricGauge | kPromMetricNoPrefix,
WritePromMetricInt32(namebuf, kPromMetricGauge,
(TasmotaGlobal.power & mask), nullptr);
}

Expand Down