diff --git a/api/wireguard_manager.py b/api/wireguard_manager.py index e1f9956..b818919 100644 --- a/api/wireguard_manager.py +++ b/api/wireguard_manager.py @@ -507,8 +507,11 @@ class WireGuardManager(BaseServiceManager): except Exception as e: return self.handle_error(e, 'get_status') - def test_connectivity(self, peer_ip: str) -> Dict[str, Any]: - """Ping a peer IP and return results.""" + def test_connectivity(self, peer_ip: str = None) -> Dict[str, Any]: + """Ping a peer IP and return results. Called with no args from health_check.""" + if not peer_ip: + status = self.get_status() + return {'reachable': status.get('running', False), 'status': status.get('status')} try: result = subprocess.run( ['ping', '-c', '1', '-W', '2', peer_ip], diff --git a/webui/src/pages/Logs.jsx b/webui/src/pages/Logs.jsx index 515091f..dc5081d 100644 --- a/webui/src/pages/Logs.jsx +++ b/webui/src/pages/Logs.jsx @@ -6,7 +6,7 @@ import { } from 'lucide-react'; import { monitoringAPI, logsAPI, containerAPI } from '../services/api'; -const SERVICES = ['network', 'wireguard', 'routing', 'email', 'calendar', 'files', 'vault', 'container']; +const SERVICES = ['ALL', 'network', 'wireguard', 'routing', 'email', 'calendar', 'files', 'vault', 'container']; const LEVELS = ['ALL', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']; const LEVEL_COLORS = { DEBUG: 'text-gray-400', @@ -51,10 +51,11 @@ function ServiceLogsTab() { const fetch = useCallback(async () => { setLoading(true); try { - if (searchMode && query) { + const allServices = SERVICES.filter(s => s !== 'ALL'); + if (service === 'ALL' || (searchMode && query)) { const res = await logsAPI.searchLogs({ - query, - services: [service], + query: query || '', + services: service === 'ALL' ? allServices : [service], level: level === 'ALL' ? undefined : level, }); setLogs(res.data.results || []); @@ -273,7 +274,9 @@ function StatisticsTab() { useEffect(() => { fetch(); }, []); const rotate = async (service) => { - setRotating(service); + const label = service || 'all services'; + if (!window.confirm(`Rotate logs for ${label}? Current log file will be archived and a new one started.`)) return; + setRotating(service || 'all'); try { await logsAPI.rotateLogs(service || null); await fetch();