Module: check_mk
Branch: master
Commit: a117e2f9c2dfb291484790213cfc09dec0fe8dee
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=a117e2f9c2dfb2…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Feb 7 17:35:02 2013 +0100
BI: allow dict rules, WATO can load/save rules
---
doc/treasures/ds_random_bi.mk | 24 +++++++--
web/htdocs/bi.py | 10 ++++
web/htdocs/images/button_aggr_hi.png | Bin 0 -> 2668 bytes
web/htdocs/images/button_aggr_lo.png | Bin 0 -> 3365 bytes
web/htdocs/wato.py | 94 ++++++++++++++++++++++++++++++++-
web/plugins/sidebar/wato.py | 2 +
web/plugins/wato/builtin_modules.py | 8 ++-
7 files changed, 127 insertions(+), 11 deletions(-)
diff --git a/doc/treasures/ds_random_bi.mk b/doc/treasures/ds_random_bi.mk
index bcc87a0..e58ae4e 100644
--- a/doc/treasures/ds_random_bi.mk
+++ b/doc/treasures/ds_random_bi.mk
@@ -1,14 +1,26 @@
-aggregation_rules["host"] = (
- "Host $HOST$",
- [ "HOST" ],
- "worst",
- [
+# aggregation_rules["host"] = (
+# "Host $HOST$",
+# [ "HOST" ],
+# "worst",
+# [
+# ( "snarks", [ "$HOST$" ] ),
+# ( "gnogo", [ "$HOST$" ] ),
+# ( "other", [ "$HOST$" ] ),
+# ]
+# )
+
+aggregation_rules["host"] = {
+ "title" : "Host $HOST$",
+ "params" : [ "HOST" ],
+ "aggregation" : "worst",
+ "nodes" : [
( "snarks", [ "$HOST$" ] ),
( "gnogo", [ "$HOST$" ] ),
( "other", [ "$HOST$" ] ),
]
-)
+}
+
aggregation_rules["snarks"] = (
"Snarks",
diff --git a/web/htdocs/bi.py b/web/htdocs/bi.py
index c2d0af9..ae94b7c 100644
--- a/web/htdocs/bi.py
+++ b/web/htdocs/bi.py
@@ -680,6 +680,16 @@ def compile_aggregation_rule(aggr_type, rule, args, lvl):
global g_remaining_refs
g_remaining_refs = []
+ # Convert new dictionary style rule into old tuple based
+ # format
+ if type(rule) == dict:
+ rule = (
+ rule.get("title", _("Untitled BI rule")),
+ rule.get("params", []),
+ rule.get("aggregation", "worst"),
+ rule.get("nodes", [])
+ )
+
if len(rule) != 4:
raise MKConfigError(_("<h3>Invalid aggregation rule</h1>"
"Aggregation rules must contain four elements: description, argument
list, "
diff --git a/web/htdocs/images/button_aggr_hi.png b/web/htdocs/images/button_aggr_hi.png
new file mode 100644
index 0000000..b35f28e
Binary files /dev/null and b/web/htdocs/images/button_aggr_hi.png differ
diff --git a/web/htdocs/images/button_aggr_lo.png b/web/htdocs/images/button_aggr_lo.png
new file mode 100644
index 0000000..a3b93ff
Binary files /dev/null and b/web/htdocs/images/button_aggr_lo.png differ
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index 91d46d3..ded71e2 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -10965,7 +10965,7 @@ def page_user_profile():
html.footer()
#.
-# .--Sampleconfig--------------------------------------------------------.
+# .-Sampleconfig---------------------------------------------------------.
# | ____ _ __ _ |
# | / ___| __ _ _ __ ___ _ __ | | ___ ___ ___ _ __ / _(_) __ _ |
# | \___ \ / _` | '_ ` _ \| '_ \| |/ _ \/ __/ _ \| '_ \| |_| |/ _` | |
@@ -11047,7 +11047,7 @@ def create_sample_config():
save_rulesets(g_root_folder, rulesets)
#.
-# .--Pattern Editor------------------------------------------------------.
+# .-Pattern Editor-------------------------------------------------------.
# | ____ _ _ _____ _ _ _ |
# | | _ \ __ _| |_| |_ ___ _ __ _ __ | ____|__| (_) |_ ___ _ __ |
# | | |_) / _` | __| __/ _ \ '__| '_ \ | _| / _` | | __/ _ \| '__| |
@@ -11262,7 +11262,89 @@ def mode_pattern_editor(phase):
html.write('</table>\n')
html.end_foldable_container()
+#.
+# .--BI Rules------------------------------------------------------------.
+# | ____ ___ ____ _ |
+# | | __ )_ _| | _ \ _ _| | ___ ___ |
+# | | _ \| | | |_) | | | | |/ _ \/ __| |
+# | | |_) | | | _ <| |_| | | __/\__ \ |
+# | |____/___| |_| \_\\__,_|_|\___||___/ |
+# | |
+# +----------------------------------------------------------------------+
+# | Editor for the Rules of BI |
+# '----------------------------------------------------------------------'
+def mode_bi_rules(phase):
+ if phase == "title":
+ return _("BI - Business Intelligence")
+
+ elif phase == "buttons":
+ global_buttons()
+ return
+
+ elif phase == "actions":
+ return
+
+ aggregations, aggregation_rules = load_bi_rules()
+ save_bi_rules(aggregations, aggregation_rules)
+ html.debug(aggregation_rules)
+
+# We need to replace the BI constants internally with something
+# that we can replace back after writing the BI-Rules out
+# with pprint.pformat
+bi_constants = {
+ 'ALL_HOSTS' : 'f41e728b-0bce-40dc-82ea-51091d034fc3',
+ 'HOST_STATE' : '7e521edf-122c-4013-b135-669e2673bcfa',
+ 'HIDDEN' : '87c5fea7-d8fd-4ccf-b3ac-72c3d048cd3b',
+ 'FOREACH_HOST' : '907b2cdd-07ac-4439-bb4e-1f16eddfdb27',
+ 'FOREACH_CHILD' : 'd6b000f4-ba42-4638-a5f8-2d07f33940de',
+ 'FOREACH_PARENT' : 'a18f5691-c929-420c-9ee2-bcf2bd358319',
+ 'FOREACH_SERVICE' : 'a18f5691-c929-420c-9ee2-bcf2bd358319',
+ 'REMAINING' : '8f716937-de9c-44b2-bf9a-ec6f6e1d820e',
+}
+
+# returns aggregations, aggregation_rules
+def load_bi_rules():
+ filename = multisite_dir + "bi.mk"
+ if not os.path.exists(filename):
+ return [], {}
+
+ try:
+ vars = { "aggregation_rules" : {},
+ "aggregations" : [],
+ }
+ vars.update(bi_constants)
+ execfile(filename, vars, vars)
+ return vars["aggregations"], vars["aggregation_rules"]
+ except Exception, e:
+ if config.debug:
+ raise MKGeneralException(_("Cannot read configuration file %s: %s"
%
+ (filename, e)))
+ return [], {}
+
+def save_bi_rules(aggregations, aggregation_rules):
+ def replace_constants(s):
+ for name, uuid in bi_constants.items():
+ while True:
+ n = s.replace("'%s'" % uuid, name)
+ if n != s:
+ s = n
+ else:
+ break
+ return s[0] + '\n ' + s[1:-1] + '\n' + s[-1]
+
+ make_nagios_directory(multisite_dir)
+ out = create_user_file(multisite_dir + "bi.mk", "w")
+ out.write("# Written by WATO\n# encoding: utf-8\n\n")
+ for ruleid, rule in aggregation_rules.items():
+ out.write('aggregation_rules["%s"] = %s\n\n' %
+ ( ruleid, replace_constants(pprint.pformat(rule, width=50))))
+ out.write('\n')
+ out.write("aggregations += %s\n" %
+ replace_constants(pprint.pformat(aggregations)))
+
+
+#.
# .-Hooks-&-API----------------------------------------------------------.
# | _ _ _ ___ _ ____ ___ |
# | | | | | ___ ___ | | _____ ( _ ) / \ | _ \_ _| |
@@ -11837,7 +11919,8 @@ modes = {
"hosttags" : (["hosttags"], mode_hosttags),
"edit_hosttag" : (["hosttags"], mode_edit_hosttag),
"edit_auxtag" : (["hosttags"], mode_edit_auxtag),
- "pattern_editor" : (["pattern_editor"], mode_pattern_editor)
+ "pattern_editor" : (["pattern_editor"], mode_pattern_editor),
+ "bi_rules" : (["bi_rules"], mode_bi_rules),
}
loaded_with_language = False
@@ -12070,6 +12153,11 @@ def load_plugins():
_("Access to the module for analyzing and validating logfile
patterns."),
[ "admin", "user" ])
+ config.declare_permission("wato.bi_rules",
+ _("Business Intelligence Rules"),
+ _("Edit the rules for the BI aggregations."),
+ [ "admin" ])
+
load_web_plugins("wato", globals())
diff --git a/web/plugins/sidebar/wato.py b/web/plugins/sidebar/wato.py
index 22550fd..8c90ffc 100644
--- a/web/plugins/sidebar/wato.py
+++ b/web/plugins/sidebar/wato.py
@@ -54,6 +54,8 @@ def render_wato(mini):
html.icon_button(url, title, icon, target="main")
else:
iconlink(title, url, icon)
+ else:
+ html.debug("HIRN")
num_pending = wato.api.num_pending_changes()
if num_pending:
diff --git a/web/plugins/wato/builtin_modules.py b/web/plugins/wato/builtin_modules.py
index 333fa26..528aca0 100644
--- a/web/plugins/wato/builtin_modules.py
+++ b/web/plugins/wato/builtin_modules.py
@@ -62,6 +62,12 @@ modules = [
_("Timeperiods restrict notifications and other things to certain periods of
"
"the day.") ),
+ ( "pattern_editor", _("Logfile Pattern Analyzer"),
"analyze", "pattern_editor",
+ _("Analyze logfile pattern rules and validate logfile patterns against
custom text.")),
+
+ ( "bi_rules", _("BI - Business Intelligence"),
"aggr", "bi_rules",
+ _("Configuration of Check_MK's Business Intelligence component.")),
+
( "sites", _("Distributed Monitoring"), "sites",
"sites",
_("Distributed monitoring via Multsite, distributed configuration via
WATO")),
@@ -71,7 +77,5 @@ modules = [
( "snapshot", _("Backup & Restore"), "backup",
"snapshots",
_("Make snapshots of your configuration, download, upload and restore
snapshots.")),
- ( "pattern_editor", _("Logfile Pattern Analyzer"),
"analyze", "pattern_editor",
- _("Analyze logfile pattern rules and validate logfile patterns against
custom text.")),
]