#!/bin/sh

#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#    
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

# Start postgresql
here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
root=`echo "import os; print os.path.realpath('$1')" | python`

pgsql_prefix=`cat $here/pgsql.prefix`
pgbouncer_prefix=`cat $here/pgbouncer.prefix`

if [ -f "$root/sqldb/log.conf" ]; then
    pgsql_log=`cat $root/sqldb/log.conf`
else
    mkdir -p $root/logs
    pgsql_log="cat >>$root/logs/postgresql"
fi
mkdir -p $root/sqldb
echo $pgsql_log >$root/sqldb/logger

nohup /bin/sh -c "($pgsql_prefix/bin/pg_ctl start -W -D $root/sqldb/data 2>&1 | sh $root/sqldb/logger)" 1>/dev/null 2>/dev/null &
sti=0
while [ $sti -ne 30 ]; do
    st=`$pgsql_prefix/bin/pg_ctl status -D $root/sqldb/data | grep 'server is running'`
    if [ "$st" != "" ]; then
        break
    fi
    sleep 1
    sti=$((sti+1))
done

# Start PgBouncer
mkdir -p $root/logs
$pgbouncer_prefix/bin/pgbouncer -q -d $root/sqldb/data/pgbouncer.conf

