# Some useful scripts to put in your ~/.bashrc in case you are using bash (assuming OT_PREFIX is '~/opentox-ruby') # Load server config otconfig() { . $HOME/.opentox/config/install/config.sh . $OT_PREFIX/install/utils.sh } # configure tab completion for ottools _ottoolcompletion() { word="${COMP_WORDS[COMP_CWORD]}" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W ' all algorithm compound dataset feature model task validation 4store ' "$word")) ; } complete -o default -F _ottoolcompletion otstart #complete -o default -F _ottoolcompletion otreload complete -o default -F _ottoolcompletion otkill complete -o default -F _ottoolcompletion otcheck # Display log alias otless='less $HOME/.opentox/log/development.log' # Tail log alias ottail='tail -f $HOME/.opentox/log/development.log' # Start unicorn # @param1 [service_name] # @param2 integer Port # @example start_unicorn algorithm 8081 start_unicorn() { cd $HOME/opentox-ruby/$1 nice bash -c "nohup unicorn -p $2 >/dev/null 2>&1 &" # sleep 0.5 # check_service $1 online } # Start 4Store # @param1 [backend_name] # @param2 integer Port # @example start_4s opentox 9088 start_4s() { nice bash -c "nohup $OT_PREFIX/4S/bin/4s-backend $1 >/dev/null 2>&1 &"; sleep 4; nice bash -c "nohup $OT_PREFIX/4S/bin/4s-httpd -p $2 -s -1 $1 >/dev/null 2>&1 &"; #-D for testing # sleep 1; # check_service four_store online } # Start the server otstart() { if [ $# != 1 ]; then echo "One argument required: [service_name] or 'all'" echo "usage: otstart [all|algorithm|compound|dataset|feature|model|task|validation|4store]" return 1 fi otconfig otkill $1 DIR=`pwd` case "$1" in "algorithm") otkill compound; otkill feature; otstart compound; otstart feature; start_unicorn $1 8081;; "compound") start_unicorn $1 8082;; "dataset") start_unicorn $1 8083;; "feature") start_unicorn $1 8084;; "model") start_unicorn $1 8085;; "task") start_unicorn $1 8086;; "validation") start_unicorn $1 8087; nice bash -c "nohup redis-server $OT_PREFIX/validation/redis-*/redis.conf >/dev/null 2>&1 &";; "4store") start_4s opentox 9088; if ! pgrep -u $USER 4s-backend>/dev/null 2>&1; then echo "Failed to start 4s-backend."; fi if ! pgrep -u $USER 4s-httpd>/dev/null 2>&1; then echo "Failed to start 4s-httpd."; fi;; #otcheck 4store;; "all") otstart 4store; otstart dataset; otstart model; otstart task; otstart algorithm; #compound and feature is included otstart validation;; #sleep 1; #otcheck all;; *) echo "One argument required: [service_name] or 'all'"; echo "usage: otstart [all|algorithm|compound|dataset|feature|model|task|validation|4store]"; return 1;; esac cd $DIR } # reload unicorn # @param1 integer Port # @example reload_unicorn 8081 #reload_unicorn() { # for p in `ps x | grep 'unicorn master' | grep $1 | grep -v grep | awk '{print $1}'`; do # kill -12 $p # done # sleep 0.5 # for p in `ps x | grep 'unicorn master (old)' | grep $1 | grep -v grep | awk '{print $1}'`; do # kill -28 $p # done # sleep 0.5 # # ToDo: Check if new master is working properly. # for p in `ps x | grep 'unicorn master (old)' | grep $1 | grep -v grep | awk '{print $1}'`; do # kill -3 $p # done #} # Reload the server #otreload() { # if [ $# != 1 ]; then # echo "One argument required: [service_name] or 'all'" # echo "usage: otreload [all|algorithm|compound|dataset|feature|model|task|validation|4store]" # return 1 # fi # # otconfig # case "$1" in # "algorithm") reload_unicorn 8081; # check_service "algorithm";; # "compound") reload_unicorn 8082; # check_service "compound";; # "dataset") reload_unicorn 8083; # check_service "dataset";; # "feature") reload_unicorn 8084; # check_service "feature";; # "model") reload_unicorn 8085; # check_service "model";; # "task") reload_unicorn 8086; # check_service "task";; # "validation") reload_unicorn 8087; # check_service "validation";; # "4store") #killall 4s-httpd >/dev/null 2>&1; # #killall 4s-backend >/dev/null 2>&1; # #check_service "four_store";; # echo "$1 reload not available yet.";; # "all") otreload algorithm; # otreload compound; # otreload dataset; # otreload feature; # otreload model; # otreload task; # otrelaod validation;; # #otreload 4store;; # *) echo "One argument required: [service_name] or 'all'"; # echo "usage: otreload [all|algorithm|compound|dataset|feature|model|task|validation|4store]"; # return 1;; # esac #} # kill unicorn # @param1 integer Port # @example kill_unicorn 8081 kill_unicorn() { for p in `ps x | grep 'unicorn' | grep $1 | grep -v grep | awk '{print $1}'`; do kill -3 $p; done; sleep 0.5 for p in `ps x | grep 'unicorn' | grep $1 | grep -v grep | awk '{print $1}'`; do echo "Process with PID $p is still running and belongs to port $1. Please wait and run otkill again."; done; } # Kill the server otkill() { if [ $# != 1 ]; then echo "One argument required: [service_name] or 'all'" echo "usage: otkill [all|algorithm|compound|dataset|feature|model|task|validation|4store]" return 1 fi otconfig case "$1" in "algorithm") kill_unicorn 8081;; "compound") kill_unicorn 8082;; "dataset") kill_unicorn 8083;; "feature") kill_unicorn 8084;; "model") kill_unicorn 8085;; "task") kill_unicorn 8086;; "validation") kill_unicorn 8087; bash -c "redis-cli -p $OHM_PORT shutdown >/dev/null 2>&1";; "4store") killall 4s-httpd >/dev/null 2>&1; killall 4s-backend >/dev/null 2>&1;; "all") otkill algorithm; otkill compound; otkill dataset; otkill feature; otkill model; otkill task; otkill validation; otkill 4store;; *) echo "One argument required: [service_name] or 'all'"; echo "usage: otkill [all|algorithm|compound|dataset|feature|model|task|validation|4store]"; return 1;; esac } # get service uri # sets $SERVICE_URI if found in config files # @param1 string [service_name] # @example get_service_uri algorithm get_service_uri() { if [ $# != 1 ]; then echo "One argument required: [service_name]" echo "usage: get_service_uri [algorithm|compound|dataset|feature|model|task|validation|four_store]" return 1 fi SERVICE_URI="" if [ -f $HOME/.opentox/config/$1.rb ]; then SERVICE_URI=`cat $HOME/.opentox/config/$1.rb | grep $1 | grep "uri" | awk -F":uri => " '{print $2}' | awk -F" " '{print $1}' | awk -F"," '{print $1}' | sed "s/'//g" | sed 's/"//g'` fi if [ -f $HOME/.opentox/config/default.rb ]; then [ -n "$SERVICE_URI" ] || SERVICE_URI=`cat $HOME/.opentox/config/default.rb | grep $1 | grep "uri" | awk -F":uri => " '{print $2}' | awk -F" " '{print $1}' | awk -F"," '{print $1}' | sed "s/'//g" | sed 's/"//g'` fi if [ -z "$SERVICE_URI" ]; then echo "Cannot find service uri for $1 in config files." return 1 else return 0 fi } # Check service # @param1 string [service_name] # @param2 (optinal) string ["online"] ; output for running services # @example check_service algorithm online check_service() { check_utils "curl" if [ $# != 1 ] && [ $# != 2 ]; then echo "One argument required: [service_name]. Second argument optional." echo "usage: check_service [algorithm|compound|dataset|feature|model|task|validation|four_store] [online](optional)" return 1 fi get_service_uri $1 MY_SERVICE="IST service" if [[ $1 == "four_store" ]]; then SERVICE_URI="$SERVICE_URI""/status/" MY_SERVICE="HTTP service" fi if [ -n "`$CURL -i -k -X HEAD $SERVICE_URI 2>&1 | grep '^HTTP' |grep ' 200'`" ]; then if [[ $2 == "online" ]]; then echo "$MY_SERVICE $1 is running at $SERVICE_URI." return 1 fi return 0 else echo "$MY_SERVICE $1 is NOT available at $SERVICE_URI." return 1 fi } #check_all_service_offline() { # CHECK_RESULT=`otcheck all` # if [ -z "$CHECK_RESULT" ]; then # echo "IST service(s) is(are) running." # otcheck all # return 1 # else # echo "IST services are offline." # fi #} # Check response of web service otcheck() { if [ $# != 1 ]; then echo "One argument required: [service_name] or 'all'" echo "usage: otcheck [all|algorithm|compound|dataset|feature|model|task|validation|4store]" return 1 fi otconfig case "$1" in "algorithm") check_service "algorithm";; "compound") check_service "compound";; "dataset") check_service "dataset";; "feature") check_service "feature";; "model") check_service "model";; "task") check_service "task";; "validation") check_service "validation";; "4store") check_service "four_store";; "all") otcheck "algorithm"; otcheck "compound"; otcheck "dataset"; otcheck "feature"; otcheck "model"; otcheck "task"; otcheck "validation"; otcheck 4store;; *) echo "One argument required: [service_name] or 'all'"; echo "usage: otcheck [all|algorithm|compound|dataset|feature|model|task|validation|4store]"; return 1;; esac } # pull repository # @param1 service # @example pull_repo algorithm pull_repo() { otconfig cd $OT_PREFIX/$1 if OUTPUT=`git pull 2>&1`; then echo "Pulled $1."; else echo -e "Pulling $1 failed.\nMessage: $OUTPUT\n"; fi } # pulls recent git repoitory of the service otupdate_repo() { if [ $# != 1 ]; then echo "One argument required: [service_name] or 'all'" echo "usage: otupdate_repo [all|algorithm|compound|dataset|feature|model|opentox-client|opentox-server|opentox-test|task|validation]" return 1 fi DIR=`pwd` otconfig case "$1" in "algorithm") pull_repo algorithm;; "compound") pull_repo compound;; "dataset") pull_repo dataset;; "feature") pull_repo feature;; "model") pull_repo model;; "opentox-client") pull_repo opentox-client;; "opentox-server") pull_repo opentox-server;; "opentox-test") pull_repo opentox-test;; "task") pull_repo task;; "validation") pull_repo validation;; "all") otupdate_repo algorithm; otupdate_repo compound; otupdate_repo dataset; otupdate_repo feature; otupdate_repo model; otupdate_repo opentox-client; otupdate_repo opentox-server; otupdate_repo opentox-test; otupdate_repo task; otupdate_repo validation;; *) echo "One argument required: [service_name] or 'all'"; echo "usage: otupdate_repo [all|algorithm|compound|dataset|feature|model|opentox-client|opentox-server|opentox-test|task|validation]"; return 1;; esac cd $DIR }