Ejemplo n.º 1
0
def choose_view(name):
    import views

    views.load_views()
    vs_view = DropdownChoice(title=_("View Name"), choices=views.view_choices, sorted=True)

    html.header(_("Create Dashlet from existing View"), stylesheets=["pages"])
    html.begin_context_buttons()
    back_url = html.var("back", "dashboard.py?edit=1&name=%s" % html.urlencode(html.var("name")))
    html.context_button(_("Back"), back_url, "back")
    html.end_context_buttons()

    if html.var("save") and html.check_transaction():
        try:
            view_name = vs_view.from_html_vars("view")
            vs_view.validate_value(view_name, "view")

            load_dashboards(lock=True)
            dashboard = available_dashboards[name]

            # Add the dashlet!
            dashlet = default_dashlet_definition("view")

            # save the original context and override the context provided by the view
            dashlet_id = len(dashboard["dashlets"])
            load_view_into_dashlet(dashlet, dashlet_id, view_name)
            add_dashlet(dashlet, dashboard)

            html.http_redirect("edit_dashlet.py?name=%s&id=%d" % (name, dashlet_id))
            return

        except MKUserError, e:
            html.write("<div class=error>%s</div>\n" % e)
            html.add_user_error(e.varname, e)
Ejemplo n.º 2
0
def dashlet_view_handle_input(ident, dashlet):
    dashlet["name"] = "dashlet_%d" % ident
    dashlet.setdefault("title", _("View"))
    import views  # FIXME: HACK, clean this up somehow

    views.load_views()
    return views.create_view_from_valuespec(dashlet, dashlet)
Ejemplo n.º 3
0
def page_index():
    title = _("Check_MK Mobile")
    mobile_html_head(title)
    jqm_page_header(title, right_button=("javascript:document.location.reload();", _("Reload"), "refresh"),id="data")
    views.load_views()
    items = []
    for view_name, view in html.available_views.items():
        if view.get("mobile") and not view.get("hidden"):
            url = "mobile_view.py?view_name=%s" % view_name
            count = "" 
            if not view.get("mustsearch"):
	        count = views.show_view(view, only_count = True)
                count = '<span class="ui-li-count">%d</span>' % count
            items.append((view.get("topic"), url, '%s %s' % (view.get("linktitle", view["title"]), count)))
    jqm_page_index(_("Check_MK Mobile"), items)
    # Link to non-mobile GUI

    html.write('<hr>')
    html.write('<ul data-role="listview" data-theme="b" data-inset="true">\n')
    html.write('<li><a data-ajax="false" data-transition="fade" href="%s">%s</a></li>\n' %                 ("index.py?mobile=", _("Classical web GUI")))
    html.write('</ul>\n')

    html.write('<ul data-role="listview" data-theme="f" data-inset="true">\n')
    html.write('<li><a data-ajax="false" data-transition="fade" href="%s">%s</a></li>\n' %                 ("logout.py", _("Logout")))
    html.write('</ul>\n')
    mobile_html_foot()
Ejemplo n.º 4
0
def page_side():
    if not config.user.may("general.see_sidebar"):
        return
    if config.sidebar_notify_interval is not None:
        interval = config.sidebar_notify_interval
    else:
        interval = 'null'
    html.html_head(_("Check_MK Sidebar"),
                   javascripts=["sidebar"],
                   stylesheets=["sidebar", "status"])
    html.write('<body class="side')
    if config.screenshotmode:
        html.write(" screenshotmode")
    html.write(
        '" onload="initScrollPos(); set_sidebar_size(); init_messages(%s);" '
        'onunload="storeScrollPos()">\n' % interval)
    html.open_div(id_="check_mk_sidebar")

    # FIXME: Move this to the code where views are needed (snapins?)
    views.load_views()
    sidebar_head()
    user_config = load_user_config()
    refresh_snapins = []
    restart_snapins = []

    html.open_div(class_="scroll" if config.sidebar_show_scrollbar else None,
                  id_="side_content")
    for name, state in user_config["snapins"]:
        if not name in sidebar_snapins or not config.user.may("sidesnap." +
                                                              name):
            continue
        # Performs the initial rendering and might return an optional refresh url,
        # when the snapin contents are refreshed from an external source
        refresh_url = render_snapin(name, state)
        if sidebar_snapins.get(name).get("refresh", False):
            refresh_snapins.append([name, refresh_url])
        elif sidebar_snapins.get(name).get("restart", False):
            refresh_snapins.append([name, refresh_url])
            restart_snapins.append(name)
    html.close_div()
    sidebar_foot()
    html.close_div()

    html.write("<script language=\"javascript\">\n")
    if restart_snapins:
        html.write("sidebar_restart_time = %s\n" % time.time())
    html.write("sidebar_update_interval = %0.2f;\n" %
               config.sidebar_update_interval)
    html.write("registerEdgeListeners();\n")
    html.write("set_sidebar_size();\n")
    html.write("refresh_snapins = %s;\n" % json.dumps(refresh_snapins))
    html.write("restart_snapins = %s;\n" % json.dumps(restart_snapins))
    html.write("sidebar_scheduler();\n")
    html.write("window.onresize = function() { set_sidebar_size(); };\n")
    html.write(
        "if (contentFrameAccessible()) { update_content_location(); };\n")
    html.write("</script>\n")

    html.body_end()
