{#if notAnonynmous} As a non logged in user, you can only see jobs ran by anonymous users like you {:else if job}
{#if isListJob} {@const sliceFrom = $localDurationStatuses[flowJobIds?.moduleId ?? '']?.iteration_from ?? 0} {@const lenToAdd = Math.min(20, sliceFrom)} {#if (flowJobIds?.flowJobs.length ?? 0) > 20 && lenToAdd > 0} {@const allToAdd = (flowJobIds?.length ?? 0) - sliceFrom}

For performance reasons, only the last 20 items are shown by default {#if allToAdd > 0 && allToAdd > lenToAdd} {sliceFrom} {/if}

{/if} {#if render}
{/if} {:else if render}
{#if !job}
{:else if `result` in job} {#if !hideFlowResult}
{/if} {:else if job.flow_status?.modules?.[job?.flow_status?.step]?.type === 'WaitingForEvents'} {:else if $suspendStatus && Object.keys($suspendStatus).length > 0}
{#each Object.values($suspendStatus) as suspendCount (suspendCount.job.id)}
Flow suspended, waiting for {suspendCount.nb} events
{/each}
{:else if job.logs}
{job.logs}
{:else if innerModules?.length > 0}
{#each innerModules as mod, i (mod.id)} {#if mod.type == 'InProgress'} {@const rawMod = job.raw_flow?.modules[i]}
{mod.id} {#if !emptyString(rawMod?.summary)} {rawMod?.summary ?? ''} {:else if rawMod?.value.type == 'script'} {rawMod.value.path ?? ''} {:else if rawMod?.value.type} {rawMod?.value.type} {/if}
{/if} {/each}
{/if}
{/if} {#if render} {#if innerModules.length > 0 && !isListJob} Graph Details {/if} {/if}
{#if isListJob} {@const sliceFrom = $localDurationStatuses[flowJobIds?.moduleId ?? '']?.iteration_from ?? 0}

Subflows ({flowJobIds?.flowJobs.length})

{#each flowJobIds?.flowJobs ?? [] as loopJobId, j (loopJobId)} {#if render && j + subflowsSize + 1 == (flowJobIds?.flowJobs.length ?? 0)} {/if} {#if render && j + subflowsSize + 1 > (flowJobIds?.flowJobs.length ?? 0)} {/if} {#if j >= sliceFrom || forloop_selected == loopJobId} {@const forloopIsSelected = forloop_selected == loopJobId || (innerModule?.type != 'forloopflow' && innerModule?.type != 'whileloopflow')}
20)} {workspaceId} jobId={loopJobId} on:jobsLoaded={(e) => { let { job, force } = e.detail storedListJobs[j] = job innerJobLoaded(job, j, false, force) }} />
{/if} {/each}
{:else if innerModules.length > 0 && (job.raw_flow?.modules.length ?? 0) > 0} {@const hasPreprocessor = innerModules[0]?.id == 'preprocessor' ? 1 : 0} {:else}
Empty flow
{/if}
{#if render} {#if job.raw_flow && !isListJob}
{#each Object.values($retryStatus) as count} {#if count} Retry in progress, # of failed attempts: {count} {/if} {/each} {#each Object.values($suspendStatus) as count} {#if count.nb} Flow suspended, waiting for {count.nb} events {/if} {/each}
{ if (rightColumnSelect != 'node_definition') { rightColumnSelect = 'node_status' } if (typeof e.detail == 'string') { if (e.detail == 'Input') { selectedNode = 'start' stepDetail = undefined } else if (e.detail == 'Result') { selectedNode = 'end' stepDetail = 'end' } else { const mod = dfs(job?.raw_flow?.modules ?? [], (m) => m).find( (m) => m?.id === e?.detail ) stepDetail = mod selectedNode = e?.detail } } else { stepDetail = e.detail selectedNode = e.detail.id } }} on:selectedIteration={async (e) => { let detail = e.detail if (detail.manuallySet) { let rootJobId = detail.id await tick() let previousId = $localModuleStates[detail.moduleId]?.selectedForloop if (previousId) { await globalRefreshes?.[detail.moduleId]?.(true, previousId) } $localModuleStates[detail.moduleId] = { ...$localModuleStates[detail.moduleId], selectedForloop: detail.id, selectedForloopIndex: detail.index, selectedForLoopSetManually: true } await tick() await globalRefreshes?.[detail.moduleId]?.(false, rootJobId) } else { $localModuleStates[detail.moduleId] = { ...$localModuleStates[detail.moduleId], selectedForLoopSetManually: false } } }} earlyStop={job.raw_flow?.skip_expr !== undefined} cache={job.raw_flow?.cache_ttl !== undefined} modules={job.raw_flow?.modules ?? []} failureModule={job.raw_flow?.failure_module} preprocessorModule={job.raw_flow?.preprocessor_module} allowSimplifiedPoll={false} {workspace} />
{#if !hideTimeline} Timeline {/if} Node status {#if !hideNodeDefinition} Node definition {/if} {#if Object.keys(job?.flow_status?.user_states ?? {}).length > 0} User States {/if} {#if rightColumnSelect == 'timeline'} {:else if rightColumnSelect == 'node_status'}
{#if selectedNode} {@const node = $localModuleStates[selectedNode]} {#if selectedNode == 'end'} {:else if selectedNode == 'start'} {#if job.args}
{:else}

No arguments

{/if} {:else if node} {#if node.flow_jobs_results} Result of step as collection of all subflows
Selected subflow {/if}
{#if node.duration_ms} {msToSec(node.duration_ms)} s {/if} {#if node.job_id} {/if}
{#if !node.isListJob}
{/if} {:else}

The execution of this node has no information attached to it. The job likely did not run yet

{/if} {:else}

Select a node to see its details here

{/if}
{:else if rightColumnSelect == 'node_definition'} {:else if rightColumnSelect == 'user_states'}
{/if}
{/if} {/if} {:else} {/if}