anyrun: 0-unstable-2024-11-08 -> 0-unstable-2024-12-27 (#369731)
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / pihole.nix
blobf2d37c6b95e605cbad2dfb96c9eb2064ad3d1564
2   config,
3   lib,
4   pkgs,
5   options,
6   ...
7 }:
9 let
10   cfg = config.services.prometheus.exporters.pihole;
11   inherit (lib)
12     mkOption
13     types
14     mkRemovedOptionModule
15     optionalString
16     ;
19   imports = [
20     (mkRemovedOptionModule [ "interval" ] "This option has been removed.")
21     ({
22       options.warnings = options.warnings;
23       options.assertions = options.assertions;
24     })
25   ];
27   port = 9617;
28   extraOpts = {
29     apiToken = mkOption {
30       type = types.str;
31       default = "";
32       example = "580a770cb40511eb85290242ac130003580a770cb40511eb85290242ac130003";
33       description = ''
34         Pi-Hole API token which can be used instead of a password
35       '';
36     };
37     password = mkOption {
38       type = types.str;
39       default = "";
40       example = "password";
41       description = ''
42         The password to login into Pi-Hole. An api token can be used instead.
43       '';
44     };
45     piholeHostname = mkOption {
46       type = types.str;
47       default = "pihole";
48       example = "127.0.0.1";
49       description = ''
50         Hostname or address where to find the Pi-Hole webinterface
51       '';
52     };
53     piholePort = mkOption {
54       type = types.port;
55       default = 80;
56       example = 443;
57       description = ''
58         The port Pi-Hole webinterface is reachable on
59       '';
60     };
61     protocol = mkOption {
62       type = types.enum [
63         "http"
64         "https"
65       ];
66       default = "http";
67       example = "https";
68       description = ''
69         The protocol which is used to connect to Pi-Hole
70       '';
71     };
72     timeout = mkOption {
73       type = types.str;
74       default = "5s";
75       description = ''
76         Controls the timeout to connect to a Pi-Hole instance
77       '';
78     };
79   };
80   serviceOpts = {
81     serviceConfig = {
82       ExecStart = ''
83         ${pkgs.prometheus-pihole-exporter}/bin/pihole-exporter \
84           ${optionalString (cfg.apiToken != "") "-pihole_api_token ${cfg.apiToken}"} \
85           -pihole_hostname ${cfg.piholeHostname} \
86           ${optionalString (cfg.password != "") "-pihole_password ${cfg.password}"} \
87           -pihole_port ${toString cfg.piholePort} \
88           -pihole_protocol ${cfg.protocol} \
89           -port ${toString cfg.port} \
90           -timeout ${cfg.timeout}
91       '';
92     };
93   };