Ejemplo n.º 5
0
def page_side():
    if not config.user.may("general.see_sidebar"):
        return
    if config.sidebar_notify_interval is not None:
        interval = config.sidebar_notify_interval
    else:
        interval = "null"
    html.html_head(_("Check_MK Sidebar"), javascripts=["sidebar"], stylesheets=["sidebar", "status"])
    html.write('<body class="side')
    if config.screenshotmode:
        html.write(" screenshotmode")
    html.write(
        '" onload="initScrollPos(); set_sidebar_size(); init_messages(%s);" '
        'onunload="storeScrollPos()">\n' % interval
    )
    html.write('<div id="check_mk_sidebar">\n')

    # FIXME: Move this to the code where views are needed (snapins?)
    views.load_views()
    sidebar_head()
    user_config = load_user_config()
    refresh_snapins = []
    restart_snapins = []

    scrolling = ""
    if config.sidebar_show_scrollbar:
        scrolling = " class=scroll"

    html.write('<div id="side_content"%s>' % scrolling)
    for name, state in user_config["snapins"]:
        if not name in sidebar_snapins or not config.user.may("sidesnap." + name):
            continue
        # Performs the initial rendering and might return an optional refresh url,
        # when the snapin contents are refreshed from an external source
        refresh_url = render_snapin(name, state)
        if sidebar_snapins.get(name).get("refresh", False):
            refresh_snapins.append([name, refresh_url])
        elif sidebar_snapins.get(name).get("restart", False):
            refresh_snapins.append([name, refresh_url])
            restart_snapins.append(name)
    html.write("</div>")
    sidebar_foot()
    html.write("</div>")

    html.write('<script language="javascript">\n')
    if restart_snapins:
        html.write("sidebar_restart_time = %s\n" % time.time())
    html.write("sidebar_update_interval = %0.2f;\n" % config.sidebar_update_interval)
    html.write("registerEdgeListeners();\n")
    html.write("set_sidebar_size();\n")
    html.write("refresh_snapins = %s;\n" % json.dumps(refresh_snapins))
    html.write("restart_snapins = %s;\n" % json.dumps(restart_snapins))
    html.write("sidebar_scheduler();\n")
    html.write("window.onresize = function() { set_sidebar_size(); };\n")
    html.write("if (contentFrameAccessible()) { update_content_location(); };\n")
    html.write("</script>\n")

    html.body_end()
