mirror of https://github.com/D4-project/d4-core
				
				
				
			
		
			
				
	
	
		
			314 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			314 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
#!/bin/bash
 | 
						|
 | 
						|
GREEN="\\033[1;32m"
 | 
						|
DEFAULT="\\033[0;39m"
 | 
						|
RED="\\033[1;31m"
 | 
						|
ROSE="\\033[1;35m"
 | 
						|
BLUE="\\033[1;34m"
 | 
						|
WHITE="\\033[0;02m"
 | 
						|
YELLOW="\\033[1;33m"
 | 
						|
CYAN="\\033[1;36m"
 | 
						|
 | 
						|
. ./D4ENV/bin/activate
 | 
						|
 | 
						|
isredis=`screen -ls | egrep '[0-9]+.Redis_D4	' | cut -d. -f1`
 | 
						|
isd4server=`screen -ls | egrep '[0-9]+.Server_D4	' | cut -d. -f1`
 | 
						|
isworker=`screen -ls | egrep '[0-9]+.Workers_D4	' | cut -d. -f1`
 | 
						|
isflask=`screen -ls | egrep '[0-9]+.Flask_D4	' | cut -d. -f1`
 | 
						|
 | 
						|
function helptext {
 | 
						|
    echo -e $YELLOW"
 | 
						|
         _______   __    __                                                                   __
 | 
						|
        /       \ /  |  /  |                                                                 /  |
 | 
						|
        \$\$\$\$\$\$\$  |\$\$ |  \$\$ |        ______    ______    ______      __   ______    _______  _\$\$ |_
 | 
						|
        \$\$ |  \$\$ |\$\$ |__\$\$ |       /      \  /      \  /      \    /  | /      \  /       |/ \$\$   |
 | 
						|
        \$\$ |  \$\$ |\$\$    \$\$ |      /\$\$\$\$\$\$  |/\$\$\$\$\$\$  |/\$\$\$\$\$\$  |   \$\$/ /\$\$\$\$\$\$  |/\$\$\$\$\$\$\$/ \$\$\$\$\$\$/
 | 
						|
        \$\$ |  \$\$ |\$\$\$\$\$\$\$\$ |      \$\$ |  \$\$ |\$\$ |  \$\$/ \$\$ |  \$\$ |   /  |\$\$    \$\$ |\$\$ |        \$\$ | __
 | 
						|
        \$\$ |__\$\$ |      \$\$ |      \$\$ |__\$\$ |\$\$ |      \$\$ \__\$\$ |   \$\$ |\$\$\$\$\$\$\$\$/ \$\$ \_____   \$\$ |/  |
 | 
						|
        \$\$    \$\$/       \$\$ |      \$\$    \$\$/ \$\$ |      \$\$    \$\$/    \$\$ |\$\$       |\$\$       |  \$\$  \$\$/
 | 
						|
        \$\$\$\$\$\$\$/        \$\$/       \$\$\$\$\$\$\$/  \$\$/        \$\$\$\$\$\$/__   \$\$ | \$\$\$\$\$\$\$/  \$\$\$\$\$\$\$/    \$\$\$\$/
 | 
						|
                                  \$\$ |                       /  \__\$\$ |
 | 
						|
                                  \$\$ |                       \$\$    \$\$/
 | 
						|
                                  \$\$/                         \$\$\$\$\$\$/
 | 
						|
 | 
						|
    "$DEFAULT"
 | 
						|
    This script launch:    (Inside screen Daemons)"$CYAN"
 | 
						|
      - D4 Twisted server.
 | 
						|
      - All wokers manager.
 | 
						|
      - All Redis in memory servers.
 | 
						|
      - Flask server.
 | 
						|
 | 
						|
    Usage:    LAUNCH.sh
 | 
						|
                  [-l | --launchAuto]
 | 
						|
                  [-k | --killAll]
 | 
						|
                  [-h | --help]
 | 
						|
    "
 | 
						|
}
 | 
						|
 | 
						|
CONFIG=$D4_HOME/configs/server.conf
 | 
						|
redis_stream=`sed -nr '/\[Redis_STREAM\]/,/\[/{/port/p}' ${CONFIG} | awk -F= '/port/{print $2}' | sed 's/ //g'`
 | 
						|
redis_metadata=`sed -nr '/\[Redis_METADATA\]/,/\[/{/port/p}' ${CONFIG} | awk -F= '/port/{print $2}' | sed 's/ //g'`
 | 
						|
 | 
						|
