tor-browser: fix desktop icon (#365780)
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / rspamd.nix
blob21e03154a88f21c5f1d2643f2c645840d9d19de0
2   config,
3   lib,
4   pkgs,
5   options,
6   ...
7 }:
9 let
10   cfg = config.services.prometheus.exporters.rspamd;
11   inherit (lib)
12     mkOption
13     types
14     replaceStrings
15     mkRemovedOptionModule
16     recursiveUpdate
17     concatStringsSep
18     literalExpression
19     ;
21   mkFile = conf: pkgs.writeText "rspamd-exporter-config.yml" (builtins.toJSON conf);
23   generateConfig = extraLabels: {
24     modules.default.metrics =
25       (map
26         (path: {
27           name = "rspamd_${replaceStrings [ "[" "." " " "]" "\\" "'" ] [ "_" "_" "_" "" "" "" ] path}";
28           path = "{ .${path} }";
29           labels = extraLabels;
30         })
31         [
32           "actions['add\\ header']"
33           "actions['no\\ action']"
34           "actions['rewrite\\ subject']"
35           "actions['soft\\ reject']"
36           "actions.greylist"
37           "actions.reject"
38           "bytes_allocated"
39           "chunks_allocated"
40           "chunks_freed"
41           "chunks_oversized"
42           "connections"
43           "control_connections"
44           "ham_count"
45           "learned"
46           "pools_allocated"
47           "pools_freed"
48           "read_only"
49           "scanned"
50           "shared_chunks_allocated"
51           "spam_count"
52           "total_learns"
53         ]
54       )
55       ++ [
56         {
57           name = "rspamd_statfiles";
58           type = "object";
59           path = "{.statfiles[*]}";
60           labels = recursiveUpdate {
61             symbol = "{.symbol}";
62             type = "{.type}";
63           } extraLabels;
64           values = {
65             revision = "{.revision}";
66             size = "{.size}";
67             total = "{.total}";
68             used = "{.used}";
69             languages = "{.languages}";
70             users = "{.users}";
71           };
72         }
73       ];
74   };
77   port = 7980;
78   extraOpts = {
79     extraLabels = mkOption {
80       type = types.attrsOf types.str;
81       default = {
82         host = config.networking.hostName;
83       };
84       defaultText = literalExpression "{ host = config.networking.hostName; }";
85       example = literalExpression ''
86         {
87           host = config.networking.hostName;
88           custom_label = "some_value";
89         }
90       '';
91       description = "Set of labels added to each metric.";
92     };
93   };
94   serviceOpts.serviceConfig.ExecStart = ''
95     ${pkgs.prometheus-json-exporter}/bin/json_exporter \
96       --config.file ${mkFile (generateConfig cfg.extraLabels)} \
97       --web.listen-address "${cfg.listenAddress}:${toString cfg.port}" \
98       ${concatStringsSep " \\\n  " cfg.extraFlags}
99   '';
101   imports = [
102     (mkRemovedOptionModule [ "url" ] ''
103       This option was removed. The URL of the rspamd metrics endpoint
104       must now be provided to the exporter by prometheus via the url
105       parameter `target'.
107       In prometheus a scrape URL would look like this:
109         http://some.rspamd-exporter.host:7980/probe?target=http://some.rspamd.host:11334/stat
111       For more information, take a look at the official documentation
112       (https://github.com/prometheus-community/json_exporter) of the json_exporter.
113     '')
114     ({
115       options.warnings = options.warnings;
116       options.assertions = options.assertions;
117     })
118   ];