Ejemplo n.º 6
0
def render_wato_foldertree():
    is_slave_site = not wato.is_distributed() and os.path.exists(
        defaults.check_mk_configdir + "/distributed_wato.mk")
    if not is_slave_site:
        if not config.wato_enabled:
            html.write(_("WATO is disabled."))
            return False

    user_folders = compute_foldertree()

    #
    # Render link target selection
    #
    selected_topic, selected_target = config.load_user_file(
        "foldertree", (_('Hosts'), 'allhosts'))

    views.load_views()
    dashboard.load_dashboards()
    topic_views = visuals_by_topic(views.permitted_views().items() +
                                   dashboard.permitted_dashboards().items())
    topics = [(t, t) for t, s in topic_views]
    html.select("topic",
                topics,
                selected_topic,
                onchange='wato_tree_topic_changed(this)')
    html.write('<span class=left>%s</span>' % _('Topic:'))

    for topic, view_list in topic_views:
        targets = []
        for t, title, name, is_view in view_list:
            if config.visible_views and name not in config.visible_views:
                continue
            if config.hidden_views and name in config.hidden_views:
                continue
            if t == topic:
                if not is_view:
                    name = 'dashboard|' + name
                targets.append((name, title))

        attrs = {}
        if topic != selected_topic:
            attrs['style'] = 'display:none'
            default = ''
        else:
            default = selected_target

        html.select("target_%s" % topic,
                    targets,
                    default,
                    attrs=attrs,
                    onchange='wato_tree_target_changed(this)')

    html.write('<span class=left>%s</span>' % _('View:'))

    # Now render the whole tree
    if user_folders:
        render_tree_folder(user_folders.values()[0], 'wato_tree_click')
Ejemplo n.º 7
0
def render_hosts(mode):
    html.live.set_prepend_site(True)
    query = "GET hosts\nColumns: name state worst_service_state\nLimit: 100"
    view = "host"

    if mode == "summary":
        query += "Filter: custom_variable_names >= _REALNAME\n"
    else:
        query += "Filter: custom_variable_names < _REALNAME\n"

    if mode == "problems":
        query += "Filter: state > 0\nFilter: worst_service_state > 0\nOr: 2\n"
        view = "problemsofhost"

    hosts = html.live.query(query)
    html.live.set_prepend_site(False)
    hosts.sort()

    longestname = 0
    for site, host, state, worstsvc in hosts:
        longestname = max(longestname, len(host))
    if longestname > 15:
        num_columns = 1
    else:
        num_columns = 2

    views.load_views()
    target = views.get_context_link(config.user_id, view)
    html.write("<table class=allhosts>\n")
    col = 1
    for site, host, state, worstsvc in hosts:
        if col == 1:
            html.write("<tr>")
        html.write("<td>")

        if state > 0 or worstsvc == 2:
            statecolor = 2
        elif worstsvc == 1:
            statecolor = 1
        elif worstsvc == 3:
            statecolor = 3
        else:
            statecolor = 0
        html.write('<div class="statebullet state%d">&nbsp;</div> ' % statecolor)
        html.write(link(host, target + ("&host=%s&site=%s" % (htmllib.urlencode(host), htmllib.urlencode(site)))))
        html.write("</td>")
        if col == num_columns:
            html.write("</tr>\n")
            col = 1
        else:
            col += 1

    if col < num_columns:
        html.write("</tr>\n")
    html.write("</table>\n")
Ejemplo n.º 8
0
def dashlet_view(nr, dashlet):
    import bi # FIXME: Cleanup?
    bi.reset_cache_status() # needed for status icon

    html.set_var('display_options', 'HRSIXL')
    html.set_var('_display_options', 'HRSIXL')
    html.set_var('_body_class', 'dashlet')

    import views # FIXME: HACK, clean this up somehow
    views.load_views()
    views.show_view(dashlet, True, True, True)
Ejemplo n.º 9
0
def page_index():
    title = _("Check_MK Mobile")
    mobile_html_head(title)
    jqm_page_header(title,
                    right_button=("javascript:document.location.reload();",
                                  _("Reload"), "refresh"),
                    id="data")
    views.load_views()
    items = []
    for view_name, view in views.permitted_views().items():
        if view.get("mobile") and not view.get("hidden"):
            url = "mobile_view.py?view_name=%s" % view_name
            count = ""
            if not view.get("mustsearch"):
                views.prepare_painter_options(view_name)
                count = views.show_view(view, only_count=True)
                count = '<span class="ui-li-count">%d</span>' % count
            items.append(
                (view.get("topic"), url,
                 '%s %s' % (view.get("linktitle", view["title"]), count)))
    jqm_page_index(_("Check_MK Mobile"), items)
    # Link to non-mobile GUI

    html.hr()
    html.open_ul(**{
        "data-role": "listview",
        "data-theme": "b",
        "data-inset": "true"
    })
    html.open_li()
    html.a(_("Classical web GUI"),
           href="index.py?mobile=",
           **{
               "data-ajax": "false",
               "data-transition": "fade"
           })
    html.close_li()
    html.close_ul()

    html.open_ul(**{
        "data-role": "listview",
        "data-theme": "f",
        "data-inset": "true"
    })
    html.open_li()
    html.a(_("Logout"),
           href="logout.py",
           **{
               "data-ajax": "false",
               "data-transition": "fade"
           })
    html.close_li()
    html.close_ul()
    mobile_html_foot()
