mastodon: 4.3.1 -> 4.3.2 (#361487)
[NixPkgs.git] / nixos / modules / services / monitoring / bosun.nix
blob08288f644e77700fab985e509a4120200c0d64e9
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.bosun;
5   configFile = pkgs.writeText "bosun.conf" ''
6     ${lib.optionalString (cfg.opentsdbHost !=null) "tsdbHost = ${cfg.opentsdbHost}"}
7     ${lib.optionalString (cfg.influxHost !=null) "influxHost = ${cfg.influxHost}"}
8     httpListen = ${cfg.listenAddress}
9     stateFile = ${cfg.stateFile}
10     ledisDir = ${cfg.ledisDir}
11     checkFrequency = ${cfg.checkFrequency}
13     ${cfg.extraConfig}
14   '';
16 in {
18   options = {
20     services.bosun = {
22       enable = lib.mkEnableOption "bosun";
24       package = lib.mkPackageOption pkgs "bosun" { };
26       user = lib.mkOption {
27         type = lib.types.str;
28         default = "bosun";
29         description = ''
30           User account under which bosun runs.
31         '';
32       };
34       group = lib.mkOption {
35         type = lib.types.str;
36         default = "bosun";
37         description = ''
38           Group account under which bosun runs.
39         '';
40       };
42       opentsdbHost = lib.mkOption {
43         type = lib.types.nullOr lib.types.str;
44         default = "localhost:4242";
45         description = ''
46           Host and port of the OpenTSDB database that stores bosun data.
47           To disable opentsdb you can pass null as parameter.
48         '';
49       };
51       influxHost = lib.mkOption {
52         type = lib.types.nullOr lib.types.str;
53         default = null;
54         example = "localhost:8086";
55         description = ''
56            Host and port of the influxdb database.
57         '';
58       };
60       listenAddress = lib.mkOption {
61         type = lib.types.str;
62         default = ":8070";
63         description = ''
64           The host address and port that bosun's web interface will listen on.
65         '';
66       };
68       stateFile = lib.mkOption {
69         type = lib.types.path;
70         default = "/var/lib/bosun/bosun.state";
71         description = ''
72           Path to bosun's state file.
73         '';
74       };
76       ledisDir = lib.mkOption {
77         type = lib.types.path;
78         default = "/var/lib/bosun/ledis_data";
79         description = ''
80           Path to bosun's ledis data dir
81         '';
82       };
84       checkFrequency = lib.mkOption {
85         type = lib.types.str;
86         default = "5m";
87         description = ''
88           Bosun's check frequency
89         '';
90       };
92       extraConfig = lib.mkOption {
93         type = lib.types.lines;
94         default = "";
95         description = ''
96           Extra configuration options for Bosun. You should describe your
97           desired templates, alerts, macros, etc through this configuration
98           option.
100           A detailed description of the supported syntax can be found at-spi2-atk
101           https://bosun.org/configuration.html
102         '';
103       };
105     };
107   };
109   config = lib.mkIf cfg.enable {
111     systemd.services.bosun = {
112       description = "bosun metrics collector (part of Bosun)";
113       wantedBy = [ "multi-user.target" ];
115       preStart = ''
116         mkdir -p "$(dirname "${cfg.stateFile}")";
117         touch "${cfg.stateFile}"
118         touch "${cfg.stateFile}.tmp"
120         mkdir -p "${cfg.ledisDir}";
122         if [ "$(id -u)" = 0 ]; then
123           chown ${cfg.user}:${cfg.group} "${cfg.stateFile}"
124           chown ${cfg.user}:${cfg.group} "${cfg.stateFile}.tmp"
125           chown ${cfg.user}:${cfg.group} "${cfg.ledisDir}"
126         fi
127       '';
129       serviceConfig = {
130         PermissionsStartOnly = true;
131         User = cfg.user;
132         Group = cfg.group;
133         ExecStart = ''
134           ${cfg.package}/bin/bosun -c ${configFile}
135         '';
136       };
137     };
139     users.users.bosun = {
140       description = "bosun user";
141       group = "bosun";
142       uid = config.ids.uids.bosun;
143     };
145     users.groups.bosun.gid = config.ids.gids.bosun;
147   };