anyrun: 0-unstable-2024-11-08 -> 0-unstable-2024-12-27 (#369731)
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / fritz.nix
blob386a89a0ba2ed5b7e00f75e58e326bbfdec47661
2   config,
3   lib,
4   pkgs,
5   utils,
6   ...
7 }:
8 let
9   inherit (lib) mkOption types;
10   cfg = config.services.prometheus.exporters.fritz;
11   yaml = pkgs.formats.yaml { };
12   configFile = yaml.generate "fritz-exporter.yaml" cfg.settings;
15   port = 9787;
17   extraOpts = {
18     settings = mkOption {
19       description = "Configuration settings for fritz-exporter.";
20       type = types.submodule {
21         freeformType = yaml.type;
23         options = {
24           # Pull existing port option into config file.
25           port = mkOption {
26             type = types.port;
27             default = cfg.port;
28             internal = true;
29             visible = false;
30           };
31           # Pull existing listen address option into config file.
32           listen_address = mkOption {
33             type = types.str;
34             default = cfg.listenAddress;
35             internal = true;
36             visible = false;
37           };
38           log_level = mkOption {
39             type = types.enum [
40               "DEBUG"
41               "INFO"
42               "WARNING"
43               "ERROR"
44               "CRITICAL"
45             ];
46             default = "INFO";
47             description = ''
48               Log level to use for the exporter.
49             '';
50           };
51           devices = mkOption {
52             default = [ ];
53             description = "Fritz!-devices to monitor using the exporter.";
54             type =
55               with types;
56               listOf (submodule {
57                 freeformType = yaml.type;
59                 options = {
60                   name = mkOption {
61                     type = types.str;
62                     default = "";
63                     description = ''
64                       Name to use for the device.
65                     '';
66                   };
67                   hostname = mkOption {
68                     type = types.str;
69                     default = "fritz.box";
70                     description = ''
71                       Hostname under which the target device is reachable.
72                     '';
73                   };
74                   username = mkOption {
75                     type = types.str;
76                     description = ''
77                       Username to authenticate with the target device.
78                     '';
79                   };
80                   password_file = mkOption {
81                     type = types.path;
82                     description = ''
83                       Path to a file which contains the password to authenticate with the target device.
84                       Needs to be readable by the user the exporter runs under.
85                     '';
86                   };
87                   host_info = mkOption {
88                     type = types.bool;
89                     description = ''
90                       Enable extended host info for this device. *Warning*: This will heavily increase scrape time.
91                     '';
92                     default = false;
93                   };
94                 };
95               });
96           };
97         };
98       };
99     };
100   };
102   serviceOpts = {
103     serviceConfig = {
104       ExecStart = utils.escapeSystemdExecArgs (
105         [
106           (lib.getExe pkgs.fritz-exporter)
107           "--config"
108           configFile
109         ]
110         ++ cfg.extraFlags
111       );
112       DynamicUser = false;
113     };
114   };