diff --git a/api/controllers/console/app/workflow_app_log.py b/api/controllers/console/app/workflow_app_log.py
index b9579e2120..310146a5e7 100644
--- a/api/controllers/console/app/workflow_app_log.py
+++ b/api/controllers/console/app/workflow_app_log.py
@@ -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
diff --git a/api/controllers/service_api/app/workflow.py b/api/controllers/service_api/app/workflow.py
index df52b49424..efb4acc5fb 100644
--- a/api/controllers/service_api/app/workflow.py
+++ b/api/controllers/service_api/app/workflow.py
@@ -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
diff --git a/api/services/workflow_app_service.py b/api/services/workflow_app_service.py
index 6b30a70372..6eabf03018 100644
--- a/api/services/workflow_app_service.py
+++ b/api/services/workflow_app_service.py
@@ -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
diff --git a/web/app/components/develop/template/template_workflow.en.mdx b/web/app/components/develop/template/template_workflow.en.mdx
index 0ceeadf4ed..5e4c136ad9 100644
--- a/web/app/components/develop/template/template_workflow.en.mdx
+++ b/web/app/components/develop/template/template_workflow.en.mdx
@@ -533,6 +533,12 @@ Workflow applications offers non-session support and is ideal for translation, a
How many chat history messages to return in one request, default is 20.
+
+ Created by which endUser, for example, `abc-123`.
+
+
+ Created by which email account, for example, lizb@test.com.
+
### Response
diff --git a/web/app/components/develop/template/template_workflow.ja.mdx b/web/app/components/develop/template/template_workflow.ja.mdx
index 4f7e423ea5..48fcb1237b 100644
--- a/web/app/components/develop/template/template_workflow.ja.mdx
+++ b/web/app/components/develop/template/template_workflow.ja.mdx
@@ -534,6 +534,12 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
1回のリクエストで返すチャット履歴メッセージの数、デフォルトは20。
+
+ どのendUserによって作成されたか、例えば、`abc-123`。
+
+
+ どのメールアカウントによって作成されたか、例えば、lizb@test.com。
+
### 応答
diff --git a/web/app/components/develop/template/template_workflow.zh.mdx b/web/app/components/develop/template/template_workflow.zh.mdx
index d599cb503f..4e21d81a9f 100644
--- a/web/app/components/develop/template/template_workflow.zh.mdx
+++ b/web/app/components/develop/template/template_workflow.zh.mdx
@@ -522,6 +522,12 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
每页条数, 默认20.
+
+ 由哪个endUser创建,例如,`abc-123`.
+
+
+ 由哪个邮箱账户创建,例如,lizb@test.com.
+
### Response