Ejemplo n.º 1
0
    def _save_services(self, old_autochecks: SetAutochecksTable,
                       checks: SetAutochecksTable, need_sync: bool) -> None:
        message = _(
            "Saved check configuration of host '%s' with %d services") % (
                self._host.name(),
                len(checks),
            )
        watolib.add_service_change(
            host=self._host,
            action_name="set-autochecks",
            text=message,
            need_sync=need_sync,
            diff_text=watolib.make_diff_text(
                _make_host_audit_log_object(old_autochecks),
                _make_host_audit_log_object(checks)),
        )

        site_id = self._host.site_id()
        site_status = states().get(site_id, SiteStatus({}))
        if is_pre_17_remote_site(site_status):
            # is this branch still needed?
            set_autochecks(
                site_id,
                self._host.name(),
                {x: y[1:3]
                 for x, y in checks.items()},  # type: ignore[misc]
            )
        else:
            set_autochecks(
                site_id,
                self._host.name(),
                checks,
            )
Ejemplo n.º 2
0
def create_rule(param):
    """Create rule"""
    body = param["body"]
    folder = body["folder"]
    value = body["value_raw"]
    rulesets = watolib.FolderRulesets(folder)
    rulesets.load()
    try:
        ruleset = rulesets.get(body["ruleset"])
    except KeyError:
        return problem(
            status=400,
            detail=f"Ruleset {body['ruleset']!r} could not be found.",
        )

    try:
        ruleset.valuespec().validate_value(value, "")
    except exceptions.MKUserError as exc:
        if exc.varname is None:
            title = "A field has a problem"
        else:
            field_name = exc.varname.replace("_p_", "")
            title = f"Problem in (sub-)field {field_name!r}"

        return problem(
            status=400,
            detail=strip_tags(exc.message),
            title=title,
        )

    rule = watolib.Rule(
        gen_id(),
        folder,
        ruleset,
        RuleConditions(
            host_folder=folder,
            host_tags=body["conditions"].get("host_tag"),
            host_labels=body["conditions"].get("host_label"),
            host_name=body["conditions"].get("host_name"),
            service_description=body["conditions"].get("service_description"),
            service_labels=body["conditions"].get("service_label"),
        ),
        RuleOptions.from_config(body["properties"]),
        value,
    )
    index = ruleset.append_rule(folder, rule)
    rulesets.save()
    # TODO Duplicated code is in pages/rulesets.py:2670-
    # TODO Move to watolib
    add_change(
        "new-rule",
        _l('Created new rule #%d in ruleset "%s" in folder "%s"')
        % (index, ruleset.title(), folder.alias_path()),
        sites=folder.all_site_ids(),
        diff_text=make_diff_text({}, rule.to_log()),
        object_ref=rule.object_ref(),
    )
    return serve_json(_serialize_rule(folder, index, rule))
Ejemplo n.º 3
0
 def _save_services(self, old_autochecks: SetAutochecksTable,
                    checks: SetAutochecksTable, need_sync: bool) -> None:
     message = _("Saved check configuration of host '%s' with %d services"
                 ) % (self._host.name(), len(checks))
     watolib.add_service_change(
         host=self._host,
         action_name="set-autochecks",
         text=message,
         need_sync=need_sync,
         diff_text=watolib.make_diff_text(
             _make_host_audit_log_object(old_autochecks),
             _make_host_audit_log_object(checks)),
     )
     check_mk_automation(self._host.site_id(), "set-autochecks",
                         [self._host.name()], checks)