nixos/influxdb: refactor (#484156)
This commit is contained in:
@@ -7,106 +7,7 @@
|
||||
let
|
||||
cfg = config.services.influxdb;
|
||||
|
||||
configOptions = lib.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.formats.toml { }).generate "config.toml" configOptions;
|
||||
settingsFormat = pkgs.formats.toml { };
|
||||
in
|
||||
{
|
||||
|
||||
@@ -116,11 +17,7 @@ in
|
||||
|
||||
services.influxdb = {
|
||||
|
||||
enable = lib.mkOption {
|
||||
default = false;
|
||||
description = "Whether to enable the influxdb server";
|
||||
type = lib.types.bool;
|
||||
};
|
||||
enable = lib.mkEnableOption "the influxdb server";
|
||||
|
||||
package = lib.mkPackageOption pkgs "influxdb" { };
|
||||
|
||||
@@ -142,10 +39,116 @@ in
|
||||
type = lib.types.path;
|
||||
};
|
||||
|
||||
extraConfig = lib.mkOption {
|
||||
settings = lib.mkOption {
|
||||
default = { };
|
||||
description = "Extra configuration options for influxdb";
|
||||
type = lib.types.attrs;
|
||||
type = lib.types.submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
config =
|
||||
let
|
||||
mkAllOptionDefault = lib.mapAttrs (n: lib.mkOptionDefault);
|
||||
in
|
||||
{
|
||||
meta = mkAllOptionDefault {
|
||||
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 = mkAllOptionDefault {
|
||||
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 = mkAllOptionDefault {
|
||||
shard-writer-timeout = "5s";
|
||||
write-timeout = "5s";
|
||||
};
|
||||
|
||||
retention = mkAllOptionDefault {
|
||||
enabled = true;
|
||||
check-interval = "30m";
|
||||
};
|
||||
|
||||
http = mkAllOptionDefault {
|
||||
enabled = true;
|
||||
auth-enabled = false;
|
||||
bind-address = ":8086";
|
||||
https-enabled = false;
|
||||
log-enabled = true;
|
||||
pprof-enabled = false;
|
||||
write-tracing = false;
|
||||
};
|
||||
|
||||
monitor = mkAllOptionDefault {
|
||||
store-enabled = false;
|
||||
store-database = "_internal";
|
||||
store-interval = "10s";
|
||||
};
|
||||
|
||||
admin = mkAllOptionDefault {
|
||||
enabled = true;
|
||||
bind-address = ":8083";
|
||||
https-enabled = false;
|
||||
};
|
||||
|
||||
# We can't make lists sensibly overrideable, so you have to override
|
||||
# them whole
|
||||
graphite = lib.mkOptionDefault [
|
||||
{
|
||||
enabled = false;
|
||||
}
|
||||
];
|
||||
|
||||
udp = lib.mkOptionDefault [
|
||||
{
|
||||
enabled = false;
|
||||
}
|
||||
];
|
||||
|
||||
collectd = lib.mkOptionDefault [
|
||||
{
|
||||
enabled = false;
|
||||
typesdb = "${pkgs.collectd-data}/share/collectd/types.db";
|
||||
database = "collectd_db";
|
||||
bind-address = ":25826";
|
||||
}
|
||||
];
|
||||
|
||||
opentsdb = lib.mkOptionDefault [
|
||||
{
|
||||
enabled = false;
|
||||
}
|
||||
];
|
||||
|
||||
continuous_queries = mkAllOptionDefault {
|
||||
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 = mkAllOptionDefault {
|
||||
enabled = true;
|
||||
dir = "${cfg.dataDir}/hh";
|
||||
max-size = 1073741824;
|
||||
max-age = "168h";
|
||||
retry-rate-limit = 0;
|
||||
retry-interval = "1s";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -163,17 +166,16 @@ in
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
serviceConfig = {
|
||||
ExecStart = ''${cfg.package}/bin/influxd -config "${configFile}"'';
|
||||
ExecStart = ''${cfg.package}/bin/influxd -config "${settingsFormat.generate "config.toml" cfg.settings}"'';
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
Restart = "on-failure";
|
||||
};
|
||||
postStart =
|
||||
let
|
||||
scheme = if configOptions.http.https-enabled then "-k https" else "http";
|
||||
bindAddr = (ba: if lib.hasPrefix ":" ba then "127.0.0.1${ba}" else "${ba}") (
|
||||
toString configOptions.http.bind-address
|
||||
);
|
||||
scheme = if cfg.settings.http.https-enabled or false then "-k https" else "http";
|
||||
inherit (cfg.settings.http) bind-address;
|
||||
bindAddr = if lib.hasPrefix ":" bind-address then "127.0.0.1${bind-address}" else bind-address;
|
||||
in
|
||||
lib.mkBefore ''
|
||||
until ${pkgs.curl.bin}/bin/curl -s -o /dev/null ${scheme}://${bindAddr}/ping; do
|
||||
@@ -182,7 +184,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
users.users = lib.optionalAttrs (cfg.user == "influxdb") {
|
||||
users.users = lib.mkIf (cfg.user == "influxdb") {
|
||||
influxdb = {
|
||||
uid = config.ids.uids.influxdb;
|
||||
group = "influxdb";
|
||||
@@ -190,9 +192,16 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
users.groups = lib.optionalAttrs (cfg.group == "influxdb") {
|
||||
users.groups = lib.mkIf (cfg.group == "influxdb") {
|
||||
influxdb.gid = config.ids.gids.influxdb;
|
||||
};
|
||||
};
|
||||
|
||||
imports = [
|
||||
# FIXME remove after 26.11
|
||||
(lib.mkRenamedOptionModule
|
||||
[ "services" "influxdb" "extraConfig" ]
|
||||
[ "services" "influxdb" "settings" ]
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user