vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / nezha-agent.nix
blob7ebbc7f2f329711ad7a46c8a7122aed550497e72
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
7 let
8   cfg = config.services.nezha-agent;
9 in
11   meta = {
12     maintainers = with lib.maintainers; [ moraxyc ];
13   };
14   options = {
15     services.nezha-agent = {
16       enable = lib.mkEnableOption "Agent of Nezha Monitoring";
18       package = lib.mkPackageOption pkgs "nezha-agent" { };
19       debug = lib.mkEnableOption "verbose log";
20       tls = lib.mkOption {
21         type = lib.types.bool;
22         default = false;
23         description = ''
24           Enable SSL/TLS encryption.
25         '';
26       };
27       gpu = lib.mkOption {
28         type = lib.types.bool;
29         default = true;
30         description = ''
31           Enable GPU monitoring.
32         '';
33       };
34       disableCommandExecute = lib.mkOption {
35         type = lib.types.bool;
36         default = true;
37         description = ''
38           Disable executing the command from dashboard.
39         '';
40       };
41       skipConnection = lib.mkOption {
42         type = lib.types.bool;
43         default = false;
44         description = ''
45           Do not monitor the number of connections.
46         '';
47       };
48       skipProcess = lib.mkOption {
49         type = lib.types.bool;
50         default = false;
51         description = ''
52           Do not monitor the number of processes.
53         '';
54       };
55       reportDelay = lib.mkOption {
56         type = lib.types.enum [
57           1
58           2
59           3
60           4
61         ];
62         default = 1;
63         description = ''
64           The interval between system status reportings.
65           The value must be an integer from 1 to 4
66         '';
67       };
68       passwordFile = lib.mkOption {
69         type = with lib.types; nullOr str;
70         default = null;
71         description = ''
72           Path to the file contained the password from dashboard.
73         '';
74       };
75       server = lib.mkOption {
76         type = lib.types.str;
77         description = ''
78           Address to the dashboard
79         '';
80       };
81     };
82   };
84   config = lib.mkIf cfg.enable {
85     systemd.packages = [ cfg.package ];
87     systemd.services.nezha-agent = {
88       serviceConfig = {
89         ProtectSystem = "full";
90         PrivateDevices = "yes";
91         PrivateTmp = "yes";
92         NoNewPrivileges = true;
93       };
94       path = [ cfg.package ];
95       startLimitIntervalSec = 10;
96       startLimitBurst = 3;
97       script = lib.concatStringsSep " " (
98         [
99           "${cfg.package}/bin/agent"
100           "--disable-auto-update"
101           "--disable-force-update"
102           "--password $(cat ${cfg.passwordFile})"
103         ]
104         ++ lib.optional cfg.debug "--debug"
105         ++ lib.optional cfg.disableCommandExecute "--disable-command-execute"
106         ++ lib.optional (cfg.reportDelay != null) "--report-delay ${toString cfg.reportDelay}"
107         ++ lib.optional (cfg.server != null) "--server ${cfg.server}"
108         ++ lib.optional cfg.skipConnection "--skip-conn"
109         ++ lib.optional cfg.skipProcess "--skip-procs"
110         ++ lib.optional cfg.tls "--tls"
111         ++ lib.optional cfg.gpu "--gpu"
112       );
113       wantedBy = [ "multi-user.target" ];
114     };
115   };