function launching_redis {
 | 
						|
    conf_dir="${D4_HOME}/configs/"
 | 
						|
    redis_dir="${D4_HOME}/redis/src/"
 | 
						|
 | 
						|
    screen -dmS "Redis_D4"
 | 
						|
    sleep 0.1
 | 
						|
    echo -e $GREEN"\t* Launching D4 Redis Servers"$DEFAULT
 | 
						|
    screen -S "Redis_D4" -X screen -t "6379" bash -c $redis_dir'redis-server '$conf_dir'6379.conf ; read x'
 | 
						|
    sleep 0.1
 | 
						|
    screen -S "Redis_D4" -X screen -t "6380" bash -c $redis_dir'redis-server '$conf_dir'6380.conf ; read x'
 | 
						|
    sleep 0.1
 | 
						|
}
 | 
						|
 | 
						|
function launching_d4_server {
 | 
						|
    screen -dmS "Server_D4"
 | 
						|
    sleep 0.1
 | 
						|
    echo -e $GREEN"\t* Launching D4 Server"$DEFAULT
 | 
						|
 | 
						|
    screen -S "Server_D4" -X screen -t "Server_D4" bash -c "cd ${D4_HOME}; ./server.py -v 10; read x"
 | 
						|
    sleep 0.1
 | 
						|
    screen -S "Server_D4" -X screen -t "sensors_manager" bash -c "cd ${D4_HOME}; ./sensors_manager.py; read x"
 | 
						|
    sleep 0.1
 | 
						|
}
 | 
						|
 | 
						|
function launching_workers {
 | 
						|
    screen -dmS "Workers_D4"
 | 
						|
    sleep 0.1
 | 
						|
    echo -e $GREEN"\t* Launching D4 Workers"$DEFAULT
 | 
						|
 | 
						|
    screen -S "Workers_D4" -X screen -t "1_workers" bash -c "cd ${D4_HOME}/workers/workers_1; ./workers_manager.py; read x"
 | 
						|
    sleep 0.1
 | 
						|
    screen -S "Workers_D4" -X screen -t "2_workers" bash -c "cd ${D4_HOME}/workers/workers_2; ./workers_manager.py; read x"
 | 
						|
    sleep 0.1
 | 
						|
    screen -S "Workers_D4" -X screen -t "3_workers" bash -c "cd ${D4_HOME}/workers/workers_3; ./workers_manager.py; read x"
 | 
						|
    sleep 0.1
 | 
						|
    screen -S "Workers_D4" -X screen -t "4_workers" bash -c "cd ${D4_HOME}/workers/workers_4; ./workers_manager.py; read x"
 | 
						|
    sleep 0.1
 | 
						|
    screen -S "Workers_D4" -X screen -t "8_workers" bash -c "cd ${D4_HOME}/workers/workers_8; ./workers_manager.py; read x"
 | 
						|
    sleep 0.1
 | 
						|
}
 | 
						|
 | 
						|
function shutting_down_redis {
 | 
						|
    redis_dir=${D4_HOME}/redis/src/
 | 
						|
    bash -c $redis_dir'redis-cli -p '$redis_stream' SHUTDOWN'
 | 
						|
    sleep 0.1
 | 
						|
    bash -c $redis_dir'redis-cli -p '$redis_metadata' SHUTDOWN'
 | 
						|
    sleep 0.1
 | 
						|
}
 | 
						|
 | 
						|
function checking_redis {
 | 
						|
    flag_redis=0
 | 
						|
    redis_dir=${D4_HOME}/redis/src/
 | 
						|
    bash -c $redis_dir'redis-cli -p '$redis_stream' PING | grep "PONG" &> /dev/null'
 | 
						|
    if [ ! $? == 0 ]; then
 | 
						|
       echo -e $RED"\t6379 not ready"$DEFAULT
 | 
						|
       flag_redis=1
 | 
						|
    fi
 | 
						|
    sleep 0.1
 | 
						|
    bash -c $redis_dir'redis-cli -p '$redis_metadata' PING | grep "PONG" &> /dev/null'
 | 
						|
    if [ ! $? == 0 ]; then
 | 
						|
       echo -e $RED"\t6380 not ready"$DEFAULT
 | 
						|
       flag_redis=1
 | 
						|
    fi
 | 
						|
    sleep 0.1
 | 
						|
 | 
						|
    return $flag_redis;
 | 
						|
}
 | 
						|
 | 
						|
