mirror of https://github.com/langgenius/dify.git
feat: enhance workflow log components with detailed trigger metadata and type safety
This commit is contained in:
parent
9d7b47c784
commit
85a5c78b80
|
|
@ -41,6 +41,7 @@ const Logs: FC<ILogsProps> = ({ appDetail }) => {
|
|||
|
||||
const query = {
|
||||
page: currPage + 1,
|
||||
detail: true,
|
||||
limit,
|
||||
...(debouncedQueryParams.status !== 'all' ? { status: debouncedQueryParams.status } : {}),
|
||||
...(debouncedQueryParams.keyword ? { keyword: debouncedQueryParams.keyword } : {}),
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import Indicator from '@/app/components/header/indicator'
|
|||
import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
|
||||
import useTimestamp from '@/hooks/use-timestamp'
|
||||
import cn from '@/utils/classnames'
|
||||
import type { WorkflowRunTriggeredFrom } from '@/models/log'
|
||||
|
||||
type ILogs = {
|
||||
logs?: WorkflowLogsResponse
|
||||
|
|
@ -162,7 +163,7 @@ const WorkflowAppLogList: FC<ILogs> = ({ logs, appDetail, onRefresh }) => {
|
|||
</td>
|
||||
{isWorkflow && (
|
||||
<td className='p-3 pr-2'>
|
||||
<TriggerByDisplay triggeredFrom={log.workflow_run.triggered_from || 'app-run'} />
|
||||
<TriggerByDisplay triggeredFrom={log.workflow_run.triggered_from as WorkflowRunTriggeredFrom} triggerMetadata={log.details?.trigger_metadata} />
|
||||
</td>
|
||||
)}
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -11,15 +11,23 @@ import {
|
|||
} from '@/app/components/base/icons/src/vender/workflow'
|
||||
import BlockIcon from '@/app/components/workflow/block-icon'
|
||||
import { BlockEnum } from '@/app/components/workflow/types'
|
||||
import useTheme from '@/hooks/use-theme'
|
||||
import type { TriggerMetadata } from '@/models/log'
|
||||
import { WorkflowRunTriggeredFrom } from '@/models/log'
|
||||
import { Theme } from '@/types/app'
|
||||
|
||||
type TriggerByDisplayProps = {
|
||||
triggeredFrom: string
|
||||
triggeredFrom: WorkflowRunTriggeredFrom
|
||||
className?: string
|
||||
showText?: boolean
|
||||
triggerMetadata?: TriggerMetadata
|
||||
}
|
||||
|
||||
const getTriggerDisplayName = (triggeredFrom: string, t: any) => {
|
||||
const nameMap: Record<string, string> = {
|
||||
const getTriggerDisplayName = (triggeredFrom: WorkflowRunTriggeredFrom, t: any, metadata?: TriggerMetadata) => {
|
||||
if (triggeredFrom === WorkflowRunTriggeredFrom.PLUGIN && metadata?.event_name)
|
||||
return metadata.event_name
|
||||
|
||||
const nameMap: Record<WorkflowRunTriggeredFrom, string> = {
|
||||
'debugging': t('appLog.triggerBy.debugging'),
|
||||
'app-run': t('appLog.triggerBy.appRun'),
|
||||
'webhook': t('appLog.triggerBy.webhook'),
|
||||
|
|
@ -32,7 +40,27 @@ const getTriggerDisplayName = (triggeredFrom: string, t: any) => {
|
|||
return nameMap[triggeredFrom] || triggeredFrom
|
||||
}
|
||||
|
||||
const getTriggerIcon = (triggeredFrom: string) => {
|
||||
const getPluginIcon = (metadata: TriggerMetadata | undefined, theme: Theme) => {
|
||||
if (!metadata)
|
||||
return null
|
||||
|
||||
const icon = theme === Theme.dark
|
||||
? metadata.icon_dark || metadata.icon
|
||||
: metadata.icon || metadata.icon_dark
|
||||
|
||||
if (!icon)
|
||||
return null
|
||||
|
||||
return (
|
||||
<BlockIcon
|
||||
type={BlockEnum.TriggerPlugin}
|
||||
size='md'
|
||||
toolIcon={icon}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
const getTriggerIcon = (triggeredFrom: WorkflowRunTriggeredFrom, metadata: TriggerMetadata | undefined, theme: Theme) => {
|
||||
switch (triggeredFrom) {
|
||||
case 'webhook':
|
||||
return (
|
||||
|
|
@ -47,9 +75,7 @@ const getTriggerIcon = (triggeredFrom: string) => {
|
|||
</div>
|
||||
)
|
||||
case 'plugin':
|
||||
// For plugin triggers in logs, use a generic plugin icon since we don't have specific plugin info
|
||||
// This matches the standard BlockIcon styling for TriggerPlugin
|
||||
return (
|
||||
return getPluginIcon(metadata, theme) || (
|
||||
<BlockIcon
|
||||
type={BlockEnum.TriggerPlugin}
|
||||
size="md"
|
||||
|
|
@ -83,11 +109,13 @@ const TriggerByDisplay: FC<TriggerByDisplayProps> = ({
|
|||
triggeredFrom,
|
||||
className = '',
|
||||
showText = true,
|
||||
triggerMetadata,
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
const { theme } = useTheme()
|
||||
|
||||
const displayName = getTriggerDisplayName(triggeredFrom, t)
|
||||
const icon = getTriggerIcon(triggeredFrom)
|
||||
const displayName = getTriggerDisplayName(triggeredFrom, t, triggerMetadata)
|
||||
const icon = getTriggerIcon(triggeredFrom, triggerMetadata, theme)
|
||||
|
||||
return (
|
||||
<div className={`flex items-center gap-1.5 ${className}`}>
|
||||
|
|
|
|||
|
|
@ -229,12 +229,38 @@ export type AnnotationsCountResponse = {
|
|||
count: number
|
||||
}
|
||||
|
||||
export enum WorkflowRunTriggeredFrom {
|
||||
DEBUGGING = 'debugging',
|
||||
APP_RUN = 'app-run',
|
||||
RAG_PIPELINE_RUN = 'rag-pipeline-run',
|
||||
RAG_PIPELINE_DEBUGGING = 'rag-pipeline-debugging',
|
||||
WEBHOOK = 'webhook',
|
||||
SCHEDULE = 'schedule',
|
||||
PLUGIN = 'plugin',
|
||||
}
|
||||
|
||||
export type TriggerMetadata = {
|
||||
type?: string
|
||||
endpoint_id?: string
|
||||
plugin_unique_identifier?: string
|
||||
provider_id?: string
|
||||
event_name?: string
|
||||
icon_filename?: string
|
||||
icon_dark_filename?: string
|
||||
icon?: string | null
|
||||
icon_dark?: string | null
|
||||
}
|
||||
|
||||
export type WorkflowLogDetails = {
|
||||
trigger_metadata?: TriggerMetadata
|
||||
}
|
||||
|
||||
export type WorkflowRunDetail = {
|
||||
id: string
|
||||
version: string
|
||||
status: 'running' | 'succeeded' | 'failed' | 'stopped'
|
||||
error?: string
|
||||
triggered_from?: string
|
||||
triggered_from?: WorkflowRunTriggeredFrom
|
||||
elapsed_time: number
|
||||
total_tokens: number
|
||||
total_price: number
|
||||
|
|
@ -256,6 +282,7 @@ export type EndUserInfo = {
|
|||
export type WorkflowAppLogDetail = {
|
||||
id: string
|
||||
workflow_run: WorkflowRunDetail
|
||||
details?: WorkflowLogDetails
|
||||
created_from: 'service-api' | 'web-app' | 'explore'
|
||||
created_by_role: 'account' | 'end_user'
|
||||
created_by_account?: AccountInfo
|
||||
|
|
|
|||
Loading…
Reference in New Issue