Merge pull request #106067 from urbas/prometheus-exporter-py-air-control
nixos/prometheus-exporters/py-air-control: init
This commit is contained in:
commit
df8ee3669f
|
@ -41,6 +41,7 @@ let
|
||||||
"openvpn"
|
"openvpn"
|
||||||
"postfix"
|
"postfix"
|
||||||
"postgres"
|
"postgres"
|
||||||
|
"py-air-control"
|
||||||
"redis"
|
"redis"
|
||||||
"rspamd"
|
"rspamd"
|
||||||
"rtl_433"
|
"rtl_433"
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
{ config, lib, pkgs, options }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.prometheus.exporters.py-air-control;
|
||||||
|
|
||||||
|
py-air-control-exporter-env = pkgs.python3.withPackages (pyPkgs: [
|
||||||
|
pyPkgs.py-air-control-exporter
|
||||||
|
]);
|
||||||
|
|
||||||
|
workingDir = "/var/lib/${cfg.stateDir}";
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
port = 9896;
|
||||||
|
extraOpts = {
|
||||||
|
deviceHostname = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "192.168.1.123";
|
||||||
|
description = ''
|
||||||
|
The hostname of the air purification device from which to scrape the metrics.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
protocol = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "http";
|
||||||
|
description = ''
|
||||||
|
The protocol to use when communicating with the air purification device.
|
||||||
|
Available: [http, coap, plain_coap]
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
stateDir = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "prometheus-py-air-control-exporter";
|
||||||
|
description = ''
|
||||||
|
Directory below <literal>/var/lib</literal> to store runtime data.
|
||||||
|
This directory will be created automatically using systemd's StateDirectory mechanism.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
serviceOpts = {
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = false;
|
||||||
|
StateDirectory = cfg.stateDir;
|
||||||
|
WorkingDirectory = workingDir;
|
||||||
|
ExecStart = ''
|
||||||
|
${py-air-control-exporter-env}/bin/python -c \
|
||||||
|
"from py_air_control_exporter import app; app.create_app().run( \
|
||||||
|
debug=False, \
|
||||||
|
port=${toString cfg.port}, \
|
||||||
|
host='${cfg.listenAddress}', \
|
||||||
|
)"
|
||||||
|
'';
|
||||||
|
Environment = [
|
||||||
|
"PY_AIR_CONTROL_HOST=${cfg.deviceHostname}"
|
||||||
|
"PY_AIR_CONTROL_PROTOCOL=${cfg.protocol}"
|
||||||
|
"HOME=${workingDir}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -530,6 +530,21 @@ let
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
py-air-control = {
|
||||||
|
nodeName = "py_air_control";
|
||||||
|
exporterConfig = {
|
||||||
|
enable = true;
|
||||||
|
deviceHostname = "127.0.0.1";
|
||||||
|
};
|
||||||
|
exporterTest = ''
|
||||||
|
wait_for_unit("prometheus-py-air-control-exporter.service")
|
||||||
|
wait_for_open_port(9896)
|
||||||
|
succeed(
|
||||||
|
"curl -sSf http://localhost:9896/metrics | grep -q 'py_air_control_sampling_error_total'"
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
redis = {
|
redis = {
|
||||||
exporterConfig = {
|
exporterConfig = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
Loading…
Reference in a new issue