tor-browser: fix desktop icon (#365780)
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / blackbox.nix
blobc053fc5417c1106f561cdc1c33b2ae778f9954ae
2   config,
3   lib,
4   pkgs,
5   options,
6   ...
7 }:
9 let
10   logPrefix = "services.prometheus.exporter.blackbox";
11   cfg = config.services.prometheus.exporters.blackbox;
12   inherit (lib)
13     mkOption
14     types
15     concatStringsSep
16     escapeShellArg
17     ;
19   # This ensures that we can deal with string paths, path types and
20   # store-path strings with context.
21   coerceConfigFile =
22     file:
23     if (builtins.isPath file) || (lib.isStorePath file) then
24       file
25     else
26       (
27         lib.warn ''
28           ${logPrefix}: configuration file "${file}" is being copied to the nix-store.
29           If you would like to avoid that, please set enableConfigCheck to false.
30         '' /.
31         + file
32       );
33   checkConfigLocation =
34     file:
35     if lib.hasPrefix "/tmp/" file then
36       throw "${logPrefix}: configuration file must not reside within /tmp - it won't be visible to the systemd service."
37     else
38       file;
39   checkConfig =
40     file:
41     pkgs.runCommand "checked-blackbox-exporter.conf"
42       {
43         preferLocalBuild = true;
44         nativeBuildInputs = [ pkgs.buildPackages.prometheus-blackbox-exporter ];
45       }
46       ''
47         ln -s ${coerceConfigFile file} $out
48         blackbox_exporter --config.check --config.file $out
49       '';
52   port = 9115;
53   extraOpts = {
54     configFile = mkOption {
55       type = types.path;
56       description = ''
57         Path to configuration file.
58       '';
59     };
60     enableConfigCheck = mkOption {
61       type = types.bool;
62       default = true;
63       description = ''
64         Whether to run a correctness check for the configuration file. This depends
65         on the configuration file residing in the nix-store. Paths passed as string will
66         be copied to the store.
67       '';
68     };
69   };
71   serviceOpts =
72     let
73       adjustedConfigFile =
74         if cfg.enableConfigCheck then checkConfig cfg.configFile else checkConfigLocation cfg.configFile;
75     in
76     {
77       serviceConfig = {
78         AmbientCapabilities = [ "CAP_NET_RAW" ]; # for ping probes
79         ExecStart = ''
80           ${pkgs.prometheus-blackbox-exporter}/bin/blackbox_exporter \
81             --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
82             --config.file ${escapeShellArg adjustedConfigFile} \
83             ${concatStringsSep " \\\n  " cfg.extraFlags}
84         '';
85         ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
86       };
87     };