#!/bin/bash

statusfile=/var/tmp/backup.monitoring
ssh_login="${username}@${server}"

if ! [[ -f /etc/backup.priv ]]
then
    echo "abort_no_key" > "$statusfile"
    exit 1
fi

run-parts --exit-on-error -- /etc/backup-pre-hooks.d
exitcode=$?
if [[ $exitcode != 0 ]]
then
    echo "hook $exitcode" > "$statusfile"
    exit 1
fi

do_backup() {
    # Compress level 1 is a good compromise between speed and cpu usage.
    rsync --compress-level=1 -aAP --numeric-ids --delete --relative \
        --rsync-path="/usr/bin/rsync --fake-super" \
        -e "ssh -o IdentityFile=/etc/backup.priv -o StrictHostKeyChecking=accept-new -p ${port}" \
        "$1" "$ssh_login":backups/

    # Exit code 24 means some files have vanished during rsync.
    # I don't know why, but this is very common, apparently?
    exitcode=$?
    if [[ $exitcode != 0 ]] && [[ $exitcode != 24 ]]
    then
        rsync_errors+=" $exitcode"
    fi
}

rsync_errors=""
% for path in sorted(paths):
do_backup "${path}"
% endfor

if [[ -n "$rsync_errors" ]]
then
    echo "rsync_error$rsync_errors" > "$statusfile"
else
    echo "ok" > "$statusfile"
fi