python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / networking / mtr-exporter.nix
blob43ebbbe96d05d93c55875059ae884be8e7b43ae3
1 { config, lib, pkgs, ... }:
3 let
4   inherit (lib)
5     maintainers types mkEnableOption mkOption mkIf
6     literalExpression escapeShellArg escapeShellArgs;
7   cfg = config.services.mtr-exporter;
8 in {
9   options = {
10     services = {
11       mtr-exporter = {
12         enable = mkEnableOption (lib.mdDoc "a Prometheus exporter for MTR");
14         target = mkOption {
15           type = types.str;
16           example = "example.org";
17           description = lib.mdDoc "Target to check using MTR.";
18         };
20         interval = mkOption {
21           type = types.int;
22           default = 60;
23           description = lib.mdDoc "Interval between MTR checks in seconds.";
24         };
26         port = mkOption {
27           type = types.port;
28           default = 8080;
29           description = lib.mdDoc "Listen port for MTR exporter.";
30         };
32         address = mkOption {
33           type = types.str;
34           default = "127.0.0.1";
35           description = lib.mdDoc "Listen address for MTR exporter.";
36         };
38         mtrFlags = mkOption {
39           type = with types; listOf str;
40           default = [];
41           example = ["-G1"];
42           description = lib.mdDoc "Additional flags to pass to MTR.";
43         };
44       };
45     };
46   };
48   config = mkIf cfg.enable {
49     systemd.services.mtr-exporter = {
50       script = ''
51         exec ${pkgs.mtr-exporter}/bin/mtr-exporter \
52           -mtr ${pkgs.mtr}/bin/mtr \
53           -schedule '@every ${toString cfg.interval}s' \
54           -bind ${escapeShellArg cfg.address}:${toString cfg.port} \
55           -- \
56           ${escapeShellArgs (cfg.mtrFlags ++ [ cfg.target ])}
57       '';
58       wantedBy = [ "multi-user.target" ];
59       requires = [ "network.target" ];
60       after = [ "network.target" ];
61       serviceConfig = {
62         Restart = "on-failure";
63         # Hardening
64         CapabilityBoundingSet = [ "" ];
65         DynamicUser = true;
66         LockPersonality = true;
67         ProcSubset = "pid";
68         PrivateDevices = true;
69         PrivateUsers = true;
70         PrivateTmp = true;
71         ProtectClock = true;
72         ProtectControlGroups = true;
73         ProtectHome = true;
74         ProtectHostname = true;
75         ProtectKernelLogs = true;
76         ProtectKernelModules = true;
77         ProtectKernelTunables = true;
78         ProtectProc = "invisible";
79         ProtectSystem = "strict";
80         RestrictNamespaces = true;
81         RestrictRealtime = true;
82       };
83     };
84   };
86   meta.maintainers = with maintainers; [ jakubgs ];