Module: check_mk
Branch: master
Commit: d56afe3874e94a4ede81b10bbb6c8b4558c5f141
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=d56afe3874e94a…
Author: Bastian Kuhn <bk(a)mathias-kettner.de>
Date: Mon Oct 27 10:08:04 2014 +0100
veeam_client: Added new dual perfometer
---
web/plugins/perfometer/check_mk.py | 12 +++++++++
web/plugins/views/perfometer.py | 47 ++++++++++++++++++++++++++++++++++++
2 files changed, 59 insertions(+)
diff --git a/web/plugins/perfometer/check_mk.py b/web/plugins/perfometer/check_mk.py
index 3ecdbea..efaf698 100644
--- a/web/plugins/perfometer/check_mk.py
+++ b/web/plugins/perfometer/check_mk.py
@@ -1173,3 +1173,15 @@ def perfometer_docsis_snr(row, check_command, perf_data):
return "%.1f dB" % dbmv, perfometer_logarithmic(dbmv, 50, 2,
"#ad6")
perfometers["check_mk-docsis_channels_upstream"] = perfometer_docsis_snr
+
+def perfometer_veeam_client(row, check_command, perf_data):
+ avgspeed_bytes = int(perf_data[4][1])
+ duration_secs = int(perf_data[3][1])
+ h = perfometer_logarithmic_dual_independent(avgspeed_bytes, '#54b948',
10000000, 2, duration_secs, '#2098cb', 1000, 2)
+
+ avgspeed = bytes_human_readable(avgspeed_bytes)
+ duration = age_human_readable(duration_secs)
+
+ return "%s/s %s" % (avgspeed, duration), h
+
+perfometers["check_mk-veeam_client"] = perfometer_veeam_client
diff --git a/web/plugins/views/perfometer.py b/web/plugins/views/perfometer.py
index e4b874c..47f179e 100644
--- a/web/plugins/views/perfometer.py
+++ b/web/plugins/views/perfometer.py
@@ -89,6 +89,32 @@ def perfometer_logarithmic_dual(value_left, color_left, value_right,
color_right
return result + '</tr></table>'
+def perfometer_logarithmic_dual_independent\
+ (value_left, color_left, half_value_left, base_left, value_right, color_right,
half_value_right, base_right):
+ result = '<table><tr>'
+ for where, value, color, half_value, base in [
+ ("left", value_left, color_left, half_value_left, base_left),
+ ("right", value_right, color_right, half_value_right, base_left) ]:
+ value = float(value)
+ if value == 0.0:
+ pos = 0
+ else:
+ half_value = float(half_value)
+ h = math.log(half_value, base) # value to be displayed at 50%
+ pos = 25 + 10.0 * (math.log(value, base) - h)
+ if pos < 1:
+ pos = 1
+ if pos > 49:
+ pos = 49
+
+ if where == "right":
+ result += perfometer_td(pos, color) + \
+ perfometer_td(50 - pos, "white")
+ else:
+ result += perfometer_td(50 - pos, "white") + \
+ perfometer_td(pos, color)
+
+ return result + '</tr></table>'
def number_human_readable(n, precision=1, unit="B"):
base = 1024.0
@@ -118,6 +144,27 @@ def age_human_readable(secs):
days = hours / 24
return "%d days" % days
+def bytes_human_readable(b, base=1024.0, bytefrac=True, unit="B"):
+ base = float(base)
+ # Handle negative bytes correctly
+ prefix = ''
+ if b < 0:
+ prefix = '-'
+ b *= -1
+
+ if b >= base * base * base * base:
+ return '%s%.2f T%s' % (prefix, b / base / base / base / base, unit)
+ elif b >= base * base * base:
+ return '%s%.2f G%s' % (prefix, b / base / base / base, unit)
+ elif b >= base * base:
+ return '%s%.2f M%s' % (prefix, b / base / base, unit)
+ elif b >= base:
+ return '%s%.2f k%s' % (prefix, b / base, unit)
+ elif bytefrac:
+ return '%s%.2f %s' % (prefix, b, unit)
+ else: # Omit byte fractions
+ return '%s%.0f %s' % (prefix, b, unit)
+
def paint_perfometer(row):
perfstring = unicode(row["service_perf_data"].strip())