优化:平均响应时间只统计近7天且排除>6h异常值

避免历史旧数据和长时间未处理告警拉高平均响应时间
This commit is contained in:
2026-03-24 11:17:23 +08:00
parent 731a6d631c
commit 7c7b7455f6

View File

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