#!/bin/bash

# - *****************************************************************************************
#------------
# rasa_run.sh
# -----------
#
# maintainer       "Ellio de Mello"
# repo             "rasa"
# dependencies     "cassandra, rasa rocka"
# description:
#
#  Este script realiza start del servicio de rasa para los modelos (apps) definidos en el/los VCC/s.
#  Los 2 primeros ejemplos deberian ser los mas utilizados.
#
#   Modo de uso:
#
#     1) sh rasa_run.sh -a start
#            - Con este comando realizamos START a todas las apps de RASA para todos los VCCS.
#
#     2) sh rasa_run.sh -a stop
#            - Con este comando realizamos STOP a todas las apps de RASA para todos los VCCS.
#
#     3) sh rasa_run.sh -a start -vcc EL_VCC
#            - Con este comando realizamos START a todas las apps de RASA del VCC especificado.
#
#     4) sh rasa_run.sh -a stop -vcc EL_VCC
#            - Con este comando realizamos STOP a todas las apps de RASA del VCC especificado.
#
#     5) sh rasa_run.sh -a start -vcc EL_VCC -app LA_APP_DEL_VCC
#            - Con este comando realizamos START a una app de RASA del VCC especificado.
#
#     6) sh rasa_run.sh -a stop -vcc EL_VCC -app LA_APP_DEL_VCC
#            - Con este comando realizamos STOP a una app de RASA del VCC especificado.
#
#     Parametros:
#       -a   = (SI requerido)  - La accion que se va a realizar (start o stop).
#       -h   = (NO requerido)  - Direccion IP del server cassandra.
#       -p   = (NO requerido)  - Puerto del server cassandra.
#       -vcc = (NO requerido)  - Vcc especifico del cual se realizaran las acciones sobre sus app(s).
#       -app = (NO requerido)  - App especifica a la cual se le realizara la accion. Este parametro no tiene validez si no se ha especificado el parametro -vcc.
#       -l   = (NO requerido)  - Indica si debe loguear en consola el log de la rocka "rasa" (1/0). Por defecto esta apagado.
#
#     Los parametros requeridos son:
#          -a ( start|stop ) Es el tipo de accion, o inicia o detiene el modelo de RASA.
#     Si los demas parametros no son especificados, se toman los valores de las variables de entorno.
#
# - *****************************************************************************************


. /etc/inconcert/inconcert.conf
. /etc/inconcert/network.conf

clear

export ACTION=''
export ENABLE_LOGGER=''
export VCC=''
export APP=''
export CASSANDRA_SOURCE_IP=''
export CASSANDRA_SOURCE_PORT=''

while [ -n "$1" ]; do
case $1 in
	-a) ACTION=$2;shift 2;;
	-l) ENABLE_LOGGER=$2;shift 2;;
	-vcc) VCC=$2;shift 2;;
	-app) APP=$2;shift 2;;
	-h) CASSANDRA_SOURCE_IP=$2;shift 2;;
	-p) CASSANDRA_SOURCE_PORT=$2;shift 2;;
	--) shift;break;; # end of options
	-*) echo "error: no existe la opcion $1.";exit 1;;
	*)  break;;
esac
done

# validacion de que el argumento -a haya sido especificado
if [ -n "$ACTION" ]; then
	echo ""
else
	echo "Unable to Exectue RASA Action. Action is required. Usage: sh rasa_run.sh -a start"
	exit 1
fi

# argumento -h
if [ -n "$CASSANDRA_SOURCE_IP" ]; then
	echo ""
else
	CASSANDRA_SOURCE_IP=$CASSANDRA_IP
fi 

# argumento -p
if [ -n "$CASSANDRA_SOURCE_PORT" ]; then
	echo ""
else
	CASSANDRA_SOURCE_PORT=$CASSANDRA_PORT
fi

# argumento -l
if [ -n "$ENABLE_LOGGER" ]; then
	echo ""
else
	ENABLE_LOGGER="0"
fi 

# argumento -vcc
if [ -n "$VCC" ]; then
	echo ""
else
	VCC="all"
fi 

# argumento -app
if [ -n "$APP" ]; then
	echo ""
else
	APP="all"
fi 

echo ""
echo "----------------------------"
echo " RASA ..."
echo "----------------------------"
echo "   action          : $ACTION"
echo "   vcc             : $VCC"
echo "   app             : $APP"
echo "   cassandra_source: ($CASSANDRA_SOURCE_IP:$CASSANDRA_SOURCE_PORT)"
echo "   enable logger   : $ENABLE_LOGGER"
echo "----------------------------"
echo ""

echo ""
echo "----------------------------"
echo " CURRENT RASA INSTANCES ..."
echo "----------------------------"
ps -ef | grep "rasa" | grep -v "grep" | awk '{print}'
echo "----------------------------"
echo ""
echo ""

# ------------------------------------------
RasaExecute() {
	lua << LUA_EOF

local json = require "json"
local cassandra = require "lua_cassandra"
local cassandraHost = "$CASSANDRA_SOURCE_IP"
local cassandraPort = "$CASSANDRA_SOURCE_PORT"
local enableLoger = "$ENABLE_LOGGER" == "1"

local apiRasa = require("rasa"):new()
apiRasa.EnableRasaLogger(enableLoger)

print("Connecting CASSANDRA " .. tostring(cassandraHost) .. ":" .. tostring(cassandraPort))
cassandra.seed(cassandraHost, cassandraPort)

local vcc = ("$VCC"):lower()
local appId = ("$APP")

local function StopRasa ()
    apiRasa:StopRasa()
end

local function StartRasaAllVccsApps ()
    StopRasa()
    apiRasa:RunRasaAllVccsApps()
end

local function StopRasaAllVccsApps ()
    apiRasa:DownRasaAllVccsApps()
end

local function StartRasaAppsOneVcc ()
    apiRasa:RunRasaVccApps({
        vcc = vcc
    })
end

local function StopRasaAppsOneVcc ()
    apiRasa:DownRasaVccApps({
        vcc = vcc
    })
end

local function StartRasaOneAppOfVcc ()
    apiRasa:RunRasaApp({
        vcc = vcc,
        appId = appId
    })
end

local function StopRasaOneAppOfVcc ()
    apiRasa:DownRasaApp({
        vcc = vcc,
        appId = appId
    })
end

local actions = {
    start = function()
        if vcc == "all" then
            StartRasaAllVccsApps()
        else
            if appId == "all" then
                StartRasaAppsOneVcc()
            else
                StartRasaOneAppOfVcc()
            end
        end
    end,
    stop = function()
        if vcc == "all" then
            --StopRasaAllVccsApps()
            StopRasa()
        else
            if appId == "all" then
                StopRasaAppsOneVcc()
            else
                StopRasaOneAppOfVcc()
            end
        end
    end
}

local actionName = ("$ACTION"):lower()
local actionInfo = actions[actionName]
if not actionInfo then
    print("Unable to execute RASA Action. Unrecognized action " .. tostring(actionName))
else
    actionInfo()
end

LUA_EOF
}

RasaExecute

echo ""
echo ""
echo ""
echo "----------------------------"
echo " STARTED RASA INSTANCES ..."
echo "----------------------------"
ps -ef | grep "rasa" | grep -v "grep" | awk '{print}'
echo "----------------------------"
echo ""
echo ""
