diff --git a/graylog-metrics/2.3/graylog_input_metrics-0.4.0.mkp b/graylog-metrics/2.3/graylog_input_metrics-0.4.0.mkp new file mode 100755 index 0000000..3a5b238 Binary files /dev/null and b/graylog-metrics/2.3/graylog_input_metrics-0.4.0.mkp differ diff --git a/graylog-metrics/local/lib/python3/cmk/gui/plugins/wato/check_parameters/graylog_input_metrics.py b/graylog-metrics/2.3/local/lib/python3/cmk/gui/plugins/wato/check_parameters/graylog_input_metrics.py similarity index 98% rename from graylog-metrics/local/lib/python3/cmk/gui/plugins/wato/check_parameters/graylog_input_metrics.py rename to graylog-metrics/2.3/local/lib/python3/cmk/gui/plugins/wato/check_parameters/graylog_input_metrics.py index 89e9057..a92ebe5 100644 --- a/graylog-metrics/local/lib/python3/cmk/gui/plugins/wato/check_parameters/graylog_input_metrics.py +++ b/graylog-metrics/2.3/local/lib/python3/cmk/gui/plugins/wato/check_parameters/graylog_input_metrics.py @@ -21,7 +21,7 @@ mappings={ "im": "messages", "rs": "bytes", "upper": "above", - "lower": "below", + "lower": "below or equal", } diff --git a/graylog-metrics/local/lib/python3/cmk/special_agents/agent_graylog_input_metrics.py b/graylog-metrics/2.3/local/lib/python3/cmk/special_agents/agent_graylog_input_metrics.py similarity index 100% rename from graylog-metrics/local/lib/python3/cmk/special_agents/agent_graylog_input_metrics.py rename to graylog-metrics/2.3/local/lib/python3/cmk/special_agents/agent_graylog_input_metrics.py diff --git a/graylog-metrics/local/share/check_mk/agents/special/agent_graylog_input_metrics b/graylog-metrics/2.3/local/share/check_mk/agents/special/agent_graylog_input_metrics similarity index 100% rename from graylog-metrics/local/share/check_mk/agents/special/agent_graylog_input_metrics rename to graylog-metrics/2.3/local/share/check_mk/agents/special/agent_graylog_input_metrics diff --git a/graylog-metrics/local/share/check_mk/checks/agent_graylog_input_metrics b/graylog-metrics/2.3/local/share/check_mk/checks/agent_graylog_input_metrics similarity index 100% rename from graylog-metrics/local/share/check_mk/checks/agent_graylog_input_metrics rename to graylog-metrics/2.3/local/share/check_mk/checks/agent_graylog_input_metrics diff --git a/graylog-metrics/local/share/check_mk/checks/graylog_input_metrics b/graylog-metrics/2.3/local/share/check_mk/checks/graylog_input_metrics similarity index 56% rename from graylog-metrics/local/share/check_mk/checks/graylog_input_metrics rename to graylog-metrics/2.3/local/share/check_mk/checks/graylog_input_metrics index 9c3483a..21dafd1 100644 --- a/graylog-metrics/local/share/check_mk/checks/graylog_input_metrics +++ b/graylog-metrics/2.3/local/share/check_mk/checks/graylog_input_metrics @@ -7,7 +7,7 @@ # resolving legacy discovery results such as [("SUMMARY", "diskstat_default_levels")]. Furthermore, # it might also remove variables needed for accessing discovery rulesets. import json -from cmk.base.check_api import check_levels, LegacyCheckDefinition +from cmk.base.check_api import LegacyCheckDefinition from cmk.base.config import check_info from cmk.agent_based.v2 import Service @@ -74,6 +74,79 @@ def check_graylog_input_metrics(item, params, parsed): infoname=infotext ) + +# A customer wanted us to support <= for "below", not <. This meant copying +# check_levels() and child functions wholesale out of +# lib/python3/cmk/base/check_api.py just to change < to <= in this function. +# Sometimes a sledgehammer is what it takes... D: +# Start copy =================================================================== +from cmk.agent_based import v1 as _v1 + +def _do_check_levels(value, levels, human_readable_func): + warn_upper, crit_upper, warn_lower, crit_lower = levels + + # Critical cases + if crit_upper is not None and value >= crit_upper: + return 2, _levelsinfo_ty("at", warn_upper, crit_upper, human_readable_func) + if crit_lower is not None and value <= crit_lower: + return 2, _levelsinfo_ty("below", warn_lower, crit_lower, human_readable_func) + + # Warning cases + if warn_upper is not None and value >= warn_upper: + return 1, _levelsinfo_ty("at", warn_upper, crit_upper, human_readable_func) + if warn_lower is not None and value <= warn_lower: + return 1, _levelsinfo_ty("below", warn_lower, crit_lower, human_readable_func) + return 0, "" + +def _levelsinfo_ty(ty, warn, crit, human_readable_func): + warn_str = "never" if warn is None else f"{human_readable_func(warn)}" + crit_str = "never" if crit is None else f"{human_readable_func(crit)}" + return f" (warn/crit {ty} {warn_str}/{crit_str})" + +def _build_perfdata(dsname, value, levels, boundaries): + used_boundaries = boundaries if isinstance(boundaries, tuple) and len(boundaries) == 2 else () + return [(dsname, value, levels[0], levels[1], *used_boundaries)] + +def check_levels(value, dsname, params, unit, human_readable_func, infoname, boundaries=None): + def render_func(x): + return "%s%s" % (human_readable_func(x), unit) + + if params and isinstance(params, dict): + result, *metrics = _v1.check_levels_predictive( + value, + levels=params, + metric_name=dsname, + render_func=render_func, + label=infoname, + boundaries=boundaries, + ) + assert isinstance(result, _v1.Result) + return ( + int(result.state), + result.summary, + [ + (m.name, m.value, *m.levels, *m.boundaries) + for m in metrics + if isinstance(m, _v1.Metric) + ], + ) + + infotext = f"{render_func(value)}" + if infoname: + infotext = f"{infoname}: {infotext}" + + levels = params + + state, levelstext = _do_check_levels(value, levels, render_func) + state, levelstext = _do_check_levels(value, levels, render_func) + return ( + state, + infotext + levelstext, + _build_perfdata(dsname, value, levels, boundaries), + ) +# End copy ==================================================================== + + check_info["graylog_input_metrics"] = LegacyCheckDefinition( parse_function = parse_graylog_input_metrics, check_function = check_graylog_input_metrics, diff --git a/graylog-metrics/local/share/check_mk/web/plugins/wato/graylog_input_metrics.py b/graylog-metrics/2.3/local/share/check_mk/web/plugins/wato/graylog_input_metrics.py similarity index 100% rename from graylog-metrics/local/share/check_mk/web/plugins/wato/graylog_input_metrics.py rename to graylog-metrics/2.3/local/share/check_mk/web/plugins/wato/graylog_input_metrics.py diff --git a/graylog-metrics/graylog_input_metrics-0.0.3.mkp b/graylog-metrics/graylog_input_metrics-0.0.3.mkp deleted file mode 100644 index f38c5ba..0000000 Binary files a/graylog-metrics/graylog_input_metrics-0.0.3.mkp and /dev/null differ