#!/bin/sh

set -e 

export CONF_DIR=/tmp/conf  

export BASEDIR=/tmp/pgtest
export PGDATA=${BASEDIR}/data
export     LOG_DIR=${PGDATA}/pg_log
export ARCHIVE_DIR=${BASEDIR}/archive 
export BACKUP_DIR=${BASEDIR}/backups 

function fix_config {
	echo "Fixing configuration ${PGDATA}/*"
	echo "max_wal_senders = 3" >> ${PGDATA}/postgresql.conf
	echo "archive_mode = on" >> ${PGDATA}/postgresql.conf
	echo "wal_level = archive" >> ${PGDATA}/postgresql.conf
	echo "archive_command = 'test ! -f ${ARCHIVE_DIR}/%f && cp %p ${ARCHIVE_DIR}/%f'" >> ${PGDATA}/postgresql.conf

	echo >> ${PGDATA}/recovery.conf
	echo "recovery_target_timeline='latest'" >> ${PGDATA}/recovery.conf
	echo "restore_command='cp -i ${BACKUP_DIR}/%f %p'" >> ${PGDATA}/recovery.conf

	echo >> ${PGDATA}/pg_hba.conf
	echo "local   all             all      trust" >> ${PGDATA}/pg_hba.conf
	echo "local   replication     postgres trust" >> ${PGDATA}/pg_hba.conf

}

function tail_of_log {
	echo -e "\n>>>==========LOG==========="
	tail -n 15 ${LOG_DIR}/*.log
	echo -e   "<<<==========LOG===========\n"
}

cd $HOME

# sudo chown postgres:postgres -R pgtest /tmp/conf
pg_ctl stop  2>&1 > /dev/null || true # stop any running server

rm -Rf ${BASEDIR}
rm -Rf ${BACKUP_DIR}/*
rm -Rf ${ARCHIVE_DIR}/*

mkdir -p ${BASEDIR} 
mkdir -p ${ARCHIVE_DIR} 
# mkdir -p ${CONF_DIR} 
mkdir -p ${BACKUP_DIR} 

chmod 700 -R ${BASEDIR}
chmod 700 -R ${ARCHIVE_DIR}
chmod 700 -R ${CONF_DIR}
chmod 700 -R ${BACKUP_DIR} 
 
rm -Rf ${PGDATA}
initdb -A trust -D ${PGDATA}   2>&1 > /dev/null
cp ${CONF_DIR}/*.conf ${PGDATA}
fix_config
rm ${PGDATA}/recovery.conf 
  
pg_ctl start  
sleep 3
tail_of_log
psql -c 'create table foo as select generate_series(1,1000) as id'

echo "Making backup..."
mkdir -p ${BACKUP_DIR}
pg_basebackup -D ${BACKUP_DIR} -p 5432 --format=t -x
ls -l ${BACKUP_DIR}
sleep 3
 
pg_ctl stop -m smart
echo "Check archive (after #1 stop) ..."
ls -l ${ARCHIVE_DIR}/*

# create new server
echo "Bringing up 2d server..."
rm -Rf ${PGDATA}/* 
cd ${PGDATA} && tar xvf ${BACKUP_DIR}/base.tar 2>&1 > /dev/null
cp ${CONF_DIR}/*.conf ${PGDATA};
fix_config

pg_ctl start  
sleep 3
tail  ${LOG_DIR}/*.log
pg_ctl stop -m smart

echo "Check archive (after #2 stop) ..."
ls -l ${ARCHIVE_DIR}/*

echo "Bringing up 3d server..."
rm -Rf ${PGDATA}/* 
cd ${PGDATA} && tar xvf ${BACKUP_DIR}/base.tar 2>&1 > /dev/null
cp ${CONF_DIR}/*.conf ${PGDATA};
fix_config

pg_ctl start 
sleep 3
tail_of_log
echo "Check archive (after #3 start) ..."
ls -l ${ARCHIVE_DIR}/*
pg_ctl stop -m smart

 
cd #PGDATA
