Files
FishServer/fish_api/app/state.py
zaiun xu 5e1b2117c1 feat(fish_api): SQLite 快照投递、日志与 watch 空闲告警
- 新增 SQLite:measure/health 快照、delivery_cursor 单消费者 pop;clear/start_fresh 可清空库
- biomass GET 仅返回约定 data 字段,X-Fish-Biomass-New 表示是否有新快照;poller 读响应头
- loguru 桥接 uvicorn,子进程 stdout 流式输出;format_json_pretty 与算法摘要日志
- measure/action watch 无新任务时限流 WARNING;watch_idle 共用逻辑
- 依赖 loguru;新增 db、logging_config、subprocess_run、watch_idle、启动脚本

FishMeasure: 更新 fish_video_weight_evaluation 与 predict_weigth_from_svo2;移除未用 refbox/segmentation 脚本
Made-with: Cursor
2026-04-09 11:54:30 +08:00

39 lines
883 B
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
import asyncio
from dataclasses import dataclass, field
from datetime import datetime
from typing import List, Optional
@dataclass
class MeasureSnapshot:
result: List[dict]
video_left: str
video_right: str
updated_at: Optional[datetime] = None
error: Optional[str] = None
raw_prediction_path: Optional[str] = None
@dataclass
class HealthSnapshot:
behavior_result: str
health_result: str
updated_at: Optional[datetime] = None
error: Optional[str] = None
raw_class_en: str = ""
@dataclass
class AppState:
measure_lock: asyncio.Lock = field(default_factory=asyncio.Lock)
action_lock: asyncio.Lock = field(default_factory=asyncio.Lock)
# job status for optional polling业务结果见 SQLite
measure_status: str = "idle"
action_status: str = "idle"
app_state = AppState()