Ejemplo n.º 10
0
def dashlet_view(nr, dashlet):
    import bi  # FIXME: Cleanup?
    bi.reset_cache_status()  # needed for status icon

    html.set_var('display_options', 'HRSIXL')
    html.set_var('_display_options', 'HRSIXL')
    html.set_var('_body_class', 'dashlet')

    import views  # FIXME: HACK, clean this up somehow
    views.load_views()
    views.show_view(dashlet, True, True, True)
Ejemplo n.º 11
0
def render_wato_foldertree():
    is_slave_site = not wato.is_distributed() and os.path.exists(defaults.check_mk_configdir + "/distributed_wato.mk")
    if not is_slave_site:
        if not config.wato_enabled:
            html.write(_("WATO is disabled."))
            return False
        elif not config.may("wato.use"):
            html.write(_("You are not allowed to use Check_MK's web configuration GUI."))
            return False

    user_folders = compute_foldertree()

    #
    # Render link target selection
    #
    selected_topic, selected_target = config.load_user_file("foldertree", (_('Hosts'), 'allhosts'))

    views.load_views()
    dashboard.load_dashboards()
    topic_views  = visuals_by_topic(views.permitted_views().items() + dashboard.permitted_dashboards().items())
    topics = [ (t, t) for t, s in topic_views ]
    html.select("topic", topics, selected_topic, onchange = 'wato_tree_topic_changed(this)')
    html.write('<span class=left>%s</span>' % _('Topic:'))

    for topic, view_list in topic_views:
        targets = []
        for t, title, name, is_view in view_list:
            if config.visible_views and name not in config.visible_views:
                continue
            if config.hidden_views and name in config.hidden_views:
                continue
            if t == topic:
                if not is_view:
                    name = 'dashboard|' + name
                targets.append((name, title))

        attrs = {}
        if topic != selected_topic:
            attrs['style'] = 'display:none'
            default = ''
        else:
            default = selected_target

        html.select("target_%s" % topic, targets, default, attrs = attrs, onchange = 'wato_tree_target_changed(this)')

    html.write('<span class=left>%s</span>' % _('View:'))

    # Now render the whole tree
    if user_folders:
        render_tree_folder(user_folders.values()[0], 'wato_tree_click')
Ejemplo n.º 12
0
def page_side():
    if not config.may("general.see_sidebar"):
        return
    html.html_head(_("Check_MK Sidebar"),
                   javascripts=["sidebar"],
                   stylesheets=["sidebar", "status"])
    html.write(
        '<body class="side" onload="initScrollPos(); setSidebarHeight();" onunload="storeScrollPos()">\n'
    )
    html.write('<div id="check_mk_sidebar">\n')

    views.load_views()
    sidebar_head()
    user_config = load_user_config()
    refresh_snapins = []
    restart_snapins = []

    html.write('<div id="side_content">')
    for name, state in user_config:
        if not name in sidebar_snapins or not config.may("sidesnap." + name):
            continue
        refresh_url = render_snapin(name, state)
        refresh_time = sidebar_snapins.get(name).get("refresh", 0)
        if refresh_time > 0:
            refresh_snapins.append([name, refresh_time, refresh_url])

        restart = sidebar_snapins.get(name, {}).get('restart', False)
        if restart:
            restart_snapins.append(name)
    html.write('</div>')
    sidebar_foot()
    html.write('</div>')

    html.write("<script language=\"javascript\">\n")
    if restart_snapins:
        html.write("sidebar_restart_time = %s\n" % time.time())
    html.write("registerEdgeListeners();\n")
    html.write("setSidebarHeight();\n")
    html.write("refresh_snapins = %r;\n" % refresh_snapins)
    html.write("restart_snapins = %r;\n" % restart_snapins)
    html.write("sidebar_scheduler();\n")
    html.write("window.onresize = function() { setSidebarHeight(); }\n")
    # html.write("window.onload = function() { setSidebarHeight(); }\n")
    html.write("</script>\n")

    # html.write("</div>\n")
    html.write("</body>\n</html>")
