vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / mongodb.nix
blob288434e93abb0e7dc0b6d4490ff7558b6e160d48
1 { config, lib, pkgs, options, ... }:
3 let
4   cfg = config.services.prometheus.exporters.mongodb;
5   inherit (lib)
6     mkOption
7     types
8     optionalString
9     getExe
10     length
11     concatStringsSep
12     concatMapStringsSep
13     escapeShellArgs
14     ;
17   port = 9216;
18   extraOpts = {
19     uri = mkOption {
20       type = types.str;
21       default = "mongodb://localhost:27017/test";
22       example = "mongodb://localhost:27017/test";
23       description = "MongoDB URI to connect to.";
24     };
25     collStats = mkOption {
26       type = types.listOf types.str;
27       default = [ ];
28       example = [ "db1.coll1" "db2" ];
29       description = ''
30         List of comma separared databases.collections to get $collStats
31       '';
32     };
33     indexStats = mkOption {
34       type = types.listOf types.str;
35       default = [ ];
36       example = [ "db1.coll1" "db2" ];
37       description = ''
38         List of comma separared databases.collections to get $indexStats
39       '';
40     };
41     collector = mkOption {
42       type = types.listOf types.str;
43       default = [ ];
44       example = [ "diagnosticdata" "replicasetstatus" "dbstats" "topmetrics" "currentopmetrics" "indexstats" "dbstats" "profile" ];
45       description = "Enabled collectors";
46     };
47     collectAll = mkOption {
48       type = types.bool;
49       default = false;
50       description = ''
51         Enable all collectors. Same as specifying all --collector.<name>
52       '';
53     };
54     telemetryPath = mkOption {
55       type = types.str;
56       default = "/metrics";
57       example = "/metrics";
58       description = "Metrics expose path";
59     };
60   };
61   serviceOpts = {
62     serviceConfig = {
63       RuntimeDirectory = "prometheus-mongodb-exporter";
64       ExecStart = ''
65         ${getExe pkgs.prometheus-mongodb-exporter} \
66           --mongodb.uri="${cfg.uri}" \
67           ${if cfg.collectAll then "--collect-all" else concatMapStringsSep " " (x: "--collect.${x}") cfg.collector} \
68           ${optionalString (length cfg.collStats > 0) "--mongodb.collstats-colls=${concatStringsSep "," cfg.collStats}"} \
69           ${optionalString (length cfg.indexStats > 0) "--mongodb.indexstats-colls=${concatStringsSep "," cfg.indexStats}"} \
70           --web.listen-address="${cfg.listenAddress}:${toString cfg.port}" \
71           --web.telemetry-path="${cfg.telemetryPath}" \
72           ${escapeShellArgs cfg.extraFlags}
73       '';
74     };
75   };