#!/bin/bash 

#
# Сценарий создает резервную копию базы данных AisExpert
# http://www.ibase.ru/gbak/
#

set -e

# Директория расположения БД
database_dir=/var/opt/aisexpert/database

# Имя БД
database_name=aisexpert.fdb

# Директория расположения резервных копий БД
backup_dir=/var/opt/aisexpert/database-backup

# Максимально количество резервных копий БД
cnt_max=15

database_name_short=${database_name%.fdb}
#echo $database_name_short
#exit 1

if [ "$(id -u)" -ne 0 ]; then
    echo "Error: Script must be running with root privileges"
    exit 1
fi

function print_log()
{
    echo "[$(date '+%Y.%m.%d %H.%M.%S')] $1" >> /var/opt/aisexpert/log/database-backup.log
}

dtime="$(date +%Y.%m.%d_%H.%M.%S)_$RANDOM"
fdb_file=$database_dir/$database_name
fbk_file=$backup_dir/${database_name_short}_$dtime.fbk
log_file=$backup_dir/${database_name_short}_$dtime.log
gbak_utl=/opt/firebird/bin/gbak

print_log "---"
print_log "Begin database backup"

if [ ! -e $fdb_file ]; then
    print_log "Error: Database file $fdb_file not found"
    exit 1
fi

if [ ! -e $gbak_utl ]; then
    print_log "Error: Backup utility $gbak_utl not found"
    exit 1
fi

mkdir -p $backup_dir

$gbak_utl -b -g $fdb_file $fbk_file -v -y $log_file -user SYSDBA -pass masterkey
chown :firebird $fbk_file

cd $backup_dir

print_log "End database backup"
print_log "Created backup: $fbk_file"

print_log "Archiving backup"
pixz -p4 $fbk_file 
print_log "Created archive: $fbk_file.xz"

function remove_old_files()
{
    local cnt=0
    for f in $(ls -1 ${database_name_short}_*.$1 | sort -r); do
        cnt=$(($cnt + 1))
        #echo $f
        #echo $cnt
        [ "$cnt" -gt "$cnt_max" ] && rm $f
    done 
}    

remove_old_files "fbk"
remove_old_files "log"
remove_old_files "xz"
