#!/bin/sh
#
# printers: Sun Enterprise Server check - BB external script test
#
# version 1.0
# version 1.1 - modified for new conditions
# version 1.2 - properly uses $CAT instead of cat
# version 1.3 - properly uses $MACHINE instead of `uname -n` in bb-hosts check
# version 1.4 - properly uses $THIS_HOST instead of $MACHINE due to fqdn using comma in name - thanks Craig Cook
# version 1.5 - switched "lpstat -p" to "lpstat -a" to filter rejected printers
#
# BIG BROTHER / XXXXXXXXXXXXXXXX status
#
# Written by Paul A. Luzzi
#  on March 22, 2000
#

########################################
# NOTE
# This has been tested with BB 1.2b, 1.4h2, 1.5, 1.5a
# 
# Tested on :
#   Sun Ultra 60, E220R/420R, E250/450, E3000/3500, E4500
#
# Could not make my table code appear as
#   nice as I normally do with all the 
#   indents, because the spaces were taking
#   up very precious data area I needed.
########################################

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

##################################
# CONFIGURE IT HERE
##################################
HPNPADMIN=/opt/hpnp/bin/hpnpadmin
LPSTAT=/usr/bin/lpstat
export HPNPADMIN LPSTAT 

##################################
# 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 written 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"
  echo "0" > /tmp/$THIS_HOST.printers.color
  
  #####
  #####  Printer Information
  #####
  echo "<DIV ALIGN=\"CENTER\"><HR>"
  echo "<B>========== ($HPNPADMIN -ESs) ==========</B>"
  echo "<HR></DIV>" 

  #####
    echo "<FONT FACE=\"Arial\">"
    echo "<TABLE BORDER=1 WIDTH=\"100%\" CELLPADDING=2>"
  
    echo "<TR>"
    echo "<TD><B><I>Printer Name</I></B></TD>"
    echo "<TD><B><I>Printer Status</I></B></TD>"
    echo "<TD><B><I>Control Panel</I></B></TD>"
    echo "<TD><B><I>Line State</I></B></TD>"
    echo "<TD><B><I>Printer State</I></B></TD>"
    echo "</TR>"
   
  #####
  #####  I used the "cat print.output" line for testing, since my test box 
  #####    doesnt support the hpnpadmin command.  Normally, the hpnpadmin
  #####    command will be called directly.
  #####
    cp /dev/null /tmp/$THIS_HOST.printers.out 2> /dev/null
    for PRT in `$LPSTAT -a | $GREP accepting | $GREP -v "not accepting" | $AWK '{print $1}' | $GREP -v ftp | $GREP -v kt_files | $SORT `
      do
        echo "\n====================\n" >> /tmp/$THIS_HOST.printers.out
        echo "Checking : $PRT\n" >> /tmp/$THIS_HOST.printers.out
        $HPNPADMIN -ESs $PRT >> /tmp/$THIS_HOST.printers.out
      done
  
    $CAT /tmp/$THIS_HOST.printers.out | while read FULL_LINE
    do
  
    #####
    #####     Checking       : - Printer Name
    #####     Printer Status : - Printer Status
    #####     Control Panel  : - Panel Display
    #####     Line State     : - Line State
    #####     Printer State  : - Printer State
    #####
       if [ ! -z "$FULL_LINE" ]
         then
  
           echo "$FULL_LINE" | $NAWK -F: '
             {
                 { 
                 if ( $1 == "====================" ) 
                   {
                     print "<TR>"
                   }
                 else if ( $1 == "Checking " ) 
                   {
                     print "<TD>"$2"</TD>"
                   }
                 else if ( $1 == "Printer Status" ) 
                   {
                     print "<TD>"$2"</TD>"
                   }
                 else if ( $1 == "Control Panel       " ) 
                   {
                      if ( $2 == " PERFORM USER" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TONER LOW      ?" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 0 EMPTY" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 1 EMPTY" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 2 EMPTY" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 3 EMPTY" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 4 EMPTY" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 5 EMPTY" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 0 OPEN" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 1 OPEN" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 2 OPEN" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 3 OPEN" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 4 OPEN" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 5 OPEN" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " LOAD TRAY 0" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " LOAD TRAY 1" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " LOAD TRAY 2" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " LOAD TRAY 3" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " LOAD TRAY 4" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " LOAD TRAY 5" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 0 LOAD" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 1 LOAD" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 2 LOAD" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 3 LOAD" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 4 LOAD" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                      else if ( $2 == " TRAY 5 LOAD" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                     print "<TD>"$2"</TD>"
                   } 
                 else if ( $1 == "Line State          " ) 
                   {
                     if ( $2 == " toner/ink low" )
                       { 
                         system( "echo 1 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                     print "<TD>"$2"</TD>"
                   } 
                 else if ( $1 == "Printer State       " ) 
                   {
                     if ( $2 == " offline or intervention needed" )
                       { 
                         system( "echo 2 >> /tmp/$THIS_HOST.printers.color" ) 
                       }
                     print "<TD>"$2"</TD>"
                     print "</TR>"
                   }
                 else if ( $1 == "*** Receive NO snmp response!" ) 
                   {
                     ##/usr/sbin/ping -s $PTR 64 1
                     print "<TD COLSPAN=4>Status N/A</TD>"
                     print "</TR>"
                   }
               } 
             } '  
  
           fi
  
    done
  
  #####
  #####  Close up the table, and the font tags - we're done.
  #####
  echo "</TABLE>"
  echo "</FONT>"

  #####
  #####  Make sure to export COLOR so that it gets back to "central"
  #####
  if [ -s "/tmp/$THIS_HOST.printers.color" ]
    then
      COLOR_NUMBER=` $CAT /tmp/$THIS_HOST.printers.color | $UNIQ | $SORT | $TAIL -1 `
     else
      COLOR_NUMBER=3
    fi

  case "$COLOR_NUMBER" in
    2)	COLOR="red";;
    1)  COLOR="yellow" ;;
    0)  COLOR="green" ;;
    *)  COLOR="clear" ;;
  esac

  export COLOR

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

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

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