63 lines
1.6 KiB
Nix
63 lines
1.6 KiB
Nix
{ 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}"
|
|
];
|
|
};
|
|
};
|
|
}
|