diff --git a/mkp/Nextcloud-3.2.1.mkp b/mkp/Nextcloud-3.2.1.mkp new file mode 100644 index 0000000..768e94a Binary files /dev/null and b/mkp/Nextcloud-3.2.1.mkp differ diff --git a/nextcloud/agent_based/nextcloud_users.py b/nextcloud/agent_based/nextcloud_users.py index 9658c88..babbc3c 100644 --- a/nextcloud/agent_based/nextcloud_users.py +++ b/nextcloud/agent_based/nextcloud_users.py @@ -20,6 +20,7 @@ from cmk.agent_based.v2 import ( NO_LEVELS: Final[str] = "no_levels" + def get_state_upper(levels, value): warn, crit = levels if value >= crit: @@ -46,7 +47,10 @@ def discover_nextcloud_users(section) -> DiscoveryResult: def check_nextcloud_users(item, params, section) -> CheckResult: attr = section.get(item) if not attr: - yield Result(state=State.UNKNOWN, summary="User not found anymore, maybe it has been deleted.") + yield Result( + state=State.UNKNOWN, + summary="User not found anymore, maybe it has been deleted.", + ) return userid = item quota_used_percent = section[item][0] @@ -65,9 +69,7 @@ def check_nextcloud_users(item, params, section) -> CheckResult: level_type_free_space, levels_free_space = params["levels_users_free_space"] if (last_login_human == "never") or (not quota_is_set): details = f"User ID is '{userid}', Last login: {last_login_human}" - summary = ( - f"Used quota of '{display_name}' can't be calculated yet (never logged in or no quota set)" - ) + summary = f"Used quota of '{display_name}' can't be calculated yet (never logged in or no quota set)" else: # Levels are given in MBytes, we have to adjust this here if level_type_free_space != NO_LEVELS: @@ -86,8 +88,10 @@ def check_nextcloud_users(item, params, section) -> CheckResult: notice = f"Remaining free space: {render.bytes(free_space)}" if state != State.OK: yield Result(state=state, notice=notice) - if level_type_quota_used != NO_LEVELS: - yield Metric("nc_users_quota_used", quota_used_percent, levels=levels_quota_used) + if level_type_quota_used != NO_LEVELS: + yield Metric( + "nc_users_quota_used", quota_used_percent, levels=levels_quota_used + ) state = get_state_upper(levels_quota_used, quota_used_percent) else: # a rule with no levels set is active, so assume OK state @@ -113,8 +117,12 @@ def parse_nextcloud_users(string_table: StringTable) -> dict: # user logged in at least once curr_time = int(time()) login_diff = curr_time - last_login + if login_diff < 0: + # this should not happen, but if it does, we handle it gracefully + last_login_since = "Check your system time, last login is in the future" + else: + last_login_since = render.timespan(login_diff) last_login_human = render.datetime(last_login) - last_login_since = render.timespan(login_diff) quota_quota = int(line[4]) if quota_quota == -3: # TBD, no quota set for user