5.5 KiB
5.5 KiB
注意事项
一定要注意文件编码问题,有可能会引起字符错乱 这是后端项目,前端系统不在这个项目里
项目运行环境
这是开发环境,运行环境在centos7的容器里,分别为 qaup-app qaup-redis qaup-postgis
Docker/日志/数据库定位
- 后端应用容器:
qaup-app。 - Redis 容器:
qaup-redis。 - PostGIS/PostgreSQL 容器:
qaup-postgis。 - 后端主日志优先看宿主机路径:
/home/project_20250804/offline-deploy/logs/app/sys-info.log,历史滚动日志类似sys-info.2026-04-28.2.log。 - 容器 overlay 中也可能有同一份日志:
/var/lib/docker/overlay2/.../merged/logs/sys-info*.log。 - 碰撞测试独立日志在 qaup-app 容器内:
/logs/collision-tests/。启动时主日志会打印:Collision test session file log initialized: enabled=true, directory=/logs/collision-tests。 - 按车牌或航班查测试日志:
docker exec qaup-app sh -c 'grep -R -l "TEST003" /logs/collision-tests 2>/dev/null'。 /home/project_20250804/qaup/logs下看到的mock_traffic_light.log、mock_unmanned_vehicle.log是模拟器日志,不是 qaup-app 主应用日志。- qaup-app 容器内通常没有
psql,查库优先用:docker exec qaup-postgis psql -U postgres -d qaup -c "SQL"。 - 已确认数据库环境变量示例:
DB_HOST=172.17.0.4、DB_PORT=5432、DB_USERNAME=postgres、DB_PASSWORD=123456、DB_NAME=qaup。
碰撞测试流程排查要点
/api/VehicleRegistry是全量覆盖注册,不是增量追加。- 测试会话日志关键字:
collision test session started、collision test session replaced、collision-diagnostic。 - 诊断日志中重点看:
collisionManagedObjects、pairsSupported、missingRoute、routeDeviation、speedTooLow、thresholdNotReached、eventsPublished。 - 如果
pairsTotal=0,说明参与碰撞检测的对象不足两个,先查注册对象和实时位置对象是否匹配。 - 如果
routeDeviation>0,说明实时位置距离后端绑定路线过远,优先查本轮路线绑定是否正确。 - 路径绑定表是
object_route_assignments,真实字段为:id、object_type、object_name、assigned_route_id、assigned_at。不要使用object_id、route_id、route_name这些不存在的字段。 - 查对象路线绑定示例:
docker exec qaup-postgis psql -U postgres -d qaup -c "select object_type, object_name, assigned_route_id, assigned_at from object_route_assignments where object_name in ('MU2465','TEST003') order by assigned_at desc;" - 如需看路线名称,连接
transport_routes:docker exec qaup-postgis psql -U postgres -d qaup -c "select a.object_type, a.object_name, a.assigned_route_id, r.name, a.assigned_at from object_route_assignments a left join transport_routes r on r.id = a.assigned_route_id where a.object_name in ('MU2465','TEST003') order by a.assigned_at desc;" - 历史上曾出现同一对象编号跨类型或旧路线残留导致误判,注册覆盖时需要同步清理旧路径绑定。
碰撞现场测试快速流程
- 测试开始后先定位本次独立测试日志:
docker exec qaup-app sh -c 'ls -lt /logs/collision-tests | head -20'。 - 已知车牌或航班号时,直接按对象编号找日志文件:
docker exec qaup-app sh -c 'grep -R -l "TEST003" /logs/collision-tests 2>/dev/null'。 - 找到日志后优先看方向锁定和碰撞计算链路:
docker exec qaup-app sh -c 'grep -E "DIRECTION_LOCK|DIRECTION_LOCK_FAILED|PAIR_RESULT|PATH_CONFLICT_POINT_SENT|EVENT_PUBLISHED|CYCLE" /logs/collision-tests/具体文件名.log'。 - 不知道具体日志名但知道对象编号时,可一条命令定位并查看:
docker exec qaup-app sh -c 'f=$(grep -R -l "TEST003" /logs/collision-tests 2>/dev/null | tail -1); echo $f; grep -E "DIRECTION_LOCK|DIRECTION_LOCK_FAILED|PAIR_RESULT|PATH_CONFLICT_POINT_SENT|EVENT_PUBLISHED|CYCLE" "$f"'。 - 方向锁定判断:正常应看到
DIRECTION_LOCK;如果看到DIRECTION_LOCK_FAILED,先看原因是否为initial_position_too_close_to_conflict_point或conflict_points_on_both_sides。 - 本项目碰撞测试要求:车和飞机不必停在路线起点,但应能投影到绑定路线,并且测试开始时不要贴近冲突点,建议距离冲突点至少
10-20米,避免定位抖动触发方向无法锁定。 - 前端 WebSocket 调试消息看
type=path_conflict_status,重点看payload.calculationStatus、payload.directionLockStatus、payload.directionLockReason、payload.vehicleDistanceToConflictMeters、payload.aircraftDistanceToConflictMeters、payload.object1ForwardDistanceMeters、payload.object2ForwardDistanceMeters。 - 正常测试现象:
directionLockStatus=DIRECTION_LOCKED,车和飞机到冲突点的距离逐步变小;达到预警/告警阈值后后端发预警/告警,车辆停车;飞机越过冲突点并超过解除距离后车辆恢复通行。 - 如果前端看到距离不变大/不变小,先对照测试日志中的
forwardDistance、PAIR_RESULT和路线绑定表,判断是定位数据问题、路线绑定问题,还是方向未锁定问题。
红绿灯接入说明
- 正式环境中,qaup-app 的红绿灯接入方式为 MQTT,不是 HTTP。
- 正式环境配置中
traffic.light.tcp.enabled=false,traffic.light.mqtt.enabled=true。 - MQTT Broker 地址示例:
tcp://10.64.58.228:8082,订阅 Topic 示例:cusc/v2/SF053/QingDrsu001/data。 - 注意区分 MQTT Broker 的 TCP 连接地址与业务 TCP 直连服务,前者不是“红绿灯走 TCP 直连”的意思。