Przeglądaj źródła

workflow logs support workflow run id filter (#6833)

tags/0.7.0
majian 1 rok temu
rodzic
commit
5542ee4d0d
No account linked to committer's email address
1 zmienionych plików z 25 dodań i 6 usunięć
  1. 25
    6
      api/services/workflow_app_service.py

+ 25
- 6
api/services/workflow_app_service.py Wyświetl plik

import uuid

from flask_sqlalchemy.pagination import Pagination from flask_sqlalchemy.pagination import Pagination
from sqlalchemy import and_, or_ from sqlalchemy import and_, or_


) )


status = WorkflowRunStatus.value_of(args.get('status')) if args.get('status') else None status = WorkflowRunStatus.value_of(args.get('status')) if args.get('status') else None
if args['keyword'] or status:
keyword = args['keyword']
if keyword or status:
query = query.join( query = query.join(
WorkflowRun, WorkflowRun.id == WorkflowAppLog.workflow_run_id WorkflowRun, WorkflowRun.id == WorkflowAppLog.workflow_run_id
) )


if args['keyword']:
keyword_val = f"%{args['keyword'][:30]}%"
if keyword:
keyword_like_val = f"%{args['keyword'][:30]}%"
keyword_conditions = [ keyword_conditions = [
WorkflowRun.inputs.ilike(keyword_val),
WorkflowRun.outputs.ilike(keyword_val),
WorkflowRun.inputs.ilike(keyword_like_val),
WorkflowRun.outputs.ilike(keyword_like_val),
# filter keyword by end user session id if created by end user role # 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))
and_(WorkflowRun.created_by_role == 'end_user', EndUser.session_id.ilike(keyword_like_val))
] ]


# filter keyword by workflow run id
keyword_uuid = self._safe_parse_uuid(keyword)
if keyword_uuid:
keyword_conditions.append(WorkflowRun.id == keyword_uuid)

query = query.outerjoin( query = query.outerjoin(
EndUser, EndUser,
and_(WorkflowRun.created_by == EndUser.id, WorkflowRun.created_by_role == CreatedByRole.END_USER.value) and_(WorkflowRun.created_by == EndUser.id, WorkflowRun.created_by_role == CreatedByRole.END_USER.value)
) )


return pagination return pagination

@staticmethod
def _safe_parse_uuid(value: str):
# fast check
if len(value) < 32:
return None

try:
return uuid.UUID(value)
except ValueError:
return None

Ładowanie…
Anuluj
Zapisz