コード例 #1
0
ファイル: inventory.py プロジェクト: troelsarvin/checkmk
 def display(self, value: FilterHTTPVariables) -> None:
     html.text_input(self._varprefix + "name")
     html.br()
     display_filter_radiobuttons(
         varname=self._varprefix + "match",
         options=[
             ("exact", _("exact match")),
             ("regex", _("regular expression, substring match")),
         ],
         default="exact",
         value=value,
     )
     html.br()
     html.open_span(class_="min_max_row")
     html.write_text(_("Min. Version: "))
     html.text_input(
         self._varprefix + "version_from",
         default_value=value.get(self._varprefix + "version_from", ""),
         size=9,
     )
     html.write_text("   ")
     html.write_text(_("Max. Vers.: "))
     html.text_input(
         self._varprefix + "version_to",
         default_value=value.get(self._varprefix + "version_from", ""),
         size=9,
     )
     html.close_span()
     html.br()
     html.checkbox(
         self._varprefix + "negate",
         False,
         label=_("Negate: find hosts <b>not</b> having this package"),
     )
コード例 #2
0
    def filter(self, value: FilterHTTPVariables) -> FilterHeader:
        headers = []

        # Do not restrict to a certain number, because we'd like to link to this
        # via an URL, e.g. from the virtual host tree snapin
        num = 0
        column = livestatus.lqencode(self.object_type) + "_tags"
        while value.get("%s%d_grp" % (self.var_prefix, num)):
            prefix = "%s%d" % (self.var_prefix, num)
            num += 1

            op = value.get(prefix + "_op")
            tag_group = config.tags.get_tag_group(
                value.get(prefix + "_grp", ""))
            tag = value.get(prefix + "_val", "")

            if not tag_group or not op:
                continue

            headers.append(
                encode_label_for_livestatus(column,
                                            tag_group.id,
                                            tag,
                                            negate=op != "is"))

        if headers:
            return "\n".join(headers) + "\n"
        return ""
コード例 #3
0
 def get_bound(self, var: str,
               value: FilterHTTPVariables) -> Union[int, float, None]:
     try:
         if isinstance(self.bound_rescaling, int):
             return int(value.get(var, "")) * self.bound_rescaling
         return float(value.get(var, "")) * self.bound_rescaling
     except ValueError:
         return None
コード例 #4
0
def log_class_filter(value: FilterHTTPVariables) -> FilterHeader:
    if not any(value.values()):
        return "Limit: 0\n"  # no class allowed

    toggled = [
        request_var[-1] for request_var, value in value.items()
        if value == "on"
    ]
    return lq_logic("Filter: class =", toggled, "Or")
コード例 #5
0
 def display(self, value: FilterHTTPVariables) -> None:
     html.write_text(_("Min.&nbsp;Version:"))
     html.text_input(self.htmlvars[0],
                     default_value=value.get(self.htmlvars[0], ""),
                     size=7)
     html.write_text(" &nbsp; ")
     html.write_text(_("Max.&nbsp;Version:"))
     html.text_input(self.htmlvars[1],
                     default_value=value.get(self.htmlvars[1], ""),
                     size=7)
コード例 #6
0
ファイル: utils.py プロジェクト: troelsarvin/checkmk
def checkbox_row(
    options: List[Tuple[str, str]], value: FilterHTTPVariables, title: Optional[str] = None
) -> None:
    html.begin_checkbox_group()
    if title:
        html.write_text(title)
    checkbox_default = not any(value.values())
    for var, text in options:
        html.checkbox(var, bool(value.get(var, checkbox_default)), label=text)
    html.end_checkbox_group()
コード例 #7
0
 def display(self, value: FilterHTTPVariables) -> None:
     html.write_text(_("from:") + " ")
     html.text_input(self.ident + "_from",
                     default_value=value.get(self.ident + "_from", ""),
                     size=8,
                     cssclass="number")
     html.write_text("&nbsp; %s: " % _("to"))
     html.text_input(self.ident + "_to",
                     default_value=value.get(self.ident + "_to", ""),
                     size=8,
                     cssclass="number")
コード例 #8
0
    def parse_value(self, value: FilterHTTPVariables) -> Labels:
        # Do not restrict to a certain number, because we'd like to link to this
        # via an URL, e.g. from the virtual host tree snapin
        num = 0
        while (this_tag :=
               value.get("%s_%d" % (self.var_prefix, num))) is not None:
            if this_tag:
                negate = bool(value.get("%s_%d_neg" % (self.var_prefix, num)))
                yield Label(this_tag, this_tag, negate)

            num += 1
