mirror of https://github.com/D4-project/d4-core
				
				
				
			
		
			
				
	
	
		
			285 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			285 lines
		
	
	
		
			9.0 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]
 | |
|     "
 | |
| }
 | |
| 
 | |
| 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
 | |
| }
 | |
| 
 | |
| 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 "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 6379 SHUTDOWN'
 | |
|     sleep 0.1
 | |
|     bash -c $redis_dir'redis-cli -p 6380 SHUTDOWN'
 | |
|     sleep 0.1
 | |
| }
 | |
| 
 | |
| function checking_redis {
 | |
|     flag_redis=0
 | |
|     redis_dir=${D4_HOME}/redis/src/
 | |
|     bash -c $redis_dir'redis-cli -p 6379 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 6380 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 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 launch_all {
 | |
|     helptext;
 | |
|     launch_redis;
 | |
|     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;
 | |
|                                     ;;
 | |
|         -h | --help )               helptext;
 | |
|                                     exit
 | |
|                                     ;;
 | |
|         * )                         helptext
 | |
|                                     exit 1
 | |
|     esac
 | |
|     shift
 | |
| done
 |