feat(flywheel): expose incident processing timeline
All checks were successful
CD Pipeline / build-and-deploy (push) Successful in 10m56s
All checks were successful
CD Pipeline / build-and-deploy (push) Successful in 10m56s
This commit is contained in:
@@ -921,6 +921,7 @@ class TimelineDBService:
|
||||
actor_role: str | None = None,
|
||||
risk_level: str | None = None,
|
||||
approval_id: str | None = None,
|
||||
incident_id: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""
|
||||
新增時間軸事件
|
||||
@@ -935,6 +936,7 @@ class TimelineDBService:
|
||||
actor_role=actor_role,
|
||||
risk_level=risk_level,
|
||||
approval_id=approval_id,
|
||||
incident_id=incident_id,
|
||||
)
|
||||
db.add(event)
|
||||
await db.flush()
|
||||
@@ -945,6 +947,7 @@ class TimelineDBService:
|
||||
id=event.id,
|
||||
type=event_type,
|
||||
title=title,
|
||||
incident_id=incident_id,
|
||||
)
|
||||
|
||||
return {
|
||||
@@ -952,19 +955,28 @@ class TimelineDBService:
|
||||
"type": event.event_type,
|
||||
"status": event.status,
|
||||
"title": event.title,
|
||||
"incident_id": event.incident_id,
|
||||
"created_at": event.created_at.isoformat(),
|
||||
}
|
||||
|
||||
async def get_events(self, limit: int = 50) -> list[dict[str, Any]]:
|
||||
async def get_events(
|
||||
self,
|
||||
limit: int = 50,
|
||||
incident_id: str | None = None,
|
||||
approval_ids: list[str] | None = None,
|
||||
) -> list[dict[str, Any]]:
|
||||
"""
|
||||
取得最近的時間軸事件
|
||||
"""
|
||||
async with get_db_context() as db:
|
||||
result = await db.execute(
|
||||
select(TimelineEvent)
|
||||
.order_by(TimelineEvent.created_at.desc())
|
||||
.limit(limit)
|
||||
)
|
||||
query = select(TimelineEvent)
|
||||
if incident_id:
|
||||
from sqlalchemy import or_
|
||||
filters = [TimelineEvent.incident_id == incident_id]
|
||||
if approval_ids:
|
||||
filters.append(TimelineEvent.approval_id.in_(approval_ids))
|
||||
query = query.where(or_(*filters))
|
||||
result = await db.execute(query.order_by(TimelineEvent.created_at.desc()).limit(limit))
|
||||
events = result.scalars().all()
|
||||
|
||||
return [
|
||||
@@ -978,6 +990,7 @@ class TimelineDBService:
|
||||
"actor_role": e.actor_role,
|
||||
"risk_level": e.risk_level,
|
||||
"approval_id": e.approval_id,
|
||||
"incident_id": e.incident_id,
|
||||
"created_at": e.created_at.isoformat(),
|
||||
}
|
||||
for e in events
|
||||
|
||||
Reference in New Issue
Block a user