From 727ddce30152f76b2ef4382264ca3261a75a010a Mon Sep 17 00:00:00 2001 From: Malte Brandy Date: Tue, 26 Jan 2021 21:22:38 +0100 Subject: [PATCH] Improve synapse-cleanup --- nixos/roles/matrix-synapse/default.nix | 4 +++- nixos/roles/matrix-synapse/synapse-cleanup.hs | 7 +++++++ overlays/10-previews.nix | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/nixos/roles/matrix-synapse/default.nix b/nixos/roles/matrix-synapse/default.nix index e1dbed19..7aee8b5c 100644 --- a/nixos/roles/matrix-synapse/default.nix +++ b/nixos/roles/matrix-synapse/default.nix @@ -1,8 +1,9 @@ -{ pkgs, config, ... }: +{ pkgs, config, lib, ... }: let server_name = "maralorn.de"; hostName = "matrix.${server_name}"; in { + environment.systemPackages = [ pkgs.matrix-synapse-tools.rust-synapse-compress-state ]; systemd.services."synapse-cleanup" = { serviceConfig = { ExecStart = pkgs.writeHaskell "synapse-cleanup" { @@ -10,6 +11,7 @@ in { pkgs.haskellPackages.postgresql-simple pkgs.haskellPackages.HTTP ]; + ghcEnv.PATH = "${lib.makeBinPath [ pkgs.matrix-synapse-tools.rust-synapse-compress-state pkgs.postgresql_12 ]}:$PATH"; ghcArgs = [ "-threaded" ]; } (builtins.readFile ./synapse-cleanup.hs); User = "matrix-synapse"; diff --git a/nixos/roles/matrix-synapse/synapse-cleanup.hs b/nixos/roles/matrix-synapse/synapse-cleanup.hs index 64248663..216cd4b2 100644 --- a/nixos/roles/matrix-synapse/synapse-cleanup.hs +++ b/nixos/roles/matrix-synapse/synapse-cleanup.hs @@ -24,6 +24,9 @@ import Prelude ( ) import Relude import Say import System.IO +import Shh + +load Absolute ["synapse-compress-state", "cat", "psql", "rm", "grep"] newtype PurgeResult = PurgeResult { purge_id :: Text @@ -39,6 +42,7 @@ apiUrl = [i|http://localhost:8008/_synapse/admin/v1|] daysOld = 30 lastMessages = 500 minUsersToPurgeRoom = 5 +filename = "/var/lib/matrix-synapse/tmp-storage-compression.sql" main :: IO () main = do @@ -86,6 +90,9 @@ main = do "SELECT q.room_id FROM (select count(*) as numberofusers, room_id FROM current_state_events WHERE type ='m.room.member' GROUP BY room_id) AS q LEFT JOIN room_aliases a ON q.room_id=a.room_id WHERE q.numberofusers > ? ORDER BY numberofusers desc" (Only minUsersToPurgeRoom) forM_ roomIds $ \roomId -> do + synapse_compress_state "-o" filename "-p" "host=/run/postgresql user=matrix-synapse dbname=matrix-synapse" "-r" (toString roomId) |> grep "-v" "DELETE\\|INSERT" + cat filename |> psql "matrix-synapse" + rm filename eventId <- fmap (second (posixSecondsToUTCTime . (/ 1000) . realToFrac)) . viaNonEmpty head diff --git a/overlays/10-previews.nix b/overlays/10-previews.nix index 59dcd958..765acc81 100644 --- a/overlays/10-previews.nix +++ b/overlays/10-previews.nix @@ -11,4 +11,5 @@ in { syncthingNext = unstable.syncthing; vimPlugins = unstable.vimPlugins; fzf = unstable.fzf; + matrix-synapse-tools.rust-synapse-compress-state = unstable.matrix-synapse-tools.rust-synapse-compress-state; }