feat: fine-grained ping message

Different PING URLs for various scenarios, enabling success/failure tracking and latency monitoring.
This commit is contained in:
Yi Chen committed 2024-07-16 16:33:48 -04:00
1 parent 4a0b80fcd0
commit 33021b5910
6 files changed
+80 -13

No files matched your search

+3
View File
@@ -11,6 +11,9 @@
# BACKUP_FILE_SUFFIX="%Y%m%d" # BACKUP_FILE_SUFFIX="%Y%m%d"
# BACKUP_KEEP_DAYS="0" # BACKUP_KEEP_DAYS="0"
# PING_URL="" # PING_URL=""
# PING_URL_WHEN_STARTS=""
# PING_URL_WHEN_SUCCESS=""
# PING_URL_WHEN_ERROR=""
# MAIL_SMTP_ENABLE="FALSE" # MAIL_SMTP_ENABLE="FALSE"
# MAIL_SMTP_VARIABLES="" # MAIL_SMTP_VARIABLES=""
# MAIL_TO="" # MAIL_TO=""
+13 -1
View File
@@ -42,7 +42,7 @@ This tool supports backing up the following files or directories.
And the following ways of notifying backup results are supported. And the following ways of notifying backup results are supported.
- Ping (only send on success) - Ping (send on completion, start, success, or failure)
- Mail (SMTP based, send on success and on failure) - Mail (SMTP based, send on success and on failure)
<br> <br>
@@ -330,8 +330,20 @@ Default: `UTC`
#### PING_URL #### PING_URL
Use [healthcheck.io](https://healthchecks.io/) url or similar cron monitoring to perform `GET` requests after a backup **no matter if it succeeds or fails**.
#### PING_URL_WHEN_STARTS
Use [healthcheck.io](https://healthchecks.io/) url or similar cron monitoring to perform `GET` requests at the **beginning** of a backup.
#### PING_URL_WHEN_SUCCESS
Use [healthcheck.io](https://healthchecks.io/) url or similar cron monitoring to perform `GET` requests after a **successful** backup. Use [healthcheck.io](https://healthchecks.io/) url or similar cron monitoring to perform `GET` requests after a **successful** backup.
#### PING_URL_WHEN_ERROR
Use [healthcheck.io](https://healthchecks.io/) url or similar cron monitoring to perform `GET` requests after a backup **fails**.
#### MAIL_SMTP_ENABLE #### MAIL_SMTP_ENABLE
Starting from v1.19.0, we will be using [`s-nail`](https://www.sdaoden.eu/code-nail.html) instead of [`heirloom-mailx`](https://www.systutorials.com/docs/linux/man/1-heirloom-mailx/) to send emails. Starting from v1.19.0, we will be using [`s-nail`](https://www.sdaoden.eu/code-nail.html) instead of [`heirloom-mailx`](https://www.systutorials.com/docs/linux/man/1-heirloom-mailx/) to send emails.
+13 -1
View File
@@ -42,7 +42,7 @@
并且支持以下通知备份结果的方式。 并且支持以下通知备份结果的方式。
- Ping (仅成功时发送) - Ping (完成,开始,成功或失败时发送)
- Mail (基于 SMTP,成功时和失败时都会发送) - Mail (基于 SMTP,成功时和失败时都会发送)
<br> <br>
@@ -328,8 +328,20 @@ Rclone 全局参数,详见 [flags](https://rclone.org/flags/)。
#### PING_URL #### PING_URL
使用 [healthcheck.io](https://healthchecks.io/) 地址或者其他类似的 cron 监控,以便在备份**完成(不论成功或失败)**后执行 `GET` 请求。
#### PING_URL_WHEN_STARTS
使用 [healthcheck.io](https://healthchecks.io/) 地址或者其他类似的 cron 监控,以便在备份**开始**前执行 `GET` 请求。
#### PING_URL_WHEN_SUCCESS
使用 [healthcheck.io](https://healthchecks.io/) 地址或者其他类似的 cron 监控,以便在备份**成功**后执行 `GET` 请求。 使用 [healthcheck.io](https://healthchecks.io/) 地址或者其他类似的 cron 监控,以便在备份**成功**后执行 `GET` 请求。
#### PING_URL_WHEN_ERROR
使用 [healthcheck.io](https://healthchecks.io/) 地址或者其他类似的 cron 监控,以便在备份**失败**后执行 `GET` 请求。
#### MAIL_SMTP_ENABLE #### MAIL_SMTP_ENABLE
从 v1.19.0 开始,本工具使用 [`s-nail`](https://www.sdaoden.eu/code-nail.html) 代替 [`heirloom-mailx`](https://www.systutorials.com/docs/linux/man/1-heirloom-mailx/) 发送邮件。 从 v1.19.0 开始,本工具使用 [`s-nail`](https://www.sdaoden.eu/code-nail.html) 代替 [`heirloom-mailx`](https://www.systutorials.com/docs/linux/man/1-heirloom-mailx/) 发送邮件。
+4 -1
View File
@@ -26,7 +26,10 @@ services:
# ZIP_TYPE: 'zip' # ZIP_TYPE: 'zip'
# BACKUP_FILE_SUFFIX: '%Y%m%d' # BACKUP_FILE_SUFFIX: '%Y%m%d'
# BACKUP_KEEP_DAYS: 0 # BACKUP_KEEP_DAYS: 0
# PING_URL: '' # PING_URL=''
# PING_URL_WHEN_STARTS=''
# PING_URL_WHEN_SUCCESS=''
# PING_URL_WHEN_ERROR=''
# MAIL_SMTP_ENABLE: 'FALSE' # MAIL_SMTP_ENABLE: 'FALSE'
# MAIL_SMTP_VARIABLES: '' # MAIL_SMTP_VARIABLES: ''
# MAIL_TO: '' # MAIL_TO: ''
+13 -1
View File
@@ -43,6 +43,8 @@ function backup_db_postgresql() {
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
color red "backup vaultwarden postgresql database failed" color red "backup vaultwarden postgresql database failed"
send_ping "${PING_URL_WHEN_ERROR}" "error"
send_ping "${PING_URL}" "completion"
send_mail_content "FALSE" "Backup failed at $(date +"%Y-%m-%d %H:%M:%S %Z"). Reason: Backup postgresql database failed." send_mail_content "FALSE" "Backup failed at $(date +"%Y-%m-%d %H:%M:%S %Z"). Reason: Backup postgresql database failed."
exit 1 exit 1
@@ -56,6 +58,8 @@ function backup_db_mysql() {
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
color red "backup vaultwarden mysql database failed" color red "backup vaultwarden mysql database failed"
send_ping "${PING_URL_WHEN_ERROR}" "error"
send_ping "${PING_URL}" "completion"
send_mail_content "FALSE" "Backup failed at $(date +"%Y-%m-%d %H:%M:%S %Z"). Reason: Backup mysql database failed." send_mail_content "FALSE" "Backup failed at $(date +"%Y-%m-%d %H:%M:%S %Z"). Reason: Backup mysql database failed."
exit 1 exit 1
@@ -163,6 +167,8 @@ function upload() {
if [[ ! -e "${UPLOAD_FILE}" ]]; then if [[ ! -e "${UPLOAD_FILE}" ]]; then
color red "upload file not found" color red "upload file not found"
send_ping "${PING_URL_WHEN_ERROR}" "error"
send_ping "${PING_URL}" "completion"
send_mail_content "FALSE" "File upload failed at $(date +"%Y-%m-%d %H:%M:%S %Z"). Reason: Upload file not found." send_mail_content "FALSE" "File upload failed at $(date +"%Y-%m-%d %H:%M:%S %Z"). Reason: Upload file not found."
exit 1 exit 1
@@ -184,6 +190,8 @@ function upload() {
done done
if [[ "${HAS_ERROR}" == "TRUE" ]]; then if [[ "${HAS_ERROR}" == "TRUE" ]]; then
send_ping "${PING_URL_WHEN_ERROR}" "error"
send_ping "${PING_URL}" "completion"
send_mail_content "FALSE" "File upload failed at $(date +"%Y-%m-%d %H:%M:%S %Z")." send_mail_content "FALSE" "File upload failed at $(date +"%Y-%m-%d %H:%M:%S %Z")."
exit 1 exit 1
@@ -214,6 +222,9 @@ function clear_history() {
color blue "running the backup program at $(date +"%Y-%m-%d %H:%M:%S %Z")" color blue "running the backup program at $(date +"%Y-%m-%d %H:%M:%S %Z")"
init_env init_env
send_ping "${PING_URL_WHEN_STARTS}" "start"
check_rclone_connection check_rclone_connection
clear_dir clear_dir
@@ -225,6 +236,7 @@ clear_dir
clear_history clear_history
send_mail_content "TRUE" "The file was successfully uploaded at $(date +"%Y-%m-%d %H:%M:%S %Z")." send_mail_content "TRUE" "The file was successfully uploaded at $(date +"%Y-%m-%d %H:%M:%S %Z")."
send_ping send_ping "${PING_URL}" "completion"
send_ping "${PING_URL_WHEN_SUCCESS}" "success"
color none "" color none ""
+34 -9
View File
@@ -127,18 +127,19 @@ function send_mail_content() {
######################################## ########################################
# Send health check ping. # Send health check ping.
# Arguments: # Arguments:
# None # url
# ping name
######################################## ########################################
function send_ping() { function send_ping() {
if [[ -z "${PING_URL}" ]]; then if [[ -z "${1}" ]]; then
return return
fi fi
wget "${PING_URL}" -T 15 -t 10 -O /dev/null -q wget "${1}" -T 15 -t 10 -O /dev/null -q
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
color red "ping sending failed" color red "${2} ping sending failed"
else else
color blue "ping send was successfully" color blue "${2} ping send was successfully"
fi fi
} }
@@ -250,6 +251,7 @@ function init_env() {
init_env_dir init_env_dir
init_env_db init_env_db
init_env_ping
init_env_mail init_env_mail
# CRON # CRON
@@ -304,10 +306,6 @@ function init_env() {
BACKUP_FILE_DATE="$(echo "${BACKUP_FILE_DATE:-"%Y%m%d"}${BACKUP_FILE_DATE_SUFFIX}" | sed 's/[^0-9a-zA-Z%_-]//g')" BACKUP_FILE_DATE="$(echo "${BACKUP_FILE_DATE:-"%Y%m%d"}${BACKUP_FILE_DATE_SUFFIX}" | sed 's/[^0-9a-zA-Z%_-]//g')"
BACKUP_FILE_DATE_FORMAT="$(echo "${BACKUP_FILE_SUFFIX:-"${BACKUP_FILE_DATE}"}" | sed 's/\///g')" BACKUP_FILE_DATE_FORMAT="$(echo "${BACKUP_FILE_SUFFIX:-"${BACKUP_FILE_DATE}"}" | sed 's/\///g')"
# PING_URL
get_env PING_URL
PING_URL="${PING_URL:-""}"
# TIMEZONE # TIMEZONE
get_env TIMEZONE get_env TIMEZONE
local TIMEZONE_MATCHED_COUNT=$(ls "/usr/share/zoneinfo/${TIMEZONE}" 2> /dev/null | wc -l) local TIMEZONE_MATCHED_COUNT=$(ls "/usr/share/zoneinfo/${TIMEZONE}" 2> /dev/null | wc -l)
@@ -349,6 +347,15 @@ function init_env() {
if [[ -n "${PING_URL}" ]]; then if [[ -n "${PING_URL}" ]]; then
color yellow "PING_URL: ${PING_URL}" color yellow "PING_URL: ${PING_URL}"
fi fi
if [[ -n "${PING_URL_WHEN_STARTS}" ]]; then
color yellow "PING_URL_WHEN_STARTS: ${PING_URL_WHEN_STARTS}"
fi
if [[ -n "${PING_URL_WHEN_SUCCESS}" ]]; then
color yellow "PING_URL_WHEN_SUCCESS: ${PING_URL_WHEN_SUCCESS}"
fi
if [[ -n "${PING_URL_WHEN_ERROR}" ]]; then
color yellow "PING_URL_WHEN_ERROR: ${PING_URL_WHEN_ERROR}"
fi
color yellow "MAIL_SMTP_ENABLE: ${MAIL_SMTP_ENABLE}" color yellow "MAIL_SMTP_ENABLE: ${MAIL_SMTP_ENABLE}"
if [[ "${MAIL_SMTP_ENABLE}" == "TRUE" ]]; then if [[ "${MAIL_SMTP_ENABLE}" == "TRUE" ]]; then
color yellow "MAIL_TO: ${MAIL_TO}" color yellow "MAIL_TO: ${MAIL_TO}"
@@ -440,6 +447,24 @@ function init_env_db() {
fi fi
} }
function init_env_ping() {
# PING_URL
get_env PING_URL
PING_URL="${PING_URL:-""}"
# PING_URL_WHEN_STARTS
get_env PING_URL_WHEN_STARTS
PING_URL_WHEN_STARTS="${PING_URL_WHEN_STARTS:-""}"
# PING_URL_WHEN_SUCCESS
get_env PING_URL_WHEN_SUCCESS
PING_URL_WHEN_SUCCESS="${PING_URL_WHEN_SUCCESS:-""}"
# PING_URL_WHEN_ERROR
get_env PING_URL_WHEN_ERROR
PING_URL_WHEN_ERROR="${PING_URL_WHEN_ERROR:-""}"
}
function init_env_mail() { function init_env_mail() {
# MAIL_SMTP_ENABLE # MAIL_SMTP_ENABLE
# MAIL_TO # MAIL_TO