aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/nixos/modules/services/databases/influxdb.nix
diff options
context:
space:
mode:
authorMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
committerMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
commitc4625b175f8200f643fd6e11010932ea44c78433 (patch)
treebce3f89888c8ac3991fa5569a878a9eab6801ccc /infra/libkookie/nixpkgs/nixos/modules/services/databases/influxdb.nix
parent49f735974dd103039ddc4cb576bb76555164a9e7 (diff)
parentd661aa56a8843e991261510c1bb28fdc2f6975ae (diff)
Add 'infra/libkookie/' from commit 'd661aa56a8843e991261510c1bb28fdc2f6975ae'
git-subtree-dir: infra/libkookie git-subtree-mainline: 49f735974dd103039ddc4cb576bb76555164a9e7 git-subtree-split: d661aa56a8843e991261510c1bb28fdc2f6975ae
Diffstat (limited to 'infra/libkookie/nixpkgs/nixos/modules/services/databases/influxdb.nix')
-rw-r--r--infra/libkookie/nixpkgs/nixos/modules/services/databases/influxdb.nix197
1 files changed, 197 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/nixos/modules/services/databases/influxdb.nix b/infra/libkookie/nixpkgs/nixos/modules/services/databases/influxdb.nix
new file mode 100644
index 000000000000..dd5d69b1147a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/nixos/modules/services/databases/influxdb.nix
@@ -0,0 +1,197 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.services.influxdb;
+
+ configOptions = recursiveUpdate {
+ meta = {
+ bind-address = ":8088";
+ commit-timeout = "50ms";
+ dir = "${cfg.dataDir}/meta";
+ election-timeout = "1s";
+ heartbeat-timeout = "1s";
+ hostname = "localhost";
+ leader-lease-timeout = "500ms";
+ retention-autocreate = true;
+ };
+
+ data = {
+ dir = "${cfg.dataDir}/data";
+ wal-dir = "${cfg.dataDir}/wal";
+ max-wal-size = 104857600;
+ wal-enable-logging = true;
+ wal-flush-interval = "10m";
+ wal-partition-flush-delay = "2s";
+ };
+
+ cluster = {
+ shard-writer-timeout = "5s";
+ write-timeout = "5s";
+ };
+
+ retention = {
+ enabled = true;
+ check-interval = "30m";
+ };
+
+ http = {
+ enabled = true;
+ auth-enabled = false;
+ bind-address = ":8086";
+ https-enabled = false;
+ log-enabled = true;
+ pprof-enabled = false;
+ write-tracing = false;
+ };
+
+ monitor = {
+ store-enabled = false;
+ store-database = "_internal";
+ store-interval = "10s";
+ };
+
+ admin = {
+ enabled = true;
+ bind-address = ":8083";
+ https-enabled = false;
+ };
+
+ graphite = [{
+ enabled = false;
+ }];
+
+ udp = [{
+ enabled = false;
+ }];
+
+ collectd = [{
+ enabled = false;
+ typesdb = "${pkgs.collectd-data}/share/collectd/types.db";
+ database = "collectd_db";
+ bind-address = ":25826";
+ }];
+
+ opentsdb = [{
+ enabled = false;
+ }];
+
+ continuous_queries = {
+ enabled = true;
+ log-enabled = true;
+ recompute-previous-n = 2;
+ recompute-no-older-than = "10m";
+ compute-runs-per-interval = 10;
+ compute-no-more-than = "2m";
+ };
+
+ hinted-handoff = {
+ enabled = true;
+ dir = "${cfg.dataDir}/hh";
+ max-size = 1073741824;
+ max-age = "168h";
+ retry-rate-limit = 0;
+ retry-interval = "1s";
+ };
+ } cfg.extraConfig;
+
+ configFile = pkgs.runCommand "config.toml" {
+ buildInputs = [ pkgs.remarshal ];
+ preferLocalBuild = true;
+ } ''
+ remarshal -if json -of toml \
+ < ${pkgs.writeText "config.json" (builtins.toJSON configOptions)} \
+ > $out
+ '';
+in
+{
+
+ ###### interface
+
+ options = {
+
+ services.influxdb = {
+
+ enable = mkOption {
+ default = false;
+ description = "Whether to enable the influxdb server";
+ type = types.bool;
+ };
+
+ package = mkOption {
+ default = pkgs.influxdb;
+ defaultText = "pkgs.influxdb";
+ description = "Which influxdb derivation to use";
+ type = types.package;
+ };
+
+ user = mkOption {
+ default = "influxdb";
+ description = "User account under which influxdb runs";
+ type = types.str;
+ };
+
+ group = mkOption {
+ default = "influxdb";
+ description = "Group under which influxdb runs";
+ type = types.str;
+ };
+
+ dataDir = mkOption {
+ default = "/var/db/influxdb";
+ description = "Data directory for influxd data files.";
+ type = types.path;
+ };
+
+ extraConfig = mkOption {
+ default = {};
+ description = "Extra configuration options for influxdb";
+ type = types.attrs;
+ };
+ };
+ };
+
+
+ ###### implementation
+
+ config = mkIf config.services.influxdb.enable {
+
+ systemd.tmpfiles.rules = [
+ "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group} - -"
+ ];
+
+ systemd.services.influxdb = {
+ description = "InfluxDB Server";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+ serviceConfig = {
+ ExecStart = ''${cfg.package}/bin/influxd -config "${configFile}"'';
+ User = cfg.user;
+ Group = cfg.group;
+ };
+ postStart =
+ let
+ scheme = if configOptions.http.https-enabled then "-k https" else "http";
+ bindAddr = (ba: if hasPrefix ":" ba then "127.0.0.1${ba}" else "${ba}")(toString configOptions.http.bind-address);
+ in
+ mkBefore ''
+ until ${pkgs.curl.bin}/bin/curl -s -o /dev/null ${scheme}://${bindAddr}/ping; do
+ sleep 1;
+ done
+ '';
+ };
+
+ users.users = optionalAttrs (cfg.user == "influxdb") {
+ influxdb = {
+ uid = config.ids.uids.influxdb;
+ description = "Influxdb daemon user";
+ };
+ };
+
+ users.groups = optionalAttrs (cfg.group == "influxdb") {
+ influxdb.gid = config.ids.gids.influxdb;
+ };
+ };
+
+}