mirror of
https://github.com/langgenius/dify.git
synced 2026-05-05 01:48:04 +08:00
add workflow app log api
This commit is contained in:
@ -3,6 +3,7 @@ from datetime import datetime
|
||||
from typing import cast
|
||||
|
||||
import yaml
|
||||
from flask_sqlalchemy.pagination import Pagination
|
||||
|
||||
from constants.model_template import default_app_templates
|
||||
from core.errors.error import ProviderTokenNotInitError
|
||||
@ -17,7 +18,7 @@ from services.workflow_service import WorkflowService
|
||||
|
||||
|
||||
class AppService:
|
||||
def get_paginate_apps(self, tenant_id: str, args: dict) -> list[App]:
|
||||
def get_paginate_apps(self, tenant_id: str, args: dict) -> Pagination:
|
||||
"""
|
||||
Get app list with pagination
|
||||
:param tenant_id: tenant id
|
||||
|
||||
62
api/services/workflow_app_service.py
Normal file
62
api/services/workflow_app_service.py
Normal file
@ -0,0 +1,62 @@
|
||||
from flask_sqlalchemy.pagination import Pagination
|
||||
from sqlalchemy import or_, and_
|
||||
|
||||
from extensions.ext_database import db
|
||||
from models import CreatedByRole
|
||||
from models.model import App, EndUser
|
||||
from models.workflow import WorkflowAppLog, WorkflowRunStatus, WorkflowRun
|
||||
|
||||
|
||||
class WorkflowAppService:
|
||||
|
||||
def get_paginate_workflow_app_logs(self, app_model: App, args: dict) -> Pagination:
|
||||
"""
|
||||
Get paginate workflow app logs
|
||||
:param app: app model
|
||||
:param args: request args
|
||||
:return:
|
||||
"""
|
||||
query = (
|
||||
db.select(WorkflowAppLog)
|
||||
.where(
|
||||
WorkflowAppLog.tenant_id == app_model.tenant_id,
|
||||
WorkflowAppLog.app_id == app_model.id
|
||||
)
|
||||
)
|
||||
|
||||
status = WorkflowRunStatus.value_of(args.get('status')) if args.get('status') else None
|
||||
if args['keyword'] or status:
|
||||
query = query.join(
|
||||
WorkflowRun, WorkflowRun.id == WorkflowAppLog.workflow_run_id
|
||||
)
|
||||
|
||||
if args['keyword']:
|
||||
keyword_val = f"%{args['keyword'][:30]}%"
|
||||
keyword_conditions = [
|
||||
WorkflowRun.inputs.ilike(keyword_val),
|
||||
WorkflowRun.outputs.ilike(keyword_val),
|
||||
# filter keyword by end user session id if created by end user role
|
||||
and_(WorkflowRun.created_by_role == 'end_user', EndUser.session_id.ilike(keyword_val))
|
||||
]
|
||||
|
||||
query = query.outerjoin(
|
||||
EndUser,
|
||||
and_(WorkflowRun.created_by == EndUser.id, WorkflowRun.created_by_role == CreatedByRole.END_USER.value)
|
||||
).filter(or_(*keyword_conditions))
|
||||
|
||||
if status:
|
||||
# join with workflow_run and filter by status
|
||||
query = query.filter(
|
||||
WorkflowRun.status == status.value
|
||||
)
|
||||
|
||||
query = query.order_by(WorkflowAppLog.created_at.desc())
|
||||
|
||||
pagination = db.paginate(
|
||||
query,
|
||||
page=args['page'],
|
||||
per_page=args['limit'],
|
||||
error_out=False
|
||||
)
|
||||
|
||||
return pagination
|
||||
@ -15,7 +15,7 @@ class WorkflowService:
|
||||
Workflow Service
|
||||
"""
|
||||
|
||||
def get_draft_workflow(self, app_model: App) -> Workflow:
|
||||
def get_draft_workflow(self, app_model: App) -> Optional[Workflow]:
|
||||
"""
|
||||
Get draft workflow
|
||||
"""
|
||||
@ -29,6 +29,26 @@ class WorkflowService:
|
||||
# return draft workflow
|
||||
return workflow
|
||||
|
||||
def get_published_workflow(self, app_model: App) -> Optional[Workflow]:
|
||||
"""
|
||||
Get published workflow
|
||||
"""
|
||||
app_model_config = app_model.app_model_config
|
||||
|
||||
if not app_model_config.workflow_id:
|
||||
return None
|
||||
|
||||
# fetch published workflow by workflow_id
|
||||
workflow = db.session.query(Workflow).filter(
|
||||
Workflow.tenant_id == app_model.tenant_id,
|
||||
Workflow.app_id == app_model.id,
|
||||
Workflow.id == app_model_config.workflow_id
|
||||
).first()
|
||||
|
||||
# return published workflow
|
||||
return workflow
|
||||
|
||||
|
||||
def sync_draft_workflow(self, app_model: App, graph: dict, account: Account) -> Workflow:
|
||||
"""
|
||||
Sync draft workflow
|
||||
@ -116,6 +136,8 @@ class WorkflowService:
|
||||
app_model.app_model_config_id = new_app_model_config.id
|
||||
db.session.commit()
|
||||
|
||||
# TODO update app related datasets
|
||||
|
||||
# return new workflow
|
||||
return workflow
|
||||
|
||||
|
||||
Reference in New Issue
Block a user