コード例 #9
0
 def filter(self, value: FilterHTTPVariables) -> FilterHeader:
     if filter_value := value.get(self.request_vars[0]):
         return encode_labels_for_livestatus(
             column=self.column,
             labels=[
                 Label(
                     f"cmk/kubernetes/{self._kubernetes_object_type}",
                     filter_value,
                     False,
                 )
             ],
         )
コード例 #10
0
ファイル: utils.py プロジェクト: troelsarvin/checkmk
    def display(self, value: FilterHTTPVariables) -> None:
        html.write_text(_("From:") + "&nbsp;")
        html.text_input(
            self.htmlvars[0], default_value=value.get(self.htmlvars[0], ""), style="width: 80px;"
        )
        if self.unit:
            html.write_text(" %s " % self.unit)

        html.write_text(" &nbsp; " + _("To:") + "&nbsp;")
        html.text_input(
            self.htmlvars[1], default_value=value.get(self.htmlvars[1], ""), style="width: 80px;"
        )
        if self.unit:
            html.write_text(" %s " % self.unit)
コード例 #11
0
def host_aux_tags_lq(prefix: str, value: FilterHTTPVariables) -> FilterHeader:
    headers = []

    # Do not restrict to a certain number, because we'd like to link to this
    # via an URL, e.g. from the virtual host tree snapin
    num = 0
    while (this_tag := value.get("%s_%d" % (prefix, num))) is not None:
        if this_tag:
            negate = bool(value.get("%s_%d_neg" % (prefix, num)))
            headers.append(
                encode_label_for_livestatus("host_tags", this_tag, this_tag,
                                            negate))

        num += 1
コード例 #12
0
ファイル: legacy_filters.py プロジェクト: PLUTEX/checkmk
 def filter(self, value: FilterHTTPVariables) -> FilterHeader:
     address_val = value.get(self.htmlvars[0])
     if not address_val:
         return ""
     if value.get(self.htmlvars[1]) == "yes":
         op = "~"
         address = "^" + livestatus.lqencode(address_val)
     else:
         op = "="
         address = livestatus.lqencode(address_val)
     if self._what == "primary":
         return "Filter: host_address %s %s\n" % (op, address)
     varname = "ADDRESS_4" if self._what == "ipv4" else "ADDRESS_6"
     return "Filter: host_custom_variables %s %s %s\n" % (op, varname, address)
コード例 #13
0
    def display(self, value: FilterHTTPVariables) -> None:
        html.write_text(_("From: "))
        htmlvar = self.htmlvars[0]
        current_value = value.get(htmlvar, "")
        html.text_input(htmlvar, default_value=current_value, size=8, cssclass="number")
        if self._unit:
            html.write_text(" %s" % self._unit)

        html.write_text("&nbsp;&nbsp;" + _("To: "))
        htmlvar = self.htmlvars[1]
        current_value = value.get(htmlvar, "")
        html.text_input(htmlvar, default_value=current_value, size=8, cssclass="number")
        if self._unit:
            html.write_text(" %s" % self._unit)
コード例 #14
0
    def parse_value(self, value: FilterHTTPVariables) -> Labels:
        # Do not restrict to a certain number, because we'd like to link to this
        # via an URL, e.g. from the virtual host tree snapin
        num = 0
        while value.get("%s_%d_grp" % (self.var_prefix, num)):
            prefix = "%s_%d" % (self.var_prefix, num)
            num += 1

            op = value.get(prefix + "_op")
            tag_group = active_config.tags.get_tag_group(
                value.get(prefix + "_grp", ""))

            if tag_group and op:
                tag = value.get(prefix + "_val", "")
                yield Label(tag_group.id, tag, negate=op != "is")
コード例 #15
0
def log_alerts_filter(value: FilterHTTPVariables) -> FilterHeader:
    if not any(value.values()):
        return "Limit: 0\n"  # no allowed state

    headers = []
    for request_var, toggled in value.items():
        if toggled:
            log_type = "HOST" if request_var[-2] == "h" else "SERVICE"
            state = request_var[-1]
            headers.append(
                lq_logic("Filter:",
                         [f"log_type ~ {log_type} .*", f"log_state = {state}"],
                         "And"))

    return "".join(headers) + ("Or: %d\n" % len(headers))
