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:
@@ -19,65 +19,14 @@ class DeviceService:
|
||||
self._devices: Dict[str, Dict[str, Any]] = {} # 内存缓存
|
||||
|
||||
def handle_heartbeat(self, heartbeat_data: Dict[str, Any]) -> Optional[EdgeDevice]:
|
||||
"""处理心跳消息"""
|
||||
device_id = heartbeat_data.get("device_id")
|
||||
if not device_id:
|
||||
logger.warning("心跳消息缺少 device_id")
|
||||
return None
|
||||
"""
|
||||
处理心跳消息(已废弃 - 边缘端未实现心跳机制)
|
||||
|
||||
status_info = heartbeat_data.get("status", {})
|
||||
|
||||
db = get_session()
|
||||
try:
|
||||
# 查找或创建设备
|
||||
device = db.query(EdgeDevice).filter(
|
||||
EdgeDevice.device_id == device_id
|
||||
).first()
|
||||
|
||||
now = datetime.now(timezone.utc)
|
||||
|
||||
if device is None:
|
||||
# 新设备
|
||||
device = EdgeDevice(
|
||||
device_id=device_id,
|
||||
device_name=f"边缘设备_{device_id[:8]}",
|
||||
status=DeviceStatus.ONLINE,
|
||||
last_heartbeat=now,
|
||||
)
|
||||
db.add(device)
|
||||
logger.info(f"发现新设备: {device_id}")
|
||||
else:
|
||||
# 更新状态
|
||||
old_status = device.status
|
||||
device.status = DeviceStatus.ONLINE
|
||||
device.last_heartbeat = now
|
||||
|
||||
if old_status != DeviceStatus.ONLINE:
|
||||
logger.info(f"设备上线: {device_id}")
|
||||
|
||||
# 更新运行信息
|
||||
if status_info:
|
||||
device.uptime_seconds = status_info.get("uptime_seconds")
|
||||
device.frames_processed = status_info.get("frames_processed")
|
||||
device.alerts_generated = status_info.get("alerts_generated")
|
||||
device.extra_info = status_info.get("stream_stats")
|
||||
|
||||
device.updated_at = now
|
||||
|
||||
db.commit()
|
||||
db.refresh(device)
|
||||
|
||||
# 更新内存缓存
|
||||
self._devices[device_id] = device.to_dict()
|
||||
|
||||
return device
|
||||
|
||||
except Exception as e:
|
||||
db.rollback()
|
||||
logger.error(f"处理心跳失败: {e}")
|
||||
return None
|
||||
finally:
|
||||
db.close()
|
||||
保留此方法以兼容旧代码,实际上不会被调用。
|
||||
边缘节点信息应通过手动创建或配置管理。
|
||||
"""
|
||||
logger.warning("handle_heartbeat 被调用,但心跳机制已废弃,忽略")
|
||||
return None
|
||||
|
||||
def check_offline_devices(self) -> List[EdgeDevice]:
|
||||
"""检查离线设备"""
|
||||
|
||||
Reference in New Issue
Block a user