function wait_until_redis_is_ready {
 | 
						|
    redis_not_ready=true
 | 
						|
    while $redis_not_ready; do
 | 
						|
        if checking_redis; then
 | 
						|
            redis_not_ready=false;
 | 
						|
        else
 | 
						|
            sleep 1
 | 
						|
        fi
 | 
						|
    done
 | 
						|
    echo -e $YELLOW"\t* Redis Launched"$DEFAULT
 | 
						|
}
 | 
						|
 | 
						|
function launch_redis {
 | 
						|
    if [[ ! $isredis ]]; then
 | 
						|
        launching_redis;
 | 
						|
    else
 | 
						|
        echo -e $RED"\t* A D4_Redis screen is already launched"$DEFAULT
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function launch_d4_server {
 | 
						|
    if [[ ! $isd4server ]]; then
 | 
						|
      sleep 1
 | 
						|
        if checking_redis; then
 | 
						|
            launching_d4_server;
 | 
						|
        else
 | 
						|
            echo -e $YELLOW"\tD4 Redis not started, waiting 5 more secondes"$DEFAULT
 | 
						|
            sleep 5
 | 
						|
            if checking_redis; then
 | 
						|
                launching_d4_server;
 | 
						|
            else
 | 
						|
                echo -e $RED"\tError: Redis not started"$DEFAULT
 | 
						|
                exit 1
 | 
						|
            fi;
 | 
						|
        fi;
 | 
						|
    else
 | 
						|
        echo -e $RED"\t* A Server_D4 screen is already launched"$DEFAULT
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function launch_workers {
 | 
						|
    if [[ ! $isworker ]]; then
 | 
						|
      sleep 1
 | 
						|
        if checking_redis; then
 | 
						|
            launching_workers;
 | 
						|
        else
 | 
						|
            echo -e $YELLOW"\tD4 Redis not started, waiting 5 more secondes"$DEFAULT
 | 
						|
            sleep 5
 | 
						|
            if checking_redis; then
 | 
						|
                launching_workers;
 | 
						|
            else
 | 
						|
                echo -e $RED"\tError: Redis not started"$DEFAULT
 | 
						|
                exit 1
 | 
						|
            fi;
 | 
						|
        fi;
 | 
						|
    else
 | 
						|
        echo -e $RED"\t* A Workers_D4 screen is already launched"$DEFAULT
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function launch_flask {
 | 
						|
    if [[ ! $isflask ]]; then
 | 
						|
        flask_dir=${D4_HOME}/web
 | 
						|
        screen -dmS "Flask_D4"
 | 
						|
        sleep 0.1
 | 
						|
        echo -e $GREEN"\t* Launching Flask server"$DEFAULT
 | 
						|
        # screen -S "Flask_D4" -X screen -t "Flask_server" bash -c "cd $flask_dir; export FLASK_DEBUG=1;export FLASK_APP=Flask_server.py; python -m flask run --port 7000; read x"
 | 
						|
        screen -S "Flask_D4" -X screen -t "Flask_server" bash -c "cd $flask_dir; ls; ./Flask_server.py; read x"
 | 
						|
    else
 | 
						|
        echo -e $RED"\t* A Flask_D4 screen is already launched"$DEFAULT
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function killall {
 | 
						|
 | 
						|
 | 
						|
    if [[ $isredis || $isd4server || $isworker || $isflask ]]; then
 | 
						|
        echo -e $GREEN"\t* Gracefully closing D4 Servers ..."$DEFAULT
 | 
						|
        kill -SIGINT $isd4server
 | 
						|
        sleep 3
 | 
						|
        kill $isd4server $isflask
 | 
						|
        echo -e $GREEN"\t* Gracefully closing D4 Workers ..."$DEFAULT
 | 
						|
        kill -SIGINT $isworker
 | 
						|
        sleep 0.5
 | 
						|
        kill $isworker
 | 
						|
        echo -e $GREEN"\t* $isd4server $isworker $isflask killed."$DEFAULT
 | 
						|
        echo -e $GREEN"\t* Gracefully closing redis servers ..."$DEFAULT
 | 
						|
        shutting_down_redis;
 | 
						|
        kill $isredis
 | 
						|
        sleep 0.2
 | 
						|
        echo -e $ROSE`screen -ls`$DEFAULT
 | 
						|
    else
 | 
						|
        echo -e $RED"\t* No screen to kill"$DEFAULT
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function update_web {
 | 
						|
    echo -e "\t* Updating web..."
 | 
						|
    bash -c "(cd ${D4_HOME}/web; ./update_web.sh)"
 | 
						|
    exitStatus=$?
 | 
						|
    if [ $exitStatus -ge 1 ]; then
 | 
						|
        echo -e $RED"\t* Web not up-to-date"$DEFAULT
 | 
						|
        exit
 | 
						|
    else
 | 
						|
        echo -e $GREEN"\t* Web updated"$DEFAULT
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function update_config {
 | 
						|
    echo -e $GREEN"\t* Updating Config File"$DEFAULT
 | 
						|
    bash -c "(cd ${D4_HOME}/configs; ./update_conf.py -v 0)"
 | 
						|
}
 | 
						|
 | 
						|
function launch_all {
 | 
						|
    helptext;
 | 
						|
    launch_redis;
 | 
						|
    update_config;
 | 
						|
    launch_d4_server;
 | 
						|
    launch_workers;
 | 
						|
    launch_flask;
 | 
						|
}
 | 
						|
 | 
						|
#If no params, display the menu
 | 
						|
[[ $@ ]] || {
 | 
						|
 | 
						|
    helptext;
 | 
						|
 | 
						|
    options=("Redis" "D4-Server" "Workers-manager" "Flask" "Killall" "Update-web")
 | 
						|
 | 
						|
    menu() {
 | 
						|
        echo "What do you want to Launch?:"
 | 
						|
        for i in ${!options[@]}; do
 | 
						|
            printf "%3d%s) %s\n" $((i+1)) "${choices[i]:- }" "${options[i]}"
 | 
						|
        done
 | 
						|
        [[ "$msg" ]] && echo "$msg"; :
 | 
						|
    }
 | 
						|
 | 
						|
    prompt="Check an option (again to uncheck, ENTER when done): "
 | 
						|
    while menu && read -rp "$prompt" numinput && [[ "$numinput" ]]; do
 | 
						|
        for num in $numinput; do
 | 
						|
            [[ "$num" != *[![:digit:]]* ]] && (( num > 0 && num <= ${#options[@]} )) || {
 | 
						|
                msg="Invalid option: $num"; break
 | 
						|
            }
 | 
						|
            ((num--)); msg="${options[num]} was ${choices[num]:+un}checked"
 | 
						|
            [[ "${choices[num]}" ]] && choices[num]="" || choices[num]="+"
 | 
						|
        done
 | 
						|
    done
 | 
						|
 | 
						|
    for i in ${!options[@]}; do
 | 
						|
        if [[ "${choices[i]}" ]]; then
 | 
						|
            case ${options[i]} in
 | 
						|
                Redis)
 | 
						|
                    launch_redis
 | 
						|
                    ;;
 | 
						|
                D4-Server)
 | 
						|
                    launch_d4_server;
 | 
						|
                    ;;
 | 
						|
                Workers-manager)
 | 
						|
                    launch_workers;
 | 
						|
                    ;;
 | 
						|
                Flask)
 | 
						|
                    launch_flask;
 | 
						|
                    ;;
 | 
						|
                Killall)
 | 
						|
                    killall;
 | 
						|
                    ;;
 | 
						|
                Update-web)
 | 
						|
                    update_web;
 | 
						|
                    ;;
 | 
						|
            esac
 | 
						|
        fi
 | 
						|
    done
 | 
						|
 | 
						|
    exit
 | 
						|
}
 | 
						|
 | 
						|
while [ "$1" != "" ]; do
 | 
						|
    case $1 in
 | 
						|
        -l | --launchAuto )           launch_all;
 | 
						|
                                      ;;
 | 
						|
        -k | --killAll )              helptext;
 | 
						|
                                      killall;
 | 
						|
                                      ;;
 | 
						|
        -lrv | --launchRedisVerify )  launch_redis;
 | 
						|
                                      wait_until_redis_is_ready;
 | 
						|
                                      ;;
 | 
						|
        -h | --help )                 helptext;
 | 
						|
                                      exit
 | 
						|
                                      ;;
 | 
						|
        * )                           helptext
 | 
						|
                                      exit 1
 | 
						|
    esac
 | 
						|
    shift
 | 
						|
done
 |