#!/bin/bash # # Diagnose ICS-SimLab runtime issues # set -e echo "============================================================" echo "ICS-SimLab Runtime Diagnostics" echo "============================================================" SCENARIO_DIR="$(cd "$(dirname "$0")" && pwd)/outputs/scenario_run" echo "" echo "1. Checking scenario files..." if [ -f "$SCENARIO_DIR/configuration.json" ]; then echo " ✓ configuration.json exists" else echo " ✗ configuration.json missing" fi if [ -f "$SCENARIO_DIR/logic/plc1.py" ]; then echo " ✓ logic/plc1.py exists" else echo " ✗ logic/plc1.py missing" fi if [ -f "$SCENARIO_DIR/logic/plc2.py" ]; then echo " ✓ logic/plc2.py exists" if grep -q "_safe_callback" "$SCENARIO_DIR/logic/plc2.py"; then echo " ✓ plc2.py has _safe_callback (retry fix present)" else echo " ✗ plc2.py missing _safe_callback (retry fix NOT present)" fi else echo " ✗ logic/plc2.py missing" fi echo "" echo "2. Checking Docker..." if command -v docker &> /dev/null; then echo " ✓ Docker installed" echo "" echo "3. Running containers:" sudo docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -E "NAME|plc|hil|hmi" || echo " (none)" echo "" echo "4. All containers (including stopped):" sudo docker ps -a --format "table {{.Names}}\t{{.Status}}" | grep -E "NAME|plc|hil|hmi" || echo " (none)" echo "" echo "5. Docker networks:" sudo docker network ls | grep -E "NAME|ot_network" || echo " (none)" else echo " ✗ Docker not found" fi echo "" echo "============================================================" echo "To start ICS-SimLab:" echo " ./test_simlab.sh" echo "" echo "To view live PLC2 logs:" echo " sudo docker logs -f" echo "" echo "To stop all containers:" echo " cd ~/projects/ICS-SimLab-main/curtin-ics-simlab && sudo ./stop.sh" echo "============================================================"