linuxPackages_latest.broadcom_sta: add patch to compile on Kernel 6.12 (#359484)
[NixPkgs.git] / nixos / modules / services / databases / influxdb.nix
blob9bc0b935d08f9fdac6fb3db67b2f896627bccf6d
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.influxdb;
5   configOptions = lib.recursiveUpdate {
6     meta = {
7       bind-address = ":8088";
8       commit-timeout = "50ms";
9       dir = "${cfg.dataDir}/meta";
10       election-timeout = "1s";
11       heartbeat-timeout = "1s";
12       hostname = "localhost";
13       leader-lease-timeout = "500ms";
14       retention-autocreate = true;
15     };
17     data = {
18       dir = "${cfg.dataDir}/data";
19       wal-dir = "${cfg.dataDir}/wal";
20       max-wal-size = 104857600;
21       wal-enable-logging = true;
22       wal-flush-interval = "10m";
23       wal-partition-flush-delay = "2s";
24     };
26     cluster = {
27       shard-writer-timeout = "5s";
28       write-timeout = "5s";
29     };
31     retention = {
32       enabled = true;
33       check-interval = "30m";
34     };
36     http = {
37       enabled = true;
38       auth-enabled = false;
39       bind-address = ":8086";
40       https-enabled = false;
41       log-enabled = true;
42       pprof-enabled = false;
43       write-tracing = false;
44     };
46     monitor = {
47       store-enabled = false;
48       store-database = "_internal";
49       store-interval = "10s";
50     };
52     admin = {
53       enabled = true;
54       bind-address = ":8083";
55       https-enabled = false;
56     };
58     graphite = [{
59       enabled = false;
60     }];
62     udp = [{
63       enabled = false;
64     }];
66     collectd = [{
67       enabled = false;
68       typesdb = "${pkgs.collectd-data}/share/collectd/types.db";
69       database = "collectd_db";
70       bind-address = ":25826";
71     }];
73     opentsdb = [{
74       enabled = false;
75     }];
77     continuous_queries = {
78       enabled = true;
79       log-enabled = true;
80       recompute-previous-n = 2;
81       recompute-no-older-than = "10m";
82       compute-runs-per-interval = 10;
83       compute-no-more-than = "2m";
84     };
86     hinted-handoff = {
87       enabled = true;
88       dir = "${cfg.dataDir}/hh";
89       max-size = 1073741824;
90       max-age = "168h";
91       retry-rate-limit = 0;
92       retry-interval = "1s";
93     };
94   } cfg.extraConfig;
96   configFile = pkgs.runCommandLocal "config.toml" { } ''
97     ${pkgs.buildPackages.remarshal}/bin/remarshal -if json -of toml \
98       < ${pkgs.writeText "config.json" (builtins.toJSON configOptions)} \
99       > $out
100   '';
104   ###### interface
106   options = {
108     services.influxdb = {
110       enable = lib.mkOption {
111         default = false;
112         description = "Whether to enable the influxdb server";
113         type = lib.types.bool;
114       };
116       package = lib.mkPackageOption pkgs "influxdb" { };
118       user = lib.mkOption {
119         default = "influxdb";
120         description = "User account under which influxdb runs";
121         type = lib.types.str;
122       };
124       group = lib.mkOption {
125         default = "influxdb";
126         description = "Group under which influxdb runs";
127         type = lib.types.str;
128       };
130       dataDir = lib.mkOption {
131         default = "/var/db/influxdb";
132         description = "Data directory for influxd data files.";
133         type = lib.types.path;
134       };
136       extraConfig = lib.mkOption {
137         default = {};
138         description = "Extra configuration options for influxdb";
139         type = lib.types.attrs;
140       };
141     };
142   };
145   ###### implementation
147   config = lib.mkIf config.services.influxdb.enable {
149     systemd.tmpfiles.rules = [
150       "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group} - -"
151     ];
153     systemd.services.influxdb = {
154       description = "InfluxDB Server";
155       wantedBy = [ "multi-user.target" ];
156       after = [ "network.target" ];
157       serviceConfig = {
158         ExecStart = ''${cfg.package}/bin/influxd -config "${configFile}"'';
159         User = cfg.user;
160         Group = cfg.group;
161         Restart = "on-failure";
162       };
163       postStart =
164         let
165           scheme = if configOptions.http.https-enabled then "-k https" else "http";
166           bindAddr = (ba: if lib.hasPrefix ":" ba then "127.0.0.1${ba}" else "${ba}")(toString configOptions.http.bind-address);
167         in
168         lib.mkBefore ''
169           until ${pkgs.curl.bin}/bin/curl -s -o /dev/null ${scheme}://${bindAddr}/ping; do
170             sleep 1;
171           done
172         '';
173     };
175     users.users = lib.optionalAttrs (cfg.user == "influxdb") {
176       influxdb = {
177         uid = config.ids.uids.influxdb;
178         group = "influxdb";
179         description = "Influxdb daemon user";
180       };
181     };
183     users.groups = lib.optionalAttrs (cfg.group == "influxdb") {
184       influxdb.gid = config.ids.gids.influxdb;
185     };
186   };