summaryrefslogtreecommitdiffstats
path: root/nixos/modules/services/monitoring/prometheus/exporters/fritz.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/services/monitoring/prometheus/exporters/fritz.nix')
-rw-r--r--nixos/modules/services/monitoring/prometheus/exporters/fritz.nix97
1 files changed, 97 insertions, 0 deletions
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/fritz.nix b/nixos/modules/services/monitoring/prometheus/exporters/fritz.nix
new file mode 100644
index 000000000000..c3a962b576a5
--- /dev/null
+++ b/nixos/modules/services/monitoring/prometheus/exporters/fritz.nix
@@ -0,0 +1,97 @@
+{ config, lib, pkgs, utils, ... }:
+let
+ inherit (lib) mkOption types mdDoc;
+ cfg = config.services.prometheus.exporters.fritz;
+ yaml = pkgs.formats.yaml { };
+ configFile = yaml.generate "fritz-exporter.yaml" cfg.settings;
+in
+{
+ port = 9787;
+
+ extraOpts = {
+ settings = mkOption {
+ description = mdDoc "Configuration settings for fritz-exporter.";
+ type = types.submodule {
+ freeformType = yaml.type;
+
+ options = {
+ # Pull existing port option into config file.
+ port = mkOption {
+ type = types.port;
+ default = cfg.port;
+ internal = true;
+ visible = false;
+ };
+ # Pull existing listen address option into config file.
+ listen_address = mkOption {
+ type = types.str;
+ default = cfg.listenAddress;
+ internal = true;
+ visible = false;
+ };
+ log_level = mkOption {
+ type = types.enum [ "DEBUG" "INFO" "WARNING" "ERROR" "CRITICAL" ];
+ default = "INFO";
+ description = mdDoc ''
+ Log level to use for the exporter.
+ '';
+ };
+ devices = mkOption {
+ default = [];
+ description = "Fritz!-devices to monitor using the exporter.";
+ type = with types; listOf (submodule {
+ freeformType = yaml.type;
+
+ options = {
+ name = mkOption {
+ type = types.str;
+ default = "";
+ description = mdDoc ''
+ Name to use for the device.
+ '';
+ };
+ hostname = mkOption {
+ type = types.str;
+ default = "fritz.box";
+ description = mdDoc ''
+ Hostname under which the target device is reachable.
+ '';
+ };
+ username = mkOption {
+ type = types.str;
+ description = mdDoc ''
+ Username to authenticate with the target device.
+ '';
+ };
+ password_file = mkOption {
+ type = types.path;
+ description = mdDoc ''
+ Path to a file which contains the password to authenticate with the target device.
+ Needs to be readable by the user the exporter runs under.
+ '';
+ };
+ host_info = mkOption {
+ type = types.bool;
+ description = mdDoc ''
+ Enable extended host info for this device. *Warning*: This will heavily increase scrape time.
+ '';
+ default = false;
+ };
+ };
+ });
+ };
+ };
+ };
+ };
+ };
+
+ serviceOpts = {
+ serviceConfig = {
+ ExecStart = utils.escapeSystemdExecArgs ([
+ (lib.getExe pkgs.fritz-exporter)
+ "--config" configFile
+ ] ++ cfg.extraFlags);
+ DynamicUser = false;
+ };
+ };
+}