#!/bin/bash

# Variables
DATE=`date +%F`
TIME=`date +%H%M`
BACKUPDIR=/backup
SEAFDIR=/home/sea
BACKUPFILE=$BACKUPDIR/seafile-$DATE-$TIME.tar
TEMPDIR=/tmp/seafile-$DATE-$TIME

# Shutdown seafile
$SEAFDIR/seafile-server-latest/seahub.sh stop
$SEAFDIR/seafile-server-latest/seafile.sh stop

# Create directories
if [ ! -d $BACKUPDIR ]
  then
  echo Creating Backupdirectory $BACKUPDIR...
  mkdir -pm 0600 $BACKUPDIR
fi
if [ ! -d $TEMPDIR ]
  then
  echo Create temporary directory $TEMPDIR...
  mkdir -pm 0600 $TEMPDIR
  mkdir -m 0600 $TEMPDIR/databases
  mkdir -m 0600 $TEMPDIR/data
fi

# Dump data / copy data
echo Dumping GroupMgr database...
sqlite3 $SEAFDIR/ccnet/GroupMgr/groupmgr.db .dump > $TEMPDIR/databases/groupmgr.db.bak
if [ -e $TEMPDIR/databases/groupmgr.db.bak ]; then echo ok.; else echo ERROR.; fi
echo Dumping UserMgr database...
sqlite3 $SEAFDIR/ccnet/PeerMgr/usermgr.db .dump > $TEMPDIR/databases/usermgr.db.bak
if [ -e $TEMPDIR/databases/usermgr.db.bak ]; then echo ok.; else echo ERROR.; fi
echo Dumping SeaFile database...
sqlite3 $SEAFDIR/seafile-data/seafile.sb .dump > $TEMPDIR/databases/seafile.db.bak
if [ -e $TEMPDIR/databases/seafile.db.bak ]; then echo ok.; else echo ERROR.; fi
echo Dumping SeaHub database...
sqlite3 $SEAFDIR/seahub.db .dump > $TEMPDIR/databases/seahub.db.bak
if [ -e $TEMPDIR/databases/seahub.db.bak ]; then echo ok.; else echo ERROR.; fi

echo Copying seafile directory...
rsync -az $SEAFDIR/* $TEMPDIR/data
if [ -d $TEMPDIR/data/seafile-data ]; then echo ok.; else echo ERROR.; fi

# Start the server
$SEAFDIR/seafile-server-latest/seafile.sh start
$SEAFDIR/seafile-server-latest/seahub.sh start-fastcgi

# compress data
echo Archive the backup...
cd $TEMPDIR
tar -cf $BACKUPFILE *
gzip $BACKUPFILE
if [ -e $BACKUPFILE.gz ]; then echo ok.; else echo ERROR.; fi

# Cleanup
echo Deleting temporary files...
rm -Rf $TEMPDIR
if [ ! -d $TEMPDIR ]; then echo ok.; else echo ERROR.; fi