commit 21f20d7b030b7dbd8e1988fa3d5800d64ae12d77 Author: JuliusFreudenberger Date: Sun Feb 20 19:00:21 2022 +0100 Initial commit diff --git a/backup_script.sh b/backup_script.sh new file mode 100755 index 0000000..3cc1748 --- /dev/null +++ b/backup_script.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +### CONFIG +HC_HOST=https://health.jfreudenberger.de +### + +PING_ROUTE=$HC_HOST/ping/$HC_UUID +HAS_HOOKS="" + +checkInput() { + for variable in SERVICE BACKUP_PATH HC_UUID RESTIC_REPOSITORY RESTIC_PASSWORD; do + if [[ -z ${!variable} ]]; then + echo "Variable $variable not given" + exit 1 + fi + done +} + +checkForHooks() { + test -f "$SERVICE.sh" && HAS_HOOKS=1 +} + +loadServiceHooks() { + if [ "$HAS_HOOKS" == "1" ]; then + echo "Loading hooks for service $SERVICE" + source "$SERVICE.sh" + fi +} + +# Send a curl to start the backup +healthStart() { + curl -fsS -m 10 --retry 5 -o /dev/null "$PING_ROUTE"/start +} + +# Send a curl to finish the backup +healthFinish() { + curl -fsS -m 10 --retry 5 -o /dev/null "$PING_ROUTE" +} + +# Check for General Error +checkNoError() { + if [ "$1" -ne 0 ]; then + curl -fsS -m 10 --retry 5 --data-raw "$2 error" "$PING_ROUTE"/fail + printf "\n%s ERROR !!!\n" "$3" + else + printf "\n%s SUCESSFULL\n" "$3" + fi +} + +# Check for Error in Restic backup +checkResticError() { + if [ "$1" -eq 1 ]; then + exitPrematurely "restic fatal error" + elif [ "$1" -eq 2 ]; then + exitPrematurely "restic remaining files" + else + printf "\nRESTIC SUCCESSFULL\n" + fi +} + +exitPrematurely() { + if [ "$HAS_HOOKS" == "1" ]; then + post + fi + + curl -fsS -m 10 --retry 5 --data-raw "$1" "$PING_ROUTE"/fail + printf "\n$1 ERROR !!!\n" + exit -1 +} + +# Backup the service and call healthchecks +backup() { + checkInput + healthStart + checkForHooks + + if [ "$HAS_HOOKS" == "1" ]; then + loadServiceHooks + pre + fi + + restic backup $BACKUP_PATH + checkResticError "$?" + + if [ "$HAS_HOOKS" == "1" ]; then + post + fi + + healthFinish +} + +backup