@@ -31,6 +31,111 @@ source $HESTIA/func/backup.sh
3131# shellcheck source=/usr/local/hestia/conf/hestia.conf
3232source $HESTIA /conf/hestia.conf
3333
34+ # Return Disk Usage
35+ get_user_disk_usage () {
36+ u_usage=0
37+ web_exclusions=' '
38+ mail_exclusions=' '
39+ db_exclusions=' '
40+ user_exclusions=' '
41+
42+ # Parsing excludes
43+ if [ -e " $USER_DATA /backup-excludes.conf" ]; then
44+ web_exclusions=$( grep ' WEB=' $USER_DATA /backup-excludes.conf | \
45+ awk -F " WEB='" ' {print $2}' | cut -f 1 -d \' )
46+ mail_exclusions=$( grep ' MAIL=' $USER_DATA /backup-excludes.conf | \
47+ awk -F " MAIL='" ' {print $2}' | cut -f 1 -d \' )
48+ db_exclusions=$( grep ' DB=' $USER_DATA /backup-excludes.conf | \
49+ awk -F " DB='" ' {print $2}' | cut -f 1 -d \' )
50+ user_exclusions=$( grep ' USER=' $USER_DATA /backup-excludes.conf | \
51+ awk -F " USER='" ' {print $2}' | cut -f 1 -d \' )
52+ fi
53+
54+ if [ -f " $USER_DATA /web.conf" ] && [ " $web_exclusions " != ' *' ]; then
55+ usage=0
56+ domains=$( grep ' DOMAIN=' $USER_DATA /web.conf | \
57+ awk -F " DOMAIN='" ' {print $2}' | cut -f 1 -d \' )
58+
59+ for domain in $domains ; do
60+ exclusion=$( echo -e " $web_exclusions " | tr ' ,' ' \n' | grep " ^$domain $" )
61+ if [ -z " $exclusion " ]; then
62+ # Defining home directory
63+ home_dir=" $HOMEDIR /$user /web/$domain /"
64+ exlusion=$( echo -e " $web_exclusions " | tr ' ,' ' \n' | grep " ^$domain :" )
65+ fargs=()
66+
67+ if [ ! -z " $exlusion " ]; then
68+ xdirs=" $( echo -e " $exlusion " | tr ' :' ' \n' | grep -v $domain ) "
69+ for xpath in $xdirs ; do
70+ fargs+=(--exclude=$xpath )
71+ done
72+ fi
73+
74+ # Checking home directory exist
75+ if [ -e " $home_dir " ]; then
76+ disk_usage=$( nice -n 19 du -shm $home_dir ${fargs[@]} | cut -f 1 )
77+ u_usage=$(( u_usage + disk_usage))
78+ fi
79+ fi
80+ done
81+ fi
82+
83+ if [ -f " $USER_DATA /mail.conf" ] && [ " $mail_exclusions " != ' *' ]; then
84+ usage=0
85+ domains=$( grep ' DOMAIN=' $USER_DATA /mail.conf | \
86+ awk -F " DOMAIN='" ' {print $2}' | cut -f 1 -d \' )
87+
88+ for domain in $domains ; do
89+ check_exl=$( echo " $mail_exclusions " | tr ' ,' ' \n' | grep " ^$domain $" )
90+ if [ -f " $USER_DATA /mail/$domain .conf" ] && [ -z " $check_exl " ]; then
91+ accounts=$( grep ' ACCOUNT=' $USER_DATA /mail/$domain .conf | \
92+ awk -F " ACCOUNT='" ' {print $2}' | cut -f 1 -d \' )
93+
94+ for account in $accounts ; do
95+ home_dir=$HOMEDIR /$user /mail/$domain /$account
96+ exclusion=$( echo " $mail_exclusions " | tr ' ,' ' \n' | grep " $domain :" )
97+ exclusion=$( echo " $exclusion " | tr ' :' ' \n' | grep -E " ^$account |\*" )
98+
99+ if [ -z " $exclusion " ] && [ -e " $home_dir " ]; then
100+ disk_usage=$( nice -n 19 du -shm $home_dir | cut -f 1 )
101+ u_usage=$(( u_usage + disk_usage))
102+ fi
103+ done
104+ fi
105+ done
106+ fi
107+
108+ if [ -f " $USER_DATA /db.conf" ] && [ " $db_exclusions " != ' *' ]; then
109+ usage=0
110+ databases=$( grep ' DB=' $USER_DATA /db.conf | \
111+ awk -F " DB='" ' {print $2}' | cut -f 1 -d \' )
112+ for database in $databases ; do
113+ exclusion=$( echo " $db_exclusions " | tr ' ,' ' \n' | grep " ^$database $" )
114+ if [ -z " $exclusion " ]; then
115+ # Get database values
116+ get_database_values
117+
118+ # Switching on db type
119+ case $DB_SYSTEM in
120+ mysql) get_mysql_disk_usage ;;
121+ pgsql) get_pgsql_disk_usage ;;
122+ esac
123+ u_usage=$(( u_usage + usage))
124+ fi
125+ done
126+ fi
127+
128+ if [ " $user_exclusions " != ' *' ]; then
129+ fargs=()
130+ for xpath in $( echo " $user_exclusions " | tr ' ,' ' \n' ) ; do
131+ fargs+=(--exclude=$xpath )
132+ done
133+ usage=$( du -shm $HOMEDIR /$user --exclude $HOMEDIR /$user /web --exclude $HOMEDIR /$user /mail --exclude $HOMEDIR /$user /conf ${fargs[@]} | cut -f 1 )
134+ u_usage=$(( u_usage + usage))
135+ fi
136+
137+ echo ${u_usage}
138+ }
34139
35140# ----------------------------------------------------------#
36141# Verifications #
@@ -73,7 +178,7 @@ subj="$user → backup failed"
73178email=$( grep CONTACT $HESTIA /data/users/admin/user.conf | cut -f 2 -d \' )
74179
75180# Validate available disk space (take usage * 2, due to the backup handling)
76- let u_disk=$( grep " U_DISK= " $HESTIA /data/users/ $user /user.conf | cut -f 2 -d \' ) * 2
181+ let u_disk=$(( $(get_user_disk_usage) * 2 ))
77182let v_disk=$(( $(stat - f -- format= "% a*% S" $BACKUP )) )/1024/1024
78183
79184if [ " $u_disk " -gt " $v_disk " ]; then
0 commit comments