From b62fe22244bf05f2666568a01eb96af6a3427db5 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sun, 21 Jun 2026 11:43:09 -0500 Subject: [PATCH] fix(health): return error on exceptions, fix MokoSuiteBackup detection - Health check catch blocks now return status:error with message - MokoSuiteBackup detection returns early and queries correct table - Added checkMokoSuiteBackup() method for mokosuitebackup_records --- .../Extension/MokoSuiteClient.php | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/source/packages/plg_system_mokosuiteclient/Extension/MokoSuiteClient.php b/source/packages/plg_system_mokosuiteclient/Extension/MokoSuiteClient.php index 279cd307..d2b27261 100644 --- a/source/packages/plg_system_mokosuiteclient/Extension/MokoSuiteClient.php +++ b/source/packages/plg_system_mokosuiteclient/Extension/MokoSuiteClient.php @@ -977,9 +977,12 @@ class MokoSuiteClient extends CMSPlugin implements BootableExtensionInterface 'message' => 'No backup solution installed (Akeeba Backup or MokoSuiteBackup)', ]; } + + // MokoSuiteBackup is installed — query its table + return $this->checkMokoSuiteBackup($db); } - // Get the most recent backup + // Get the most recent Akeeba Backup $query = $db->getQuery(true) ->select([ $db->quoteName('id'), @@ -1055,13 +1058,53 @@ class MokoSuiteClient extends CMSPlugin implements BootableExtensionInterface } catch (\Exception $e) { + \Joomla\CMS\Log\Log::add('Backup check failed: ' . $e->getMessage(), \Joomla\CMS\Log\Log::WARNING, 'mokosuiteclient'); + return [ - 'status' => 'ok', - 'installed' => false, + 'status' => 'error', + 'message' => 'Backup check failed: ' . $e->getMessage(), ]; } } + /** + * Query MokoSuiteBackup tables for backup status. + */ + protected function checkMokoSuiteBackup($db): array + { + $db->setQuery( + $db->getQuery(true) + ->select(['id', 'description', 'status', 'backupstart', 'backupend', 'total_size']) + ->from($db->quoteName('#__mokosuitebackup_records')) + ->order($db->quoteName('id') . ' DESC'), + 0, 1 + ); + $latest = $db->loadObject(); + + if (!$latest) + { + return ['status' => 'degraded', 'installed' => true, 'message' => 'MokoSuiteBackup installed but no backups found']; + } + + $daysSince = 999; + + if (!empty($latest->backupstart) && $latest->backupstart !== '0000-00-00 00:00:00') + { + $daysSince = (int) ((time() - strtotime($latest->backupstart)) / 86400); + } + + $status = ($latest->status === 'complete' && $daysSince <= 7) ? 'ok' : 'degraded'; + + return [ + 'status' => $status, + 'installed' => true, + 'last_backup' => $latest->backupstart, + 'last_status' => $latest->status, + 'days_since' => $daysSince, + 'message' => 'MokoSuiteBackup: last backup ' . $daysSince . 'd ago (' . $latest->status . ')', + ]; + } + /** * Check Admin Tools status — WAF status, security exceptions. * @@ -1195,7 +1238,7 @@ class MokoSuiteClient extends CMSPlugin implements BootableExtensionInterface } catch (\Exception $e) { - return ['status' => 'ok', 'https' => false]; + return ['status' => 'error', 'message' => 'SSL check failed: ' . $e->getMessage()]; } } @@ -1280,7 +1323,7 @@ class MokoSuiteClient extends CMSPlugin implements BootableExtensionInterface } catch (\Exception $e) { - return ['status' => 'ok', 'available' => false]; + return ['status' => 'error', 'message' => 'Scheduler check failed: ' . $e->getMessage()]; } }