47 lines
1.5 KiB
Bash
47 lines
1.5 KiB
Bash
#!/bin/sh
|
|
set -e
|
|
|
|
BINARY="/build/synapse_auto_compressor"
|
|
REPO_DIR="/build/rust-synapse-compress-state"
|
|
DB_PASS=$(cat /run/secrets/db_password)
|
|
CONN="postgresql://synapse:${DB_PASS}@db:5432/synapse"
|
|
CHUNK_SIZE="${STATE_COMPRESS_CHUNK_SIZE:-500}"
|
|
CHUNKS="${STATE_COMPRESS_CHUNKS:-100}"
|
|
SCHEDULE="${STATE_COMPRESS_SCHEDULE:-0 3 * * *}"
|
|
|
|
# Build from source if binary doesn't exist
|
|
if [ ! -f "$BINARY" ]; then
|
|
echo "[compress-state] Binary not found, building from source..."
|
|
apk add --no-cache git openssl-dev openssl-libs-static perl make musl-dev jemalloc-dev
|
|
rm -rf "$REPO_DIR"
|
|
git clone https://github.com/matrix-org/rust-synapse-compress-state "$REPO_DIR"
|
|
cd "$REPO_DIR"
|
|
cargo build --release -p synapse_auto_compressor
|
|
cp target/release/synapse_auto_compressor "$BINARY"
|
|
echo "[compress-state] Build complete"
|
|
# Clean up source to save space
|
|
rm -rf "$REPO_DIR"
|
|
else
|
|
echo "[compress-state] Using cached binary"
|
|
fi
|
|
|
|
# Run once at startup
|
|
echo "[compress-state] Running initial compression at $(date)"
|
|
"$BINARY" -p "$CONN" -c "$CHUNK_SIZE" -n "$CHUNKS" || echo "[compress-state] Error: $?"
|
|
|
|
# Set up cron job
|
|
CRON_SCRIPT="/build/run_compressor.sh"
|
|
cat > "$CRON_SCRIPT" <<EOF
|
|
#!/bin/sh
|
|
echo "[compress-state] Running at \$(date)"
|
|
$BINARY -p "$CONN" -c $CHUNK_SIZE -n $CHUNKS || echo "[compress-state] Error: \$?"
|
|
echo "[compress-state] Done at \$(date)"
|
|
EOF
|
|
chmod +x "$CRON_SCRIPT"
|
|
|
|
echo "$SCHEDULE $CRON_SCRIPT" | crontab -
|
|
echo "[compress-state] Cron scheduled: $SCHEDULE"
|
|
|
|
# Run crond in the foreground
|
|
exec crond -f -l 2
|