Module: check_mk
Branch: master
Commit: 8a7e7b1c8fc55dc76332013250d603992725a6d3
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=8a7e7b1c8fc55d…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Oct 7 22:54:27 2014 +0200
Finished abstraction of Add-To-Dashboard popup
---
web/htdocs/dashboard.py | 52 +++++++++++-----------------------------------
web/htdocs/index.py | 2 +-
web/htdocs/js/checkmk.js | 3 ++-
web/htdocs/views.py | 3 +++
web/htdocs/visuals.py | 51 ++++++++++++++++++++++++++++++++-------------
5 files changed, 55 insertions(+), 56 deletions(-)
diff --git a/web/htdocs/dashboard.py b/web/htdocs/dashboard.py
index 0118708..81c1610 100644
--- a/web/htdocs/dashboard.py
+++ b/web/htdocs/dashboard.py
@@ -1068,55 +1068,27 @@ def add_dashlet(dashlet, dashboard):
dashboard['mtime'] = int(time.time())
visuals.save('dashboards', dashboards)
-def popup_add_dashlet():
+def popup_add_dashlet(dashboard_name, dashlet_type, context, params):
if not config.may("general.edit_dashboards"):
- raise MKAuthException(_("You are not allowed to edit dashboards."))
-
- dashboard_name = html.var('name')
- if not dashboard_name:
- raise MKGeneralException(_('The name of the dashboard is missing.'))
+ # Exceptions do not work here.
+ return
load_dashboards()
if dashboard_name not in available_dashboards:
- raise MKGeneralException(_('The requested dashboard does not exist.'))
-
+ return
dashboard = load_dashboard_with_cloning(dashboard_name)
+ dashlet = default_dashlet_definition(dashlet_type)
+
+ dashlet["context"] = context
+ if dashlet_type == 'view':
+ view_name = params['name']
+ else:
+ dashlet.update(params)
- ty = html.var('type')
- if not ty:
- raise MKGeneralException(_('The type of the dashlet is missing.'))
-
- dashlet_type = dashlet_types[ty]
-
- dashlet = default_dashlet_definition(ty)
-
- # Parse context and params
- view_name = None
- for what in [ 'context', 'params' ]:
- val = html.var(what)
- data = {}
- if val == None:
- raise MKGeneralException(_('Unable to parse the dashlet parameter
"%s".') % what)
- elif val == '':
- dashlet[what] = {}
- continue # silently skip empty vars
-
- for entry in val.split('|'):
- key, vartype, val = entry.split(':', 2)
- if vartype == 'number':
- val = int(val)
- data[key] = val
-
- if what == 'context':
- dashlet[what] = data
- else:
- if ty == 'view':
- view_name = data['name']
- dashlet.update(data)
# When a view shal be added to the dashboard, load the view and put it into the
dashlet
- if ty == 'view':
+ if dashlet_type == 'view':
# save the original context and override the context provided by the view
context = dashlet['context']
load_view_into_dashlet(dashlet, len(dashboard['dashlets']), view_name)
diff --git a/web/htdocs/index.py b/web/htdocs/index.py
index f90fbce..eeeb2be 100644
--- a/web/htdocs/index.py
+++ b/web/htdocs/index.py
@@ -38,7 +38,7 @@ import livestatus
import defaults, config, login, userdb, hooks, visuals, default_permissions
try:
import reporting
-except:
+except 1:
reporting = None
from html_mod_python import *
diff --git a/web/htdocs/js/checkmk.js b/web/htdocs/js/checkmk.js
index 3799845..e09073c 100644
--- a/web/htdocs/js/checkmk.js
+++ b/web/htdocs/js/checkmk.js
@@ -2276,5 +2276,6 @@ function add_to_visual(visual_type, name)
add_visual_data = null;
// After adding a dashlet, go to the choosen dashboard
- window.location.href = response;
+ if (response)
+ window.location.href = response;
}
diff --git a/web/htdocs/views.py b/web/htdocs/views.py
index 94e9280..7e276d6 100644
--- a/web/htdocs/views.py
+++ b/web/htdocs/views.py
@@ -1896,6 +1896,9 @@ def ajax_export():
view["public"] = True
html.write(pprint.pformat(available_views))
+def get_view_by_name(view_name):
+ load_views()
+ return available_views[view_name]
#.
# .--Plugin Helpers------------------------------------------------------.
diff --git a/web/htdocs/visuals.py b/web/htdocs/visuals.py
index 081eee1..2a2636c 100644
--- a/web/htdocs/visuals.py
+++ b/web/htdocs/visuals.py
@@ -239,7 +239,10 @@ def available(what, all_visuals):
# | Show a list of all visuals with actions to delete/clone/edit |
# '----------------------------------------------------------------------'
-def page_list(what, title, visuals, custom_columns = [], render_custom_buttons=None):
+def page_list(what, title, visuals, custom_columns = [],
+ render_custom_buttons = None,
+ render_custom_columns = None):
+
what_s = what[:-1]
if not config.may("general.edit_" + what):
raise MKAuthException(_("Sorry, you lack the permission for editing this
type of visuals."))
@@ -271,23 +274,23 @@ def page_list(what, title, visuals, custom_columns = [],
render_custom_buttons=N
custom = []
builtin = []
- for (owner, visualname) in keys_sorted:
- if owner == "" and not config.may("%s.%s" % (what_s,
visualname)):
+ for (owner, visual_name) in keys_sorted:
+ if owner == "" and not config.may("%s.%s" % (what_s,
visual_name)):
continue # not allowed to see this view
- visual = visuals[(owner, visualname)]
+ visual = visuals[(owner, visual_name)]
if owner == config.user_id or \
(visual["public"] and owner != '' and config.user_may(owner,
"general.publish_" + what)):
- custom.append((owner, visualname, visual))
+ custom.append((owner, visual_name, visual))
elif visual["public"] and owner == "":
- builtin.append((owner, visualname, visual))
+ builtin.append((owner, visual_name, visual))
for title, items in [ (_('Custom'), custom), (_('Builtin'), builtin)
]:
html.write('<h3>' + title + '</h3>')
table.begin(css = 'data', limit = None)
- for owner, visualname, visual in items:
+ for owner, visual_name, visual in items:
table.row(css = 'data')
# Actions
@@ -295,33 +298,33 @@ def page_list(what, title, visuals, custom_columns = [],
render_custom_buttons=N
# Edit
if owner == config.user_id:
- html.icon_button("edit_%s.py?load_name=%s" % (what_s,
visualname), _("Edit"), "edit")
+ html.icon_button("edit_%s.py?load_name=%s" % (what_s,
visual_name), _("Edit"), "edit")
# Clone / Customize
buttontext = _("Create a customized copy of this")
backurl = html.urlencode(html.makeuri([]))
clone_url = "edit_%s.py?load_user=%s&load_name=%s&back=%s"
\
- % (what_s, owner, visualname, backurl)
+ % (what_s, owner, visual_name, backurl)
html.icon_button(clone_url, buttontext, "clone")
# Delete
if owner == config.user_id:
- html.icon_button(html.makeactionuri([('_delete', visualname)]),
+ html.icon_button(html.makeactionuri([('_delete', visual_name)]),
_("Delete!"), "delete")
# Custom buttons - visual specific
if render_custom_buttons:
- render_custom_buttons(visualname, visual)
+ render_custom_buttons(visual_name, visual)
# visual Name
- table.cell(_('ID'), visualname)
+ table.cell(_('ID'), visual_name)
# Title
table.cell(_('Title'))
title = _u(visual['title'])
if not visual["hidden"]:
html.write("<a
href=\"%s.py?%s=%s\">%s</a>" %
- (what_s, visual_types[what]['ident_attr'], visualname,
html.attrencode(title)))
+ (what_s, visual_types[what]['ident_attr'], visual_name,
html.attrencode(title)))
else:
html.write(html.attrencode(title))
html.help(html.attrencode(_u(visual['description'])))
@@ -339,6 +342,9 @@ def page_list(what, title, visuals, custom_columns = [],
render_custom_buttons=N
table.cell(_('Public'), visual["public"] and
_("yes") or _("no"))
table.cell(_('Hidden'), visual["hidden"] and
_("yes") or _("no"))
+ if render_custom_columns:
+ render_custom_columns(visual_name, visual)
+
table.end()
html.footer()
@@ -1185,5 +1191,22 @@ def ajax_add_visual():
module_name = visual_type["module_name"]
visual_module = __import__(module_name)
handler = eval("visual_module." +
visual_type["add_visual_handler"])
- handler()
+ element_name = html.var("name")
+ element_type = html.var("type")
+ # Context and params are | separated lists of : separated triples
+ # of name, datatype and value. Datatype is int or string
+ extra_data = []
+ for what in [ 'context', 'params' ]:
+ value = html.var(what)
+ data = {}
+ extra_data.append(data)
+ if value == '':
+ continue
+ for entry in value.split('|'):
+ key, vartype, value = entry.split(':', 2)
+ if vartype == 'number':
+ value = int(value)
+ data[key] = value
+
+ handler(element_name, element_type, *extra_data)