MKP 2.2.0 released, bugfixes for rules with no levels set
This commit is contained in:
@@ -54,6 +54,8 @@ Apply your changes
|
|||||||
|
|
||||||
## Version history:
|
## Version history:
|
||||||
|
|
||||||
|
2026/03/09 2.2.0 Bugfixes for rules without levels
|
||||||
|
|
||||||
2025/03/30 2.1.0 Migration to new plugin API done
|
2025/03/30 2.1.0 Migration to new plugin API done
|
||||||
|
|
||||||
2024/01/26 1.2.0 Added password store option for the API key, added version check
|
2024/01/26 1.2.0 Added password store option for the API key, added version check
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ def get_state_upper(
|
|||||||
levels: tuple[int | float, int | float], value: int | float
|
levels: tuple[int | float, int | float], value: int | float
|
||||||
) -> State:
|
) -> State:
|
||||||
"""returns OK/WARN/CRIT depending on the given parameters"""
|
"""returns OK/WARN/CRIT depending on the given parameters"""
|
||||||
|
if levels is None:
|
||||||
|
# a rule with no levels set is active, assume OK state
|
||||||
|
return State.OK
|
||||||
warn, crit = levels
|
warn, crit = levels
|
||||||
if value >= crit:
|
if value >= crit:
|
||||||
return State.CRIT
|
return State.CRIT
|
||||||
@@ -117,7 +120,7 @@ def check_mailcow_domains(item, params, section):
|
|||||||
percent_storage_used_for_messages = domain[12]
|
percent_storage_used_for_messages = domain[12]
|
||||||
|
|
||||||
# create (main) service for used storage (domain quota)
|
# create (main) service for used storage (domain quota)
|
||||||
_type, levels = params["levels_mailcow_domains_quota_used"]
|
_level_type, levels = params["levels_mailcow_domains_quota_used"]
|
||||||
state_quota = get_state_upper(levels, percent_storage_used_for_messages)
|
state_quota = get_state_upper(levels, percent_storage_used_for_messages)
|
||||||
|
|
||||||
# create graph for used quota
|
# create graph for used quota
|
||||||
@@ -142,28 +145,28 @@ def check_mailcow_domains(item, params, section):
|
|||||||
yield Result(state=State.OK, notice=notice)
|
yield Result(state=State.OK, notice=notice)
|
||||||
|
|
||||||
# create service for number of configured mailboxes (percent)
|
# create service for number of configured mailboxes (percent)
|
||||||
_type, levels = params["levels_mailcow_domains_mailboxes_used"]
|
_level_type, levels = params["levels_mailcow_domains_mailboxes_used"]
|
||||||
state_mailboxes = get_state_upper(levels, percent_used_mailboxes)
|
state_mailboxes = get_state_upper(levels, percent_used_mailboxes)
|
||||||
yield Metric("mailcow_domains_mailboxes", percent_used_mailboxes, levels=levels)
|
yield Metric("mailcow_domains_mailboxes", percent_used_mailboxes, levels=levels)
|
||||||
notice = f"Used mailboxes: {render.percent(percent_used_mailboxes)}, {number_of_mailboxes} of {max_number_of_mailboxes} in use"
|
notice = f"Used mailboxes: {render.percent(percent_used_mailboxes)}, {number_of_mailboxes} of {max_number_of_mailboxes} in use"
|
||||||
yield Result(state=state_mailboxes, notice=notice)
|
yield Result(state=state_mailboxes, notice=notice)
|
||||||
|
|
||||||
# create service for number of configured aliases (percent)
|
# create service for number of configured aliases (percent)
|
||||||
_type, levels = params["levels_mailcow_domains_aliases_used"]
|
_level_type, levels = params["levels_mailcow_domains_aliases_used"]
|
||||||
state_aliases = get_state_upper(levels, percent_used_aliases)
|
state_aliases = get_state_upper(levels, percent_used_aliases)
|
||||||
yield Metric("mailcow_domains_aliases", percent_used_aliases, levels=levels)
|
yield Metric("mailcow_domains_aliases", percent_used_aliases, levels=levels)
|
||||||
notice = f"Used aliases: {render.percent(percent_used_aliases)}, {number_of_aliases} of {max_number_of_aliases} in use"
|
notice = f"Used aliases: {render.percent(percent_used_aliases)}, {number_of_aliases} of {max_number_of_aliases} in use"
|
||||||
yield Result(state=state_aliases, notice=notice)
|
yield Result(state=state_aliases, notice=notice)
|
||||||
|
|
||||||
# create service for number of messages
|
# create service for number of messages
|
||||||
_type, levels = params["levels_mailcow_domains_num_messages"]
|
_level_type, levels = params["levels_mailcow_domains_num_messages"]
|
||||||
state_messages = get_state_upper(levels, total_number_of_messages)
|
state_messages = get_state_upper(levels, total_number_of_messages)
|
||||||
yield Metric("mailcow_domains_messages", total_number_of_messages, levels=levels)
|
yield Metric("mailcow_domains_messages", total_number_of_messages, levels=levels)
|
||||||
notice = f"Number of messages: {total_number_of_messages}"
|
notice = f"Number of messages: {total_number_of_messages}"
|
||||||
yield Result(state=state_messages, notice=notice)
|
yield Result(state=state_messages, notice=notice)
|
||||||
|
|
||||||
# create service for number of configured aliases (absolute)
|
# create service for number of configured aliases (absolute)
|
||||||
_type, levels = params["levels_mailcow_domains_num_aliases"]
|
_level_type, levels = params["levels_mailcow_domains_num_aliases"]
|
||||||
state_aliases = get_state_upper(levels, number_of_aliases)
|
state_aliases = get_state_upper(levels, number_of_aliases)
|
||||||
yield Metric("mailcow_domains_configured_aliases", number_of_aliases, levels=levels)
|
yield Metric("mailcow_domains_configured_aliases", number_of_aliases, levels=levels)
|
||||||
notice = (
|
notice = (
|
||||||
@@ -172,7 +175,7 @@ def check_mailcow_domains(item, params, section):
|
|||||||
yield Result(state=state_aliases, notice=notice)
|
yield Result(state=state_aliases, notice=notice)
|
||||||
|
|
||||||
# create service for number of configured mailboxes (absolute)
|
# create service for number of configured mailboxes (absolute)
|
||||||
_type, levels = params["levels_mailcow_domains_num_mailboxes"]
|
_level_type, levels = params["levels_mailcow_domains_num_mailboxes"]
|
||||||
state_mailboxes = get_state_upper(levels, number_of_mailboxes)
|
state_mailboxes = get_state_upper(levels, number_of_mailboxes)
|
||||||
yield Metric(
|
yield Metric(
|
||||||
"mailcow_domains_configured_mailboxes", number_of_mailboxes, levels=levels
|
"mailcow_domains_configured_mailboxes", number_of_mailboxes, levels=levels
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# pylint: disable=line-too-long, simplifiable-if-statement, missing-module-docstring, too-many-locals
|
# pylint: disable=line-too-long, simplifiable-if-statement, missing-module-docstring, too-many-locals
|
||||||
|
|
||||||
|
|
||||||
# import necessary elements from API version 2
|
# import necessary elements from API version 2
|
||||||
from cmk.agent_based.v2 import (
|
from cmk.agent_based.v2 import (
|
||||||
AgentSection,
|
AgentSection,
|
||||||
@@ -16,6 +17,9 @@ def get_state_upper(
|
|||||||
levels: tuple[int | float, int | float], value: int | float
|
levels: tuple[int | float, int | float], value: int | float
|
||||||
) -> State:
|
) -> State:
|
||||||
"""returns OK/WARN/CRIT depending on the given parameters"""
|
"""returns OK/WARN/CRIT depending on the given parameters"""
|
||||||
|
if levels is None:
|
||||||
|
# a rule with no levels set is active, assume OK state
|
||||||
|
return State.OK
|
||||||
warn, crit = levels
|
warn, crit = levels
|
||||||
if value >= crit:
|
if value >= crit:
|
||||||
return State.CRIT
|
return State.CRIT
|
||||||
@@ -62,9 +66,9 @@ def discover_mailcow_info(section):
|
|||||||
def check_mailcow_info(params, section):
|
def check_mailcow_info(params, section):
|
||||||
"""the check function"""
|
"""the check function"""
|
||||||
# get thresholds
|
# get thresholds
|
||||||
_type, levels_num_domains = params["levels_num_domains"]
|
_level_type, levels_num_domains = params["levels_num_domains"]
|
||||||
_type, levels_num_mailboxes = params["levels_num_mailboxes"]
|
_level_type, levels_num_mailboxes = params["levels_num_mailboxes"]
|
||||||
_type, levels_num_global_messages = params["levels_num_global_messages"]
|
_level_type, levels_num_global_messages = params["levels_num_global_messages"]
|
||||||
# get all section data
|
# get all section data
|
||||||
version: str = section["version"]
|
version: str = section["version"]
|
||||||
git_version: str = section["git_version"]
|
git_version: str = section["git_version"]
|
||||||
@@ -74,17 +78,6 @@ def check_mailcow_info(params, section):
|
|||||||
num_mailboxes: int = section["num_mailboxes"]
|
num_mailboxes: int = section["num_mailboxes"]
|
||||||
num_global_messages: int = section["num_global_messages"]
|
num_global_messages: int = section["num_global_messages"]
|
||||||
|
|
||||||
# create graphs for number of domains, mailboxes and messages
|
|
||||||
yield Metric(name="mc_num_domains", value=num_domains, levels=levels_num_domains)
|
|
||||||
yield Metric(
|
|
||||||
name="mc_num_mailboxes", value=num_mailboxes, levels=levels_num_mailboxes
|
|
||||||
)
|
|
||||||
yield Metric(
|
|
||||||
name="mc_num_global_messages",
|
|
||||||
value=num_global_messages,
|
|
||||||
levels=levels_num_global_messages,
|
|
||||||
)
|
|
||||||
|
|
||||||
# create overall result
|
# create overall result
|
||||||
if check_version_enabled:
|
if check_version_enabled:
|
||||||
if update_available:
|
if update_available:
|
||||||
@@ -100,22 +93,28 @@ def check_mailcow_info(params, section):
|
|||||||
yield Result(state=state, summary=summary, details=details)
|
yield Result(state=state, summary=summary, details=details)
|
||||||
|
|
||||||
# Create result for number of domains
|
# Create result for number of domains
|
||||||
warn, crit = levels_num_domains
|
state = get_state_upper(levels_num_domains, num_domains)
|
||||||
state = get_state_upper((warn, crit), num_domains)
|
yield Metric(name="mc_num_domains", value=num_domains, levels=levels_num_domains)
|
||||||
notice = f"Number of domains: {num_domains}"
|
notice = f"Number of domains: {num_domains}"
|
||||||
if state != State.OK:
|
if state != State.OK:
|
||||||
yield Result(state=state, notice=notice)
|
yield Result(state=state, notice=notice)
|
||||||
|
|
||||||
# Create result for number of mailboxes
|
# Create result for number of mailboxes
|
||||||
warn, crit = levels_num_mailboxes
|
state = get_state_upper(levels_num_mailboxes, num_mailboxes)
|
||||||
state = get_state_upper((warn, crit), num_mailboxes)
|
yield Metric(
|
||||||
|
name="mc_num_mailboxes", value=num_mailboxes, levels=levels_num_mailboxes
|
||||||
|
)
|
||||||
notice = f"Number of mailboxes: {num_mailboxes}"
|
notice = f"Number of mailboxes: {num_mailboxes}"
|
||||||
if state != State.OK:
|
if state != State.OK:
|
||||||
yield Result(state=state, notice=notice)
|
yield Result(state=state, notice=notice)
|
||||||
|
|
||||||
# Create result for number of global messages
|
# Create result for number of global messages
|
||||||
warn, crit = levels_num_global_messages
|
state = get_state_upper(levels_num_global_messages, num_global_messages)
|
||||||
state = get_state_upper((warn, crit), num_global_messages)
|
yield Metric(
|
||||||
|
name="mc_num_global_messages",
|
||||||
|
value=num_global_messages,
|
||||||
|
levels=levels_num_global_messages,
|
||||||
|
)
|
||||||
notice = f"Number of messages: {num_global_messages}"
|
notice = f"Number of messages: {num_global_messages}"
|
||||||
if state != State.OK:
|
if state != State.OK:
|
||||||
yield Result(state=state, notice=notice)
|
yield Result(state=state, notice=notice)
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ def get_state_upper(
|
|||||||
levels: tuple[int | float, int | float], value: int | float
|
levels: tuple[int | float, int | float], value: int | float
|
||||||
) -> State:
|
) -> State:
|
||||||
"""returns OK/WARN/CRIT depending on the given parameters"""
|
"""returns OK/WARN/CRIT depending on the given parameters"""
|
||||||
|
if levels is None:
|
||||||
|
# a rule with no levels set is active, assume OK state
|
||||||
|
return State.OK
|
||||||
warn, crit = levels
|
warn, crit = levels
|
||||||
if value >= crit:
|
if value >= crit:
|
||||||
return State.CRIT
|
return State.CRIT
|
||||||
|
|||||||
BIN
mkp/Mailcow-2.2.0.mkp
Normal file
BIN
mkp/Mailcow-2.2.0.mkp
Normal file
Binary file not shown.
Reference in New Issue
Block a user