コード例 #16
0
    def _get_time_range_of(self, value: FilterHTTPVariables,
                           what: str) -> Union[None, int, float]:
        varprefix = self.ident + "_" + what

        rangename = value.get(varprefix + "_range")
        if rangename == "abs":
            try:
                return time.mktime(time.strptime(value[varprefix], "%Y-%m-%d"))
            except Exception:
                user_errors.add(
                    MKUserError(
                        varprefix,
                        _("Please enter the date in the format YYYY-MM-DD.")))
                return None

        if rangename == "unix":
            return int(value[varprefix])
        if rangename is None:
            return None

        try:
            count = int(value[varprefix])
            secs = count * int(rangename)
            return int(time.time()) - secs
        except Exception:
            return None
コード例 #17
0
ファイル: utils.py プロジェクト: petrows/checkmk
def display_filter_radiobuttons(*, varname: str, options: List[Tuple[str, str]], default: str,
                                value: FilterHTTPVariables) -> None:
    pick = value.get(varname, default)
    html.begin_radio_group(horizontal=True)
    for state, text in options:
        html.radiobutton(varname, state, pick == state, text + " &nbsp; ")
    html.end_radio_group()
コード例 #18
0
def host_state_filter(value: FilterHTTPVariables) -> FilterHeader:
    if not any(value.values()):  # empty selection discard
        return ""
    headers = []
    for request_var, toggled in value.items():
        if toggled:
            continue

        if request_var == "hstp":
            headers.append("Filter: host_has_been_checked = 1\n")

        else:
            headers.append("Filter: host_state = %s\n"
                           "Filter: host_has_been_checked = 1\n"
                           "And: 2\nNegate:\n" % request_var[-1])
    return "".join(headers)
コード例 #19
0
def hostgroup_problems_filter(value: FilterHTTPVariables) -> FilterHeader:
    headers = []
    for svc_var in ["warn", "crit", "pending", "unknown"]:
        if value.get("hostgroups_having_services_%s" % svc_var):
            headers.append("num_services_%s > 0\n" % svc_var)

    for host_var in ["down", "unreach", "pending"]:
        if value.get("hostgroups_having_hosts_%s" % host_var):
            headers.append("num_hosts_%s > 0\n" % host_var)

    if value.get("hostgroups_show_unhandled_host"):
        headers.append("num_hosts_unhandled_problems > 0\n")

    if value.get("hostgroups_show_unhandled_svc"):
        headers.append("num_services_unhandled_problems > 0\n")

    return lq_logic("Filter:", headers, "Or")
コード例 #20
0
    def filter(self, value: FilterHTTPVariables) -> FilterHeader:
        if self.ident == "hostgroupvisibility":
            # jump directly because selection is empty filter
            return self.livestatus_query(value)

        if all(value.values()):  # everything on, skip filter
            return ""
        return self.livestatus_query(value)
コード例 #21
0
ファイル: utils.py プロジェクト: troelsarvin/checkmk
    def display(self, value: FilterHTTPVariables) -> None:
        current_value = value.get(self.query_filter.request_vars[0], "")
        html.text_input(
            self.htmlvars[0], current_value, self.query_filter.negateable and "neg" or ""
        )

        if self.query_filter.negateable:
            checkbox_component(self.query_filter.request_vars[1], value, _("negate"))
コード例 #22
0
def host_having_svc_problems_filter(
        value: FilterHTTPVariables) -> FilterHeader:
    conditions = [
        "host_num_services_%s > 0" % var
        for var in ["warn", "crit", "pending", "unknown"]
        if value.get("hosts_having_services_%s" % var)
    ]

    return lq_logic("Filter:", conditions, "Or")
コード例 #23
0
ファイル: utils.py プロジェクト: troelsarvin/checkmk
 def display(self, value: FilterHTTPVariables):
     html.open_table(class_="filtertime")
     for what, whatname in [("from", _("From")), ("until", _("Until"))]:
         varprefix = self.ident + "_" + what
         html.open_tr()
         html.td("%s:" % whatname)
         html.open_td()
         html.text_input(varprefix, default_value=value.get(varprefix, ""))
         html.close_td()
         html.open_td()
         html.dropdown(
             varprefix + "_range",
             query_filters.time_filter_options(),
             deflt=value.get(varprefix + "_range", "3600"),
         )
         html.close_td()
         html.close_tr()
     html.close_table()
