阶段3: 摘除 STF——删除 stf_client/stf_device_mgmt 与全部引用(STF 容器重启/设备管理/强制释放占用/agent 按钮/占用列),调度与设备管理完全基于本地设备池+adb;错误类迁入 device_worker,create_worker 去 stf 参数
This commit is contained in:
+5
-51
@@ -1,22 +1,17 @@
|
||||
"""设备池(STF 替代数据源):SQLite devices 表 = 设备清单,本地 adb = 在线状态。
|
||||
|
||||
阶段 0:纯新增模块,不改现有行为。task_manager / web_server 的 STF 调用
|
||||
在阶段 1 逐个切换到本模块,阶段 3 摘除 STF 后删除 seed 相关代码。
|
||||
"""设备池:SQLite devices 表 = 设备清单,本地 adb = 在线状态(STF 替代数据源)。
|
||||
|
||||
设计:
|
||||
- list_configured() — devices 表里 enabled 的设备(清单,管理页维护)
|
||||
- list_online() — 本机 `adb devices` 里 state=device 的设备(实时)
|
||||
- list_ready() — configured ∩ online(调度用,取代 STF list_free_devices)
|
||||
- list_online() — 本机 `adb devices` 里 state=device 的设备(实时;
|
||||
池内有 USB 设备时合并 220 远程 adb server 状态)
|
||||
- list_ready() — configured ∩ online(任务调度用)
|
||||
- CRUD — add/update/remove/set_enabled(设备池管理页用)
|
||||
- 首次启动自动从 STF 导入现有设备(一次性,app_meta 标记防重复)
|
||||
|
||||
红线:全模块不 connect / 不 kill-server / 不 disconnect,遵守既有技术约束。
|
||||
后台线程(task_manager 等)调用时由本模块自行推 app context,调用方无需关心。
|
||||
"""
|
||||
import time
|
||||
|
||||
from sqlalchemy import text
|
||||
|
||||
from config import USB_ADB_HOST, USB_ADB_PORT
|
||||
from core.adb_helper import _adb, _adb_remote
|
||||
from core.logger import get_logger
|
||||
@@ -28,13 +23,9 @@ _app = None
|
||||
|
||||
|
||||
def init_app(app):
|
||||
"""web_server 启动时调用:绑定 Flask app,并做首次设备导入。"""
|
||||
"""web_server 启动时调用:绑定 Flask app(供后台线程推 db context)。"""
|
||||
global _app
|
||||
_app = app
|
||||
try:
|
||||
_seed_from_stf_if_empty()
|
||||
except Exception as e:
|
||||
_log.warning(f"设备池初始化异常(不影响启动): {e}")
|
||||
|
||||
|
||||
def _ctx():
|
||||
@@ -142,40 +133,3 @@ def set_enabled(serial, enabled):
|
||||
d.enabled = enabled
|
||||
db.session.commit()
|
||||
return True
|
||||
|
||||
|
||||
# ================== 首次导入(阶段 3 摘除 STF 后删除) ==================
|
||||
def _seed_from_stf_if_empty():
|
||||
"""首次启动把 STF 现有设备导入本地清单。
|
||||
|
||||
条件:device 表为空 且 未导入过(app_meta 标记)。STF 不可达时跳过,
|
||||
不写标记,下次启动重试。摘除 STF 后此函数随 stf_client 一起删除。
|
||||
"""
|
||||
try:
|
||||
from core.stf_client import STFClient
|
||||
except Exception:
|
||||
return
|
||||
with _ctx():
|
||||
if Device.query.count() > 0:
|
||||
return
|
||||
seeded = db.session.execute(text(
|
||||
"SELECT value FROM app_meta WHERE key='devices_seeded_from_stf'")).scalar()
|
||||
if seeded:
|
||||
return
|
||||
try:
|
||||
# 导入全部 serial(不限于 present):STF 池 = 配置的舰队,
|
||||
# present=false 的是掉线/陈旧记录,导入后显示离线,管理页可删
|
||||
serials = [d["serial"] for d in STFClient().list_all_devices()]
|
||||
except Exception as e:
|
||||
_log.warning(f"从 STF 导入设备清单失败(可稍后手动添加): {e}")
|
||||
return
|
||||
if not serials:
|
||||
_log.warning("STF 无在线设备,跳过设备池首次导入")
|
||||
return
|
||||
now = time.strftime("%Y-%m-%d %H:%M")
|
||||
for s in serials:
|
||||
db.session.add(Device(serial=s, created_at=now))
|
||||
db.session.execute(text(
|
||||
"INSERT OR REPLACE INTO app_meta(key,value) VALUES('devices_seeded_from_stf','1')"))
|
||||
db.session.commit()
|
||||
_log.info(f"设备池首次导入 {len(serials)} 台设备(来源 STF)")
|
||||
|
||||
Reference in New Issue
Block a user