Improved handling of legacy oracle plugin error cases
Message-ID: <56a6244d.wr4ZPoqZkoGLa7C0%lm(a)mathias-kettner.de>
User-Agent: Heirloom mailx 12.5 6/20/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Module: check_mk
Branch: master
Commit: 9b8238a46f2fc676bf00a13c864fa7ae5d367f7d
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=9b8238a46f2fc6…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Jan 25 13:20:33 2016 +0100
#2949 FIX oracle_logswitches oracle_sessions oracle_version: Improved handling of legacy
oracle plugin error cases
---
.werks/2949 | 9 +++++++++
ChangeLog | 1 +
checks/oracle.include | 21 +++++++++++++++++++++
checks/oracle_locks | 13 ++++++-------
checks/oracle_logswitches | 6 ++++++
checks/oracle_sessions | 6 ++++++
checks/oracle_version | 1 +
7 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/.werks/2949 b/.werks/2949
new file mode 100644
index 0000000..6bf3486
--- /dev/null
+++ b/.werks/2949
@@ -0,0 +1,9 @@
+Title: oracle_logswitches oracle_sessions oracle_version: Improved handling of legacy
oracle plugin error cases
+Level: 1
+Component: checks
+Compatible: compat
+Version: 1.2.7i4
+Date: 1453724413
+Class: fix
+
+
diff --git a/ChangeLog b/ChangeLog
index 284621a..0cae142 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -206,6 +206,7 @@
* 2911 FIX: mysql.innodb_io: Fixed crash in case averaging is set to 0 minutes
* 2912 FIX: mk_oracle mk_oracle.aix: Fixed handling of DBs which names end with
"_[NUMBER]"...
* 2948 FIX: oracle_tablespaces: Fixed exception when section contained empty line
+ * 2949 FIX: oracle_logswitches oracle_sessions oracle_version: Improved handling of
legacy oracle plugin error cases
Multisite:
* 2684 Added icons for downloading agent data / walks of hosts...
diff --git a/checks/oracle.include b/checks/oracle.include
index 94a1ca9..8bb8a0c 100644
--- a/checks/oracle.include
+++ b/checks/oracle.include
@@ -40,6 +40,10 @@ def oracle_handle_ora_errors(line):
if len(line) == 1:
return
+ legacy_error = oracle_handle_legacy_ora_errors(line)
+ if legacy_error:
+ return legacy_error
+
# Handle error output from new agent
if line[1] == 'FAILURE':
if len(line) >= 3 and line[2].startswith("ORA-"):
@@ -54,3 +58,20 @@ def oracle_handle_ora_errors(line):
return (3, 'Found error in agent output "%s"' % '
'.join(line[1:]))
+def oracle_handle_legacy_ora_errors(line):
+ # Skip over line before ORA- errors (e.g. sent by AIX agent from 2014)
+ if line == ["ERROR:"]:
+ return False
+
+ if line[0].startswith('ORA-'):
+ return (3, 'Found error in agent output "%s"' % '
'.join(line))
+
+
+# Fully prevent creation of services when an error is found.
+def oracle_handle_ora_errors_discovery(info):
+ for line in info:
+ err = oracle_handle_ora_errors(line)
+ if err == False:
+ continue
+ elif isinstance(err, tuple):
+ raise MKGeneralException(err[1])
diff --git a/checks/oracle_locks b/checks/oracle_locks
index 84ebafa..02a817a 100644
--- a/checks/oracle_locks
+++ b/checks/oracle_locks
@@ -44,14 +44,13 @@ def check_oracle_locks(item, params, info):
for line in info:
warn, crit = params["levels"]
- # Skip over line before ORA- errors (e.g. sent by AIX agent from 2014)
- if line == ["ERROR:"]:
- continue
-
- if line[0].startswith('ORA-'):
- return (3, 'Found error in agent output "%s"' % '
'.join(line))
-
if line[0] == item and line[1] != '':
+ err = oracle_handle_ora_errors(line)
+ if err == False:
+ continue
+ elif isinstance(err, tuple):
+ return err
+
sid, sidnr, serial, machine, program, process, osuser, ctime, \
object_owner, object_name = line
diff --git a/checks/oracle_logswitches b/checks/oracle_logswitches
index d17b564..012379c 100644
--- a/checks/oracle_logswitches
+++ b/checks/oracle_logswitches
@@ -31,11 +31,17 @@
oracle_logswitches_default_levels = (-1, -1, 50, 100)
def inventory_oracle_logswitches(info):
+ oracle_handle_ora_errors_discovery(info)
return [ (line[0], "oracle_logswitches_default_levels") for line in info if
len(line) >= 2 ]
def check_oracle_logswitches(item, params, info):
for line in info:
if line[0] == item:
+ err = oracle_handle_ora_errors(line)
+ if err == False:
+ continue
+ elif isinstance(err, tuple):
+ return err
locrit, lowarn, warn, crit = params
logswitches = int(line[1])
diff --git a/checks/oracle_sessions b/checks/oracle_sessions
index cef3a32..5393bfa 100644
--- a/checks/oracle_sessions
+++ b/checks/oracle_sessions
@@ -31,11 +31,17 @@
oracle_sessions_default_levels = (50, 100)
def inventory_oracle_sessions(info):
+ oracle_handle_ora_errors_discovery(info)
return [ (line[0], "oracle_sessions_default_levels") for line in info if
len(line) >= 2 ]
def check_oracle_sessions(item, params, info):
for line in info:
if line[0] == item:
+ err = oracle_handle_ora_errors(line)
+ if err == False:
+ continue
+ elif isinstance(err, tuple):
+ return err
warn, crit = params
sessions = int(line[1])
diff --git a/checks/oracle_version b/checks/oracle_version
index dc00284..cb2af27 100644
--- a/checks/oracle_version
+++ b/checks/oracle_version
@@ -28,6 +28,7 @@
# XE Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
def inventory_oracle_version(info):
+ oracle_handle_ora_errors_discovery(info)
return [ (line[0], None) for line in info if len(line) >= 2 ]
def check_oracle_version(item, _no_params, info):