refactor(service): 删除MQTT旧代码 + 修复边缘节点重复显示问题
**删除MQTT旧代码:** - 删除 mqtt_service.py(已废弃的空壳) - 从 config.py 删除 MQTTConfig 类和相关配置 - 从 schemas.py 删除 mqtt 字段 - 从 alert_service.py 删除 create_alert_from_mqtt 方法 - 告警上报已改为 HTTP + COS 方案,MQTT机制完全废弃 **修复边缘节点重复显示(方案A):** - 清理 edge_devices 表历史数据(删除 edge_device_001、edge_inference_device) - 禁用 DeviceService 的 handle_heartbeat 自动创建设备功能 - 边缘端未实现心跳机制,告警数从 alarm_event 表统计 - 运行时长、处理帧数字段设为 null(无心跳机制,不可用) - 添加 count_alarms_by_edge_node 方法统计边缘节点告警数 **影响范围:** - /admin-api/aiot/edge/device/page 接口返回数据调整 - /admin-api/aiot/edge/device/get 接口返回数据调整 - 确保不破坏现有功能(告警上报已改为HTTP)
This commit is contained in:
@@ -7,6 +7,9 @@ API 路径规范:
|
||||
- /admin-api/aiot/edge/device/page - 分页查询设备
|
||||
- /admin-api/aiot/edge/device/get - 获取设备详情
|
||||
- /admin-api/aiot/edge/device/statistics - 设备统计
|
||||
|
||||
注意:边缘端未实现心跳机制,因此运行时长/处理帧数等实时指标不可用。
|
||||
告警数统计从 alarm_event 表中提取 edge_node_id 字段。
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, Query, Depends, HTTPException
|
||||
@@ -14,6 +17,7 @@ from typing import Optional
|
||||
|
||||
from app.yudao_compat import YudaoResponse, get_current_user
|
||||
from app.services.device_service import get_device_service, DeviceService
|
||||
from app.services.alarm_event_service import get_alarm_event_service, AlarmEventService
|
||||
|
||||
router = APIRouter(prefix="/admin-api/aiot/edge", tags=["AIoT-边缘设备"])
|
||||
|
||||
@@ -24,9 +28,10 @@ async def get_device_page(
|
||||
pageSize: int = Query(20, ge=1, le=100, description="每页大小"),
|
||||
status: Optional[str] = Query(None, description="设备状态: online/offline/error"),
|
||||
service: DeviceService = Depends(get_device_service),
|
||||
alarm_service: AlarmEventService = Depends(get_alarm_event_service),
|
||||
current_user: dict = Depends(get_current_user)
|
||||
):
|
||||
"""分页查询边缘设备列表"""
|
||||
"""分页查询边缘设备列表(告警数从 alarm_event 表统计)"""
|
||||
devices, total = service.get_devices(
|
||||
status=status,
|
||||
page=pageNo,
|
||||
@@ -36,16 +41,21 @@ async def get_device_page(
|
||||
device_list = []
|
||||
for device in devices:
|
||||
device_dict = device.to_dict()
|
||||
device_id = device_dict.get("device_id")
|
||||
|
||||
# 从 alarm_event 表统计告警数
|
||||
alerts_count = alarm_service.count_alarms_by_edge_node(device_id)
|
||||
|
||||
device_list.append({
|
||||
"id": device_dict.get("id"),
|
||||
"deviceId": device_dict.get("device_id"),
|
||||
"deviceId": device_id,
|
||||
"deviceName": device_dict.get("device_name"),
|
||||
"status": device_dict.get("status"),
|
||||
"statusName": _get_status_name(device_dict.get("status")),
|
||||
"lastHeartbeat": device_dict.get("last_heartbeat"),
|
||||
"uptimeSeconds": device_dict.get("uptime_seconds"),
|
||||
"framesProcessed": device_dict.get("frames_processed"),
|
||||
"alertsGenerated": device_dict.get("alerts_generated"),
|
||||
"uptimeSeconds": None, # 无心跳机制,不可用
|
||||
"framesProcessed": None, # 无心跳机制,不可用
|
||||
"alertsGenerated": alerts_count, # 从 alarm_event 表统计
|
||||
"ipAddress": device_dict.get("ip_address"),
|
||||
"streamCount": device_dict.get("stream_count"),
|
||||
"configVersion": device_dict.get("config_version"),
|
||||
@@ -65,24 +75,30 @@ async def get_device_page(
|
||||
async def get_device(
|
||||
id: str = Query(..., description="设备ID"),
|
||||
service: DeviceService = Depends(get_device_service),
|
||||
alarm_service: AlarmEventService = Depends(get_alarm_event_service),
|
||||
current_user: dict = Depends(get_current_user)
|
||||
):
|
||||
"""获取设备详情"""
|
||||
"""获取设备详情(告警数从 alarm_event 表统计)"""
|
||||
device = service.get_device(id)
|
||||
if not device:
|
||||
raise HTTPException(status_code=404, detail="设备不存在")
|
||||
|
||||
device_dict = device.to_dict()
|
||||
device_id = device_dict.get("device_id")
|
||||
|
||||
# 从 alarm_event 表统计告警数
|
||||
alerts_count = alarm_service.count_alarms_by_edge_node(device_id)
|
||||
|
||||
return YudaoResponse.success({
|
||||
"id": device_dict.get("id"),
|
||||
"deviceId": device_dict.get("device_id"),
|
||||
"deviceId": device_id,
|
||||
"deviceName": device_dict.get("device_name"),
|
||||
"status": device_dict.get("status"),
|
||||
"statusName": _get_status_name(device_dict.get("status")),
|
||||
"lastHeartbeat": device_dict.get("last_heartbeat"),
|
||||
"uptimeSeconds": device_dict.get("uptime_seconds"),
|
||||
"framesProcessed": device_dict.get("frames_processed"),
|
||||
"alertsGenerated": device_dict.get("alerts_generated"),
|
||||
"uptimeSeconds": None, # 无心跳机制,不可用
|
||||
"framesProcessed": None, # 无心跳机制,不可用
|
||||
"alertsGenerated": alerts_count, # 从 alarm_event 表统计
|
||||
"ipAddress": device_dict.get("ip_address"),
|
||||
"streamCount": device_dict.get("stream_count"),
|
||||
"configVersion": device_dict.get("config_version"),
|
||||
|
||||
Reference in New Issue
Block a user