Skip to content
Snippets Groups Projects
#chaos_services.sh# 9.95 KiB
#!/bin/bash
cmd=$1
pushd `dirname $0` > /dev/null
scriptdir=`pwd -P`
popd > /dev/null

if [ -z "$CHAOS_TOOLS" ];then
    export CHAOS_TOOLS=$scriptdir
fi
source $scriptdir/common_util.sh

# CDS_EXEC=ChaosMetadataService
#CDS_CONF=cds.cfg
MDS_EXEC=mds
UI_EXEC=webui
US_EXEC=UnitServer
AGENT_EXEC=agent
MDS_CONFIG=$CHAOS_PREFIX/etc/localhost/chaosDashboard.json

if [ -z "$CHAOS_PREFIX" ]; then
    error_mesg "CHAOS_PREFIX environment variables not set"
    exit 1
fi



backend_checks(){
    if [ -z "$CHAOS_DB_SERVERS" ];then
        if ! ps -fe |grep [m]ongod >/dev/null ;then
            error_mesg "mongod not running" ; exit 1
        else
            ok_mesg "mongod check"
        fi
    fi
    if [ -z "$CHAOS_LIVE_SERVERS" ]; then
        if ! ps -fe |grep [e]pmd >/dev/null ;then
            if ! ps -fe |grep [m]emcached >/dev/null;then
                error_mesg "epmd (couchbase) nor memcached  running" ; exit 1
            fi
        else
            ok_mesg "couchbase check"
        fi
    fi
    
}

mds_checks(){
    MDS_LOG=$CHAOS_PREFIX/log/ChaosMetadataService.log
    mkdir -p $CHAOS_PREFIX/log
    if [ -x "$CHAOS_PREFIX/bin/$MDS_EXEC" ]; then
        MDS_BIN=$CHAOS_PREFIX/bin/$MDS_EXEC
    else
        error_mesg "$MDS_EXEC binary not found in $CHAOS_PREFIX/bin"
        exit 1
    fi
    
}


usage(){
    info_mesg "Usage :$0 {start|stop|status| config| start agent| start mds | start webui| start us |start develßdevel | stop webui|stop mds| stop us}"
}
start_mds(){
    if [ -n "$CHAOS_MDS" ];then
        if ! [[ "$CHAOS_MDS" =~ localhost ]];then
            echo "* Using $CHAOS_MDS"
            return 1
        fi
    fi
    backend_checks;
    mds_checks;
    if check_proc "$CHAOS_PREFIX/bin/$MDS_EXEC";then
        info_mesg "already running " "MDS.."
    else
        info_mesg "starting MDS..." "($CHAOS_LIVE_SERVERS)($CHAOS_DB_SERVERS)"
        
        run_proc "$CHAOS_SERVICE_ENV $CHAOS_PREFIX/bin/$MDS_EXEC --conf-file $CHAOS_PREFIX/etc/mds.cfg $CHAOS_OVERALL_OPT $CHAOS_MDS_OPT --log-file $CHAOS_PREFIX/log/$MDS_EXEC.$MYPID.log > $CHAOS_PREFIX/log/$MDS_EXEC.$MYPID.std.out 2>&1 &" "$MDS_EXEC"
        #    echo "$CHAOS_PREFIX/bin/$MDS_EXEC --conf-file $CHAOS_PREFIX/etc/mds.cfg $CHAOS_OVERALL_OPT $CHAOS_MDS_OPT --log-file $CHAOS_PREFIX/log/$MDS_EXEC.log" >> $CHAOS_PREFIX/log/$MDS_EXEC.std.out
        
        if execute_command_until_ok "grep \"Data Service published\" $CHAOS_PREFIX/log/$MDS_EXEC.$MYPID.log" 120;then
            info_mesg "MDS:" " `grep \"Data Service published\" $CHAOS_PREFIX/log/$MDS_EXEC.$MYPID.log`"
            sleep 1
            ok_mesg "checking publishing"
            
        else
            nok_mesg "checking publishing"
            return 1
        fi
        info_mesg "waiting " " 5 seconds"
        sleep 5
    fi
}

