nixos/prometheus-modemmanager-exporter: new module

Signed-off-by: Matt Layher <mdlayher@gmail.com>

Changed files
+59
nixos
modules
services
monitoring
prometheus
tests
+1
nixos/modules/services/monitoring/prometheus/exporters.nix
···
"mail"
"mikrotik"
"minio"
+
"modemmanager"
"nextcloud"
"nginx"
"node"
+33
nixos/modules/services/monitoring/prometheus/exporters/modemmanager.nix
···
+
{ config, lib, pkgs, options }:
+
+
with lib;
+
+
let
+
cfg = config.services.prometheus.exporters.modemmanager;
+
in
+
{
+
port = 9539;
+
extraOpts = {
+
refreshRate = mkOption {
+
type = types.str;
+
default = "5s";
+
description = ''
+
How frequently ModemManager will refresh the extended signal quality
+
information for each modem. The duration should be specified in seconds
+
("5s"), minutes ("1m"), or hours ("1h").
+
'';
+
};
+
};
+
serviceOpts = {
+
serviceConfig = {
+
# Required in order to authenticate with ModemManager via D-Bus.
+
SupplementaryGroups = "networkmanager";
+
ExecStart = ''
+
${pkgs.prometheus-modemmanager-exporter}/bin/modemmanager_exporter \
+
-addr ${cfg.listenAddress}:${toString cfg.port} \
+
-rate ${cfg.refreshRate} \
+
${concatStringsSep " \\\n " cfg.extraFlags}
+
'';
+
};
+
};
+
}
+25
nixos/tests/prometheus-exporters.nix
···
'';
};
+
modemmanager = {
+
exporterConfig = {
+
enable = true;
+
refreshRate = "10s";
+
};
+
metricProvider = {
+
# ModemManager is installed when NetworkManager is enabled. Ensure it is
+
# started and is wanted by NM and the exporter to start everything up
+
# in the right order.
+
networking.networkmanager.enable = true;
+
systemd.services.ModemManager = {
+
enable = true;
+
wantedBy = [ "NetworkManager.service" "prometheus-modemmanager-exporter.service" ];
+
};
+
};
+
exporterTest = ''
+
wait_for_unit("ModemManager.service")
+
wait_for_unit("prometheus-modemmanager-exporter.service")
+
wait_for_open_port(9539)
+
succeed(
+
"curl -sSf http://localhost:9539/metrics | grep -q 'modemmanager_info'"
+
)
+
'';
+
};
+
nextcloud = {
exporterConfig = {
enable = true;