From 98a3254c885e1610181429aee8dde8243851da65 Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 1 Nov 2025 16:10:55 +0000 Subject: [PATCH] fix: Check protocol server status before attempting connections in signals endpoint - Added check for settings.opcua_enabled and settings.modbus_enabled before initializing ProtocolDataCollector - This prevents connection attempts when protocol servers are disabled in production - Reduces error logs and improves performance --- src/dashboard/api.py | 54 ++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/dashboard/api.py b/src/dashboard/api.py index 13b209b..70d7d6c 100644 --- a/src/dashboard/api.py +++ b/src/dashboard/api.py @@ -620,33 +620,39 @@ async def get_signals(): signals = [] - # Try to get data from protocol servers, fallback to mock data if servers are not available - try: - # Initialize protocol data collector - from src.dashboard.protocol_clients import ProtocolDataCollector - collector = ProtocolDataCollector() - - # Collect data from all pumps across all protocols - for station_id, station in stations.items(): - pumps = pumps_by_station.get(station_id, []) + # Check if protocol servers are enabled before trying to connect + if settings.opcua_enabled or settings.modbus_enabled: + # Try to get data from protocol servers, fallback to mock data if servers are not available + try: + # Initialize protocol data collector + from src.dashboard.protocol_clients import ProtocolDataCollector + collector = ProtocolDataCollector() - for pump in pumps: - pump_id = pump['pump_id'] + # Collect data from all pumps across all protocols + for station_id, station in stations.items(): + pumps = pumps_by_station.get(station_id, []) - # Get signal data from protocol servers - pump_signals = await collector.get_signal_data(station_id, pump_id) - signals.extend(pump_signals) - - # Clean up connections - await collector.cleanup() - - # If no signals were retrieved from protocol servers, use mock data - if not signals: - logger.warning("no_signals_from_protocol_servers", fallback="using_mock_data") + for pump in pumps: + pump_id = pump['pump_id'] + + # Get signal data from protocol servers + pump_signals = await collector.get_signal_data(station_id, pump_id) + signals.extend(pump_signals) + + # Clean up connections + await collector.cleanup() + + # If no signals were retrieved from protocol servers, use mock data + if not signals: + logger.warning("no_signals_from_protocol_servers", fallback="using_mock_data") + signals = await _generate_mock_signals(stations, pumps_by_station) + except Exception as e: + logger.error("failed_to_get_protocol_data", error=str(e), fallback="using_mock_data") + # Fallback to mock data signals = await _generate_mock_signals(stations, pumps_by_station) - except Exception as e: - logger.error("failed_to_get_protocol_data", error=str(e), fallback="using_mock_data") - # Fallback to mock data + else: + # Protocol servers are disabled, use mock data + logger.info("protocol_servers_disabled", fallback="using_mock_data") signals = await _generate_mock_signals(stations, pumps_by_station) # Add system status signals