# start_cds(){
#     cds_checks
#     info_mesg "starting CDS..."
#     check_proc_then_kill "$CDS_EXEC"
#     echo "$CDS_BIN --conf-file $CHAOS_PREFIX/etc/$CDS_CONF --log-file $CHAOS_PREFIX/log/cds.log" > $CHAOS_PREFIX/log/$CDS_EXEC.std.out
#     run_proc "$CDS_BIN --conf-file $CHAOS_PREFIX/etc/$CDS_CONF $CHAOS_OVERALL_OPT --log-file $CHAOS_PREFIX/log/$CDS_EXEC.log >> $CHAOS_PREFIX/log/$CDS_EXEC.std.out 2>&1 &" "$CDS_EXEC"
# }
start_ui(){
    if [ -n "$CHAOS_WEBUI" ];then
        if ! [[ "$CHAOS_WBUI" =~ localhost ]];then
            echo "* Using $CHAOS_WEBUI"
            return 1
        fi
    fi

    if check_proc "$CHAOS_PREFIX/bin/$UI_EXEC";then
        info_mesg "already running " "webui.."
        
    else
        info_mesg "starting " "webui.."
        # check_proc_then_kill "$CHAOS_PREFIX/bin/$UI_EXEC"
        
        run_proc "$CHAOS_SERVICE_ENV $CHAOS_PREFIX/bin/$UI_EXEC --conf-file $CHAOS_PREFIX/etc/webui.cfg $port $CHAOS_OVERALL_OPT --log-file $CHAOS_PREFIX/log/webui.$MYPID.log > $CHAOS_PREFIX/log/$UI_EXEC.$MYPID.std.out 2>&1 &" "$UI_EXEC"
    fi
    #   echo "$CHAOS_PREFIX/bin/$UI_EXEC --conf-file $CHAOS_PREFIX/etc/webui.cfg $port $CHAOS_OVERALL_OPT --log-file $CHAOS_PREFIX/log/webui.log" >> $CHAOS_PREFIX/log/$UI_EXEC.std.out
}

start_agent(){
    if [ -n "$CHAOS_AGENT" ];then
        if ! [[ "$CHAOS_AGENT" =~ localhost ]];then
            echo "* Using $CHAOS_AGENT"
            return 1
        fi
    fi

    if check_proc "$CHAOS_PREFIX/bin/$AGENT_EXEC";then
        info_mesg "already running " "agent.."
        
    else
        info_mesg "starting " "agent"
        run_proc "$CHAOS_SERVICE_ENV $CHAOS_PREFIX/bin/$AGENT_EXEC --conf-file  $CHAOS_PREFIX/etc/agent.cfg $CHAOS_OVERALL_OPT --log-on-file --log-file $CHAOS_PREFIX/log/agent.$MYPID.log > $CHAOS_PREFIX/log/$AGENT_EXEC.$MYPID.std.out 2>&1 &" "$AGENT_EXEC"
    fi
}

load_config(){
if [ ! -e "$MDS_CONFIG" ]; then
            error_mesg "localhost configuration file not found in \"$MDS_CONFIG\" " "start skipped"
            exit 1
fi
info_mesg "transferring configuration to MDS " "$MDS_CONFIG"
if ! jchaosctl --server localhost:8081 --upload $MDS_CONFIG >& $CHAOS_PREFIX/log/jchaosctl.config.std.out ;then
            error_mesg "failed initialization of " "MDS with $MDS_CONFIG"
            exit 1
fi
}

start_us(){
    if check_proc  "$CHAOS_PREFIX/bin/$US_EXEC";then
        info_mesg "already running " "UnitServer.."
        
    else
        if [ ! -e "$CHAOS_PREFIX/etc/cu.cfg" ]; then
            warn_mesg "UnitServer configuration file not found in \"$CHAOS_PREFIX/etc/cu.cfg\" " "start skipped"
            return
        fi
       
        # info_mesg "transferring configuration to MDS " "$CHAOS_PREFIX/etc/localhost/MDSConfig.json"
        # if ! run_proc "$CHAOS_PREFIX/bin/ChaosMDSCmd --mds-conf $CHAOS_PREFIX/etc/localhost/MDSConfig.json $CHAOS_OVERALL_OPT -r 1 --log-on-file --log-file $CHAOS_PREFIX/log/ChaosMDSCmd.$MYPID.log > $CHAOS_PREFIX/log/ChaosMDSCmd.$MYPID.std.out 2>&1 " "ChaosMDSCmd";then
        #     error_mesg "failed initialization of " "MDS"
        #     exit 1
        # fi
 
       
        sleep 5
        info_mesg "starting US through agent " "TEST"
        if ! jchaosctl --server localhost:8081 --op start --uid TEST;then
            error_mesg "failed starting of " "TEST"
            exit 1
        fi
#        info_mesg "starting " "$US_EXEC"
#        run_proc "$CHAOS_PREFIX/bin/$US_EXEC --conf-file $CHAOS_PREFIX/etc/cu.cfg $CHAOS_OVERALL_OPT --log-on-file 1 --log-file $CHAOS_PREFIX/log/$US_EXEC.$MYPID.log > $CHAOS_PREFIX/log/$US_EXEC.$MYPID.std.out 2>&1 &" "$US_EXEC"
    fi
}

