Module: check_mk
Branch: master
Commit: 946e6279e196824a05737ac1ce514a9d0ef8ff47
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=946e6279e19682…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Sat Feb 9 18:27:46 2013 +0100
WATO BI: Visualize rule tree
---
doc/bi-example.mk | 9 --------
web/htdocs/wato.css | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++
web/htdocs/wato.py | 49 ++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 101 insertions(+), 11 deletions(-)
diff --git a/doc/bi-example.mk b/doc/bi-example.mk
index 129aa10..f61da69 100644
--- a/doc/bi-example.mk
+++ b/doc/bi-example.mk
@@ -85,15 +85,6 @@ aggregation_rules["networking"] = (
]
)
-aggregation_rules["nic"] = (
- "NIC $NIC$",
- [ "HOST", "NIC" ],
- "worst",
- [
- ( "$HOST$", "NIC $NIC$" ),
- ]
-)
-
aggregation_rules["checkmk"] = (
"Check_MK",
[ "HOST" ],
diff --git a/web/htdocs/wato.css b/web/htdocs/wato.css
index 3dedc13..bd08270 100644
--- a/web/htdocs/wato.css
+++ b/web/htdocs/wato.css
@@ -1025,3 +1025,57 @@ table.multisite_conn_method td {
table.multisite_conn_method td input {
height: 18px;
}
+
+/* BI Editor */
+
+.wato .biruletree div {
+ float: none;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.wato .biruletree .birule {
+ background-color: #ccc;
+ border: 1px solid #666;
+ box-shadow: 0.5px 0.5px 2px #000;
+ color: black;
+ width: 150px;
+ border-radius: 4px;
+ padding-left: 4px;
+ height: 20px;
+ margin-bottom: 3px;
+ padding-top: 2px;
+ margin-top: 5px;
+}
+
+.wato .biruletree .birule img {
+ position: relative;
+ top: -1px;
+}
+
+
+.wato .biruletree .birule:hover {
+ background-color: #eee;
+}
+
+.wato .biruletree .birule a {
+ color: black;
+ text-decoration: none;
+ display: block;
+}
+
+.wato .biruletree .arrow {
+ border-style: none none solid solid;
+ border-color: #134;
+ border-width: 2px;
+ margin-left: 40px;
+ margin-right: 3px;
+ width: 50px;
+ height: 16px;
+ border-radius: 0px 10px;
+}
+
+.wato .biruletree .node {
+ margin-top: 0px;
+}
+
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index 1b01e1d..b7e91bf 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -11279,7 +11279,7 @@ def mode_bi_rules(phase):
aggregations, aggregation_rules = load_bi_rules()
if phase == "buttons":
- global_buttons()
+ html.context_button(_("Main Menu"), make_link([("mode",
"main")]), "home")
if aggregation_rules:
html.context_button(_("New Aggregation"),
make_link([("mode", "bi_edit_aggregation")]),
"new")
@@ -11343,6 +11343,9 @@ def mode_bi_rules(phase):
edit_url = make_link([("mode", "bi_edit_rule"),
("id", ruleid)])
html.icon_button(edit_url, _("Edit this rule"), "edit")
aggr_refs, rule_refs = count_bi_rule_references(aggregations, aggregation_rules,
ruleid)
+ if rule_refs == 0:
+ tree_url = make_link([("mode", "bi_rule_tree"),
("id", ruleid)])
+ html.icon_button(tree_url, _("This is a top-level rule. Show rule
tree"), "aggr")
refs = aggr_refs + rule_refs
if refs == 0:
delete_url = make_action_link([("mode", "bi_rules"),
("_del_rule", ruleid)])
@@ -11356,6 +11359,46 @@ def mode_bi_rules(phase):
table.cell(_("Comment"), rule.get("comment", ""))
table.end()
+def mode_bi_rule_tree(phase):
+ ruleid = html.var("id")
+
+ if phase == "title":
+ return _("BI - Rule Tree of") + " " + ruleid
+
+ aggregations, aggregation_rules = load_bi_rules()
+
+ if phase == "buttons":
+ html.context_button(_("Main Menu"), make_link([("mode",
"main")]), "home")
+ html.context_button(_("Back"), make_link([("mode",
"bi_rules")]), "back")
+ return
+
+ if phase == "action":
+ return
+
+ aggr_refs, rule_refs = count_bi_rule_references(aggregations, aggregation_rules,
ruleid)
+ if rule_refs == 0:
+ render_rule_tree(aggregation_rules, ruleid)
+
+def render_rule_tree(aggregation_rules, ruleid):
+ rule = aggregation_rules[ruleid]
+ html.write('<div class=biruletree><div class=birule>')
+ edit_url = make_link([("mode", "bi_edit_rule"), ("id",
ruleid)])
+ html.write('<a href="%s">' % edit_url)
+ html.icon(rule.get("comment", rule["title"]), "aggr")
+ html.write(" " + ruleid + "</a>")
+ html.write('</div>')
+ for node in rule["nodes"]:
+ r = bi_called_rule(node)
+ if r:
+ subnode_id = r[0]
+ html.write('<br><div class=arrow></div>')
+ html.write('<div class=node>')
+ render_rule_tree(aggregation_rules, subnode_id)
+ html.write('</div>')
+ html.write('</div>')
+
+
+
def bi_called_rule(node):
if node[0] == "call":
if node[1][1]:
@@ -11492,7 +11535,8 @@ def convert_rule_from_bi(rule, ruleid):
def convert_rule_to_bi(rule):
brule = {}
brule.update(rule)
- del brule["id"]
+ if "id" in brule:
+ del brule["id"]
brule["nodes"] = map(convert_node_to_bi, rule["nodes"])
brule["aggregation"] = "!".join(
[ rule["aggregation"][0] ] + map(str,
rule["aggregation"][1]))
@@ -12670,6 +12714,7 @@ modes = {
"edit_auxtag" : (["hosttags"], mode_edit_auxtag),
"pattern_editor" : (["pattern_editor"], mode_pattern_editor),
"bi_rules" : (["bi_rules"], mode_bi_rules),
+ "bi_rule_tree" : (["bi_rules"], mode_bi_rule_tree),
"bi_edit_rule" : (["bi_rules"], mode_bi_edit_rule),
"bi_edit_aggregation": (["bi_rules"], mode_bi_edit_aggregation),
}