prometheus-unifi-poller-exporter: init module

elseym aaf0002f 8c49e5a7

Changed files
+48
nixos
modules
services
monitoring
prometheus
tests
+1
nixos/modules/services/monitoring/prometheus/exporters.nix
···
"surfboard"
"tor"
"unifi"
+
"unifi-poller"
"varnish"
"wireguard"
] (name:
+34
nixos/modules/services/monitoring/prometheus/exporters/unifi-poller.nix
···
+
{ config, lib, pkgs, options }:
+
+
with lib;
+
+
let
+
cfg = config.services.prometheus.exporters.unifi-poller;
+
+
configFile = pkgs.writeText "prometheus-unifi-poller-exporter.json" (generators.toJSON {} {
+
poller = { inherit (cfg.log) debug quiet; };
+
unifi = { inherit (cfg) controllers; };
+
influxdb.disable = true;
+
prometheus = {
+
http_listen = "${cfg.listenAddress}:${toString cfg.port}";
+
report_errors = cfg.log.prometheusErrors;
+
};
+
});
+
+
in {
+
port = 9130;
+
+
extraOpts = {
+
inherit (options.services.unifi-poller.unifi) controllers;
+
log = {
+
debug = mkEnableOption "debug logging including line numbers, high resolution timestamps, per-device logs.";
+
quiet = mkEnableOption "startup and error logs only.";
+
prometheusErrors = mkEnableOption "emitting errors to prometheus.";
+
};
+
};
+
+
serviceOpts.serviceConfig = {
+
ExecStart = "${pkgs.unifi-poller}/bin/unifi-poller --config ${configFile}";
+
DynamicUser = false;
+
};
+
}
+13
nixos/tests/prometheus-exporters.nix
···
'';
};
+
unifi-poller = {
+
nodeName = "unifi_poller";
+
exporterConfig.enable = true;
+
exporterConfig.controllers = [ { } ];
+
exporterTest = ''
+
wait_for_unit("prometheus-unifi-poller-exporter.service")
+
wait_for_open_port(9130)
+
succeed(
+
"curl -sSf localhost:9130/metrics | grep -q 'unifipoller_build_info{.\\+} 1'"
+
)
+
'';
+
};
+
varnish = {
exporterConfig = {
enable = true;