#!/bin/sh
#
# iostat: Sun Enterprise Server check - BB external script test
#
# version 1.0
# version 2.0 - now performs status check on vmstat results.
#               will now take over a minute and a half to run however.
# version 2.1 - now runs iostat in a more efficient manner
# version 2.2 - properly uses $CAT instead of cat
# version 2.3 - properly uses $MACHINE instead of `uname -n` in bb-hosts check
# version 2.4 - looks to see if $IOSTAT is set - for Linux mostly.
# version 2.5 - properly uses $THIS_HOST instead of $MACHINE due to fqdn using comma in name - thanks Craig Cook
# version 2.6 - properly works for HP-UX now
#
# BIG BROTHER / XXXXXXXXXXXXXXXX status
#
# Written by Paul A. Luzzi
#  on March 22, 2000
#

########################################
# NOTE
# This has been tested with BB 1.2b
# 
# Tested on :
#   Sun E3000, E3500, E3501, E4500, E4501
########################################

########################################
# INSTALLATION
#  step 1  - update the EXT section of the runbb.sh script to include this
#  ...
########################################

##################################
# CONFIGURE IT HERE
##################################

##################################
# Start of script
##################################

if test ! "$BBHOME"
then
	echo "template: BBHOME is not set"
	exit 1
fi

if test ! -d "$BBHOME"
then
	echo "template: BBHOME is invalid"
	exit 1
fi

if test ! "$BBTMP"                      # GET DEFINITIONS IF NEEDED
then
	echo "template: The BB environment is not set"
	exit 1
fi

#####
#####  Start of custom section added by Paul A. Luzzi
#####

