python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / monitoring / vmagent.nix
blobc793bb073199c52cc8a94b303753450808db4dfb
1 { config, pkgs, lib, ... }:
2 with lib;
3 let
4   cfg = config.services.vmagent;
5   settingsFormat = pkgs.formats.json { };
6 in {
7   options.services.vmagent = {
8     enable = mkEnableOption (lib.mdDoc "vmagent");
10     user = mkOption {
11       default = "vmagent";
12       type = types.str;
13       description = lib.mdDoc ''
14         User account under which vmagent runs.
15       '';
16     };
18     group = mkOption {
19       type = types.str;
20       default = "vmagent";
21       description = lib.mdDoc ''
22         Group under which vmagent runs.
23       '';
24     };
26     package = mkOption {
27       default = pkgs.vmagent;
28       defaultText = lib.literalMD "pkgs.vmagent";
29       type = types.package;
30       description = lib.mdDoc ''
31         vmagent package to use.
32       '';
33     };
35     dataDir = mkOption {
36       type = types.str;
37       default = "/var/lib/vmagent";
38       description = lib.mdDoc ''
39         The directory where vmagent stores its data files.
40       '';
41     };
43     remoteWriteUrl = mkOption {
44       default = "http://localhost:8428/api/v1/write";
45       type = types.str;
46       description = lib.mdDoc ''
47         The storage endpoint such as VictoriaMetrics
48       '';
49     };
51     prometheusConfig = mkOption {
52       type = lib.types.submodule { freeformType = settingsFormat.type; };
53       description = lib.mdDoc ''
54         Config for prometheus style metrics
55       '';
56     };
58     openFirewall = mkOption {
59       type = types.bool;
60       default = false;
61       description = lib.mdDoc ''
62         Whether to open the firewall for the default ports.
63       '';
64     };
65   };
67   config = mkIf cfg.enable {
68     users.groups = mkIf (cfg.group == "vmagent") { vmagent = { }; };
70     users.users = mkIf (cfg.user == "vmagent") {
71       vmagent = {
72         group = cfg.group;
73         description = "vmagent daemon user";
74         home = cfg.dataDir;
75         isSystemUser = true;
76       };
77     };
79     networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ 8429 ];
81     systemd.services.vmagent = let
82       prometheusConfig = settingsFormat.generate "prometheusConfig.yaml" cfg.prometheusConfig;
83     in {
84       wantedBy = [ "multi-user.target" ];
85       after = [ "network.target" ];
86       description = "vmagent system service";
87       serviceConfig = {
88         User = cfg.user;
89         Group = cfg.group;
90         Type = "simple";
91         Restart = "on-failure";
92         WorkingDirectory = cfg.dataDir;
93         ExecStart = "${cfg.package}/bin/vmagent -remoteWrite.url=${cfg.remoteWriteUrl} -promscrape.config=${prometheusConfig}";
94       };
95     };
97     systemd.tmpfiles.rules =
98       [ "d '${cfg.dataDir}' 0755 ${cfg.user} ${cfg.group} -" ];
99   };