From e8243c566ffae90dd21879042aa9d5a71ea2bfd0 Mon Sep 17 00:00:00 2001 From: -LAN- Date: Tue, 4 Mar 2025 15:10:21 +0800 Subject: [PATCH] feat: add time-based filtering for workflow logs Signed-off-by: -LAN- --- .../console/app/workflow_app_log.py | 6 ++++++ api/services/workflow_app_service.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/api/controllers/console/app/workflow_app_log.py b/api/controllers/console/app/workflow_app_log.py index 882c53e4fb..3f121411c9 100644 --- a/api/controllers/console/app/workflow_app_log.py +++ b/api/controllers/console/app/workflow_app_log.py @@ -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() diff --git a/api/services/workflow_app_service.py b/api/services/workflow_app_service.py index 7eab0ac1d8..ec0290a3ef 100644 --- a/api/services/workflow_app_service.py +++ b/api/services/workflow_app_service.py @@ -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)