vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / sabnzbd.nix
blob0d937ac6673f8351b11346cbf7650797013201f3
1 { config, lib, pkgs, options, ... }:
3 let
4   inherit (lib) mkOption types;
5   cfg = config.services.prometheus.exporters.sabnzbd;
6 in
8   port = 9387;
10   extraOpts = {
11     servers = mkOption {
12       description = "List of sabnzbd servers to connect to.";
13       type = types.listOf (types.submodule {
14         options = {
15           baseUrl = mkOption {
16             type = types.str;
17             description = "Base URL of the sabnzbd server.";
18             example = "http://localhost:8080/sabnzbd";
19           };
20           apiKeyFile = mkOption {
21             type = types.str;
22             description = ''
23               The path to a file containing the API key.
24               The file is securely passed to the service by leveraging systemd credentials.
25               No special permissions need to be set on this file.
26             '';
27             example = "/run/secrets/sabnzbd_apikey";
28           };
29         };
30       });
31     };
32   };
34   serviceOpts =
35     let
36       servers = lib.zipAttrs cfg.servers;
37       credentials = lib.imap0 (i: v: { name = "apikey-${toString i}"; path = v; }) servers.apiKeyFile;
38     in
39     {
40       serviceConfig.LoadCredential = builtins.map ({ name, path }: "${name}:${path}") credentials;
42       environment = {
43         METRICS_PORT = toString cfg.port;
44         METRICS_ADDR = cfg.listenAddress;
45         SABNZBD_BASEURLS = lib.concatStringsSep "," servers.baseUrl;
46       };
48       script =
49         let
50           apiKeys = lib.concatStringsSep "," (builtins.map (cred: "$(< $CREDENTIALS_DIRECTORY/${cred.name})") credentials);
51         in
52         ''
53           export SABNZBD_APIKEYS="${apiKeys}"
54           exec ${lib.getExe pkgs.prometheus-sabnzbd-exporter}
55         '';
56     };