102 lines
3.0 KiB
Nix
102 lines
3.0 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
let
|
|
cfg = config.services.minecraft-heatmap;
|
|
in
|
|
{
|
|
options.services.minecraft-heatmap = {
|
|
enable = lib.mkEnableOption "";
|
|
|
|
mclog2psqlPackage = lib.mkPackageOption pkgs "mclog2psql" { };
|
|
|
|
onCalendar = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "05:00:00";
|
|
description = "Systemd timer OnCalendar setting for the Minecraft Heatmap log ingester.";
|
|
};
|
|
|
|
minecraftLogsDir = lib.mkOption {
|
|
type = lib.types.path;
|
|
default = "/var/cache/minecraft-heatmap/logs";
|
|
description = "Directory containing Minecraft server log files to be ingested.";
|
|
};
|
|
|
|
database = {
|
|
host = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "localhost";
|
|
description = "Database host for Minecraft Heatmap.";
|
|
};
|
|
|
|
port = lib.mkOption {
|
|
type = lib.types.port;
|
|
default = 5432;
|
|
description = "Database port for Minecraft Heatmap.";
|
|
};
|
|
|
|
name = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "minecraft_heatmap";
|
|
description = "Database name for Minecraft Heatmap.";
|
|
};
|
|
|
|
user = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "minecraft_heatmap";
|
|
description = "Database user for Minecraft Heatmap.";
|
|
};
|
|
|
|
passwordFile = lib.mkOption {
|
|
type = with lib.types; nullOr path;
|
|
default = null;
|
|
description = "Path to the file containing the database password for Minecraft Heatmap.";
|
|
};
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
systemd.services.minecraft-heatmap-ingest-logs = {
|
|
description = "Minecraft Heatmap log ingester service";
|
|
environment = {
|
|
MINECRAFT_HEATMAP_DIR = cfg.minecraftLogsDir;
|
|
MINECRAFT_HEATMAP_DB_HOST = cfg.database.host;
|
|
MINECRAFT_HEATMAP_DB_PORT = toString cfg.database.port;
|
|
MINECRAFT_HEATMAP_DB_NAME = cfg.database.name;
|
|
MINECRAFT_HEATMAP_DB_USER = cfg.database.user;
|
|
MINECRAFT_HEATMAP_DB_PASSWORD_FILE = lib.optionalString (cfg.database.passwordFile != null) "%d/minecraft-heatmap-db-password";
|
|
};
|
|
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
ExecStart = "${cfg.mclog2psqlPackage}/bin/mclog2psql";
|
|
Restart = "on-failure";
|
|
RestartSec = "5s";
|
|
|
|
User = "minecraft-heatmap";
|
|
Group = "minecraft-heatmap";
|
|
DynamicUser = true;
|
|
|
|
LoadCredential = lib.mkIf (cfg.database.passwordFile != null) [
|
|
"minecraft-heatmap-db-password:${cfg.database.passwordFile}"
|
|
];
|
|
|
|
CacheDirectory = "minecraft-heatmap";
|
|
CacheDirectoryMode = "0700";
|
|
};
|
|
};
|
|
|
|
systemd.timers.minecraft-heatmap-ingest-logs = {
|
|
description = "Minecraft Heatmap log ingester timer";
|
|
wantedBy = [ "timers.target" ];
|
|
timerConfig = {
|
|
OnCalendar = cfg.onCalendar;
|
|
Persistent = true;
|
|
RandomizedDelaySec = "1h";
|
|
};
|
|
};
|
|
|
|
# systemd.sockets.minecraft-heatmap-rest-endpoint = {};
|
|
|
|
# systemd.sockets.minecraft-heatmap-rest-endpoint = {};
|
|
};
|
|
}
|