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