#!/bin/bash

source "/etc/openshift/node.conf"

# Control application's embedded PostgreSQL server instance
CART_NAME=postgresql
CART_VERSION=8.4
cartridge_type="postgresql-8.4"
CART_DIRNAME=${CART_NAME}-$CART_VERSION
CART_DIR=${CARTRIDGE_BASE_DIR}


# Exit on any errors
set -e


function print_help() {
    cmd=$(basename "$0")
    echo "Usage: $0 app-name namespace uuid"
    echo "$cmd embedded PostgreSQL service"

    echo "$0 $@" | logger -p local0.notice -t openshift_origin_postgresql_$cmd
    exit 1

}  #  End of function  print_help.


function _control_postgres_service() {
   [ $# -lt 1 ]  &&  return 1
   super_run_as_user "$CTL_SCRIPT $1"

}  #  End of function  _control_postgres_service.


function _start_postgres_service() {
   rm -f "$CART_INSTANCE_DIR/run/stop_lock"
   _control_postgres_service "start"

}  #  End of function  _start_postgres_service.


function _stop_postgres_service() {
   _control_postgres_service "stop"
   touch "$CART_INSTANCE_DIR/run/stop_lock"

}  #  End of function  _stop_postgres_service.


function _restart_postgres_service() {
   rm -f "$CART_INSTANCE_DIR/run/stop_lock"
   _control_postgres_service "restart"

}  #  End of function  _restart_postgres_service.


function _reload_postgres_service() {
   :  #  Do nothing.
}  #  End of function  _reload_postgres_service.


function _move_postgres_service() {
   source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/apache
   source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/network

CART_INSTANCE_DIR="$APP_HOME/postgresql-8.4/"

observe_setup_var_lib_dir "$CART_INSTANCE_DIR"
observe_setup_var_lib_file $APP_HOME/.psql_history
observe_setup_var_lib_file $APP_HOME/.pgpass

. $APP_HOME/.env/OPENSHIFT_INTERNAL_IP
IP=$OPENSHIFT_INTERNAL_IP

. $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_PORT
. $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_HOST
. $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_PASSWORD
. $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_USERNAME

ORIG_DB_HOST=$OPENSHIFT_POSTGRESQL_DB_HOST

if [ "$ORIG_DB_HOST" != "$IP" ]
then
    echo "export OPENSHIFT_POSTGRESQL_DB_HOST='$IP'" > $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_HOST
    echo "export OPENSHIFT_POSTGRESQL_DB_URL='postgresql://$OPENSHIFT_POSTGRESQL_DB_USERNAME:$OPENSHIFT_POSTGRESQL_DB_PASSWORD@$IP:$OPENSHIFT_POSTGRESQL_DB_PORT/'" > $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_URL

    sed -i "s,$ORIG_DB_HOST,$IP," $CART_INSTANCE_DIR/data/postgresql.conf
    echo "$IP:$OPENSHIFT_POSTGRESQL_DB_PORT:*:$OPENSHIFT_POSTGRESQL_DB_USERNAME:$OPENSHIFT_POSTGRESQL_DB_PASSWORD" > $APP_HOME/.pgpass

    set_app_info "Connection URL: postgresql://$IP:$OPENSHIFT_POSTGRESQL_DB_PORT/"
fi

}  #  End of function  _move_postgres_service.

function _pre_move_postgres_service() {
   source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/apache
   source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/network

}  #  End of function  _pre_move_postgres_service.

function _post_move_postgres_service() {
   source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/apache
   source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/network

}  #  End of function  _post_move_postgres_service.

function _status_postgres_service() {
    if output=$(run_as_user "$CTL_SCRIPT status" 2>&1)
    then
        status_client_result "$output"
    else
        client_result "Postgres is either stopped or inaccessible"
    fi
}  #  End of function  _status_postgres_service.



#
# main():
#
source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/util

# Parse and ensure arguments.
while getopts 'd' OPTION
do
    case $OPTION in
        d) set -x ;;
        ?) print_help ;;
    esac
done

[ $# -eq 3 ] || print_help
setup_basic_hook "$1" $2 $3

# Setup instance directory and control script name.
CART_INSTANCE_DIR="$APP_HOME/$CART_DIRNAME"
CTL_SCRIPT="$CARTRIDGE_BASE_PATH/${cartridge_type}/info/bin/app_ctl.sh"

cmd=$(basename "$0")
case "$cmd" in
   status)    _status_postgres_service    ;;
   start)     _start_postgres_service     ;;
   stop)      _stop_postgres_service      ;;
   restart)   _restart_postgres_service   ;;
   reload)    _reload_postgres_service    ;;
   move)      _move_postgres_service      ;;
   pre-move)  _pre_move_postgres_service  ;;
   post-move) _post_move_postgres_service ;;
esac

