diff --git a/commands/manage-server.sh b/commands/manage-server.sh index ca7b7bb..36673f8 100755 --- a/commands/manage-server.sh +++ b/commands/manage-server.sh @@ -5,53 +5,99 @@ cd $(dirname "$0") WKS_LIST="apl" SRV_LIST="moore noyce hamano cpp" -ACTIONS="start stop restart update" +KNOWN_ACTIONS="start stop restart update log viewlog view_log" LOG=`mktemp` -for ACT in $ACTIONS +ACTIONS= +DESTS= +USED=1 +while [ $# -gt 0 ] && [ $USED -eq 1 ] do - if [ -n "$1" ] && [ "$1" == "$ACT" ] + + USED=0 + + for ACT in $KNOWN_ACTIONS + do + if [ -n "$1" ] && [ "$1" == "$ACT" ] + then + ACTIONS="$ACTIONS $ACT" + USED=1 + break + fi + done + + for DEST in $WKS_LIST $SRV_LIST + do + if [ -n "$1" ] && [ "$1" == "$DEST" ] + then + DESTS="$DESTS $DEST" + USED=1 + break + fi + done + + if [ "$1" == "@srv" ] then - ACTION="$ACT" - break + DESTS="$DESTS $SRV_LIST" + USED=1 + elif [ "$1" == "@wks" ] + then + DESTS="$DESTS $WKS_LIST" + USED=1 fi + + if [ $USED -eq 1 ] + then + shift + fi + done -if [ -z "$ACTION" ] + +if [ -z "$ACTIONS" ] then - echo "Usage: $0 [$ACTIONS]" + echo "Usage: $0 [where] <`echo $KNOWN_ACTIONS | sed 's/ /|/g'`> [options]" + exit 1 fi -FAIL=0 -for SRV in $SRV_LIST -do - echo -e "\e[1;34m>>>\e[0m $ACTION on $SRV" - if [ "$ACTION" == "update" ] - then - ssh root@$SRV "make -C liblerdorf update upgrade" - else - ssh root@$SRV '~'/liblerdorf/process/launch.sh "$ACTION" - fi +if [ -z "$DESTS" ] +then + DESTS="$SRV_LIST $WKS_LIST" +fi - if [ $? -eq 0 ] - then - echo -e "\e[1;32m>>>\e[0m $ACTION success on $SRV" | tee -a "$LOG" - else - echo -e "\e[1;31m>>>\e[0m $ACTION fails on $SRV" | tee -a "$LOG" - FAIL=1 - fi - echo +OPTIONS= +while [ $# -gt 0 ] +do + OPTIONS="$OPTIONS $1" + shift done -for WKS in $WKS_LIST +FAIL=0 +for ACTION in $ACTIONS do - echo -e "\e[1;34m>>>\e[0m $ACTION on $WKS" - if [ "$ACTION" == "update" ] - then - ssh root@$SRV "make -C liblerdorf update upgrade" - fi - echo + for DEST in $DESTS + do + echo -e "\e[1;34m>>>\e[0m \e[33m$ACTION\e[0m on \e[1m$DEST\e[0m" + if [ "$ACTION" == "update" ] + then + ssh root@$DEST "make -C liblerdorf update upgrade" + elif [ "$ACTION" == "log" ] || [ "$ACTION" == "viewlog" ] || [ "$ACTION" == "view_log" ] + then + ssh root@$DEST '~'/liblerdorf/process/view_log.sh $OPTIONS + else + ssh root@$DEST '~'/liblerdorf/process/launch.sh "$ACTION" + fi + + if [ $? -eq 0 ] + then + echo -e "\e[1;32m>>>\e[0m \e[33m$ACTION\e[0m success on \e[1m$DEST\e[0m" | tee -a "$LOG" + else + echo -e "\e[1;31m>>>\e[0m \e[33m$ACTION\e[0m fails on \e[1m$DEST\e[0m" | tee -a "$LOG" + FAIL=1 + fi + echo + done done cat "$LOG" diff --git a/process/view_log.sh b/process/view_log.sh new file mode 100644 index 0000000..7b7347f --- /dev/null +++ b/process/view_log.sh @@ -0,0 +1,67 @@ +#! /bin/sh + +cd `dirname $0`/.. + +UN=$1 +if [ "$1" = "full" ] +then + CMD=cat + shift +elif echo "$1" | grep -e '^-' > /dev/null +then + CMD="tail -n `echo $1 | cut -d '-' -f 2-`" + shift +else + CMD="tail -n 50" +fi + +TMP=`mktemp` + +DIRS="./" +if [ -d "/var/log/hooks/" ] +then + DIRS="$DIRS /var/log/hooks/" +fi + +if [ $# -eq 0 ] +then + + for D in $DIRS + do + for I in `find "$D" -name '*.log'` + do + /bin/echo -e "`dirname ${I#$D}`/\e[1m`basename $I`\e[0m" + done + done + +else + + LIST=`mktemp` + + find $DIRS -name '*.log' > $LIST + + while [ $# -gt 0 ] + do + + NB=`grep "/$1" "$LIST" | wc -l` + if [ $NB = 1 ] + then + $CMD `grep "/$1" "$LIST"` + echo + elif [ $NB -gt 1 ] + then + echo "Too much matching file for '$1':" + for I in `grep "$1" "$LIST" | sed -E 's#^./##'` + do + /bin/echo -e "`dirname $I`/\e[1m`basename $I`\e[0m" + done + else + echo "Unable to find '$1' log file" + exit 1 + fi + shift + + done + + rm -rf "$LIST"; +fi