nix-config/modules/data-hoarder/postgres.nix

84 lines
3.0 KiB
Nix
Raw Normal View History

2023-05-04 18:16:38 +02:00
{ lib, pkgs, config, inputs, self, ... }: {
2022-06-27 19:38:16 +02:00
services.postgresql = {
enable = true;
enableTCPIP = true;
2022-06-27 19:38:16 +02:00
port = 5432;
authentication = let
senpai-ip =
self.nixosConfigurations.notice-me-senpai.config.deployment-TLMS.net.wg.addr4;
in pkgs.lib.mkOverride 10 ''
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host tlms grafana ${senpai-ip}/32 scram-sha-256
'';
2022-06-27 19:38:16 +02:00
package = pkgs.postgresql_14;
2023-03-05 14:12:50 +01:00
ensureDatabases = [ "tlms" ];
2022-09-03 18:46:35 +02:00
ensureUsers = [
{ name = "grafana"; }
2022-09-03 18:46:35 +02:00
{
2023-03-05 14:12:50 +01:00
name = "tlms";
2022-09-03 18:46:35 +02:00
ensurePermissions = {
2023-03-05 14:12:50 +01:00
"DATABASE tlms" = "ALL PRIVILEGES";
2023-03-05 15:37:06 +01:00
"ALL TABLES IN SCHEMA public" = "ALL";
2022-09-03 18:46:35 +02:00
};
}
];
};
environment.systemPackages =
[ inputs.tlms-rs.packages.x86_64-linux.run-migration-based ];
2022-08-30 21:18:56 +02:00
systemd.services.postgresql = {
unitConfig = { TimeoutStartSec = 3000; };
serviceConfig = { TimeoutSec = lib.mkForce 3000; };
postStart = lib.mkAfter ''
2023-03-16 19:06:29 +01:00
# set pw for the users
2023-03-05 14:12:50 +01:00
$PSQL -c "ALTER ROLE tlms WITH PASSWORD '$(cat ${config.sops.secrets.postgres_password.path})';"
$PSQL -c "ALTER ROLE grafana WITH PASSWORD '$(cat ${config.sops.secrets.postgres_password_grafana.path})';"
2022-08-30 21:18:56 +02:00
2023-03-05 14:12:50 +01:00
export DATABASE_URL=postgres:///tlms
2023-03-05 16:48:16 +01:00
${inputs.tlms-rs.packages.x86_64-linux.run-migration-based}/bin/run-migration
2023-03-05 15:37:06 +01:00
# fixup permissions
2023-03-16 19:06:29 +01:00
# tlms is practically root, we need to FIXME something about it
2023-03-05 15:41:42 +01:00
$PSQL -c "GRANT ALL ON DATABASE tlms TO tlms;"
$PSQL -d tlms -c "GRANT ALL ON ALL TABLES IN SCHEMA public TO tlms;"
$PSQL -d tlms -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO tlms;"
2023-03-05 15:37:06 +01:00
2023-03-16 19:06:29 +01:00
# Get graphana to SELECT from tables that might be interesting for it
$PSQL -c "GRANT CONNECT ON DATABASE tlms TO grafana;"
2023-03-20 02:23:54 +01:00
$PSQL -d tlms -c "GRANT SELECT ON r09_telegrams, raw_telegrams, gps_points, trekkie_runs, regions TO grafana;"
2023-03-16 19:06:29 +01:00
unset DATABASE_URL
'';
};
2022-08-08 01:53:52 +02:00
systemd.services.dump-csv = {
path = [ config.services.postgresql.package ];
serviceConfig = { User = "postgres"; };
2022-08-08 01:53:52 +02:00
script = ''
TMPFILE=$(mktemp)
2022-10-15 21:43:04 +02:00
OUT_FOLDER=/var/lib/pub-files/postgres-dumps/$(date -d"$(date) - 1 day" +"%Y-%m")
CSV_FILENAME=$(date -d"$(date) - 1 day" +"%Y-%m-%d").csv
2022-08-08 01:53:52 +02:00
2023-03-20 19:43:30 +01:00
psql -d tlms -c "COPY (SELECT id, to_char(time::timestamp at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS') time, station, r09_type, delay, reporting_point, junction, direction, request_status, priority, direction_request, line, run_number, destination_number, train_length, vehicle_number, operator, region FROM r09_telegrams WHERE time::date = current_date - 1 ORDER by time ASC) TO '$TMPFILE' DELIMITER ',' HEADER CSV;"
2022-08-08 01:53:52 +02:00
2022-10-15 21:43:04 +02:00
mkdir -p $OUT_FOLDER
chmod a+xr $OUT_FOLDER
cp $TMPFILE $OUT_FOLDER/$CSV_FILENAME
chmod a+r $OUT_FOLDER/$CSV_FILENAME
2022-08-08 02:11:36 +02:00
2022-10-15 21:43:04 +02:00
rm -f $TMPFILE
2022-08-08 01:53:52 +02:00
'';
};
systemd.timers.dump-csv = {
partOf = [ "dump-csv.service" ];
wantedBy = [ "timers.target" ];
2022-10-16 18:25:43 +02:00
timerConfig.OnCalendar = "*-*-* 03:11:19";
2022-08-08 01:53:52 +02:00
};
2022-06-27 19:38:16 +02:00
}