From 7c7b7455f64623caea70fe4e8362ec85f8555d13 Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Tue, 24 Mar 2026 11:17:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=B9=B3=E5=9D=87?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E6=97=B6=E9=97=B4=E5=8F=AA=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E8=BF=917=E5=A4=A9=E4=B8=94=E6=8E=92=E9=99=A4>6h=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 避免历史旧数据和长时间未处理告警拉高平均响应时间 --- app/services/alarm_event_service.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/services/alarm_event_service.py b/app/services/alarm_event_service.py index f136e71..ca70f9c 100644 --- a/app/services/alarm_event_service.py +++ b/app/services/alarm_event_service.py @@ -522,8 +522,9 @@ class AlarmEventService: AlarmEvent.handle_status.in_(["DONE", "IGNORED"]) ).count() - # 平均响应时间(从 event_time 到 handled_at,只算已处理且时间合理的) + # 平均响应时间(只算近7天已处理的,排除>6h的异常值) from sqlalchemy.sql.expression import literal_column + stats_since = today_start - timedelta(days=7) avg_response = db.query( func.avg( func.timestampdiff( @@ -535,6 +536,8 @@ class AlarmEventService: ).filter( AlarmEvent.handled_at.isnot(None), AlarmEvent.handled_at > AlarmEvent.event_time, + AlarmEvent.event_time >= stats_since, + func.timestampdiff(literal_column("MINUTE"), AlarmEvent.event_time, AlarmEvent.handled_at) <= 360, ).scalar() # 按 alarm_status 计数 @@ -676,9 +679,15 @@ class AlarmEventService: handled_count = db.query(AlarmEvent).filter(AlarmEvent.handle_status.in_(["DONE", "IGNORED"])).count() from sqlalchemy.sql.expression import literal_column + stats_since = today_start - timedelta(days=7) avg_response = db.query( func.avg(func.timestampdiff(literal_column("MINUTE"), AlarmEvent.event_time, AlarmEvent.handled_at)) - ).filter(AlarmEvent.handled_at.isnot(None), AlarmEvent.handled_at > AlarmEvent.event_time).scalar() + ).filter( + AlarmEvent.handled_at.isnot(None), + AlarmEvent.handled_at > AlarmEvent.event_time, + AlarmEvent.event_time >= stats_since, + func.timestampdiff(literal_column("MINUTE"), AlarmEvent.event_time, AlarmEvent.handled_at) <= 360, + ).scalar() by_type = {} for r in db.query(AlarmEvent.alarm_type, func.count(AlarmEvent.alarm_id)).group_by(AlarmEvent.alarm_type).all():