コード例 #24
0
ファイル: legacy_filters.py プロジェクト: PLUTEX/checkmk
    def filter(self, value: FilterHTTPVariables) -> FilterHeader:
        # not (A or B) => (not A) and (not B)
        if value.get(self.htmlvars[1]):
            negate = "!"
            op = "And"
        else:
            negate = ""
            op = "Or"

        return lq_logic(f"Filter: {self.column} {negate}>=", self.selection(value), op)
コード例 #25
0
 def display(self, value: FilterHTTPVariables) -> None:
     html.begin_checkbox_group()
     for state, state_name in sorted(defines.interface_oper_states().items()):
         if not isinstance(state, int):  # needed because of silly types
             continue
         if state >= 8:
             continue  # skip artificial state 8 (degraded) and 9 (admin down)
         varname = self.ident + "_" + str(state)
         html.checkbox(varname, bool(value.get(varname, True)), label=state_name)
         if state in (4, 7):
             html.br()
     html.end_checkbox_group()
コード例 #26
0
ファイル: wato.py プロジェクト: m3rlinux/checkmk
 def heading_info(self, value: FilterHTTPVariables) -> Optional[str]:
     # FIXME: There is a problem with caching data and changing titles of WATO files
     # Everything is changed correctly but the filter object is stored in the
     # global multisite_filters var and self.path_to_tree is not refreshed when
     # rendering this title. Thus the threads might have old information about the
     # file titles and so on.
     # The call below needs to use some sort of indicator wether the cache needs
     # to be renewed or not.
     self.check_wato_data_update()
     current = value.get(self.ident)
     if current and current != "/":
         return self.path_to_tree.get(current)
     return None
コード例 #27
0
def options_toggled_filter(column: str,
                           value: FilterHTTPVariables) -> FilterHeader:
    "When VALUE keys are the options, return filterheaders that equal column to option."

    def drop_column_prefix(var: str):
        if var.startswith(column + "_"):
            return var[len(column) + 1:]
        return var

    selected = sorted(
        drop_column_prefix(name) for name, on in value.items() if on == "on")

    return lq_logic("Filter: %s =" % column, selected, "Or")
コード例 #28
0
def service_state_filter(prefix: str,
                         value: FilterHTTPVariables) -> FilterHeader:
    if not any(value.values()):  # empty selection discard
        return ""

    headers = []
    for request_var, toggled in value.items():
        if toggled:
            continue

        if request_var.endswith("p"):
            headers.append("Filter: service_has_been_checked = 1\n")
        else:
            if prefix == "hd":
                column = "service_last_hard_state"
            else:
                column = "service_state"
            headers.append("Filter: %s = %s\n"
                           "Filter: service_has_been_checked = 1\n"
                           "And: 2\nNegate:\n" % (column, request_var[-1]))

    return "".join(headers)
コード例 #29
0
ファイル: node_vis.py プロジェクト: m3rlinux/checkmk
 def display(self, value: FilterHTTPVariables) -> None:
     actual_value = value.get(self._filter_range_config.column,
                              self._filter_range_config.default)
     html.add_form_var(self._filter_range_config.column)
     html.write_html(
         HTML(f"""
         <input
             id={self._filter_range_config.column}
             name={self._filter_range_config.column}
             style="pointer-events: all; width: 80%%;"
             oninput="{self._update_label()}" type="range"
             step="{self._filter_range_config.step}"
             min="{self._filter_range_config.min}"
             max="{self._filter_range_config.max}"
             value="{actual_value}">
         <label id={self._filter_range_config.column}_label>{actual_value}</>
         """))
コード例 #30
0
    def display(self, value: FilterHTTPVariables) -> None:
        html.open_table()

        from_value, to_value = (self._days_to_seconds(value.get(v, "")) for v in self.htmlvars)
        html.open_tr()
        html.td("%s:" % _("from"), style="vertical-align: middle;")
        html.open_td()
        self._valuespec().render_input(self._from_varprefix, from_value)
        html.close_td()
        html.close_tr()

        html.open_tr()
        html.td("%s:" % _("to"), style="vertical-align: middle;")
        html.open_td()
        self._valuespec().render_input(self._to_varprefix, to_value)
        html.close_td()
        html.close_tr()

        html.close_table()