From 1b3eedcc5073d6b5f2d4526677f306e38f7d8233 Mon Sep 17 00:00:00 2001 From: cmk-bonobo Date: Sun, 15 Mar 2026 12:04:06 +0000 Subject: [PATCH] fixed crash when last login seems to be in the future --- mkp/Nextcloud-3.2.1.mkp | Bin 0 -> 13022 bytes nextcloud/agent_based/nextcloud_users.py | 22 +++++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 mkp/Nextcloud-3.2.1.mkp diff --git a/mkp/Nextcloud-3.2.1.mkp b/mkp/Nextcloud-3.2.1.mkp new file mode 100644 index 0000000000000000000000000000000000000000..768e94a1f7265c02421c11c4c03147fc43c33b67 GIT binary patch literal 13022 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 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