예제 #1
0
def render_metrics_table(translated_metrics, host_name, service_description):
    output = "<table class=metricstable>"
    for metric_name, metric in sorted(translated_metrics.items(),
                                      key=lambda x: x[1]["title"]):
        output += "<tr>"
        output += "<td class=color>%s</td>" % render_color_icon(
            metric["color"])
        output += "<td>%s:</td>" % metric["title"]
        output += "<td class=value>%s</td>" % metric["unit"]["render"](
            metric["value"])
        if cmk_graphs_possible():
            output += "<td>"
            output += html.render_popup_trigger(
                html.render_icon("custom_graph",
                                 title=_("Add this metric to dedicated graph"),
                                 cssclass="iconbutton"),
                ident="add_metric_to_graph_" + host_name + ";" +
                service_description,
                what="add_metric_to_graph",
                url_vars=[
                    ("host", host_name),
                    ("service", service_description),
                    ("metric", metric_name),
                ])
            output += "</td>"
        output += "</tr>"
    output += "</table>"
    return output
예제 #2
0
def render_metrics_table(translated_metrics, host_name, service_description):
    # type: (TranslatedMetrics, str, str) -> str
    # TODO: Don't paste together strings by hand, use our HTML utilities.
    output = "<table class=metricstable>"
    for metric_name, metric in sorted(translated_metrics.items(), key=lambda x: x[1]["title"]):
        output += "<tr>"
        output += "<td class=color>%s</td>" % render_color_icon(metric["color"])
        output += "<td>%s:</td>" % metric["title"]
        output += "<td class=value>%s</td>" % metric["unit"]["render"](metric["value"])
        if not cmk_version.is_raw_edition():
            output += "<td>"
            output += str(
                html.render_popup_trigger(
                    html.render_icon("custom_graph",
                                     title=_("Add this metric to dedicated graph"),
                                     cssclass="iconbutton"),
                    ident="add_metric_to_graph_" + host_name + ";" + str(service_description),
                    what="add_metric_to_graph",
                    url_vars=[
                        ("host", host_name),
                        ("service", service_description),
                        ("metric", metric_name),
                    ]))
            output += "</td>"
        output += "</tr>"
    output += "</table>"
    return output
예제 #3
0
def render_graph_legend(graph_artwork, graph_render_options):
    graph_width = graph_render_options["size"][0] * html_size_per_ex
    font_size_style = "font-size: %dpt;" % graph_render_options["font_size"]

    scalars = get_scalars(graph_artwork, graph_render_options)

    if graph_render_options["show_vertical_axis"] or graph_render_options[
            "show_controls"]:
        legend_margin_left = 49
    else:
        legend_margin_left = 0

    style = []
    legend_width = graph_width - legend_margin_left

    # In case there is no margin show: Add some to the legend since it looks
    # ugly when there is no space between the outer graph border and the legend
    if not graph_render_options["show_margin"]:
        legend_width -= 5 * 2
        style.append("margin: 8px 5px 5px 5px")

    style.append("width:%dpx" % legend_width)

    if legend_margin_left:
        style.append("margin-left:%dpx" % legend_margin_left)

    output: RenderOutput = '<table class=legend style="%s">' % ";".join(style)

    # Render the title row
    output += '<tr><th></th>'
    for scalar, title, inactive in scalars:
        classes = ["scalar", scalar]
        if inactive and graph_artwork["step"] != 60:
            descr = _(
                "This graph is based on data consolidated with the function \"%s\". The "
                "values in this column are the \"%s\" values of the \"%s\" values "
                "aggregated in %s steps. Assuming a check interval of 1 minute, the %s "
                "values here are based on the %s value out of %d raw values."
            ) % (
                graph_artwork["definition"]["consolidation_function"],
                scalar,
                graph_artwork["definition"]["consolidation_function"],
                artwork.get_step_label(graph_artwork["step"]),
                scalar,
                graph_artwork["definition"]["consolidation_function"],
                (graph_artwork["step"] / 60),
            )

            descr += "\n\n" + _("Click here to change the graphs "
                                "consolidation function to \"%s\".") % scalar

            classes.append("inactive")
        else:
            descr = ""

        output += '<th class="%s" style="%s" title=\"%s\">%s</th>' % \
                        (" ".join(classes), font_size_style, escaping.escape_attribute(descr), title)
    output += '</tr>'

    # Render the curve related rows
    for curve in graph_curves(graph_artwork):
        output += '<tr>'
        output += '<td style="%s">%s ' % (font_size_style,
                                          render_color_icon(curve["color"]))
        output += '%s</td>' % curve["title"]

        for scalar, title, inactive in scalars:
            if scalar == "pin" and not show_pin_time(graph_artwork,
                                                     graph_render_options):
                continue

            if inactive and graph_artwork["step"] != 60:
                inactive_cls = " inactive"
            else:
                inactive_cls = ""

            output += '<td class="scalar%s" style="%s">%s</td>' % \
                        (inactive_cls, font_size_style, curve["scalars"][scalar][1])

        output += '</tr>'

    # Render scalar values
    if graph_artwork["horizontal_rules"]:
        first = True
        for _value, readable, color, title in graph_artwork[
                "horizontal_rules"]:
            output += '<tr class="scalar%s">' % (first and " first" or "")
            output += '<td style="%s">' % font_size_style
            output += render_color_icon(color)
            output += '%s</td>' % title
            # A colspan of 5 has to be used here, since the pin that is added by a click into
            # the graph introduces a new column.
            output += '<td colspan=5 class=scalar style="%s">%s</td>' % (
                font_size_style, readable)
            output += '</tr>'
            first = False

    output += '</table>'
    return output
