2
2
3
3
# Initialize logging with timestamp
4
4
log () {
5
- local level=" ${1 :- INFO} "
6
- local message=" $2 "
7
- echo " [$( date ' +%Y-%m-%d %H:%M:%S' ) ] ${level} : ${message} "
5
+ local level=" $1 " ;
6
+ local message=" $2 " ;
7
+ echo " [$( date ' +%Y-%m-%d %H:%M:%S' ) ] ${level} : ${message} " ;
8
8
}
9
9
10
10
# Sentry reporting with validation and backwards compatibility
11
11
error_to_sentry () {
12
- local error_message=" $1 "
13
- local db_name=" $2 "
14
- local status_code=" $3 "
12
+ local error_message=" $1 " ;
13
+ local db_name=" $2 " ;
14
+ local status_code=" $3 " ;
15
15
16
16
# Check if SENTRY_DSN is configured - ensures backup continues
17
17
if [ -z " ${SENTRY_DSN:- } " ]; then
18
- log " DEBUG" " Sentry logging skipped - SENTRY_DSN not configured"
19
- return 0
18
+ log " DEBUG" " Sentry logging skipped - SENTRY_DSN not configured" ;
19
+ return 0;
20
20
fi
21
21
22
22
# Validate SENTRY_DSN format
23
23
if ! [[ " ${SENTRY_DSN} " =~ ^https://[^@]+@[^/]+/[0-9]+$ ]]; then
24
- log " WARN" " Invalid SENTRY_DSN format - Sentry logging will be skipped"
25
- return 0
24
+ log " WARN" " Invalid SENTRY_DSN format - Sentry logging will be skipped" ;
25
+ return 0;
26
26
fi
27
27
28
28
# Attempt to send event to Sentry
@@ -31,84 +31,83 @@ error_to_sentry() {
31
31
--level error \
32
32
--tag " database:${db_name} " \
33
33
--tag " status:${status_code} " ; then
34
- log " DEBUG" " Successfully sent error to Sentry - Message: ${error_message} , Database: ${db_name} , Status: ${status_code} "
34
+ log " DEBUG" " Successfully sent error to Sentry - Message: ${error_message} , Database: ${db_name} , Status: ${status_code} " ;
35
35
else
36
- log " WARN" " Failed to send error to Sentry, but continuing backup process"
36
+ log " WARN" " Failed to send error to Sentry, but continuing backup process" ;
37
37
fi
38
38
39
- return 0
39
+ return 0;
40
40
}
41
41
42
- MYNAME=" postgresql-backup-restore"
43
- STATUS=0
42
+ MYNAME=" postgresql-backup-restore" ;
43
+ STATUS=0;
44
44
45
- log " ${MYNAME} : backup: Started"
45
+ log " INFO" " ${MYNAME} : backup: Started" ;
46
+ log " INFO" " ${MYNAME} : Backing up ${DB_NAME} " ;
46
47
47
- log " ${MYNAME} : Backing up ${DB_NAME} "
48
-
49
- start=$( date +%s)
50
- $( PGPASSWORD=${DB_USERPASSWORD} pg_dump --host=${DB_HOST} --username=${DB_USER} --create --clean ${DB_OPTIONS} --dbname=${DB_NAME} > /tmp/${DB_NAME} .sql) || STATUS=$?
51
- end=$( date +%s)
48
+ start=$( date +%s) ;
49
+ $( PGPASSWORD=${DB_USERPASSWORD} pg_dump --host=${DB_HOST} --username=${DB_USER} --create --clean ${DB_OPTIONS} --dbname=${DB_NAME} > /tmp/${DB_NAME} .sql) || STATUS=$? ;
50
+ end=$( date +%s) ;
52
51
53
52
if [ $STATUS -ne 0 ]; then
54
- error_message=" ${MYNAME} : FATAL: Backup of ${DB_NAME} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds."
55
- log " ${error_message} "
56
- error_to_sentry " ${error_message} " " ${DB_NAME} " " ${STATUS} "
57
- exit $STATUS
53
+ error_message=" ${MYNAME} : FATAL: Backup of ${DB_NAME} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds." ;
54
+ log " ERROR " " ${error_message} " ;
55
+ error_to_sentry " ${error_message} " " ${DB_NAME} " " ${STATUS} " ;
56
+ exit $STATUS ;
58
57
else
59
- log " ${MYNAME} : Backup of ${DB_NAME} completed in $( expr ${end} - ${start} ) seconds, ($( stat -c %s /tmp/${DB_NAME} .sql) bytes)."
58
+ log " INFO " " ${MYNAME} : Backup of ${DB_NAME} completed in $( expr ${end} - ${start} ) seconds, ($( stat -c %s /tmp/${DB_NAME} .sql) bytes)." ;
60
59
fi
61
60
62
61
# Compression
63
- start=$( date +%s)
64
- gzip -f /tmp/${DB_NAME} .sql || STATUS=$?
65
- end=$( date +%s)
62
+ start=$( date +%s) ;
63
+ gzip -f /tmp/${DB_NAME} .sql || STATUS=$? ;
64
+ end=$( date +%s) ;
66
65
67
66
if [ $STATUS -ne 0 ]; then
68
- error_message=" ${MYNAME} : FATAL: Compressing backup of ${DB_NAME} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds."
69
- log " ${error_message} "
70
- error_to_sentry " ${error_message} " " ${DB_NAME} " " ${STATUS} "
71
- exit $STATUS
67
+ error_message=" ${MYNAME} : FATAL: Compressing backup of ${DB_NAME} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds." ;
68
+ log " ERROR " " ${error_message} " ;
69
+ error_to_sentry " ${error_message} " " ${DB_NAME} " " ${STATUS} " ;
70
+ exit $STATUS ;
72
71
else
73
- log " ${MYNAME} : Compressing backup of ${DB_NAME} completed in $( expr ${end} - ${start} ) seconds."
72
+ log " INFO " " ${MYNAME} : Compressing backup of ${DB_NAME} completed in $( expr ${end} - ${start} ) seconds." ;
74
73
fi
75
74
76
75
# S3 Upload
77
- start=$( date +%s)
78
- s3cmd put /tmp/${DB_NAME} .sql.gz ${S3_BUCKET} || STATUS=$?
79
- end=$( date +%s)
76
+ start=$( date +%s) ;
77
+ s3cmd put /tmp/${DB_NAME} .sql.gz ${S3_BUCKET} || STATUS=$? ;
78
+ end=$( date +%s) ;
80
79
if [ $STATUS -ne 0 ]; then
81
- error_message=" ${MYNAME} : FATAL: Copy backup to ${S3_BUCKET} of ${DB_NAME} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds."
82
- log " ${error_message} "
83
- error_to_sentry " ${error_message} " " ${DB_NAME} " " ${STATUS} "
84
- exit $STATUS
80
+ error_message=" ${MYNAME} : FATAL: Copy backup to ${S3_BUCKET} of ${DB_NAME} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds." ;
81
+ log " ERROR " " ${error_message} " ;
82
+ error_to_sentry " ${error_message} " " ${DB_NAME} " " ${STATUS} " ;
83
+ exit $STATUS ;
85
84
else
86
- log " ${MYNAME} : Copy backup to ${S3_BUCKET} of ${DB_NAME} completed in $( expr ${end} - ${start} ) seconds."
85
+ log " INFO " " ${MYNAME} : Copy backup to ${S3_BUCKET} of ${DB_NAME} completed in $( expr ${end} - ${start} ) seconds." ;
87
86
fi
88
87
89
88
# Backblaze B2 Upload
90
89
if [ " ${B2_BUCKET} " != " " ]; then
91
- start=$( date +%s)
90
+ start=$( date +%s) ;
92
91
s3cmd \
93
- --access_key=${B2_APPLICATION_KEY_ID} \
94
- --secret_key=${B2_APPLICATION_KEY} \
95
- --host=${B2_HOST} \
96
- --host-bucket=' %(bucket)s.' " ${B2_HOST} " \
97
- put /tmp/${DB_NAME} .sql.gz s3://${B2_BUCKET} /${DB_NAME} .sql.gz
98
- STATUS=$?
99
- end=$( date +%s)
92
+ --access_key=${B2_APPLICATION_KEY_ID} \
93
+ --secret_key=${B2_APPLICATION_KEY} \
94
+ --host=${B2_HOST} \
95
+ --host-bucket=' %(bucket)s.' " ${B2_HOST} " \
96
+ put /tmp/${DB_NAME} .sql.gz s3://${B2_BUCKET} /${DB_NAME} .sql.gz;
97
+ STATUS=$? ;
98
+ end=$( date +%s) ;
100
99
if [ $STATUS -ne 0 ]; then
101
- error_message=" ${MYNAME} : FATAL: Copy backup to Backblaze B2 bucket ${B2_BUCKET} of ${DB_NAME} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds."
102
- log " ${error_message} "
103
- error_to_sentry " ${error_message} " " ${DB_NAME} " " ${STATUS} "
104
- exit $STATUS
100
+ error_message=" ${MYNAME} : FATAL: Copy backup to Backblaze B2 bucket ${B2_BUCKET} of ${DB_NAME} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds." ;
101
+ log " ERROR " " ${error_message} " ;
102
+ error_to_sentry " ${error_message} " " ${DB_NAME} " " ${STATUS} " ;
103
+ exit $STATUS ;
105
104
else
106
- log " ${MYNAME} : Copy backup to Backblaze B2 bucket ${B2_BUCKET} of ${DB_NAME} completed in $( expr ${end} - ${start} ) seconds."
105
+ log " INFO " " ${MYNAME} : Copy backup to Backblaze B2 bucket ${B2_BUCKET} of ${DB_NAME} completed in $( expr ${end} - ${start} ) seconds." ;
107
106
fi
108
107
fi
109
108
110
- echo " postgresql-backup-restore: backup: Completed"
109
+ echo " postgresql-backup-restore: backup: Completed" ;
111
110
112
- log " ${MYNAME} : backup: Completed"
111
+ log " INFO " " ${MYNAME} : backup: Completed" ;
113
112
114
- exit $STATUS
113
+ exit $STATUS ;
0 commit comments