Compare commits
3 Commits
6712a311f8
...
804c6a60e9
| Author | SHA1 | Date | |
|---|---|---|---|
| 804c6a60e9 | |||
| 20634c2ad4 | |||
| 46ee360d46 |
15
api/alarm.py
15
api/alarm.py
@@ -1,7 +1,8 @@
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, Body
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from db.crud import (
|
||||
@@ -16,6 +17,12 @@ from inference.pipeline import get_pipeline
|
||||
router = APIRouter(prefix="/api/alarms", tags=["告警管理"])
|
||||
|
||||
|
||||
class AlarmUpdateRequest(BaseModel):
|
||||
llm_checked: Optional[bool] = None
|
||||
llm_result: Optional[str] = None
|
||||
processed: Optional[bool] = None
|
||||
|
||||
|
||||
@router.get("", response_model=List[dict])
|
||||
def list_alarms(
|
||||
camera_id: Optional[int] = None,
|
||||
@@ -72,12 +79,10 @@ def get_alarm(alarm_id: int, db: Session = Depends(get_db)):
|
||||
@router.put("/{alarm_id}")
|
||||
def update_alarm_status(
|
||||
alarm_id: int,
|
||||
llm_checked: Optional[bool] = None,
|
||||
llm_result: Optional[str] = None,
|
||||
processed: Optional[bool] = None,
|
||||
request: AlarmUpdateRequest = Body(...),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
alarm = update_alarm(db, alarm_id, llm_checked=llm_checked, llm_result=llm_result, processed=processed)
|
||||
alarm = update_alarm(db, alarm_id, llm_checked=request.llm_checked, llm_result=request.llm_result, processed=request.processed)
|
||||
if not alarm:
|
||||
raise HTTPException(status_code=404, detail="告警不存在")
|
||||
return {"message": "更新成功"}
|
||||
|
||||
@@ -64,18 +64,15 @@ def get_camera(camera_id: int, db: Session = Depends(get_db)):
|
||||
|
||||
@router.post("", response_model=dict)
|
||||
def add_camera(
|
||||
name: str,
|
||||
rtsp_url: str,
|
||||
fps_limit: int = 30,
|
||||
process_every_n_frames: int = 3,
|
||||
request: CameraUpdateRequest = Body(...),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
camera = create_camera(
|
||||
db,
|
||||
name=name,
|
||||
rtsp_url=rtsp_url,
|
||||
fps_limit=fps_limit,
|
||||
process_every_n_frames=process_every_n_frames,
|
||||
name=request.name,
|
||||
rtsp_url=request.rtsp_url,
|
||||
fps_limit=request.fps_limit or 30,
|
||||
process_every_n_frames=request.process_every_n_frames or 3,
|
||||
)
|
||||
|
||||
if camera.enabled:
|
||||
|
||||
@@ -64,7 +64,8 @@ const Dashboard: React.FC = () => {
|
||||
const res = await axios.get('/api/pipeline/status');
|
||||
const cameras = Object.entries(res.data.cameras || {}).map(([id, info]) => ({
|
||||
id,
|
||||
...info as any,
|
||||
is_running: (info as any).is_running || false,
|
||||
fps: (info as any).fps || 0,
|
||||
}));
|
||||
setCameraStatus(cameras);
|
||||
} catch (err) {
|
||||
@@ -163,8 +164,8 @@ const Dashboard: React.FC = () => {
|
||||
title={`摄像头 ${cam.id}`}
|
||||
description={
|
||||
<Space>
|
||||
<Tag color={cam.running ? 'green' : 'red'}>
|
||||
{cam.running ? '运行中' : '已停止'}
|
||||
<Tag color={cam.is_running ? 'green' : 'red'}>
|
||||
{cam.is_running ? '运行中' : '已停止'}
|
||||
</Tag>
|
||||
<span>{cam.fps?.toFixed(1) || 0} FPS</span>
|
||||
</Space>
|
||||
|
||||
Reference in New Issue
Block a user