Co-authored-by: lizb <lizb@sugon.com>tags/1.5.0
| parser.add_argument( | parser.add_argument( | ||||
| "created_at__after", type=str, location="args", help="Filter logs created after this timestamp" | "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("page", type=int_range(1, 99999), default=1, location="args") | ||||
| parser.add_argument("limit", type=int_range(1, 100), default=20, location="args") | parser.add_argument("limit", type=int_range(1, 100), default=20, location="args") | ||||
| args = parser.parse_args() | args = parser.parse_args() | ||||
| created_at_after=args.created_at__after, | created_at_after=args.created_at__after, | ||||
| page=args.page, | page=args.page, | ||||
| limit=args.limit, | 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 | return workflow_app_log_pagination |
| parser.add_argument("status", type=str, choices=["succeeded", "failed", "stopped"], location="args") | 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__before", type=str, location="args") | ||||
| parser.add_argument("created_at__after", 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("page", type=int_range(1, 99999), default=1, location="args") | ||||
| parser.add_argument("limit", type=int_range(1, 100), default=20, location="args") | parser.add_argument("limit", type=int_range(1, 100), default=20, location="args") | ||||
| args = parser.parse_args() | args = parser.parse_args() | ||||
| created_at_after=args.created_at__after, | created_at_after=args.created_at__after, | ||||
| page=args.page, | page=args.page, | ||||
| limit=args.limit, | 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 | return workflow_app_log_pagination |
| from sqlalchemy.orm import Session | from sqlalchemy.orm import Session | ||||
| from core.workflow.entities.workflow_execution import WorkflowExecutionStatus | 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 | from models.enums import CreatorUserRole | ||||
| created_at_after: datetime | None = None, | created_at_after: datetime | None = None, | ||||
| page: int = 1, | page: int = 1, | ||||
| limit: int = 20, | limit: int = 20, | ||||
| created_by_end_user_session_id: str | None = None, | |||||
| created_by_account: str | None = None, | |||||
| ) -> dict: | ) -> dict: | ||||
| """ | """ | ||||
| Get paginate workflow app logs using SQLAlchemy 2.0 style | Get paginate workflow app logs using SQLAlchemy 2.0 style | ||||
| :param created_at_after: filter logs created after this timestamp | :param created_at_after: filter logs created after this timestamp | ||||
| :param page: page number | :param page: page number | ||||
| :param limit: items per page | :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 | :return: Pagination object | ||||
| """ | """ | ||||
| # Build base statement using SQLAlchemy 2.0 style | # Build base statement using SQLAlchemy 2.0 style | ||||
| if created_at_after: | if created_at_after: | ||||
| stmt = stmt.where(WorkflowAppLog.created_at >= 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()) | stmt = stmt.order_by(WorkflowAppLog.created_at.desc()) | ||||
| # Get total count using the same filters | # Get total count using the same filters |
| <Property name='limit' type='int' key='limit'> | <Property name='limit' type='int' key='limit'> | ||||
| How many chat history messages to return in one request, default is 20. | How many chat history messages to return in one request, default is 20. | ||||
| </Property> | </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> | </Properties> | ||||
| ### Response | ### Response |
| <Property name='limit' type='int' key='limit'> | <Property name='limit' type='int' key='limit'> | ||||
| 1回のリクエストで返すチャット履歴メッセージの数、デフォルトは20。 | 1回のリクエストで返すチャット履歴メッセージの数、デフォルトは20。 | ||||
| </Property> | </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> | </Properties> | ||||
| ### 応答 | ### 応答 |
| <Property name='limit' type='int' key='limit'> | <Property name='limit' type='int' key='limit'> | ||||
| 每页条数, 默认20. | 每页条数, 默认20. | ||||
| </Property> | </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> | </Properties> | ||||
| ### Response | ### Response |