#!/bin/ash
# Simple Autostart helper
REDIS=/usr/sbin/redis-server
REDISCLI=/usr/sbin/redis-cli
ARGS=/etc/redis.conf
REDISSOCK="-s /tmp/redis.sock"
REDIS_PWD_FILE=/etc/.redis_string
REDIS_PID_FILE=/var/run/redis.pid
REDISLIST=/etc/redis_init_cmds.txt
RUNFILE=/var/run/redis-server.run
respawn=1

if ! [ -x ${REDIS} ]; then
  echo "${REDIS} does not exist!"
  exit 0
fi

if ! [ -x ${REDISCLI} ]; then
  echo "${REDISCLI} does not exist!"
  exit 0
fi

retry=0
while [ $retry -lt 10 ]; do 
    PWD=`/usr/bin/openssl rand -hex 15 2>/dev/null`
    if [ $? -eq 0 ] && [ ! -z "$PWD" ]; then 
        REDISCLIARGS=$REDISSOCK" -a "$PWD""
        echo -n $PWD > $REDIS_PWD_FILE
        break
    fi  
    retry=$((retry+1))
done

if [ $retry -eq 10 ]; then
    echo "CRITICAL: Unable to generate credentials to connect to Redis DB!"
    exit 0
fi

start()
{
  # start the server, if not daemonized already
  if  [[ -e ${REDIS_PID_FILE} ]]; then
    REDIS_PID=$(<${REDIS_PID_FILE})
    if [[ -e /proc/${REDIS_PID} ]]; then
      kill -9 ${REDIS_PID} 
    fi                                              
    rm -rf ${REDIS_PID_FILE}
    /bin/sync
  fi  
    
  echo "Starting DB Services..."
   
  ${REDIS} ${ARGS} 
 

  #wait for daemonization
  retry=0
  while [ ! -e ${REDIS_PID_FILE} ] && [ ${retry} -lt 30 ]; do
    sleep 1
    ((retry=retry+1))
  done

  # wait for server availability
  if [ -e ${REDIS_PID_FILE} ]; then
    # record restart count
    if [ -e ${RUNFILE} ]; then
      runcount=$(< ${RUNFILE})
    else
      runcount=0
    fi
    ((runcount=runcount+1))
    echo "$runcount" > ${RUNFILE}
   
    #wait for ping-pong
    retry=0
    while [ $retry -lt 30 ]; do
        ${REDISCLI} ${REDISSOCK} ping > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            # post start inits
            ${REDISCLI} ${REDISSOCK} config set requirepass $PWD > /dev/null 2>&1
            tar zxf /var/www/lua/luaScripts.tar.gz -C /var/www/lua/
            cat ${REDISLIST} |  ${REDISCLI} ${REDISCLIARGS} -x > /dev/null 2>&1
            ${REDISCLI} ${REDISCLIARGS} script load "$(cat /var/www/lua/dxRedis.lua)" > /var/www/lua/dxLuaSha1.txt
            sync
            break
        fi
        sleep 1
        ((retry=retry+1))
    done

    #waitpid
    REDIS_PID=$(<${REDIS_PID_FILE})
    while [ -e /proc/${REDIS_PID} ]; do
      sleep 10;
    done
  fi
  echo "Redis-Server Started..."
}

stop()
{
  if [ -e ${REDIS_PID_FILE} ]; then
    echo "Shutting down DB Services..."
    ${REDISCLI} ${REDISCLIARGS} shutdown
  fi
}

on_exit()
{
  respawn=0
  stop
}

on_dumpcore()
{
    switchdrvrreset=0 
    kill -s 11 "$(cat ${REDIS_PID_FILE})"
}

trap 'on_dumpcore' 42
trap 'on_exit' TERM
while [ ${respawn} -eq 1 ]; do
  start
done

exit 0

