Module: check_mk
Branch: master
Commit: 64685b1eb6853d7f3e82771292929e0de1448c3d
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=64685b1eb6853d…
Author: Simon Betz <si(a)mathias-kettner.de>
Date: Thu Aug 17 07:36:12 2017 +0200
5110 FIX appdynamics_memory: Fixed crashing if max. available for heap or non-heap memory
is zero
Change-Id: If09c5f5fe7245401933c48156eb46e202fdecef9
---
.werks/5110 | 11 +++++++++
checks/appdynamics_memory | 59 ++++++++++++++++++++++++++++++-----------------
2 files changed, 49 insertions(+), 21 deletions(-)
diff --git a/.werks/5110 b/.werks/5110
new file mode 100644
index 0000000..25104e2
--- /dev/null
+++ b/.werks/5110
@@ -0,0 +1,11 @@
+Title: appdynamics_memory: Fixed crashing if max. available for heap or non-heap memory
is zero
+Level: 1
+Component: checks
+Class: fix
+Compatible: compat
+Edition: cre
+State: unknown
+Version: 1.5.0i1
+Date: 1502947847
+
+
diff --git a/checks/appdynamics_memory b/checks/appdynamics_memory
index 2421ea1..ab29a29 100644
--- a/checks/appdynamics_memory
+++ b/checks/appdynamics_memory
@@ -34,29 +34,39 @@ def inventory_appdynamics_memory(info):
for line in info:
yield ' '.join(line[0:2]), {}
+
def check_appdynamics_memory(item, params, info):
for line in info:
if item == ' '.join(line[0:2]):
mb = 1024 * 1024.0
+ if item.endswith('Non-Heap'):
+ mem_type = 'nonheap'
+ elif item.endswith('Heap'):
+ mem_type = 'heap'
+ else:
+ mem_type = '' # Should not happen...
+
values = {}
for metric in line[2:]:
name, value = metric.split(':')
values[name] = int(value)
- used = values['Current Usage (MB)'] * mb
- max_available = values['Max Available (MB)'] * mb
- committed = values['Committed (MB)'] * mb
+ used = values.get('Current Usage (MB)', 0) * mb
+ committed = values.get('Committed (MB)', 0) * mb
- free = max_available - used
- used_percent = 100.0 * used / max_available
+ try:
+ max_available = values['Max Available (MB)'] * mb
+ except KeyError:
+ max_available = -1 # Java 8 has no maximum for Non-Heap
- if item.endswith('Non-Heap'):
- what = "nonheap"
- else:
- what = "heap"
+ if max_available > 0:
+ free = max_available - used
+ used_percent = 100.0 * used / max_available
- warn, crit = params.get(what, (None, None))
+ warn, crit = params.get(mem_type, (None, None))
+ else:
+ warn, crit = (None, None)
if type(crit) == float:
crit_label = '%.2f%%' % crit
@@ -84,20 +94,27 @@ def check_appdynamics_memory(item, params, info):
levels_label = ''
if state > 0:
- levels_label = ' (warn/crit at %s/%s)' % (warn_label,
crit_label)
-
- perfdata = [('mem_%s' % what, used, warn, crit, 0, max_available)]
- yield state, 'Used: %s of %s (%.2f%%)%s' % (
- get_bytes_human_readable(used),
- get_bytes_human_readable(max_available),
- used_percent,
- levels_label,
- ), perfdata
-
+ levels_label = ' (levels at %s/%s)' % (warn_label, crit_label)
+
+ if max_available > 0:
+ perfdata = [('mem_%s' % mem_type, used, warn, crit, 0,
max_available)]
+ yield state, 'Used: %s of %s (%.2f%%)%s' % (
+ get_bytes_human_readable(used),
+ get_bytes_human_readable(max_available),
+ used_percent,
+ levels_label,
+ ), perfdata
+ else:
+ perfdata = [('mem_%s' % mem_type, used)]
+ yield state, 'Used: %s' % get_bytes_human_readable(used),
perfdata
- perfdata = [('mem_%s_committed' % what, committed, None, None, 0,
max_available)]
+ if max_available > 0:
+ perfdata = [('mem_%s_committed' % mem_type, committed, None,
None, 0, max_available)]
+ else:
+ perfdata = [('mem_%s_committed' % mem_type, committed)]
yield 0, 'Committed: %s' % get_bytes_human_readable(committed),
perfdata
+
check_info['appdynamics_memory'] = {
'inventory_function' : inventory_appdynamics_memory,
'check_function' : check_appdynamics_memory,