Ejemplo n.º 13
0
def load_view_into_dashlet(dashlet, nr, view_name, add_context=None, load_from_all_views=False):
    import views

    views.load_views()

    permitted_views = views.permitted_views()

    # it is random which user is first accessing
    # an apache python process, initializing the dashboard loading and conversion of
    # old dashboards. In case of the conversion we really try hard to make the conversion
    # work in all cases. So we need all views instead of the views of the user.
    if load_from_all_views and view_name not in permitted_views:
        # This is not really 100% correct according to the logic of visuals.available(),
        # but we do this for the rare edge case during legacy dashboard conversion, so
        # this should be sufficient
        view = None
        for (u, n), this_view in views.all_views().items():
            # take the first view with a matching name
            if view_name == n:
                view = this_view
                break

        if not view:
            raise MKGeneralException(
                _(
                    "Failed to convert a builtin dashboard which is referencing "
                    'the view "%s". You will have to migrate it to the new '
                    "dashboard format on your own to work properly." % view_name
                )
            )
    else:
        view = permitted_views[view_name]

    view = copy.deepcopy(view)  # Clone the view
    dashlet.update(view)
    if add_context:
        dashlet["context"].update(add_context)

    # Overwrite the views default title with the context specific title
    dashlet["title"] = visuals.visual_title("view", view)
    dashlet["title_url"] = html.makeuri_contextless(
        [("view_name", view_name)] + visuals.get_singlecontext_vars(view).items(), filename="view.py"
    )

    dashlet["type"] = "view"
    dashlet["name"] = "dashlet_%d" % nr
    dashlet["show_title"] = True
Ejemplo n.º 14
0
def dashlet_view(nr, dashlet):
    import bi # FIXME: Cleanup?
    bi.reset_cache_status() # needed for status icon

    is_reload = html.has_var("_reload")

    display_options = "SIXL"
    if not is_reload:
        display_options += "HR"

    html.set_var('display_options',  display_options)
    html.set_var('_display_options', display_options)
    html.add_body_css_class('dashlet')

    import views # FIXME: HACK, clean this up somehow
    views.load_views()
    views.show_view(dashlet, True, True, True)
Ejemplo n.º 15
0
def dashlet_view(nr, dashlet):
    import bi  # FIXME: Cleanup?
    bi.reset_cache_status()  # needed for status icon

    is_reload = html.has_var("_reload")

    display_options = "SIXL"
    if not is_reload:
        display_options += "HR"

    html.set_var('display_options', display_options)
    html.set_var('_display_options', display_options)
    html.add_body_css_class('dashlet')

    import views  # FIXME: HACK, clean this up somehow
    views.load_views()
    views.show_view(dashlet, True, True, True)
Ejemplo n.º 16
0
def load_view_into_dashlet(dashlet, nr, view_name, add_context=None):
    import views
    views.load_views()
    views = views.permitted_views()
    if view_name in views:
        view = copy.deepcopy(views[view_name])
        dashlet.update(view)
        if add_context:
            dashlet['context'].update(add_context)

        # Overwrite the views default title with the context specific title
        dashlet['title'] = visuals.visual_title('view', view)
        dashlet['title_url'] = html.makeuri_contextless(
                [('view_name', view_name)] + visuals.get_singlecontext_vars(view).items(),
                filename='view.py')

    dashlet['type']       = 'view'
    dashlet['name']       = 'dashlet_%d' % nr
    dashlet['show_title'] = True
