summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorWilliButz <WilliButz@users.noreply.github.com>2020-07-17 20:02:56 +0200
committerGitHub <noreply@github.com>2020-07-17 20:02:56 +0200
commitc8a29f640a3c2d2b914d273616b18920734b72bb (patch)
tree15c7f358db81a8f0f8b5a1f8c946233f00f4dddb /nixos
parent5adadd1466344a42c83679c703b0690b152f1a46 (diff)
parenta58346a5eecc76e44eb56b45ca4519f2b6dd7558 (diff)
downloadnixpkgs-c8a29f640a3c2d2b914d273616b18920734b72bb.tar
nixpkgs-c8a29f640a3c2d2b914d273616b18920734b72bb.tar.gz
nixpkgs-c8a29f640a3c2d2b914d273616b18920734b72bb.tar.bz2
nixpkgs-c8a29f640a3c2d2b914d273616b18920734b72bb.tar.lz
nixpkgs-c8a29f640a3c2d2b914d273616b18920734b72bb.tar.xz
nixpkgs-c8a29f640a3c2d2b914d273616b18920734b72bb.tar.zst
nixpkgs-c8a29f640a3c2d2b914d273616b18920734b72bb.zip
Merge pull request #93291 from mdlayher/mdl-mmexporter
prometheus-modemmanager-exporter: init at 0.1.0, add NixOS module
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/monitoring/prometheus/exporters.nix1
-rw-r--r--nixos/modules/services/monitoring/prometheus/exporters/modemmanager.nix33
-rw-r--r--nixos/tests/prometheus-exporters.nix25
3 files changed, 59 insertions, 0 deletions
diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix
index c4aedd7e23b..59748efe0de 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters.nix
@@ -34,6 +34,7 @@ let
     "mail"
     "mikrotik"
     "minio"
+    "modemmanager"
     "nextcloud"
     "nginx"
     "node"
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/modemmanager.nix b/nixos/modules/services/monitoring/prometheus/exporters/modemmanager.nix
new file mode 100644
index 00000000000..86ea98b94e4
--- /dev/null
+++ b/nixos/modules/services/monitoring/prometheus/exporters/modemmanager.nix
@@ -0,0 +1,33 @@
+{ 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}
+      '';
+    };
+  };
+}
diff --git a/nixos/tests/prometheus-exporters.nix b/nixos/tests/prometheus-exporters.nix
index 75c4ca12db2..b912e3425e0 100644
--- a/nixos/tests/prometheus-exporters.nix
+++ b/nixos/tests/prometheus-exporters.nix
@@ -363,6 +363,31 @@ let
       '';
     };
 
+    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;