Module: check_mk
Branch: master
Commit: a64037cffd6e9578f640e9527a1eb662f37a7628
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=a64037cffd6e95…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Feb 21 15:17:28 2019 +0100
7179 FIX Fixed site filtering when creating availability PDF reports
When having a filtered availability view which shows information of specific
sites in distributed setups, the PDF reports created with "Export as PDF" were
not applying the site filter. In this situation a query was sent to all
distributed sites for fetching the data. It was not only querying too many
sites, the PDFs also contained more hosts / services than intended in this
situation.
Change-Id: Ia15a5533e4e45b27c97f7f0bd00322b4608c0f9b
---
.werks/7179 | 16 ++++++++++++++++
cmk/gui/bi.py | 3 +--
cmk/gui/plugins/views/inventory.py | 3 +--
cmk/gui/visuals.py | 13 ++++++++-----
4 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/.werks/7179 b/.werks/7179
new file mode 100644
index 0000000..a1e2038
--- /dev/null
+++ b/.werks/7179
@@ -0,0 +1,16 @@
+Title: Fixed site filtering when creating availability PDF reports
+Level: 1
+Component: reporting
+Class: fix
+Compatible: compat
+Edition: cee
+State: unknown
+Version: 1.6.0i1
+Date: 1550673927
+
+When having a filtered availability view which shows information of specific
+sites in distributed setups, the PDF reports created with "Export as PDF" were
+not applying the site filter. In this situation a query was sent to all
+distributed sites for fetching the data. It was not only querying too many
+sites, the PDFs also contained more hosts / services than intended in this
+situation.
diff --git a/cmk/gui/bi.py b/cmk/gui/bi.py
index 276c1fe..c7e29f1 100644
--- a/cmk/gui/bi.py
+++ b/cmk/gui/bi.py
@@ -3335,8 +3335,7 @@ def singlehost_table(columns, add_headers, only_sites, limit,
filters, joinbynam
filter_code = ""
for filt in filters:
header = filt.filter("bi_host_aggregations")
- if not header.startswith("Sites:"):
- filter_code += header
+ filter_code += header
log("* Getting status information about hosts...")
host_columns = [c for c in columns if c.startswith("host_")]
diff --git a/cmk/gui/plugins/views/inventory.py b/cmk/gui/plugins/views/inventory.py
index f838ac8..c96a26d 100644
--- a/cmk/gui/plugins/views/inventory.py
+++ b/cmk/gui/plugins/views/inventory.py
@@ -1387,8 +1387,7 @@ def inv_multisite_table(infoname, invpath, columns, add_headers,
only_sites, lim
filter_code = ""
for filt in filters:
header = filt.filter(infoname)
- if not header.startswith("Sites:"):
- filter_code += header
+ filter_code += header
host_columns = ["host_name"] + list(
{c for c in columns if c.startswith("host_") and c !=
"host_name"})
diff --git a/cmk/gui/visuals.py b/cmk/gui/visuals.py
index 45647e5..e4e1ce3 100644
--- a/cmk/gui/visuals.py
+++ b/cmk/gui/visuals.py
@@ -1200,10 +1200,10 @@ def get_context_from_uri_vars(only_infos=None,
single_infos=None):
# Compute Livestatus-Filters based on a given context. Returns
# the only_sites list and a string with the filter headers
+# TODO: Untangle only_sites and filter headers
def get_filter_headers(table, infos, context):
# Prepare Filter headers for Livestatus
filter_headers = ""
- only_sites = None
with html.stashed_vars():
for filter_name, filter_vars in context.items():
# first set the HTML variables. Sorry - the filters need this
@@ -1213,15 +1213,18 @@ def get_filter_headers(table, infos, context):
else:
html.request.set_var(filter_name, filter_vars)
+ # Apply the site hint / filter (Same logic as in views.py)
+ if html.request.var("site"):
+ only_sites = [html.request.var("site")]
+ else:
+ only_sites = None
+
# Now compute filter headers for all infos of the used datasource
for filter_name, filter_class in filter_registry.items():
filter_object = filter_class()
if filter_object.info in infos:
header = filter_object.filter(table)
- if header.startswith("Sites:"):
- only_sites = header.strip().split(" ")[1:]
- else:
- filter_headers += header
+ filter_headers += header
return filter_headers, only_sites