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():