| @@ -34,6 +34,20 @@ class WorkflowAppLogApi(Resource): | |||
| parser.add_argument( | |||
| "created_at__after", type=str, location="args", help="Filter logs created after this timestamp" | |||
| ) | |||
| parser.add_argument( | |||
| "created_by_end_user_session_id", | |||
| type=str, | |||
| location="args", | |||
| required=False, | |||
| default=None, | |||
| ) | |||
| parser.add_argument( | |||
| "created_by_account", | |||
| type=str, | |||
| location="args", | |||
| required=False, | |||
| default=None, | |||
| ) | |||
| 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() | |||
| @@ -57,6 +71,8 @@ class WorkflowAppLogApi(Resource): | |||
| created_at_after=args.created_at__after, | |||
| page=args.page, | |||
| limit=args.limit, | |||
| created_by_end_user_session_id=args.created_by_end_user_session_id, | |||
| created_by_account=args.created_by_account, | |||
| ) | |||
| return workflow_app_log_pagination | |||
| @@ -135,6 +135,20 @@ class WorkflowAppLogApi(Resource): | |||
| parser.add_argument("status", type=str, choices=["succeeded", "failed", "stopped"], location="args") | |||
| parser.add_argument("created_at__before", type=str, location="args") | |||
| parser.add_argument("created_at__after", type=str, location="args") | |||
| parser.add_argument( | |||
| "created_by_end_user_session_id", | |||
| type=str, | |||
| location="args", | |||
| required=False, | |||
| default=None, | |||
| ) | |||
| parser.add_argument( | |||
| "created_by_account", | |||
| type=str, | |||
| location="args", | |||
| required=False, | |||
| default=None, | |||
| ) | |||
| 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() | |||
| @@ -158,6 +172,8 @@ class WorkflowAppLogApi(Resource): | |||
| created_at_after=args.created_at__after, | |||
| page=args.page, | |||
| limit=args.limit, | |||
| created_by_end_user_session_id=args.created_by_end_user_session_id, | |||
| created_by_account=args.created_by_account, | |||
| ) | |||
| return workflow_app_log_pagination | |||
| @@ -5,7 +5,7 @@ from sqlalchemy import and_, func, or_, select | |||
| from sqlalchemy.orm import Session | |||
| from core.workflow.entities.workflow_execution import WorkflowExecutionStatus | |||
| from models import App, EndUser, WorkflowAppLog, WorkflowRun | |||
| from models import Account, App, EndUser, WorkflowAppLog, WorkflowRun | |||
| from models.enums import CreatorUserRole | |||
| @@ -21,6 +21,8 @@ class WorkflowAppService: | |||
| created_at_after: datetime | None = None, | |||
| page: int = 1, | |||
| limit: int = 20, | |||
| created_by_end_user_session_id: str | None = None, | |||
| created_by_account: str | None = None, | |||
| ) -> dict: | |||
| """ | |||
| Get paginate workflow app logs using SQLAlchemy 2.0 style | |||
| @@ -32,6 +34,8 @@ class WorkflowAppService: | |||
| :param created_at_after: filter logs created after this timestamp | |||
| :param page: page number | |||
| :param limit: items per page | |||
| :param created_by_end_user_session_id: filter by end user session id | |||
| :param created_by_account: filter by account email | |||
| :return: Pagination object | |||
| """ | |||
| # Build base statement using SQLAlchemy 2.0 style | |||
| @@ -71,6 +75,26 @@ class WorkflowAppService: | |||
| if created_at_after: | |||
| stmt = stmt.where(WorkflowAppLog.created_at >= created_at_after) | |||
| # Filter by end user session id or account email | |||
| if created_by_end_user_session_id: | |||
| stmt = stmt.join( | |||
| EndUser, | |||
| and_( | |||
| WorkflowAppLog.created_by == EndUser.id, | |||
| WorkflowAppLog.created_by_role == CreatorUserRole.END_USER, | |||
| EndUser.session_id == created_by_end_user_session_id, | |||
| ), | |||
| ) | |||
| if created_by_account: | |||
| stmt = stmt.join( | |||
| Account, | |||
| and_( | |||
| WorkflowAppLog.created_by == Account.id, | |||
| WorkflowAppLog.created_by_role == CreatorUserRole.ACCOUNT, | |||
| Account.email == created_by_account, | |||
| ), | |||
| ) | |||
| stmt = stmt.order_by(WorkflowAppLog.created_at.desc()) | |||
| # Get total count using the same filters | |||
| @@ -533,6 +533,12 @@ Workflow applications offers non-session support and is ideal for translation, a | |||
| <Property name='limit' type='int' key='limit'> | |||
| How many chat history messages to return in one request, default is 20. | |||
| </Property> | |||
| <Property name='created_by_end_user_session_id' type='str' key='created_by_end_user_session_id'> | |||
| Created by which endUser, for example, `abc-123`. | |||
| </Property> | |||
| <Property name='created_by_account' type='str' key='created_by_account'> | |||
| Created by which email account, for example, lizb@test.com. | |||
| </Property> | |||
| </Properties> | |||
| ### Response | |||
| @@ -534,6 +534,12 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from | |||
| <Property name='limit' type='int' key='limit'> | |||
| 1回のリクエストで返すチャット履歴メッセージの数、デフォルトは20。 | |||
| </Property> | |||
| <Property name='created_by_end_user_session_id' type='str' key='created_by_end_user_session_id'> | |||
| どのendUserによって作成されたか、例えば、`abc-123`。 | |||
| </Property> | |||
| <Property name='created_by_account' type='str' key='created_by_account'> | |||
| どのメールアカウントによって作成されたか、例えば、lizb@test.com。 | |||
| </Property> | |||
| </Properties> | |||
| ### 応答 | |||
| @@ -522,6 +522,12 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等 | |||
| <Property name='limit' type='int' key='limit'> | |||
| 每页条数, 默认20. | |||
| </Property> | |||
| <Property name='created_by_end_user_session_id' type='str' key='created_by_end_user_session_id'> | |||
| 由哪个endUser创建,例如,`abc-123`. | |||
| </Property> | |||
| <Property name='created_by_account' type='str' key='created_by_account'> | |||
| 由哪个邮箱账户创建,例如,lizb@test.com. | |||
| </Property> | |||
| </Properties> | |||
| ### Response | |||