feat: add time-based filtering for workflow logs

Signed-off-by: -LAN- <laipz8200@outlook.com>
This commit is contained in:
-LAN- 2025-03-04 15:10:21 +08:00
parent e954e0d6c4
commit e8243c566f
No known key found for this signature in database
GPG Key ID: 6BA0D108DED011FF
2 changed files with 24 additions and 0 deletions

View File

@ -24,6 +24,12 @@ class WorkflowAppLogApi(Resource):
parser = reqparse.RequestParser()
parser.add_argument("keyword", type=str, location="args")
parser.add_argument("status", type=str, choices=["succeeded", "failed", "stopped"], location="args")
parser.add_argument(
"created_at__before", type=str, location="args", help="Filter logs created before this timestamp"
)
parser.add_argument(
"created_at__after", type=str, location="args", help="Filter logs created after this timestamp"
)
parser.add_argument("page", type=int_range(1, 99999), default=1, location="args")
parser.add_argument("limit", type=int_range(1, 100), default=20, location="args")
args = parser.parse_args()

View File

@ -1,4 +1,5 @@
import uuid
from datetime import datetime
from flask_sqlalchemy.pagination import Pagination
from sqlalchemy import and_, or_
@ -49,6 +50,23 @@ class WorkflowAppService:
# join with workflow_run and filter by status
query = query.filter(WorkflowRun.status == status.value)
# Add time-based filtering
created_at_before = args.get("created_at__before")
if created_at_before:
try:
before_date = datetime.fromisoformat(created_at_before.replace("Z", "+00:00"))
query = query.filter(WorkflowAppLog.created_at <= before_date)
except ValueError:
pass # Ignore invalid date format
created_at_after = args.get("created_at__after")
if created_at_after:
try:
after_date = datetime.fromisoformat(created_at_after.replace("Z", "+00:00"))
query = query.filter(WorkflowAppLog.created_at >= after_date)
except ValueError:
pass # Ignore invalid date format
query = query.order_by(WorkflowAppLog.created_at.desc())
pagination = db.paginate(query, page=args["page"], per_page=args["limit"], error_out=False)