ui_stop()
{
    info_mesg "stopping... " "$UI_EXEC"
    stop_proc "$CHAOS_PREFIX/bin/$UI_EXEC"
}

agent_stop()
{
    info_mesg "stopping... " "$AGENT_EXEC"
    stop_proc "$CHAOS_PREFIX/bin/$AGENT_EXEC"
}


us_stop(){

    if check_proc "$CHAOS_PREFIX/bin/$MDS_EXEC"  && check_proc "$CHAOS_PREFIX/bin/$UI_EXEC";then

        info_mesg "stopping... " "TEST"
        if ! jchaosctl --server localhost:8081 --op stop --uid TEST > $CHAOS_PREFIX/log/jchaosctl.stop.std.out ;then
            error_mesg "failed stopping of " "TEST"
        fi
    fi
    
}

mds_stop()
{
    info_mesg "stopping... " "$MDS_EXEC"
    stop_proc "$CHAOS_PREFIX/bin/$MDS_EXEC"
}

# cds_stop(){
#     info_mesg "stopping CDS..."
#     stop_proc "$CDS_EXEC"
# }

start_all(){
    local status=0
    info_mesg "start all chaos services..."
    #    start_cds
    #    status=$((status + $?))
    start_mds
    status=$((status + $?))
    
    start_ui
    status=$((status + $?))
    
    start_agent
    status=$((status + $?))
    
    
    
}
stop_all(){
    local status=0
    info_mesg "stopping all chaos services..."
    us_stop
    status=$((status + $?))
    
    ui_stop
    status=$((status + $?))
    mds_stop
    status=$((status + $?))
    #    cds_stop
    #    status=$((status + $?))
    agent_stop
    status=$((status + $?))
    exit $status
}

status(){
    local status=0
    check_proc "mongod"
    status=$((status + $?))
    check_proc "epmd"
    status=$((status + $?))
    check_proc "$CHAOS_PREFIX/bin/$MDS_EXEC"
    status=$((status + $?))
    #    check_proc "$CDS_EXEC"
    #    status=$((status + $?))
    check_proc "$CHAOS_PREFIX/bin/$UI_EXEC"
    status=$((status + $?))
    
    check_proc "$CHAOS_PREFIX/bin/$AGENT_EXEC"
    status=$((status + $?))
    
    
    
    
    if [ -n "$(get_pid $CHAOS_PREFIX/bin/$US_EXEC)" ];then
        check_proc "$CHAOS_PREFIX/bin/$US_EXEC"
    fi
    
    exit $status
}
case "$cmd" in
    status)
        status
        exit 0
    ;;
    config)
        load_config
        exit 0
    ;;
    start)
        if [ -z "$2" ]; then
            start_all
            
            
        else
            case "$2" in
                mds)
                    start_mds
                    exit 0
                ;;
                webui)
                    start_ui
                    exit 0
                ;;
                agent)
                    start_agent
                    exit 0
                ;;

                us)
                    start_us
                    exit 0
                ;;
                
                devel)
                    start_mds
                    start_ui
                    start_agent
                    load_config
        		    
                    sleep 1
                    start_us
                    
                    exit 0
                ;;
                *)
                    error_mesg "\"$2\" no such service"
                    usage
                ;;
            esac
            
        fi
        
    ;;
    stop)
        if [ -z "$2" ]; then
            stop_all
        else
            case "$2" in
                mds)
                    mds_stop
                    exit 0
                ;;
                us)
                    us_stop
                    exit 0
                ;;
                agent)
                    agent_stop
                    exit 0
                ;;
                webui)
                    ui_stop
                    exit 0
                ;;
                
                *)
                    error_mesg "\"$2\" no such service"
                    usage
                ;;
            esac
            
        fi
    ;;
    *)
        usage
        exit 1
    ;;
esac