tor-browser: fix desktop icon (#365780)
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / varnish.nix
blobb132122f253f3482b62e40782f1b6d920dcf08e4
2   config,
3   lib,
4   pkgs,
5   options,
6   ...
7 }:
9 let
10   cfg = config.services.prometheus.exporters.varnish;
11   inherit (lib)
12     mkOption
13     types
14     mkDefault
15     optional
16     escapeShellArg
17     concatStringsSep
18     ;
21   port = 9131;
22   extraOpts = {
23     noExit = mkOption {
24       type = types.bool;
25       default = false;
26       description = ''
27         Do not exit server on Varnish scrape errors.
28       '';
29     };
30     withGoMetrics = mkOption {
31       type = types.bool;
32       default = false;
33       description = ''
34         Export go runtime and http handler metrics.
35       '';
36     };
37     verbose = mkOption {
38       type = types.bool;
39       default = false;
40       description = ''
41         Enable verbose logging.
42       '';
43     };
44     raw = mkOption {
45       type = types.bool;
46       default = false;
47       description = ''
48         Enable raw stdout logging without timestamps.
49       '';
50     };
51     varnishStatPath = mkOption {
52       type = types.str;
53       default = "varnishstat";
54       description = ''
55         Path to varnishstat.
56       '';
57     };
58     instance = mkOption {
59       type = types.nullOr types.str;
60       default = config.services.varnish.stateDir;
61       defaultText = lib.literalExpression "config.services.varnish.stateDir";
62       description = ''
63         varnishstat -n value.
64       '';
65     };
66     healthPath = mkOption {
67       type = types.nullOr types.str;
68       default = null;
69       description = ''
70         Path under which to expose healthcheck. Disabled unless configured.
71       '';
72     };
73     telemetryPath = mkOption {
74       type = types.str;
75       default = "/metrics";
76       description = ''
77         Path under which to expose metrics.
78       '';
79     };
80   };
81   serviceOpts = {
82     path = [ config.services.varnish.package ];
83     serviceConfig = {
84       RestartSec = mkDefault 1;
85       DynamicUser = false;
86       ExecStart = ''
87         ${pkgs.prometheus-varnish-exporter}/bin/prometheus_varnish_exporter \
88           --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
89           --web.telemetry-path ${cfg.telemetryPath} \
90           --varnishstat-path ${escapeShellArg cfg.varnishStatPath} \
91           ${concatStringsSep " \\\n  " (
92             cfg.extraFlags
93             ++ optional (cfg.healthPath != null) "--web.health-path ${cfg.healthPath}"
94             ++ optional (cfg.instance != null) "-n ${escapeShellArg cfg.instance}"
95             ++ optional cfg.noExit "--no-exit"
96             ++ optional cfg.withGoMetrics "--with-go-metrics"
97             ++ optional cfg.verbose "--verbose"
98             ++ optional cfg.raw "--raw"
99           )}
100       '';
101     };
102   };