Module: check_mk
Branch: master
Commit: e617fb7b621ea40b9f448a23afca3fddd36a5e43
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=e617fb7b621ea4…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon May 2 11:15:55 2016 +0200
3452 FIX Fixed vertical label of Bytes/day graphs (like filesystem growth)
---
.werks/3452 | 10 +++++++
ChangeLog | 1 +
web/htdocs/lib.py | 57 +++++++++++++++++++++++++++++++--------
web/plugins/metrics/check_mk.py | 10 ++++---
4 files changed, 63 insertions(+), 15 deletions(-)
diff --git a/.werks/3452 b/.werks/3452
new file mode 100644
index 0000000..3e5f94f
--- /dev/null
+++ b/.werks/3452
@@ -0,0 +1,10 @@
+Title: Fixed vertical label of Bytes/day graphs (like filesystem growth)
+Level: 1
+Component: multisite
+Class: fix
+Compatible: compat
+State: unknown
+Version: 1.2.9i1
+Date: 1462180507
+
+
diff --git a/ChangeLog b/ChangeLog
index 7b5380d..e56afc8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -262,6 +262,7 @@
* 3029 FIX: rule editor icon: fixed query of invalid livestatus column...
* 3125 FIX: fixed grouping of werk list by version...
* 3442 FIX: Fixed double escaping of single quotes in comment texts
+ * 3452 FIX: Fixed vertical label of Bytes/day graphs (like filesystem growth)
WATO:
* 3244 WATO BI Module: swap order of aggregation function and child node
selection...
diff --git a/web/htdocs/lib.py b/web/htdocs/lib.py
index af50f06..4b70bd7 100644
--- a/web/htdocs/lib.py
+++ b/web/htdocs/lib.py
@@ -743,33 +743,29 @@ def date_month_human_readable(timestamp):
return time.strftime(_("%B %Y"), time.localtime(timestamp))
-def bytes_human_readable(b, base=1024.0, bytefrac=True, unit="B"):
+def calculate_bytes_human_readable(b, base=1024.0, bytefrac=True):
base = float(base)
- # Handle negative bytes correctly
- prefix = ''
- if b < 0:
- prefix = '-'
- b *= -1
digits = 1
if b >= base ** 4:
symbol = "T"
- b /= base ** 4
+ scale = base ** 4
elif b >= base ** 3:
symbol = "G"
- b /= base ** 3
+ scale = base ** 3
elif b >= base ** 2:
symbol = "M"
- b /= base ** 2
+ scale = base ** 2
elif b >= base:
symbol = "k"
- b /= base
+ scale = base
else:
symbol = ""
+ scale = 1
if not bytefrac:
digits = 0
@@ -780,7 +776,45 @@ def bytes_human_readable(b, base=1024.0, bytefrac=True,
unit="B"):
else:
digits = 2
- return "%%s%%.%df %%s%%s" % digits % (prefix, b, symbol, unit)
+ return symbol, digits, scale
+
+
+def bytes_human_readable(b, *args, **kwargs):
+ if b < 0:
+ return "-" + bytes_human_readable(-b, *args, **kwargs)
+
+ if "unit" in kwargs:
+ unit = kwargs.pop("unit")
+ else:
+ unit = "B"
+
+ scale_symbol, places_after_comma, scale_factor = calculate_bytes_human_readable(b,
*args, **kwargs)
+
+ scaled_value = float(b) / scale_factor
+ return (u"%%.%df %%s%%s" % places_after_comma) % (scaled_value,
scale_symbol, unit)
+
+
+def bytes_human_readable_list(values, *args, **kwargs):
+ if not values:
+ reference = 0
+ else:
+ reference = min([ abs(v) for v in values ])
+
+ if "unit" in kwargs:
+ unit = kwargs.pop("unit")
+ else:
+ unit = "B"
+
+ scale_symbol, places_after_comma, scale_factor =
calculate_bytes_human_readable(reference, *args, **kwargs)
+
+ units = []
+ scaled_values = []
+ for value in values:
+ scaled_value = float(value) / scale_factor
+ scaled_values.append(("%%.%df" % places_after_comma) % scaled_value)
+
+ return "%s%s" % (scale_symbol, unit), scaled_values
+
def file_size_human_readable(file_size):
if file_size < 10000:
@@ -793,6 +827,7 @@ def file_size_human_readable(file_size):
result = as_string + result
return result
+
try:
import ast
literal_eval = ast.literal_eval
diff --git a/web/plugins/metrics/check_mk.py b/web/plugins/metrics/check_mk.py
index 9a823aa..9fddf71 100644
--- a/web/plugins/metrics/check_mk.py
+++ b/web/plugins/metrics/check_mk.py
@@ -129,10 +129,12 @@ unit_info["bits/s"] = {
# Output in bytes/days, value is in bytes/s
unit_info["bytes/d"] = {
- "title" : _("Bytes per day"),
- "symbol" : _("B/d"),
- "render" : lambda v: bytes_human_readable(v * 86400.0) +
_("/d"),
- "stepping" : "binary", # for vertical graph labels
+ "title" : _("Bytes per day"),
+ "symbol" : _("B/d"),
+ "render" : lambda v: bytes_human_readable(v * 86400.0,
unit="B/d"),
+ "graph_unit" : lambda values: bytes_human_readable_list(
+ [ v * 86400.0 for v in values ], unit=_("B/d")),
+ "stepping" : "binary", # for vertical graph labels
}
unit_info["c"] = {