diff --git a/nixos/modules/services/databases/influxdb.nix b/nixos/modules/services/databases/influxdb.nix index 08963f7aab7f..8d63f14c67b5 100644 --- a/nixos/modules/services/databases/influxdb.nix +++ b/nixos/modules/services/databases/influxdb.nix @@ -5,43 +5,103 @@ with lib; let cfg = config.services.influxdb; - influxdbConfig = pkgs.writeText "config.toml" '' - bind-address = "${cfg.bindAddress}" + 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; + }; - [logging] - level = "info" - file = "stdout" + 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"; + }; - [admin] - port = ${toString cfg.adminPort} - assets = "${pkgs.influxdb}/share/influxdb/admin" + cluster = { + shard-writer-timeout = "5s"; + write-timeout = "5s"; + }; - [api] - port = ${toString cfg.apiPort} - ${cfg.apiExtraConfig} + retention = { + enabled = true; + check-interval = "30m"; + }; - [input_plugins] - ${cfg.inputPluginsConfig} + http = { + enabled = true; + auth-enabled = false; + bind-address = ":8086"; + https-enabled = false; + log-enabled = true; + pprof-enabled = false; + write-tracing = false; + }; - [raft] - dir = "${cfg.dataDir}/raft" - ${cfg.raftConfig} + monitor = { + store-enabled = false; + store-database = "_internal"; + store-interval = "10s"; + }; - [storage] - dir = "${cfg.dataDir}/db" - ${cfg.storageConfig} + admin = { + enabled = true; + bind-address = ":8083"; + https-enabled = false; + }; - [cluster] - ${cfg.clusterConfig} + graphite = [{ + enabled = false; + }]; - [sharding] - ${cfg.shardingConfig} + udp = [{ + enabled = false; + }]; - [wal] - dir = "${cfg.dataDir}/wal" - ${cfg.walConfig} + collectd = { + enabled = false; + typesdb = "${pkgs.collectd}/share/collectd/types.db"; + database = "collectd_db"; + port = 25826; + }; - ${cfg.extraConfig} + 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 ]; + } '' + remarshal -if json -of toml \ + < ${pkgs.writeText "config.json" (builtins.toJSON configOptions)} \ + > $out ''; in { @@ -82,124 +142,10 @@ in type = types.path; }; - bindAddress = mkOption { - default = "127.0.0.1"; - description = "Address where influxdb listens"; - type = types.str; - }; - - adminPort = mkOption { - default = 8083; - description = "The port where influxdb admin listens"; - type = types.int; - }; - - apiPort = mkOption { - default = 8086; - description = "The port where influxdb api listens"; - type = types.int; - }; - - apiExtraConfig = mkOption { - default = '' - read-timeout = "5s" - ''; - description = "Extra influxdb api configuration"; - example = '' - ssl-port = 8084 - ssl-cert = /path/to/cert.pem - read-timeout = "5s" - ''; - type = types.lines; - }; - - inputPluginsConfig = mkOption { - default = ""; - description = "Configuration of influxdb extra plugins"; - example = '' - [input_plugins.graphite] - enabled = true - port = 2003 - database = "graphite" - ''; - }; - - raftConfig = mkOption { - default = '' - port = 8090 - ''; - description = "Influxdb raft configuration"; - type = types.lines; - }; - - storageConfig = mkOption { - default = '' - write-buffer-size = 10000 - ''; - description = "Influxdb raft configuration"; - type = types.lines; - }; - - clusterConfig = mkOption { - default = '' - protobuf_port = 8099 - protobuf_timeout = "2s" - protobuf_heartbeat = "200ms" - protobuf_min_backoff = "1s" - protobuf_max_backoff = "10s" - - write-buffer-size = 10000 - max-response-buffer-size = 100 - - concurrent-shard-query-limit = 10 - ''; - description = "Influxdb cluster configuration"; - type = types.lines; - }; - - leveldbConfig = mkOption { - default = '' - max-open-files = 40 - lru-cache-size = "200m" - max-open-shards = 0 - point-batch-size = 100 - write-batch-size = 5000000 - ''; - description = "Influxdb leveldb configuration"; - type = types.lines; - }; - - shardingConfig = mkOption { - default = '' - replication-factor = 1 - - [sharding.short-term] - duration = "7d" - split = 1 - - [sharding.long-term] - duration = "30d" - split = 1 - ''; - description = "Influxdb sharding configuration"; - type = types.lines; - }; - - walConfig = mkOption { - default = '' - flush-after = 1000 - bookmark-after = 1000 - index-after = 1000 - requests-per-logfile = 10000 - ''; - description = "Influxdb write-ahead log configuration"; - type = types.lines; - }; - extraConfig = mkOption { - default = ""; + default = {}; description = "Extra configuration options for influxdb"; - type = types.string; + type = types.attrs; }; }; @@ -215,7 +161,7 @@ in wantedBy = [ "multi-user.target" ]; after = [ "network-interfaces.target" ]; serviceConfig = { - ExecStart = ''${cfg.package}/bin/influxdb -config "${influxdbConfig}"''; + ExecStart = ''${cfg.package}/bin/influxd -config "${configFile}"''; User = "${cfg.user}"; Group = "${cfg.group}"; PermissionsStartOnly = true; @@ -224,11 +170,6 @@ in mkdir -m 0770 -p ${cfg.dataDir} if [ "$(id -u)" = 0 ]; then chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir}; fi ''; - postStart = mkBefore '' - until ${pkgs.curl}/bin/curl -s -o /dev/null 'http://${cfg.bindAddress}:${toString cfg.apiPort}/'; do - sleep 1; - done - ''; }; users.extraUsers = optional (cfg.user == "influxdb") { diff --git a/pkgs/development/tools/remarshal/default.nix b/pkgs/development/tools/remarshal/default.nix new file mode 100644 index 000000000000..91aedac1748f --- /dev/null +++ b/pkgs/development/tools/remarshal/default.nix @@ -0,0 +1,24 @@ +{ lib, goPackages, fetchFromGitHub }: + +goPackages.buildGoPackage rec { + name = "remarshal-${rev}"; + rev = "0.3.0"; + goPackagePath = "github.com/dbohdan/remarshal"; + + src = fetchFromGitHub { + rev = "v${rev}"; + owner = "dbohdan"; + repo = "remarshal"; + sha256 = "0lhsqca3lq3xvdwsmrngv4p6b7k2lkbfnxnk5qj6jdd5y7f4b496"; + }; + + buildInputs = with goPackages; [ toml yaml-v2 ]; + + meta = with lib; { + description = "Convert between TOML, YAML and JSON"; + license = licenses.mit; + homepage = https://github.com/dbohdan/remarshal; + maintainers = with maintainers; [ offline ]; + platforms = with platforms; linux; + }; +} diff --git a/pkgs/servers/nosql/influxdb/default.nix b/pkgs/servers/nosql/influxdb/default.nix index 92b1b73d0a0f..d3843b0b2523 100644 --- a/pkgs/servers/nosql/influxdb/default.nix +++ b/pkgs/servers/nosql/influxdb/default.nix @@ -1,37 +1,29 @@ -{ stdenv, fetchurl, makeWrapper, zlib, bzip2 }: +{ lib, goPackages, fetchFromGitHub }: -assert stdenv.isLinux; +goPackages.buildGoPackage rec { + name = "influxdb-${rev}"; + rev = "v0.9.4"; + goPackagePath = "github.com/influxdb/influxdb"; -stdenv.mkDerivation rec { - name = "influxdb-${version}"; - version = "0.8.3"; - arch = if stdenv.system == "x86_64-linux" then "amd64" else "386"; - - src = fetchurl { - url = "http://s3.amazonaws.com/influxdb/${name}.${arch}.tar.gz"; - sha256 = if arch == "amd64" then - "e625902d403434c799f9d9ffc2592a3880f82d435423fde7174e5e4fe0f41148" else - "5abe9f432553e66c8aff86c4311eba16b874678d04b52bfe9e2019c01059ec78"; + src = fetchFromGitHub { + inherit rev; + owner = "influxdb"; + repo = "influxdb"; + sha256 = "0yarymppnlpf2xab57i8jx595v47s5mdwnf13719mc1fv3q84yqn"; }; - buildInputs = [ makeWrapper ]; + excludedPackages = "test"; - installPhase = '' - install -D influxdb $out/bin/influxdb - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/influxdb - wrapProgram "$out/bin/influxdb" \ - --prefix LD_LIBRARY_PATH : "${stdenv.cc.cc}/lib:${stdenv.cc.cc}/lib64:${zlib}/lib:${bzip2}/lib" + propagatedBuildInputs = with goPackages; [ + raft raft-boltdb snappy crypto gogo.protobuf pool pat toml + gollectd statik liner + ]; - mkdir -p $out/share/influxdb - cp -R admin scripts config.toml $out/share/influxdb - ''; - - meta = with stdenv.lib; { - description = "Scalable datastore for metrics, events, and real-time analytics"; - homepage = http://influxdb.com/; + meta = with lib; { + description = "An open-source distributed time series database"; license = licenses.mit; - - maintainers = [ maintainers.offline ]; - platforms = ["i686-linux" "x86_64-linux"]; + homepage = https://influxdb.com/; + maintainers = with maintainers; [ offline ]; + platforms = with platforms; linux; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3402795067eb..d0404db8005c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2780,6 +2780,8 @@ let pytrainer = callPackage ../applications/misc/pytrainer { }; + remarshal = (callPackage ../development/tools/remarshal { }).bin // { outputs = [ "bin" ]; }; + openmpi = callPackage ../development/libraries/openmpi { }; openmodelica = callPackage ../applications/science/misc/openmodelica { }; @@ -9304,9 +9306,7 @@ let riak = callPackage ../servers/nosql/riak/1.3.1.nix { }; riak2 = callPackage ../servers/nosql/riak/2.1.1.nix { }; - influxdb = callPackage ../servers/nosql/influxdb { }; - - influxdb-backup = goPackages.influxdb-backup.bin // { outputs = [ "bin" ]; }; + influxdb = (callPackage ../servers/nosql/influxdb { }).bin // { outputs = [ "bin" ]; }; hyperdex = callPackage ../servers/nosql/hyperdex { }; @@ -9391,7 +9391,7 @@ let pyMAILt = builderDefsPackage (callPackage ../servers/xmpp/pyMAILt) {}; - qpid-cpp = callPackage ../servers/amqp/qpid-cpp { + qpid-cpp = callPackage ../servers/amqp/qpid-cpp { boost = boost155; }; diff --git a/pkgs/top-level/go-packages.nix b/pkgs/top-level/go-packages.nix index fc89b5f5be0e..d2d9a1025274 100644 --- a/pkgs/top-level/go-packages.nix +++ b/pkgs/top-level/go-packages.nix @@ -1622,15 +1622,6 @@ let goPackageAliases = [ "github.com/go-inf/inf" ]; }; - influxdb = buildFromGitHub { - rev = "v0.9.3"; - owner = "influxdb"; - repo = "influxdb"; - sha256 = "0hsvm8ls1g12j1d5ap396vqfpvd0g72hymhczdqg6z96h3zi90bx"; - propagatedBuildInputs = [ raft raft-boltdb snappy crypto gogo.protobuf pool pat toml gollectd statik liner ]; - excludedPackages = "test"; - }; - influxdb8-client = buildFromGitHub{ rev = "v0.8.8"; owner = "influxdb"; @@ -1639,15 +1630,6 @@ let subPackages = [ "client" ]; }; - influxdb-backup = buildFromGitHub { - rev = "4556edbffa914a8c17fa1fa1564962a33c6c7596"; - date = "2014-07-28"; - owner = "eckardt"; - repo = "influxdb-backup"; - sha256 = "2928063e6dfe4be7b69c8e72e4d6a5fc557f0c75e9625fadf607d59b8e80e34b"; - buildInputs = [ eckardt.influxdb-go ]; - }; - eckardt.influxdb-go = buildGoPackage rec { rev = "8b71952efc257237e077c5d0672e936713bad38f"; name = "influxdb-go-${stdenv.lib.strings.substring 0 7 rev}";