diff --git a/admin/src/pages/SettingsPage.tsx b/admin/src/pages/SettingsPage.tsx index 9abab2d7..0c459f66 100644 --- a/admin/src/pages/SettingsPage.tsx +++ b/admin/src/pages/SettingsPage.tsx @@ -62,7 +62,7 @@ import { api } from '@/lib/api'; import { useMobile } from '@/hooks/useMobile'; import { PageTour } from '@/components/tour/PageTour'; import type { AppOutletContext } from '@/components/AppLayout'; -import type { SmtpTestResult, SmtpSendTestResult, UpgradeStatusResponse, UpgradeStatus, UpgradeProgress, UpgradeResult, UpgradeHistoryResponse } from '@/types/api'; +import type { SmtpTestResult, SmtpSendTestResult, UpgradeStatusResponse, UpgradeStatus, UpgradeProgress, UpgradeResult, UpgradeHistoryResponse, WatcherHealth } from '@/types/api'; const { Text, Paragraph } = Typography; @@ -742,6 +742,7 @@ function SystemUpgradeTab() { const [progress, setProgress] = useState(null); const [result, setResult] = useState(null); const [running, setRunning] = useState(false); + const [watcher, setWatcher] = useState(null); const [checking, setChecking] = useState(false); const [upgrading, setUpgrading] = useState(false); const [apiOffline, setApiOffline] = useState(false); @@ -760,6 +761,7 @@ function SystemUpgradeTab() { setProgress(data.progress); setResult(data.result); setRunning(data.running); + setWatcher(data.watcher ?? null); setApiOffline(false); return data; } catch { @@ -996,6 +998,26 @@ function SystemUpgradeTab() { /> )} + {watcher && !watcher.healthy && ( + +
{watcher.reason || 'Host systemd watcher is not processing upgrade triggers.'}
+
+ Recovery:{' '} + + sudo systemctl reset-failed changemaker-upgrade.path changemaker-upgrade.service && sudo systemctl restart changemaker-upgrade.path + +
+ + } + showIcon + style={{ marginBottom: 16 }} + /> + )} + {/* Actions */}