#####
#####  Get Status proc - used to get all responses
#####
get_status() 
{

  #####
  #####  Setup any and all variables before beginning.
  #####

  #####
  #####  Section copied from script originally written by Mike Arki
  #####    Modified extensively on 03-22-2000 by Paul A. Luzzi
  #####    for use with Big Brother
  #####
  #####  Purpose is to report back to a central server, all "standard"
  #####    detailed information about network, disk, volume, cpu, memory
  #####    which is not reported thru regular "easy" checks.
  #####
  #####  Any problem areas should be highlighted in :
  #####    bold, italics, and red font.
  #####

  #####
  #####  Setup some variables for use later
  #####
  COLOR="green"
  
  #####
  #####  System Resource Monitoring
  #####
  echo "<P><DIV ALIGN=\"CENTER\"><HR>" 
  echo "<B>============== Virtual Memory Info ==============</B>"
  echo "<B>--- (vmstat 2 10) ---</B>"
  echo "<HR></DIV>" 
  echo "<BLOCKQUOTE>" 
  CATCH_COMMAND=` $VMSTAT 2 10 > /tmp/$THIS_HOST.iostat.log `
  RESULT_FLAG="$?"
  COMMAND_1=` $CAT /tmp/$THIS_HOST.iostat.log | $AWK '{print $1}' | $TAIL -9 `
  COMMAND_2=` $CAT /tmp/$THIS_HOST.iostat.log | $AWK '{print $2}' | $TAIL -9 `
  COMMAND_3=` $CAT /tmp/$THIS_HOST.iostat.log | $AWK '{print $3}' | $TAIL -9 `
  ## COMMAND_8=` $CAT /tmp/$THIS_HOST.iostat.log | $AWK '{print $8}' | $TAIL -9 `
  COMMAND_9=` $CAT /tmp/$THIS_HOST.iostat.log | $AWK '{print $9}' | $TAIL -9 `
  COMMAND_12=` $CAT /tmp/$THIS_HOST.iostat.log | $AWK '{print $12}' | $TAIL -9 `
  if [ "$RESULT_FLAG" = "0" ]
    then
      #####
      #####  Echo the results first
      #####
      $CAT /tmp/$THIS_HOST.iostat.log
      echo ""
      #####
      #####  Check for run queue length
      #####
      for VALUE in $COMMAND_1
      do
        if [ "$VALUE" -gt "5" ]
          then
            COMMAND_1_RESULTS="$VALUE"
            COLOR="yellow"
          fi
      done
      #####
      #####  Check for blocked processes
      #####
      for VALUE in $COMMAND_2
      do
        if [ "$VALUE" -gt "5" ]
          then
            COMMAND_2_RESULTS="$VALUE"
            COLOR="yellow"
          fi
      done
      #####
      #####  Check for runnable but swapped processes
      #####
      for VALUE in $COMMAND_3
      do
        if [ "$VALUE" -gt "5" ]
          then
            COMMAND_3_RESULTS="$VALUE"
            COLOR="yellow"
          fi
      done
      #####
      #####  Check for page in processes
      #####
      ## for VALUE in $COMMAND_8
      ## do
      ##   if [ "$VALUE" -gt "10" ]
      ##     then
      ##       COMMAND_8_RESULTS="$VALUE"
      ##       COLOR="yellow"
      ##     fi
      ## done
      #####
      #####  Check for page out processes
      #####
      for VALUE in $COMMAND_9
      do
        if [ "$VALUE" -gt "10" ]
          then
            COMMAND_9_RESULTS="$VALUE"
            COLOR="yellow"
          fi
      done
      #####
      #####  Check for high scan rate
      #####
      for VALUE in $COMMAND_12
      do
        if [ "$VALUE" -gt "10" ]
          then
            COMMAND_12_RESULTS="$VALUE"
            COLOR="yellow"
          fi
      done
      #####
      #####  If any are "warnable" then do so.
      #####
      if [ "$COMMAND_1_RESULTS" -gt "0" ]
        then
          echo "There's $COMMAND_1_RESULTS processes in run queue."
        fi
      if [ "$COMMAND_2_RESULTS" -gt "0" ]
        then
          echo "Ther's $COMMAND_2_RESULTS blocked processes."
        fi
      if [ "$COMMAND_3_RESULTS" -gt "0" ]
        then
          echo "There's $COMMAND_3_RESULTS runnable, but swapped processes."
        fi
      ## if [ "$COMMAND_8_RESULTS" -gt "0" ]
      ##   then
      ##     echo "There's $COMMAND_8_RESULTS page-in processes going on."
      ##   fi
      if [ "$COMMAND_9_RESULTS" -gt "0" ]
        then
          echo "There's $COMMAND_9_RESULTS page-out processes going on."
        fi
      if [ "$COMMAND_12_RESULTS" -gt "0" ]
        then
          echo "There's a scan rate of $COMMAND_12_RESULTS present."
        fi
     else
      COLOR="red"
      echo "Problem with virtual memory or command !!!"
    fi
  echo "</BLOCKQUOTE>" 

  #####
  #####  System Resource Monitoring
  #####
  if [ ! -z "$IOSTAT" ]
    then
      echo "<P><DIV ALIGN=\"CENTER\"><HR>" 
      echo "<B>============== Disk I/O Statistics ==============</B>"
      if [ "$OS_TYPE" = "SunOS" ]
        then
          echo "<B>--- (iostat -x 5 2) ---</B>"
          CATCH_COMMAND=` $IOSTAT -x 5 2 `
         else
          echo "<B>--- (iostat 5 2) ---</B>"
          CATCH_COMMAND=` $IOSTAT 5 2 `
        fi
      echo "<HR></DIV>" 
      echo "<BLOCKQUOTE>" 
      if [ "$?" = "0" ]
        then
          echo "$CATCH_COMMAND"
         else
          COLOR="red"
          echo "Problem with iostat !!!"
        fi
      echo "</BLOCKQUOTE>" 
    fi

  #####
  #####  Make sure to export COLOR so that it gets back to "central"
  #####
  export COLOR

#####
#####  End of get_status proc
#####
}

#####
#####  Main body
#####
touch /tmp/$THIS_HOST.iostat
$GREP $THIS_HOST $BBHOSTS | $GREP "iostat" | 
while read line
  do
    if [ ! -z "$line" ]
      then
        echo "<BR><DIV ALIGN=\"CENTER\"><HR></DIV>" > /tmp/$THIS_HOST.iostat
        echo "Status of iostat/vmstat on $THIS_HOST " >> /tmp/$THIS_HOST.iostat
        echo "Captured : `$DATE` " >> /tmp/$THIS_HOST.iostat
        get_status >> /tmp/$THIS_HOST.iostat
        $BB $BBDISP "status $THIS_HOST.iostat $COLOR `$DATE` `$CAT /tmp/$THIS_HOST.iostat` "
      else
        COLOR="clear"
        $BB $BBDISP "status $THIS_HOST.iostat $COLOR `$DATE` `$CAT /tmp/$THIS_HOST.iostat` "
      fi
    done

#####
#####  End of custom section added by Paul A. Luzzi
#####
  
##############################################
# end of script
##############################################
