Пример #1
0
 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 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)
Пример #5
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")
Пример #6
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
Пример #7
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,
                 )
             ],
         )
Пример #8
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
Пример #9
0
 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)
Пример #10
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)
Пример #11
0
    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)
Пример #12
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")
Пример #13
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
Пример #14
0
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()
Пример #15
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")
Пример #16
0
    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"))
Пример #17
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")
Пример #18
0
 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()
Пример #19
0
    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)
Пример #20
0
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()
Пример #21
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()
Пример #22
0
 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
Пример #23
0
 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}</>
         """))
Пример #24
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()
Пример #25
0
    def get_bound(var: str, value: FilterHTTPVariables) -> Optional[int]:
        rangename = value.get(var + "_range")
        if rangename == "abs":
            try:
                return int(time.mktime(time.strptime(value[var], "%Y-%m-%d")))
            except Exception:
                user_errors.add(
                    MKUserError(
                        var,
                        _("Please enter the date in the format YYYY-MM-DD.")))
                return None

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

        try:
            count = int(value[var])
            secs = count * int(rangename)
            return int(time.time()) - secs
        except Exception:
            return None
Пример #26
0
 def filter(self, value: FilterHTTPVariables) -> FilterHeader:
     self.check_wato_data_update()
     if folder := value.get(self.ident):
         return "Filter: host_filename %s\n" % _wato_folders_to_lq_regex(
             folder)
Пример #27
0
 def display(self, value: FilterHTTPVariables) -> None:
     html.dropdown(self.ident,
                   self.choices(),
                   deflt=value.get(self.htmlvars[0], ""))
Пример #28
0
 def _to_list(self, value: FilterHTTPVariables) -> List[str]:
     if folders := value.get(self.htmlvars[0], ""):
         return folders.split("|")
Пример #29
0
 def need_inventory(self, value: FilterHTTPVariables) -> bool:
     return bool(value.get(self._varprefix + "name"))
Пример #30
0
 def parse_value(self, value: FilterHTTPVariables) -> Labels:
     return parse_labels_value(value.get(self.request_vars[0], ""))