#!/bin/sh

PIDFILE=/tmp/cegoload.pid
LOCKFILE=/tmp/cegoload.lock
INITBATCH=/tmp/cegoload.sql
NUMLOOP=100
NUMOP=1000

###############
# database defs
###############

TS=TS1
TSROOT=./db
TSTICKET=$TSROOT/${TS}ticket.xml
SYSSIZE=100
TMPSIZE=3000
LOGFILESIZE=1000000
LOGFILENUM=3
APPFILE=$TSROOT/${TS}data01.dbf
APPSIZE=3000
SORTAREASIZE=10000000
DBUSER=lemke
DBPWD=lemke

DBXML=$TSROOT/chkdb.xml
DBNAME=chkdb
PAGESIZE=16384
ADMPORT=2000
DBPORT=2200
LOGPORT=3000
PIDFILE=$TSROOT/pid
ADMINUSER=cgadm
ADMINPWD=cgadm

#DEBUGLEVEL=DEBUG
DEBUGLEVEL=NOTICE

### end of customizing ###

rm -rf $TSROOT
mkdir $TSROOT
rm -f $DBXML
rm -f $LOCKFILE

echo "Creating xml ..."
cat > $DBXML <<EOF
<?xml version="1.0" ?>
<!DOCTYPE CEGO_DB_SPEC>
<DATABASE NAME="$DBNAME" PAGESIZE="$PAGESIZE" ADMINPORT="$ADMPORT" LOGPORT="$LOGPORT" DATAPORT="$DBPORT"
PIDFILE="$PIDFILE" MAXFID="1" MAXTSID="1"
NUMRECSEMA="2141" NUMSYSPAGESEMA="41" NUMDATAPAGESEMA="41" 
NUMIDXPAGESEMA="41" NUMRBPAGESEMA="2141" NUMDATAFILESEMA="11" NUMBUFFERPOOLSEMA="11"
MAXFIXTRIES="30" 
 CSMODE="ON" QESCMODE="ON" LOGMNGPROG="./cglogmng">
<MODULE NAME="ALL" LEVEL="$DEBUGLEVEL"></MODULE>
</DATABASE> 
EOF

# <MODULE NAME="CegoTableManager" LEVEL="NOTICE"></MODULE>
# <MODULE NAME="CegoAdminThreadPool" LEVEL="NOTICE"></MODULE>
# <MODULE NAME="CegoSelect" LEVEL="NOTICE"></MODULE>

echo "Creating admin user ...\c"
../../src/cego --mode=adduser --dbxml=${DBXML} --user=${ADMINUSER}/${ADMINPWD} --role=admin

if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

echo "Creating role ...\c"
../../src/cego --mode=addrole --dbxml=${DBXML} --role=ALL

if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

echo "Creating role ...\c"
../../src/cego --mode=addperm --dbxml=${DBXML} --permid=${TS}_P --role=ALL --tableset=$TS --filter="ALL" --perm="ALL" 

if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

echo "Defining tableset $TS...\c"
../../src/cego --mode=define --tableset=${TS} -dbxml=${DBXML} --tsdef=tsroot:${TSROOT},tsticket:${TSTICKET},syssize:${SYSSIZE},tmpsize:${TMPSIZE},logfilesize:${LOGFILESIZE},logfilenum:${LOGFILENUM},appfile:${APPFILE},appsize:${APPSIZE},sortareasize:${SORTAREASIZE} 
if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

echo "Creating database user for $TS ...\c"
../../src/cego --mode=adduser --dbxml=${DBXML} --user=${DBUSER}/${DBPWD} --role=ALL
if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

echo "Creating tableset $TS...\c"
../../src/cego --mode=create --dbxml=${DBXML} --tableset=${TS}
if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

echo "create table t1 ( a int, b string(100));" > $INITBATCH
echo "create table t2 ( a int, b string(100));" >> $INITBATCH
echo "create table t3 ( a int, b string(100));" >> $INITBATCH

echo "create index i1 on t1(a);" >> $INITBATCH
echo "create index i2 on t2(b);" >> $INITBATCH
echo "create index i3 on t3(b);" >> $INITBATCH

echo "@" >> $INITBATCH
echo "create procedure p1 ( a in int, b in string(100))" >> $INITBATCH
echo "begin"  >> $INITBATCH
echo "   insert into t1 values ( :a, :b );"  >> $INITBATCH
echo "end;" >> $INITBATCH
echo "@" >> $INITBATCH

# cat $INITBATCH

../../src/cego --mode=batch --dbxml=${DBXML} --user=$DBUSER/$DBPWD --poolsize=1000 --batchfile=$INITBATCH --tableset=$TS

rm -rf $LOCKFILE

echo "Starting daemon ..."

nohup ../../src/cego --mode=daemon --forceload --nolockstat --pidfile=$PIDFILE --numdbthread=30 --dbxml=${DBXML} --poolsize=3000 --tableset=$TS --lockfile=$LOCKFILE &

echo "Waiting 3 sec for startup .." 

sleep 3

echo "Enable trace for $DBUSER .." 
../../src/cgadm --server=localhost --port=2000 --user=cgadm/cgadm -cmd="trace on user $DBUSER"

i=0
while [ $i -lt $NUMLOOP ]
do

    echo "Loop $i"
    echo "======="

    for t in t1 t2 t3
    do
	echo "Arbitrary op for $t ..."
	../../src/cgblow --mode=arbitrary --server=localhost --port=$DBPORT --iset=i:10000,s:3 --uset=a:i:10 --ucond=b:s:3 --dcond=a:i:100 --table=$t --tableset=TS1 --user=$DBUSER/$DBPWD --interval=$NUMOP --count=$NUMOP --proc=p1 --pset=i:100,s:3 &
	
	
    done
    i=`expr $i + 1`

    echo "Waiting for sub processes .."
    wait $!
    echo "Finished"

    sleep 1
done

echo "Stopping daemon ..."
kill -INT `cat $PIDFILE`

wait `cat $PIDFILE`
echo "... daemon stopped"

