Module: check_mk
Branch: master
Commit: 07f408b2bb79ef8ad4fdf14118019a7101da2a18
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=07f408b2bb79ef…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon May 2 13:52:20 2016 +0200
3454 FIX Fixed scaling of numbers in graphs (e.g. inodes of filesystems)
---
.werks/3454 | 10 ++++++++
ChangeLog | 1 +
web/htdocs/lib.py | 53 +++++++++++++++++++++++++++++++--------
web/plugins/metrics/check_mk.py | 2 +-
4 files changed, 55 insertions(+), 11 deletions(-)
diff --git a/.werks/3454 b/.werks/3454
new file mode 100644
index 0000000..848ab50
--- /dev/null
+++ b/.werks/3454
@@ -0,0 +1,10 @@
+Title: Fixed scaling of numbers in graphs (e.g. inodes of filesystems)
+Level: 1
+Component: multisite
+Class: fix
+Compatible: compat
+State: unknown
+Version: 1.2.9i1
+Date: 1462189904
+
+
diff --git a/ChangeLog b/ChangeLog
index 4d14c9f..7dee61b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -264,6 +264,7 @@
* 3442 FIX: Fixed double escaping of single quotes in comment texts
* 3452 FIX: Fixed vertical label of Bytes/day graphs (like filesystem growth)
* 3453 FIX: apache_status: Fixed wrong graph labels and improved wordings
+ * 3454 FIX: Fixed scaling of numbers in graphs (e.g. inodes of filesystems)
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 4b70bd7..e1abf31 100644
--- a/web/htdocs/lib.py
+++ b/web/htdocs/lib.py
@@ -714,6 +714,7 @@ def date_human_readable(timestamp):
# This can be localized:
return time.strftime(_("%m/%d/%Y"), time.localtime(timestamp))
+
def date_range_human_readable(start_time, end_time):
start_time_local = time.localtime(start_time)
end_time_local = time.localtime(end_time)
@@ -743,23 +744,23 @@ def date_month_human_readable(timestamp):
return time.strftime(_("%B %Y"), time.localtime(timestamp))
-def calculate_bytes_human_readable(b, base=1024.0, bytefrac=True):
+def calculate_scaled_number(v, base=1024.0, precision=1):
base = float(base)
digits = 1
- if b >= base ** 4:
+ if v >= base ** 4:
symbol = "T"
scale = base ** 4
- elif b >= base ** 3:
+ elif v >= base ** 3:
symbol = "G"
scale = base ** 3
- elif b >= base ** 2:
+ elif v >= base ** 2:
symbol = "M"
scale = base ** 2
- elif b >= base:
+ elif v >= base:
symbol = "k"
scale = base
@@ -767,16 +768,20 @@ def calculate_bytes_human_readable(b, base=1024.0, bytefrac=True):
symbol = ""
scale = 1
+ return symbol, precision, scale
+
+
+def calculate_scaled_bytes(v, base=1024.0, bytefrac=True):
if not bytefrac:
digits = 0
- elif b >= 100:
+ elif v >= 100:
digits = 0
- elif b >= 10:
+ elif v >= 10:
digits = 1
else:
digits = 2
- return symbol, digits, scale
+ return calculate_scaled_number(v, base, precision=digits)
def bytes_human_readable(b, *args, **kwargs):
@@ -788,7 +793,7 @@ def bytes_human_readable(b, *args, **kwargs):
else:
unit = "B"
- scale_symbol, places_after_comma, scale_factor = calculate_bytes_human_readable(b,
*args, **kwargs)
+ scale_symbol, places_after_comma, scale_factor = calculate_scaled_bytes(b, *args,
**kwargs)
scaled_value = float(b) / scale_factor
return (u"%%.%df %%s%%s" % places_after_comma) % (scaled_value,
scale_symbol, unit)
@@ -805,7 +810,7 @@ def bytes_human_readable_list(values, *args, **kwargs):
else:
unit = "B"
- scale_symbol, places_after_comma, scale_factor =
calculate_bytes_human_readable(reference, *args, **kwargs)
+ scale_symbol, places_after_comma, scale_factor = calculate_scaled_bytes(reference,
*args, **kwargs)
units = []
scaled_values = []
@@ -816,6 +821,34 @@ def bytes_human_readable_list(values, *args, **kwargs):
return "%s%s" % (scale_symbol, unit), scaled_values
+def metric_number_with_precision(v, *args, **kwargs):
+ if v < 0:
+ return "-" + metric_number_with_precision(-v, *args, **kwargs)
+
+ kwargs["base"] = 1000.0
+ scale_symbol, places_after_comma, scale_factor = calculate_scaled_number(v, *args,
**kwargs)
+ scaled_value = float(v) / scale_factor
+ return (u"%%.%df %%s" % places_after_comma) % (scaled_value, scale_symbol)
+
+
+def metric_number_with_precision_list(values, *args, **kwargs):
+ if not values:
+ reference = 0
+ else:
+ reference = min([ abs(v) for v in values ])
+
+ kwargs["base"] = 1000.0
+ scale_symbol, places_after_comma, scale_factor = calculate_scaled_number(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" % scale_symbol, scaled_values
+
+
def file_size_human_readable(file_size):
if file_size < 10000:
return str(file_size)
diff --git a/web/plugins/metrics/check_mk.py b/web/plugins/metrics/check_mk.py
index 399521b..4832c39 100644
--- a/web/plugins/metrics/check_mk.py
+++ b/web/plugins/metrics/check_mk.py
@@ -71,7 +71,7 @@ unit_info[""] = {
unit_info["count"] = {
"title" : _("Count"),
"symbol" : "",
- "render" : lambda v: "%d" % v,
+ "render" : lambda v: metric_number_with_precision(v),
"stepping" : "integer", # for vertical graph labels
}