Module: check_mk
Branch: master
Commit: 491d6e91e51539e3a7c9af4994ebe0b0d368acca
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=491d6e91e51539…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Dec 23 11:19:29 2014 +0100
#1796 FIX Fix filtering in Multisite View BI Boxes
In this view always all hosts would be displayed, not just those of the
group in question. This has been fixed.
---
.werks/1796 | 11 ++++++++
ChangeLog | 1 +
web/htdocs/bi.py | 17 +++++++-----
web/plugins/views/bi.py | 9 ++++++
web/plugins/views/builtin.py | 63 +++++++++++++++++++++++-------------------
5 files changed, 65 insertions(+), 36 deletions(-)
diff --git a/.werks/1796 b/.werks/1796
new file mode 100644
index 0000000..8adae8b
--- /dev/null
+++ b/.werks/1796
@@ -0,0 +1,11 @@
+Title: Fix filtering in Multisite View BI Boxes
+Level: 1
+Component: multisite
+Class: fix
+Compatible: compat
+State: unknown
+Version: 1.2.7i1
+Date: 1419329931
+
+In this view always all hosts would be displayed, not just those of the
+group in question. This has been fixed.
diff --git a/ChangeLog b/ChangeLog
index 9271e43..49a0bd5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -54,6 +54,7 @@
* 1798 FIX: Filters are now retained when adding a view to a dashboard...
* 1799 FIX: Dashboards: Existing views added to dashboards now get a correct title /
title_url
* 1800 FIX: Fixed umlauts and HTML tags in exception texts...
+ * 1796 FIX: Fix filtering in Multisite View BI Boxes...
WATO:
* 1760 Added search form to manual checks page
diff --git a/web/htdocs/bi.py b/web/htdocs/bi.py
index 12f5f51..95d74ce 100644
--- a/web/htdocs/bi.py
+++ b/web/htdocs/bi.py
@@ -1181,14 +1181,14 @@ def get_status_info(required_hosts):
# This variant of the function is configured not with a list of
# hosts but with a livestatus filter header and a list of columns
# that need to be fetched in any case
-def get_status_info_filtered(filter_header, only_sites, limit, add_columns, fetch_parents
= True):
+def get_status_info_filtered(filter_header, only_sites, limit, add_columns, fetch_parents
= True, bygroup=False):
columns = [ "name", "state", "hard_state",
"plugin_output", "scheduled_downtime_depth",
"acknowledged", "services_with_fullstate",
"parents" ] + add_columns
html.live.set_only_sites(only_sites)
html.live.set_prepend_site(True)
- query = "GET hosts\n"
+ query = "GET hosts%s\n" % (bygroup and "bygroup" or
"")
query += "Columns: " + (" ".join(columns)) + "\n"
query += filter_header
@@ -1220,7 +1220,7 @@ def get_status_info_filtered(filter_header, only_sites, limit,
add_columns, fetc
parent_filter += [ 'Filter: name = %s\n' % p for p in row[7] ]
parent_filter_txt = ''.join(parent_filter)
parent_filter_txt += 'Or: %d\n' % len(parent_filter)
- for row in get_status_info_filtered(filter_header, only_sites, limit,
add_columns, False):
+ for row in get_status_info_filtered(filter_header, only_sites, limit,
add_columns, False, bygroup):
if row['name'] not in hostnames:
rows.append(row)
@@ -1788,12 +1788,15 @@ def table(columns, add_headers, only_sites, limit, filters):
# Table of all host aggregations, i.e. aggregations using data from exactly one host
def hostname_table(columns, add_headers, only_sites, limit, filters):
- return singlehost_table(columns, add_headers, only_sites, limit, filters, True)
+ return singlehost_table(columns, add_headers, only_sites, limit, filters, True,
bygroup=False)
+
+def hostname_by_group_table(columns, add_headers, only_sites, limit, filters):
+ return singlehost_table(columns, add_headers, only_sites, limit, filters, True,
bygroup=True)
def host_table(columns, add_headers, only_sites, limit, filters):
- return singlehost_table(columns, add_headers, only_sites, limit, filters, False)
+ return singlehost_table(columns, add_headers, only_sites, limit, filters, False,
bygroup=False)
-def singlehost_table(columns, add_headers, only_sites, limit, filters, joinbyname):
+def singlehost_table(columns, add_headers, only_sites, limit, filters, joinbyname,
bygroup):
log("--------------------------------------------------------------------\n")
log("* Starting to compute singlehost_table (joinbyname = %s)\n" %
joinbyname)
load_assumptions() # user specific, always loaded
@@ -1810,7 +1813,7 @@ def singlehost_table(columns, add_headers, only_sites, limit,
filters, joinbynam
log("* Getting status information about hosts...\n")
host_columns = filter(lambda c: c.startswith("host_"), columns)
- hostrows = get_status_info_filtered(filter_code, only_sites, limit, host_columns,
config.bi_precompile_on_demand)
+ hostrows = get_status_info_filtered(filter_code, only_sites, limit, host_columns,
config.bi_precompile_on_demand, bygroup)
log("* Got %d host rows\n" % len(hostrows))
# if limit:
diff --git a/web/plugins/views/bi.py b/web/plugins/views/bi.py
index d5476da..86ba469 100644
--- a/web/plugins/views/bi.py
+++ b/web/plugins/views/bi.py
@@ -60,6 +60,15 @@ multisite_datasources["bi_hostname_aggregations"] = {
"idkeys" : [ 'aggr_name' ],
}
+# The same but with group information
+multisite_datasources["bi_hostnamebygroup_aggregations"] = {
+ "title" : _("BI Hostname by Hostgroup Aggregations"),
+ "table" : bi.hostname_by_group_table,
+ "infos" : [ "host", "aggr", "hostgroup"
],
+ "keys" : [],
+ "idkeys" : [ 'aggr_name' ],
+}
+
# ____ _ _
# | _ \ __ _(_)_ __ | |_ ___ _ __ ___
diff --git a/web/plugins/views/builtin.py b/web/plugins/views/builtin.py
index d2d6dfb..a0714b4 100644
--- a/web/plugins/views/builtin.py
+++ b/web/plugins/views/builtin.py
@@ -2861,35 +2861,40 @@ multisite_builtin_views.update({
'user_sortable': 'on'},
# Hostgroup with boxed BIs for each host
-'aggr_hostgroup_boxed': {'browser_reload': 0,
- 'column_headers': 'off',
- 'datasource': 'bi_hostname_aggregations',
- 'description': _('Hostgroup with boxed BIs for each
host'),
- 'group_painters': [('site_icon', None),
- ('sitealias', 'sitehosts')],
- 'hard_filters': [],
- 'hard_filtervars': [],
- 'hidden': True,
- 'hide_filters': ['hostgroup'],
- 'icon' : 'aggr',
- 'layout': 'boxed',
- 'linktitle': _('BI Boxes'),
- 'mustsearch': False,
- 'name': 'hostgroup',
- 'num_columns': 2,
- 'owner': 'admin',
- 'painters': [('host_state', None),
- ('host', 'host'),
- ('host_icons', None),
- ('alias', None),
- ('aggr_treestate_boxed', None),
- ],
- 'play_sounds': False,
- 'public': True,
- 'show_filters': [ 'siteopt', 'hostregex',
'aggr_group' ],
- 'sorters': [('site', False), ('site_host',
False)],
- 'title': _('Hostgroup with BI state'),
- 'topic': _('hidden')},
+'aggr_hostgroup_boxed': {
+ 'browser_reload' : 0,
+ 'column_headers' : 'off',
+ 'context' : {
+ 'aggr_group': {'aggr_group' : ''},
+ 'hostregex' : {'host_regex' : ''},
+ },
+ 'datasource' :
'bi_hostnamebygroup_aggregations',
+ 'description' : u'Hostgroup with boxed BIs for
each host\n',
+ 'group_painters' : [
+ ('site_icon', '', None),
+ ('sitealias', 'sitehosts', None),
+ ],
+ 'hidden' : True,
+ 'hidebutton' : False,
+ 'icon' : 'aggr',
+ 'layout' : 'boxed',
+ 'linktitle' : u'BI Boxes',
+ 'name' : 'aggr_hostgroup_boxed',
+ 'num_columns' : 2,
+ 'painters' : [
+ ('host_state', None, None),
+ ('host', 'host', None),
+ ('host_icons', None, None),
+ ('alias', None, None),
+ ('aggr_treestate_boxed', None, None),
+ ],
+ 'public' : True,
+ 'single_infos' : ['hostgroup'],
+ 'sorters' : [('site', False),
('site_host', False)],
+ 'title' : u'Hostgroup with BI state',
+ 'topic' : u'hidden',
+ 'user_sortable' : True
+},
# +----------------------------------------------------------------------+