python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / monitoring / scollector.nix
blob48be309c95996496a6a7d46fafef11f2e19405eb
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.scollector;
8   collectors = pkgs.runCommand "collectors" { preferLocalBuild = true; }
9     ''
10     mkdir -p $out
11     ${lib.concatStringsSep
12         "\n"
13         (lib.mapAttrsToList
14           (frequency: binaries:
15             "mkdir -p $out/${frequency}\n" +
16             (lib.concatStringsSep
17               "\n"
18               (map (path: "ln -s ${path} $out/${frequency}/$(basename ${path})")
19                    binaries)))
20           cfg.collectors)}
21     '';
23   conf = pkgs.writeText "scollector.toml" ''
24     Host = "${cfg.bosunHost}"
25     ColDir = "${collectors}"
26     ${cfg.extraConfig}
27   '';
29 in {
31   options = {
33     services.scollector = {
35       enable = mkOption {
36         type = types.bool;
37         default = false;
38         description = lib.mdDoc ''
39           Whether to run scollector.
40         '';
41       };
43       package = mkOption {
44         type = types.package;
45         default = pkgs.scollector;
46         defaultText = literalExpression "pkgs.scollector";
47         description = lib.mdDoc ''
48           scollector binary to use.
49         '';
50       };
52       user = mkOption {
53         type = types.str;
54         default = "scollector";
55         description = lib.mdDoc ''
56           User account under which scollector runs.
57         '';
58       };
60       group = mkOption {
61         type = types.str;
62         default = "scollector";
63         description = lib.mdDoc ''
64           Group account under which scollector runs.
65         '';
66       };
68       bosunHost = mkOption {
69         type = types.str;
70         default = "localhost:8070";
71         description = lib.mdDoc ''
72           Host and port of the bosun server that will store the collected
73           data.
74         '';
75       };
77       collectors = mkOption {
78         type = with types; attrsOf (listOf path);
79         default = {};
80         example = literalExpression ''{ "0" = [ "''${postgresStats}/bin/collect-stats" ]; }'';
81         description = lib.mdDoc ''
82           An attribute set mapping the frequency of collection to a list of
83           binaries that should be executed at that frequency. You can use "0"
84           to run a binary forever.
85         '';
86       };
88       extraOpts = mkOption {
89         type = with types; listOf str;
90         default = [];
91         example = [ "-d" ];
92         description = lib.mdDoc ''
93           Extra scollector command line options
94         '';
95       };
97       extraConfig = mkOption {
98         type = types.lines;
99         default = "";
100         description = lib.mdDoc ''
101           Extra scollector configuration added to the end of scollector.toml
102         '';
103       };
105     };
107   };
109   config = mkIf config.services.scollector.enable {
111     systemd.services.scollector = {
112       description = "scollector metrics collector (part of Bosun)";
113       wantedBy = [ "multi-user.target" ];
115       path = [ pkgs.coreutils pkgs.iproute2 ];
117       serviceConfig = {
118         User = cfg.user;
119         Group = cfg.group;
120         ExecStart = "${cfg.package}/bin/scollector -conf=${conf} ${lib.concatStringsSep " " cfg.extraOpts}";
121       };
122     };
124     users.users.scollector = {
125       description = "scollector user";
126       group = "scollector";
127       uid = config.ids.uids.scollector;
128     };
130     users.groups.scollector.gid = config.ids.gids.scollector;
132   };