#!/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