#!/bin/bash
#< SSH into multiple servers, and display top process from each one, continually updating "in-place"

TOP_LINUX="/usr/bin/top"
TOP_LINUX_OPTS="-b -n 1"
TOP_SOLARIS="/usr/local/bin/top"
TOP_SOLARIS_OPTS="-d 1"
SED_LINUX="/bin/sed"
SED_LINUX_OPTS="-n '9,10p'"
SED_SOLARIS="/usr/bin/sed"
SED_SOLARIS_OPTS="-n '7,8p'"

CUT="/usr/bin/cut"
ECHO="/bin/echo"
PRINTF="/usr/bin/printf"
SLEEP="/bin/sleep"
SSH="/usr/bin/ssh"
TPUT="/usr/bin/tput"

trap "${TPUT} clear; exit 1" 1 2 3 15

# Populate the SERVERS array as follows:
SERVERS=( "host1:linux" "host2:solaris" "host3:nosuchos" )

COLUMN=0
${TPUT} clear
while [ true ]; do
   LINE=0
   for SERVER in ${SERVERS[@]}; do
      (( LINE = LINE + 2 ))
      ${TPUT} cup ${LINE} ${COLUMN}
      ${ECHO} "                                                                       "
      (( LINE = LINE - 2 ))
      ${TPUT} cup ${LINE} ${COLUMN}
      SERVERNAME=$( ${ECHO} "${SERVER}" | ${CUT} -d: -f1 ) 
      OS=$( ${ECHO} "${SERVER}" | ${CUT} -d: -f2 )
      ${PRINTF} "==[ %-20s ]==\n" "${SERVERNAME}"
      case ${OS} in
         "linux") 
                  CMD="${TOP_LINUX} ${TOP_LINUX_OPTS} | ${SED_LINUX} ${SED_LINUX_OPTS}" 
                  ;;
         "solaris")
                  CMD="${TOP_SOLARIS} ${TOP_SOLARIS_OPTS} | ${SED_SOLARIS} ${SED_SOLARIS_OPTS}" 
                  ;;
         *        )
                  ${ECHO} "OS not supported"
                  ;;
      esac
      eval ${SSH} ${SERVERNAME} \"${CMD}\"
      (( LINE = LINE + 3 ))
   done
done

exit 0