Ejemplo n.º 17
0
def page_side():
    if not config.may("general.see_sidebar"):
        return
    html.html_head(_("Check_MK Sidebar"), javascripts=["sidebar"], stylesheets=["sidebar", "status"])
    html.write('<body class="side" onload="initScrollPos(); setSidebarHeight();" onunload="storeScrollPos()">\n')
    html.write('<div id="check_mk_sidebar">\n')

    views.load_views()
    sidebar_head()
    user_config = load_user_config()
    refresh_snapins = []
    restart_snapins = []

    html.write('<div id="side_content">')
    for name, state in user_config:
        if not name in sidebar_snapins or not config.may("sidesnap." + name):
            continue
        refresh_url  = render_snapin(name, state)
        refresh_time = sidebar_snapins.get(name).get("refresh", 0)
        if refresh_time > 0:
            refresh_snapins.append([name, refresh_time, refresh_url])

        restart = sidebar_snapins.get(name, {}).get('restart', False)
        if restart:
            restart_snapins.append(name)
    html.write('</div>')
    sidebar_foot()
    html.write('</div>')

    html.write("<script language=\"javascript\">\n")
    if restart_snapins:
        html.write("sidebar_restart_time = %s\n" % time.time())
    html.write("registerEdgeListeners();\n")
    html.write("setSidebarHeight();\n")
    html.write("refresh_snapins = %r;\n" % refresh_snapins)
    html.write("restart_snapins = %r;\n" % restart_snapins)
    html.write("sidebar_scheduler();\n")
    html.write("window.onresize = function() { setSidebarHeight(); }\n")
    # html.write("window.onload = function() { setSidebarHeight(); }\n")
    html.write("</script>\n")

    # html.write("</div>\n")
    html.write("</body>\n</html>")
Ejemplo n.º 18
0
def page_side():
    if not config.may("general.see_sidebar"):
        return
    html.html_head(_("Check_MK Sidebar"), javascripts=["sidebar"], stylesheets=["sidebar", "status"])
    html.write('<body class="side" onload="initScrollPos(); setSidebarHeight();" onunload="storeScrollPos()">\n')
    html.write('<div id="check_mk_sidebar">\n')

    views.load_views()
    sidebar_head()
    user_config = load_user_config()
    refresh_snapins = []
    restart_snapins = []

    html.write('<div id="side_content">')
    for name, state in user_config:
        if not name in sidebar_snapins or not config.may("sidesnap." + name):
            continue
        # Performs the initial rendering and might return an optional refresh url,
        # when the snapin contents are refreshed from an external source
        refresh_url = render_snapin(name, state)
        if sidebar_snapins.get(name).get("refresh", False):
            refresh_snapins.append([name, refresh_url])
        elif sidebar_snapins.get(name).get("restart", False):
            refresh_snapins.append([name, refresh_url])
            restart_snapins.append(name)
    html.write('</div>')
    sidebar_foot()
    html.write('</div>')

    html.write("<script language=\"javascript\">\n")
    if restart_snapins:
        html.write("sidebar_restart_time = %s\n" % time.time())
    html.write("sidebar_update_interval = %0.2f;\n" % config.sidebar_update_interval)
    html.write("registerEdgeListeners();\n")
    html.write("setSidebarHeight();\n")
    html.write("refresh_snapins = %r;\n" % refresh_snapins)
    html.write("restart_snapins = %r;\n" % restart_snapins)
    html.write("sidebar_scheduler();\n")
    html.write("window.onresize = function() { setSidebarHeight(); }\n")
    html.write("</script>\n")

    html.write("</body>\n</html>")
Ejemplo n.º 19
0
def page_view():
    views.load_views()
    view_name = html.var("view_name")
    if not view_name:
        return page_index()

    view = views.permitted_views().get(view_name)
    if not view:
        raise MKGeneralException("No view defined with the name '%s'." % view_name)

    title = views.view_title(view)
    mobile_html_head(title)

    try:
	views.show_view(view, show_heading = False, show_buttons = False,
			show_footer = False, render_function = render_view)
    except Exception, e:
	if config.debug:
	    raise
	html.write("ERROR showing view: %s" % html.attrencode(e))
Ejemplo n.º 20
0
def page_view():
    views.load_views()
    view_name = html.var("view_name")
    if not view_name:
        return page_index()

    view = views.permitted_views().get(view_name)
    if not view:
        raise MKGeneralException("No view defined with the name '%s'." % view_name)

    title = views.view_title(view)
    mobile_html_head(title)

    try:
	views.show_view(view, show_heading = False, show_buttons = False,
			show_footer = False, render_function = render_view)
    except Exception, e:
	if config.debug:
	    raise
	html.write("ERROR showing view: %s" % html.attrencode(e))
