Skip to content
Snippets Groups Projects
#chaos_services.sh# 9.95 KiB
Newer Older
  • Learn to ignore specific revisions
  • Andrea Michelotti's avatar
    Andrea Michelotti committed
    #!/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