#!/bin/sh

if [ -z "$1" ]; then
    echo usage: $0 "[initdb | createdb | dropdb | syncdb | runserver | resetdb | dumpdata]"
    exit
fi

BACKUP_DIR=/opt/planetstack_backups

cd /opt/planetstack

function ensure_postgres_running {
    # "sudo -u postgres pg_ctl -D /var/lib/postgres/data status" doesn't work
    # right on Vicci, so let's try to detect it by seeing if the port is
    # being listened on

    netstat -nl | grep -i ":5432 "
    if [[ $? == 0 ]]; then
        echo "Postgres is already running"
        return
    fi

    /sbin/service postgresql initdb
    /sbin/service postgresql start
    /sbin/chkconfig postgresql on

    netstat -nl | grep -i ":5432 "
    if [[ $? != 0 ]]; then
        # it's still not running
        echo "Trying fallback mechanism to start Postgres"
        sudo -u postgres initdb -D /var/lib/pgsql/data/
        sudo -u postgres pg_ctl -D /var/lib/pgsql/data -l logfile start
    fi

}
function createdb {
    echo "Creating OpenCloud database..."
    sudo -u postgres createdb planetstack
}
function dropdb {
    echo "Dropping OpenCloud database..."
    sudo -u postgres dropdb planetstack
}
function syncdb {
    echo "Syncing OpenCloud services..."
    python /opt/planetstack/manage.py syncdb --noinput
}
function stopserver {
    echo "Stopping any running OpenCloud Service(s)"
    pkill -f "python.*runserver"
}
function runserver {
    echo "Starting OpenCloud Service on $HOSTNAME:8000"
    python manage.py runserver  $HOSTNAME:8000&
}

function dumpdata {
    mkdir -p $BACKUP_DIR
    FN="$BACKUP_DIR/dumpdata-`date +%Y-%m-%d_%H:%M:%S`.json"
    echo "Saving data to $FN"
    python manage.py dumpdata core hpc syndicate requestrouter --indent 4 > $FN
    if [[ ! -f $FN ]]; then
        echo "FAILED to create $FN"
        exit
    fi
    rm -f $BACKUP_DIR/dumpdata-latest.json
    ln -s $FN $BACKUP_DIR/dumpdata-latest.json
}

COMMAND=$1

if [ "$COMMAND" = "initdb" ]; then
    stopserver
    ensure_postgres_running
    createdb
    syncdb
    runserver
fi
if [ "$COMMAND" = "upgradedb" ]; then
    stopserver
    ensure_postgres_running
    dumpdata
    # TODO: This is where we would run migration scripts to upgrade the
    #   dumped data to the new models.
    mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
    cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
    dropdb
    createdb
    syncdb
    runserver
fi
if [ "$COMMAND" = "resetdb" ]; then
    stopserver
    dropdb
    createdb
    syncdb
    runserver
fi
if [ "$COMMAND" = "syncdb" ]; then
    stopserver
    syncdb
    runserver
fi
if [ "$COMMAND" = "runserver" ]; then
    stopserver
    runserver
fi
if [ "$COMMAND" = "stopserver" ]; then
    stopserver
fi
if [ "$COMMAND" = "dumpdata" ]; then
    dumpdata
fi
