Преглед изворни кода

Add test for Oracle name server, can dynamicall determine ORACLE_HOME - tom Bertelson

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@45 f882894a-f735-0410-b71e-b25c423dba1c
Subhendu Ghosh пре 24 година
родитељ
комит
33d91abe09
1 измењених фајлова са 65 додато и 13 уклоњено
  1. 65 13
      plugins-scripts/check_oracle.sh

+ 65 - 13
plugins-scripts/check_oracle.sh

@@ -36,6 +36,7 @@ print_usage() {
   echo "Usage:"
   echo "Usage:"
   echo "  $PROGNAME --tns <Oracle Sid or Hostname/IP address>"
   echo "  $PROGNAME --tns <Oracle Sid or Hostname/IP address>"
   echo "  $PROGNAME --db <ORACLE_SID>"
   echo "  $PROGNAME --db <ORACLE_SID>"
+  echo "  $PROGNAME --oranames <Hostname>"
   echo "  $PROGNAME --help"
   echo "  $PROGNAME --help"
   echo "  $PROGNAME --version"
   echo "  $PROGNAME --version"
 }
 }
@@ -52,13 +53,15 @@ print_help() {
   echo "--db=SID"
   echo "--db=SID"
   echo "   Check local database (search /bin/ps for PMON process and check"
   echo "   Check local database (search /bin/ps for PMON process and check"
 	echo "   filesystem for sgadefORACLE_SID.dbf"
 	echo "   filesystem for sgadefORACLE_SID.dbf"
+  echo "--oranames=Hostname"
+  echo "   Check remote Oracle Names server"
   echo "--help"
   echo "--help"
 	echo "   Print this help screen"
 	echo "   Print this help screen"
   echo "--version"
   echo "--version"
 	echo "   Print version and license information"
 	echo "   Print version and license information"
 	echo ""
 	echo ""
-  echo "If the plugin doesn't work, check that the $ORACLE_HOME environment"
-	echo "variable is set, that $ORACLE_HOME/bin is in your PATH, and the"
+  echo "If the plugin doesn't work, check that the ORACLE_HOME environment"
+	echo "variable is set, that ORACLE_HOME/bin is in your PATH, and the"
   echo "tnsnames.ora file is locatable and is properly configured."
   echo "tnsnames.ora file is locatable and is properly configured."
   echo ""
   echo ""
   echo "When checking Local Database status your ORACLE_SID is case sensitive."
   echo "When checking Local Database status your ORACLE_SID is case sensitive."
@@ -78,27 +81,76 @@ case "$1" in
     ;;
     ;;
 esac
 esac
 
 
+# Hunt down a reasonable ORACLE_HOME
+if [ -z "$ORACLE_HOME" ] ; then
+	# Adjust to taste
+	for oratab in /var/opt/oracle/oratab /etc/oratab
+	do
+	[ ! -f $oratab ] && continue
+	ORACLE_HOME=`IFS=:
+		while read SID ORACLE_HOME junk;
+		do
+			if [ "$SID" = "$2" ] ; then
+				echo $ORACLE_HOME;
+				exit;
+			fi;
+		done < $oratab`
+	[ -n "$ORACLE_HOME" ] && break
+	done
+fi
+# Last resort
+[ -z "$ORACLE_HOME" -a -d $PROGPATH/oracle ] && ORACLE_HOME=$PROGPATH/oracle
+
+if [ -z "$ORACLE_HOME" -o ! -d "$ORACLE_HOME" ] ; then
+	echo "Cannot determine ORACLE_HOME for sid $2"
+	exit $STATE_UNKNOWN
+fi
+PATH=$PATH:$ORACLE_HOME/bin
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
+export ORACLE_HOME PATH LD_LIBRARY_PATH
+
 case "$cmd" in
 case "$cmd" in
 --tns)
 --tns)
-    export tnschk=` tnsping $2`
-    export tnschk2=` echo  $tnschk | grep -c OK`
-    export tnschk3=` echo $tnschk | cut -d\( -f7 | sed y/\)/" "/`
+    tnschk=` tnsping $2`
+    tnschk2=` echo  $tnschk | grep -c OK`
     if [ ${tnschk2} -eq 1 ] ; then 
     if [ ${tnschk2} -eq 1 ] ; then 
+	tnschk3=` echo $tnschk | sed -e 's/.*(//' -e 's/).*//'`
 	echo "OK - reply time ${tnschk3} from $2"
 	echo "OK - reply time ${tnschk3} from $2"
-	exit 0
+	exit $STATE_OK
     else
     else
 	echo "No TNS Listener on $2"
 	echo "No TNS Listener on $2"
 	exit $STATE_CRITICAL
 	exit $STATE_CRITICAL
     fi
     fi
     ;;
     ;;
+--oranames)
+    namesctl status $2 | awk '
+    /Server has been running for:/ {
+	msg = "OK: Up"
+	for (i = 6; i <= NF; i++) {
+	    msg = msg " " $i
+	}
+	status = '$STATE_OK'
+    }
+    /error/ {
+	msg = "CRITICAL: " $0
+	status = '$STATE_CRITICAL'
+    }
+    END {
+	print msg
+	exit status
+    }'
+    ;;
 --db)
 --db)
-    export pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon`
-    if [ -e $ORACLE_HOME/dbs/sga*${2}* ] ; then
-	if [ ${pmonchk} -eq 1 ] ; then
-    export utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
-	    echo "${2} OK - running since ${utime}"
-	    exit $STATE_OK
-	fi
+    pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon`
+    if [ ${pmonchk} -ge 1 ] ; then
+	echo "${2} OK - ${pmonchk} PMON process(es) running"
+	exit $STATE_OK
+    #if [ -f $ORACLE_HOME/dbs/sga*${2}* ] ; then
+	#if [ ${pmonchk} -eq 1 ] ; then
+    #utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
+	    #echo "${2} OK - running since ${utime}"
+	    #exit $STATE_OK
+	#fi
     else
     else
 	echo "${2} Database is DOWN"
 	echo "${2} Database is DOWN"
 	exit $STATE_CRITICAL
 	exit $STATE_CRITICAL