Ejemplo n.º 21
0
def render_wato_foldertree():
    user_folders = compute_foldertree()

    #
    # Render link target selection
    #
    selected_topic, selected_target = config.load_user_file("foldertree", (_('Hosts'), 'allhosts'))

    views.load_views()
    dashboard.load_dashboards()
    topic_views  = visuals_by_topic(views.permitted_views().items() + dashboard.permitted_dashboards().items())
    topics = [ (t, t) for t, s in topic_views ]
    html.select("topic", topics, selected_topic, onchange = 'wato_tree_topic_changed(this)')
    html.write('<span class=left>%s</span>' % _('Topic:'))

    for topic, view_list in topic_views:
        targets = []
        for t, title, name, is_view in view_list:
            if config.visible_views and name not in config.visible_views:
                continue
            if config.hidden_views and name in config.hidden_views:
                continue
            if t == topic:
                if not is_view:
                    name = 'dashboard|' + name
                targets.append((name, title))

        attrs = {}
        if topic != selected_topic:
            attrs['style'] = 'display:none'
            default = ''
        else:
            default = selected_target

        html.select("target_%s" % topic, targets, default, attrs = attrs, onchange = 'wato_tree_target_changed(this)')

    html.write('<span class=left>%s</span>' % _('View:'))

    # Now render the whole tree
    if user_folders:
        render_tree_folder(user_folders.values()[0], 'wato_tree_click')
Ejemplo n.º 22
0
def choose_view(name):
    import views
    views.load_views()
    vs_view = DropdownChoice(
        title=_('View Name'),
        choices=views.view_choices,
        sorted=True,
    )

    html.header(_('Create Dashlet from existing View'), stylesheets=["pages"])
    html.begin_context_buttons()
    back_url = html.var(
        "back",
        "dashboard.py?edit=1&name=%s" % html.urlencode(html.var('name')))
    html.context_button(_("Back"), back_url, "back")
    html.end_context_buttons()

    if html.var('save') and html.check_transaction():
        try:
            view_name = vs_view.from_html_vars('view')
            vs_view.validate_value(view_name, 'view')

            load_dashboards()
            dashboard = available_dashboards[name]

            # Add the dashlet!
            dashlet = default_dashlet_definition('view')

            # save the original context and override the context provided by the view
            dashlet_id = len(dashboard['dashlets'])
            load_view_into_dashlet(dashlet, dashlet_id, view_name)
            add_dashlet(dashlet, dashboard)

            html.http_redirect('edit_dashlet.py?name=%s&id=%d' %
                               (name, dashlet_id))
            return

        except MKUserError, e:
            html.write("<div class=error>%s</div>\n" % e.message)
            html.add_user_error(e.varname, e.message)
Ejemplo n.º 23
0
def dashlet_view_handle_input(ident, dashlet):
    dashlet['name'] = 'dashlet_%d' % ident
    dashlet.setdefault('title', _('View'))
    import views  # FIXME: HACK, clean this up somehow
    views.load_views()
    return views.create_view_from_valuespec(dashlet, dashlet)