예제 #4
0
def _show_graph_legend(graph_artwork, graph_render_options) -> None:
    """Render legend that describe the metrics"""
    graph_width = graph_render_options["size"][0] * html_size_per_ex
    font_size_style = "font-size: %dpt;" % graph_render_options["font_size"]

    scalars = get_scalars(graph_artwork, graph_render_options)

    if graph_render_options["show_vertical_axis"] or graph_render_options[
            "show_controls"]:
        legend_margin_left = 49
    else:
        legend_margin_left = 0

    style = []
    legend_width = graph_width - legend_margin_left

    # In case there is no margin show: Add some to the legend since it looks
    # ugly when there is no space between the outer graph border and the legend
    if not graph_render_options["show_margin"]:
        legend_width -= 5 * 2
        style.append("margin: 8px 5px 5px 5px")

    style.append("width:%dpx" % legend_width)

    if legend_margin_left:
        style.append("margin-left:%dpx" % legend_margin_left)

    html.open_table(class_="legend", style=style)

    # Render the title row
    html.open_tr()
    html.th("")
    for scalar, title, inactive in scalars:
        classes = ["scalar", scalar]
        if inactive and graph_artwork["step"] != 60:
            descr = _(
                "This graph is based on data consolidated with the function \"%s\". The "
                "values in this column are the \"%s\" values of the \"%s\" values "
                "aggregated in %s steps. Assuming a check interval of 1 minute, the %s "
                "values here are based on the %s value out of %d raw values."
            ) % (
                graph_artwork["definition"]["consolidation_function"],
                scalar,
                graph_artwork["definition"]["consolidation_function"],
                artwork.get_step_label(graph_artwork["step"]),
                scalar,
                graph_artwork["definition"]["consolidation_function"],
                (graph_artwork["step"] / 60),
            )

            descr += "\n\n" + _("Click here to change the graphs "
                                "consolidation function to \"%s\".") % scalar

            classes.append("inactive")
        else:
            descr = ""

        html.th(title, class_=classes, style=font_size_style, title=descr)
    html.close_tr()

    # Render the curve related rows
    for curve in graph_curves(graph_artwork):
        html.open_tr()
        html.open_td(style=font_size_style)
        html.write_html(render_color_icon(curve["color"]))
        html.write_text(curve["title"])
        html.close_td()

        for scalar, title, inactive in scalars:
            if scalar == "pin" and not show_pin_time(graph_artwork,
                                                     graph_render_options):
                continue

            if inactive and graph_artwork["step"] != 60:
                inactive_cls: Optional[str] = "inactive"
            else:
                inactive_cls = None

            html.td(curve["scalars"][scalar][1],
                    class_=inactive_cls,
                    style=font_size_style)

        html.close_tr()

    # Render scalar values
    if graph_artwork["horizontal_rules"]:
        first = True
        for _value, readable, color, title in graph_artwork[
                "horizontal_rules"]:
            html.open_tr(class_=["scalar", "first" if first else None])
            html.open_td(style=font_size_style)
            html.write_html(render_color_icon(color))
            html.write_text(title)
            html.close_td()

            # A colspan of 5 has to be used here, since the pin that is added by a click into
            # the graph introduces a new column.
            html.td(readable,
                    colspan=5,
                    class_="scalar",
                    style=font_size_style)
            html.close_tr()
            first = False

    html.close_table()