diff --git a/conf/backup-with-borg b/conf/backup-with-borg index d9d6a9d..0a67467 100644 --- a/conf/backup-with-borg +++ b/conf/backup-with-borg @@ -17,12 +17,21 @@ filter_hooks() { sudo ls /usr/share/yunohost/hooks/backup/ /etc/yunohost/hooks.d/backup/ | grep "\-$1_" | cut -d"-" -f2 | uniq 2>> "$err_file" } +healthcheck_url="$(sudo yunohost app setting "${borg_id}" healthcheck_url)" +healthcheck() { + if [[ -n "$healthcheck_url" ]]; then + curl -s -m 10 -o /dev/null --data-raw "$(echo $2 | tail --bytes=10000)" "$healthcheck_url/$1" + fi +} + fail_if_partially_failed() { grep Skipped|Error } sudo yunohost app setting "${borg_id}" last_run -v "${current_date}" sudo yunohost app setting "${borg_id}" state -v "ongoing" +healthcheck "start" + # Backup system part conf conf=$(sudo yunohost app setting "${borg_id}" conf) if [[ "$conf" = "1" ]]; then @@ -74,8 +83,10 @@ repository="$(sudo yunohost app setting "${borg_id}" repository)" mailalert="$(sudo yunohost app setting "${borg_id}" mailalert)" if [[ -n "$errors" ]]; then sudo yunohost app setting "${borg_id}" state -v "failed" + healthcheck "fail" "$errors" else sudo yunohost app setting "${borg_id}" state -v "successful" + healthcheck fi if [[ -n "$errors" && $mailalert != "never" ]]; then diff --git a/config_panel.toml b/config_panel.toml index 888f261..431abd8 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -46,6 +46,12 @@ services = [] choices.errors_only = "Only if an error occured" choices.never = "Never alert me" help = "Alerts are sent to the first user of this server" + + [main.general.healthcheck_url] + ask.en = "Healthcheck URL" + type = "url" + help = "Use a healthcheck to detect silent failures. It's optional, if you don't know what it is, just leave it blank or look it up: https://healthchecks.io" + optional = "true" [main.content] name = "What should be backed up?" diff --git a/manifest.toml b/manifest.toml index c76c02b..d4c82be 100644 --- a/manifest.toml +++ b/manifest.toml @@ -78,6 +78,13 @@ ram.runtime = "50M" choices = ["always", "errors_only", "never"] default = "errors_only" + [install.healthcheck_url] + ask.en = "Optional - you may specify a healthcheck URL to check against silent failures." + ask.fr = "Optionnel - vous pouvez spécifier une URL de vérification de l'état pour vérifier les pannes silencieuses." + type = "string" + default = "" + optional = true + [resources] [resources.sources.main] url = "https://github.com/borgbackup/borg/archive/refs/tags/1.4.0.tar.gz" @@ -96,6 +103,7 @@ ram.runtime = "50M" [resources.apt] packages = [ + "curl", "python3-pip", "python3-dev", "python3-jinja2",