Ejemplo n.º 24
0
def page_side():
    if not config.may("general.see_sidebar"):
        return

    stylesheets = ["theme/css/cloud-admin", 
                    "theme/css/themes/default",
                    "theme/css/responsive", 
                    "theme/font-awesome/css/font-awesome.min",
                    "theme/css/fonts"
                ]
    stylesheets += ["sidebar", "status"]

    html.html_head(_("Check_MK Sidebar"), javascripts=["sidebar"], stylesheets=stylesheets)
    html.write('<body class="side" onload="initScrollPos(); setSidebarHeight();" onunload="storeScrollPos()">\n')
    html.write('<div id="check_mk_sidebar">\n')

    views.load_views()
    sidebar_head()
    user_config = load_user_config()
    refresh_snapins = []
    restart_snapins = []

    html.write('<div id="side_content">')
    for name, state in user_config:
        if not name in sidebar_snapins or not config.may("sidesnap." + name):
            continue
        # Performs the initial rendering and might return an optional refresh url,
        # when the snapin contents are refreshed from an external source
        refresh_url = render_snapin(name, state)
        if sidebar_snapins.get(name).get("refresh", False):
            refresh_snapins.append([name, refresh_url])
        elif sidebar_snapins.get(name).get("restart", False):
            refresh_snapins.append([name, refresh_url])
            restart_snapins.append(name)
    html.write('</div>')
    sidebar_foot()
    html.write('</div>')

    html.write("<script language=\"javascript\">\n")
    if restart_snapins:
        html.write("sidebar_restart_time = %s\n" % time.time())
    html.write("sidebar_update_interval = %0.2f;\n" % config.sidebar_update_interval)
    html.write("registerEdgeListeners();\n")
    html.write("setSidebarHeight();\n")
    html.write("refresh_snapins = %r;\n" % refresh_snapins)
    html.write("restart_snapins = %r;\n" % restart_snapins)
    html.write("sidebar_scheduler();\n")
    html.write("window.onresize = function() { setSidebarHeight(); }\n")
    html.write("</script>\n")

    html.write("""
        <!-- JQUERY -->
        <script type="text/javascript" src="theme/js/jquery/jquery-1.11.1.min.js" ></script>


    """)

    html.write("<!-- BEGIN: sidebar js for reloading frame -->")
    html.write("<script> \n")
    html.write("""
            $(".main_click").click(function(event){
                event.preventDefault();
                event.stopPropagation();
                var src = ($(this).attr("href"));

                $("#main_frame",parent.document).attr("src",src);
                //parent.document.reload();
                return false;
            });
    """)
    html.write("</script> \n")
    html.write("<!-- END: sidebar js for reloading frame -->")


    html.write("</body>\n</html>")
Ejemplo n.º 25
0
def render_wato_foldertree():
    if not wato.is_wato_slave_site():
        if not config.wato_enabled:
            html.write_text(_("WATO is disabled."))
            return False

    user_folders = compute_foldertree()

    #
    # Render link target selection
    #
    selected_topic, selected_target = config.user.load_file(
        "foldertree", (_('Hosts'), 'allhosts'))

    views.load_views()
    dashboard.load_dashboards()
    topic_views = visuals_by_topic(views.permitted_views().items() +
                                   dashboard.permitted_dashboards().items())
    topics = [(t, t) for t, s in topic_views]

    html.open_table()
    html.open_tr()
    html.td(_('Topic:'), class_="label")
    html.open_td()
    html.select("topic",
                topics,
                selected_topic,
                onchange='wato_tree_topic_changed(this)')
    html.close_td()
    html.close_tr()

    html.open_tr()
    html.td(_("View:"), class_="label")
    html.open_td()

    for topic, view_list in topic_views:
        targets = []
        for t, title, name, is_view in view_list:
            if config.visible_views and name not in config.visible_views:
                continue
            if config.hidden_views and name in config.hidden_views:
                continue
            if t == topic:
                if not is_view:
                    name = 'dashboard|' + name
                targets.append((name, title))

        attrs = {}
        if topic != selected_topic:
            attrs['style'] = 'display:none'
            default = ''
        else:
            default = selected_target

        html.select("target_%s" % topic,
                    targets,
                    default,
                    attrs=attrs,
                    onchange='wato_tree_target_changed(this)')

    html.close_td()
    html.close_tr()
    html.close_table()

    # Now render the whole tree
    if user_folders:
        render_tree_folder("wato-hosts",
                           user_folders.values()[0], 'wato_tree_click')
Ejemplo n.º 26
0
def dashlet_view_handle_input(ident, dashlet):
    dashlet['name'] = 'dashlet_%d' % ident
    dashlet.setdefault('title', _('View'))
    import views # FIXME: HACK, clean this up somehow
    views.load_views()
    return views.create_view_from_valuespec(dashlet, dashlet)
Ejemplo n.º 27
0
def dashlet_view_render_input(dashlet):
    import views  # FIXME: HACK, clean this up somehow
    views.load_views()
    views.transform_view_to_valuespec_value(dashlet)
    return views.render_view_config(dashlet)
Ejemplo n.º 28
0
def dashlet_view_render_input(dashlet):
    import views  # FIXME: HACK, clean this up somehow

    views.load_views()
    views.transform_view_to_valuespec_value(dashlet)
    return views.render_view_config(dashlet)