tor-browser: fix desktop icon (#365780)
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / dovecot.nix
blob701bf800d718403dce6d34e79945885c352afd7e
2   config,
3   lib,
4   pkgs,
5   options,
6   ...
7 }:
9 let
10   cfg = config.services.prometheus.exporters.dovecot;
11   inherit (lib)
12     mkOption
13     types
14     escapeShellArg
15     concatStringsSep
16     ;
19   port = 9166;
20   extraOpts = {
21     telemetryPath = mkOption {
22       type = types.str;
23       default = "/metrics";
24       description = ''
25         Path under which to expose metrics.
26       '';
27     };
28     socketPath = mkOption {
29       type = types.path;
30       default = "/var/run/dovecot/stats";
31       example = "/var/run/dovecot2/old-stats";
32       description = ''
33         Path under which the stats socket is placed.
34         The user/group under which the exporter runs,
35         should be able to access the socket in order
36         to scrape the metrics successfully.
38         Please keep in mind that the stats module has changed in
39         [Dovecot 2.3+](https://wiki2.dovecot.org/Upgrading/2.3) which
40         is not [compatible with this exporter](https://github.com/kumina/dovecot_exporter/issues/8).
42         The following extra config has to be passed to Dovecot to ensure that recent versions
43         work with this exporter:
44         ```
45         {
46           services.prometheus.exporters.dovecot.enable = true;
47           services.prometheus.exporters.dovecot.socketPath = "/var/run/dovecot2/old-stats";
48           services.dovecot2.mailPlugins.globally.enable = [ "old_stats" ];
49           services.dovecot2.extraConfig = '''
50             service old-stats {
51               unix_listener old-stats {
52                 user = dovecot-exporter
53                 group = dovecot-exporter
54                 mode = 0660
55               }
56               fifo_listener old-stats-mail {
57                 mode = 0660
58                 user = dovecot
59                 group = dovecot
60               }
61               fifo_listener old-stats-user {
62                 mode = 0660
63                 user = dovecot
64                 group = dovecot
65               }
66             }
67             plugin {
68               old_stats_refresh = 30 secs
69               old_stats_track_cmds = yes
70             }
71           ''';
72         }
73         ```
74       '';
75     };
76     scopes = mkOption {
77       type = types.listOf types.str;
78       default = [ "user" ];
79       example = [
80         "user"
81         "global"
82       ];
83       description = ''
84         Stats scopes to query.
85       '';
86     };
87   };
88   serviceOpts = {
89     serviceConfig = {
90       DynamicUser = false;
91       ExecStart = ''
92         ${pkgs.prometheus-dovecot-exporter}/bin/dovecot_exporter \
93           --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
94           --web.telemetry-path ${cfg.telemetryPath} \
95           --dovecot.socket-path ${escapeShellArg cfg.socketPath} \
96           --dovecot.scopes ${concatStringsSep "," cfg.scopes} \
97           ${concatStringsSep " \\\n  " cfg.extraFlags}
98       '';
99       RestrictAddressFamilies = [
100         # Need AF_UNIX to collect data
101         "AF_UNIX"
102       ];
103     };
104   };