Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add granular webhooks #152

Merged
merged 6 commits into from
Jun 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ Most variables are the same as in the [official postgres image](https://hub.dock
| SCHEDULE | [Cron-schedule](http://godoc.org/github.com/robfig/cron#hdr-Predefined_schedules) specifying the interval between postgres backups. Defaults to `@daily`. |
| TZ | [POSIX TZ variable](https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html) specifying the timezone used to evaluate SCHEDULE cron (example "Europe/Paris"). |
| WEBHOOK_URL | URL to be called after an error or after a successful backup (POST with a JSON payload, check `hooks/00-webhook` file for more info). Default disabled. |
| WEBHOOK_ERROR_URL | URL to be called in case backup fails. Default disabled. |
| WEBHOOK_PRE_BACKUP_URL | URL to be called when backup starts. Default disabled. |
| WEBHOOK_POST_BACKUP_URL | URL to be called when backup completes successfully. Default disabled. |
| WEBHOOK_EXTRA_ARGS | Extra arguments for the `curl` execution in the webhook (check `hooks/00-webhook` file for more info). |

#### Special Environment Variables
Expand Down
3 changes: 3 additions & 0 deletions alpine.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ ENV POSTGRES_DB="**None**" \
BACKUP_KEEP_MINS=1440 \
HEALTHCHECK_PORT=8080 \
WEBHOOK_URL="**None**" \
WEBHOOK_ERROR_URL="**None**" \
WEBHOOK_PRE_BACKUP_URL="**None**" \
WEBHOOK_POST_BACKUP_URL="**None**" \
WEBHOOK_EXTRA_ARGS=""

COPY hooks /hooks
Expand Down
3 changes: 3 additions & 0 deletions debian.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ ENV POSTGRES_DB="**None**" \
BACKUP_KEEP_MINS=1440 \
HEALTHCHECK_PORT=8080 \
WEBHOOK_URL="**None**" \
WEBHOOK_ERROR_URL="**None**" \
WEBHOOK_PRE_BACKUP_URL="**None**" \
WEBHOOK_POST_BACKUP_URL="**None**" \
WEBHOOK_EXTRA_ARGS=""

COPY hooks /hooks
Expand Down
55 changes: 44 additions & 11 deletions hooks/00-webhook
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ set -e
# Possible actions: error, pre-backup, post-backup
ACTION="${1}"

if [ "${WEBHOOK_URL}" != "**None**" ]; then
case "${ACTION}" in
"error")
case "${ACTION}" in
"error")
if [ "${WEBHOOK_URL}" != "**None**" ]; then
echo "Execute error webhook call to ${WEBHOOK_URL}"
curl --request POST \
--url "${WEBHOOK_URL}" \
Expand All @@ -16,11 +16,34 @@ if [ "${WEBHOOK_URL}" != "**None**" ]; then
--max-time 10 \
--retry 5 \
${WEBHOOK_EXTRA_ARGS}
;;
# "pre-backup")
# echo "Nothing to do"
# ;;
"post-backup")
fi
if [ "${WEBHOOK_ERROR_URL}" != "**None**" ]; then
echo "Execute error webhook call to ${WEBHOOK_ERROR_URL}"
curl --request POST \
--url "${WEBHOOK_ERROR_URL}" \
--header 'Content-Type: application/json' \
--data '{"status": "error"}' \
--max-time 10 \
--retry 5 \
${WEBHOOK_EXTRA_ARGS}
fi
;;

"pre-backup")
if [ "${WEBHOOK_PRE_BACKUP_URL}" != "**None**" ]; then
echo "Execute pre-backup webhook call to ${WEBHOOK_PRE_BACKUP_URL}"
curl --request POST \
--url "${WEBHOOK_PRE_BACKUP_URL}" \
--header 'Content-Type: application/json' \
--data '{"status": "pre-backup"}' \
--max-time 10 \
--retry 5 \
${WEBHOOK_EXTRA_ARGS}
fi
;;

"post-backup")
if [ "${WEBHOOK_URL}" != "**None**" ]; then
echo "Execute post-backup webhook call to ${WEBHOOK_URL}"
curl --request POST \
--url "${WEBHOOK_URL}" \
Expand All @@ -29,6 +52,16 @@ if [ "${WEBHOOK_URL}" != "**None**" ]; then
--max-time 10 \
--retry 5 \
${WEBHOOK_EXTRA_ARGS}
;;
esac
fi
fi
if [ "${WEBHOOK_POST_BACKUP_URL}" != "**None**" ]; then
echo "Execute post-backup webhook call to ${WEBHOOK_POST_BACKUP_URL}"
curl --request POST \
--url "${WEBHOOK_POST_BACKUP_URL}" \
--header 'Content-Type: application/json' \
--data '{"status": "post-backup"}' \
--max-time 10 \
--retry 5 \
${WEBHOOK_EXTRA_ARGS}
fi
;;
esac
Loading