#!/bin/bash

BKP_DIR="/var/backups/ee-mmo-backup/psql"
DATE=$(date +%Y%m%d-%H%M)
DB_EXCL="template0"
BKP_MIN=720
MSG=

# pre
systemctl -q is-enabled postgresql 2>/dev/null || { echo postgresql removed or disabled; exit 0; }
systemctl -q is-active postgresql || { echo FIXME : postgresql not running; exit 1; }

# checks
[ $EUID -eq 0 ] || { echo Must be launched by root; exit 1; }
mkdir -p -m 750 $BKP_DIR || { echo Unable to mkdir $BKP_DIR; exit 1; }
ln -sf $BKP_DIR /var/backups || { echo Unable to symlink $BKP_DIR in /var/backups; exit 1; }
chown postgres: $BKP_DIR || { echo Unable to chown postgres: $BKP_DIR; exit 1; }
cd $BKP_DIR || { echo Unable to cd in $BKP_DIR; exit 1; }

# roles
su - postgres -c "/usr/bin/pg_dumpall -g > $BKP_DIR/globals.sql" || MSG="$MSG\nUnable to dump roles and tablespaces"

# dumps
DB_LIST=$(su postgres -c 'psql -lt') || { echo Unable to retrieve db list; exit 1; }
DB_LIST=$(echo "$DB_LIST" | sed 's/^\s//' | grep -Ev "^\s|^$" | awk '{print $1}')
[ -z "$DB_LIST" ] && { echo DB_LIST empty; exit 1; }

for db in $DB_LIST
do
	no=0
	for nodb in $DB_EXCL
	do
	  [[ $db == $nodb ]] && no=1
	done
	[[ $no == 1 ]] && continue

	su postgres -c "/usr/bin/pg_dump -Fc $db -f $BKP_DIR/$db-${DATE}.dump" || MSG="$MSG\nUnable to dump DB $db"
done

# cleanup
find -maxdepth 1 -mmin +$BKP_MIN -type f -delete || MSG="$MSG\nUnable to purge old dumps"

# output
[ -z "$MSG" ] || { echo -e "$MSG"; exit 1; }
