rename test job loader

This commit is contained in:
Ruben Fiszel
2025-07-14 17:32:19 +00:00
parent 904e07baf3
commit d031db48e9
15 changed files with 78 additions and 82 deletions
+1 -1
View File
@@ -5845,7 +5845,7 @@ fn get_job_update_sse_stream(
let mut i = 0;
loop {
i += 1;
let ms_duration = if i > 10 { 1000 } else if i > 50 { 5000 } else { 100 };
let ms_duration = if i > 10 { 500 } else if i > 100 { 3000 } else { 100 };
tokio::time::sleep(std::time::Duration::from_millis(ms_duration)).await;
match get_job_update_data(
+6 -6
View File
@@ -180,10 +180,10 @@
"types": "./package/components/scriptBuilder.d.ts",
"default": "./package/components/scriptBuilder.js"
},
"./components/TestJobLoader.svelte": {
"types": "./package/components/TestJobLoader.svelte.d.ts",
"svelte": "./package/components/TestJobLoader.svelte",
"default": "./package/components/TestJobLoader.svelte"
"./components/JobLoader.svelte": {
"types": "./package/components/JobLoader.svelte.d.ts",
"svelte": "./package/components/JobLoader.svelte",
"default": "./package/components/JobLoader.svelte"
},
"./components/common/kbd/Kbd.svelte": {
"types": "./package/components/common/kbd/Kbd.svelte.d.ts",
@@ -404,8 +404,8 @@
"components/IconedResourceType.svelte": [
"./package/components/IconedResourceType.svelte.d.ts"
],
"components/TestJobLoader.svelte": [
"./package/components/TestJobLoader.svelte.d.ts"
"components/JobLoader.svelte": [
"./package/components/JobLoader.svelte.d.ts"
],
"components/SchemaForm.svelte": [
"./package/components/SchemaForm.svelte.d.ts"
+8 -8
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import SchemaForm from '$lib/components/SchemaForm.svelte'
import TestJobLoader from '$lib/components/TestJobLoader.svelte'
import JobLoader from '$lib/components/JobLoader.svelte'
import { Button } from '$lib/components/common'
import { WindmillIcon } from '$lib/components/icons'
import LogPanel from '$lib/components/scriptEditor/LogPanel.svelte'
@@ -98,7 +98,7 @@
darkModeToggle?.toggle()
}
let testJobLoader: TestJobLoader | undefined = $state()
let jobLoader: JobLoader | undefined = $state()
let socket: WebSocket | undefined = undefined
// Test args input
@@ -160,7 +160,7 @@
}
} else if (event.data.type == 'testPreviewBundle') {
if (event.data.id == lastCommandId && currentScript) {
testJobLoader?.runPreview(
jobLoader?.runPreview(
currentScript.path,
event.data.file,
currentScript.language,
@@ -221,7 +221,7 @@
})
async function testBundle(file: string, isTar: boolean) {
testJobLoader?.abstractRun(async () => {
jobLoader?.abstractRun(async () => {
try {
const form = new FormData()
form.append(
@@ -338,7 +338,7 @@
)
} else {
//@ts-ignore
testJobLoader.runPreview(
jobLoader.runPreview(
currentScript.path,
currentScript.content,
currentScript.language,
@@ -637,10 +637,10 @@
<svelte:window onkeydown={onKeyDown} />
<TestJobLoader
<JobLoader
noCode={true}
on:done={loadPastTests}
bind:this={testJobLoader}
bind:this={jobLoader}
bind:isLoading={testIsLoading}
bind:job={testJob}
/>
@@ -704,7 +704,7 @@
{/if}
<div class="flex justify-center pt-1">
{#if testIsLoading}
<Button on:click={testJobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
<Button on:click={jobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
<WindmillIcon
white={true}
class="mr-2 text-white"
@@ -214,7 +214,6 @@
// Try SSE first, fall back to polling if needed
const isCompleted = await loadTestJobWithSSE(testId)
console.log('isCompleted', isCompleted)
if (!isCompleted && !currentEventSource) {
// If SSE didn't start (job might not be running yet), use polling
setTimeout(() => {
@@ -4,7 +4,7 @@
import { getScriptByPath } from '$lib/scripts'
import { getContext } from 'svelte'
import type { FlowEditorContext } from './flows/types'
import TestJobLoader from './TestJobLoader.svelte'
import JobLoader from './JobLoader.svelte'
import { getStepHistoryLoaderContext } from './stepHistoryLoader.svelte'
interface Props {
@@ -26,7 +26,7 @@
const { flowStore, flowStateStore, pathStore, testSteps, previewArgs, modulesTestStates } =
getContext<FlowEditorContext>('FlowEditorContext')
let testJobLoader: TestJobLoader | undefined = $state(undefined)
let jobLoader: JobLoader | undefined = $state(undefined)
let jobProgressReset: () => void = () => {}
let stepHistoryLoader = getStepHistoryLoaderContext()
@@ -45,7 +45,7 @@
if (modulesTestStates.states[mod.id]) {
modulesTestStates.states[mod.id].cancel = async () => {
await testJobLoader?.cancelJob()
await jobLoader?.cancelJob()
modulesTestStates.states[mod.id].testJob = undefined
}
modulesTestStates.runTestCb?.(mod.id)
@@ -54,7 +54,7 @@
const val = mod.value
// let jobId: string | undefined = undefined
if (val.type == 'rawscript') {
await testJobLoader?.runPreview(
await jobLoader?.runPreview(
val.path ?? ($pathStore ?? '') + '/' + mod.id,
val.content,
val.language,
@@ -65,7 +65,7 @@
const script = val.hash
? await ScriptService.getScriptByHash({ workspace: $workspaceStore!, hash: val.hash })
: await getScriptByPath(val.path)
await testJobLoader?.runPreview(
await jobLoader?.runPreview(
val.path,
script.content,
script.language,
@@ -75,7 +75,7 @@
val.hash ?? script.hash
)
} else if (val.type == 'flow') {
await testJobLoader?.runFlowByPath(val.path, args)
await jobLoader?.runFlowByPath(val.path, args)
} else {
throw Error('Not supported module type')
}
@@ -116,12 +116,12 @@
}
</script>
<TestJobLoader
<JobLoader
noCode={true}
toastError={noEditor}
on:done={() => jobDone()}
bind:scriptProgress
bind:this={testJobLoader}
bind:this={jobLoader}
bind:isLoading={
() => modulesTestStates.states[mod.id]?.loading ?? false,
(v) => {
@@ -18,7 +18,7 @@
import SchemaForm from './SchemaForm.svelte'
import LogPanel from './scriptEditor/LogPanel.svelte'
import EditorBar, { EDITOR_BAR_WIDTH_THRESHOLD } from './EditorBar.svelte'
import TestJobLoader from './TestJobLoader.svelte'
import JobLoader from './JobLoader.svelte'
import JobProgressBar from '$lib/components/jobs/JobProgressBar.svelte'
import { createEventDispatcher, onDestroy, onMount, untrack } from 'svelte'
import { Button } from './common'
@@ -172,7 +172,7 @@
let width = $state(1200)
let testJobLoader: TestJobLoader | undefined = $state(undefined)
let jobLoader: JobLoader | undefined = $state(undefined)
let isValid: boolean = $state(true)
let scriptProgress = $state(undefined)
@@ -217,7 +217,7 @@
// Not defined if JobProgressBar not loaded
if (jobProgressReset) jobProgressReset()
//@ts-ignore
let job = await testJobLoader.runPreview(
let job = await jobLoader.runPreview(
path,
code,
lang,
@@ -444,11 +444,11 @@
})
</script>
<TestJobLoader
<JobLoader
noCode={true}
on:done={loadPastTests}
bind:scriptProgress
bind:this={testJobLoader}
bind:this={jobLoader}
bind:isLoading={testIsLoading}
bind:job={testJob}
/>
@@ -676,7 +676,7 @@
/>
</div>
{#if testIsLoading}
<Button on:click={testJobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
<Button on:click={jobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
<WindmillIcon
white={true}
class="mr-2 text-white"
@@ -9,7 +9,7 @@
type RichConfigurations
} from '../../types'
import { initCss } from '../../utils'
import TestJobLoader from '$lib/components/TestJobLoader.svelte'
import JobLoader from '$lib/components/JobLoader.svelte'
import type { Job } from '$lib/gen'
import { components } from '../../editor/component'
import ResolveConfig from '../helpers/ResolveConfig.svelte'
@@ -51,7 +51,7 @@
let css = $state(initCss($app.css?.jobiddisplaycomponent, customCss))
let testJobLoader: TestJobLoader | undefined = $state(undefined)
let jobLoader: JobLoader | undefined = $state(undefined)
let testIsLoading: boolean = $state(false)
let testJob: Job | undefined = $state(undefined)
@@ -61,7 +61,7 @@
outputs.loading.set(true)
const jobId = resolvedConfig?.['jobId']
if (jobId) {
testJobLoader?.watchJob(jobId)
jobLoader?.watchJob(jobId)
}
})
}
@@ -89,10 +89,10 @@
/>
{/each}
<TestJobLoader
<JobLoader
noCode={true}
workspaceOverride={workspace}
bind:this={testJobLoader}
bind:this={jobLoader}
bind:isLoading={testIsLoading}
bind:job={testJob}
on:done={(e) => {
@@ -5,7 +5,7 @@
import type { AppViewerContext, ComponentCustomCSS, RichConfigurations } from '../../types'
import { initCss } from '../../utils'
import LogViewer from '$lib/components/LogViewer.svelte'
import TestJobLoader from '$lib/components/TestJobLoader.svelte'
import JobLoader from '$lib/components/JobLoader.svelte'
import type { Job } from '$lib/gen'
import { components } from '../../editor/component'
import ResolveConfig from '../helpers/ResolveConfig.svelte'
@@ -50,7 +50,7 @@
let css = $state(initCss($app.css?.jobidlogcomponent, customCss))
let testJobLoader: TestJobLoader | undefined = $state(undefined)
let jobLoader: JobLoader | undefined = $state(undefined)
let testIsLoading: boolean = $state(false)
let testJob: Job | undefined = $state(undefined)
@@ -60,7 +60,7 @@
outputs.loading.set(true)
const jobId = resolvedConfig?.['jobId']
if (jobId) {
testJobLoader?.watchJob(jobId)
jobLoader?.watchJob(jobId)
}
})
}
@@ -86,10 +86,10 @@
/>
{/each}
<TestJobLoader
<JobLoader
noCode={true}
workspaceOverride={workspace}
bind:this={testJobLoader}
bind:this={jobLoader}
bind:isLoading={testIsLoading}
bind:job={testJob}
on:done={(e) => {
@@ -17,7 +17,7 @@
import AppTimeline from './AppTimeline.svelte'
import HighlightCode from '$lib/components/HighlightCode.svelte'
import TestJobLoader from '$lib/components/TestJobLoader.svelte'
import JobLoader from '$lib/components/JobLoader.svelte'
import type { Job } from '$lib/gen'
import type { JobById } from '../types'
import { createEventDispatcher, untrack } from 'svelte'
@@ -44,7 +44,7 @@
const dispatch = createEventDispatcher()
let testJobLoader: TestJobLoader | undefined = $state()
let jobLoader: JobLoader | undefined = $state()
let job: Job | undefined = $state(undefined)
let testIsLoading = $state(false)
@@ -53,7 +53,7 @@
$effect(() => {
selectedJobId &&
!selectedJobId?.includes('Frontend') &&
untrack(() => selectedJobId && testJobLoader?.watchJob(selectedJobId))
untrack(() => selectedJobId && jobLoader?.watchJob(selectedJobId))
})
$effect(() => {
@@ -63,7 +63,7 @@
})
</script>
<TestJobLoader noCode={true} bind:this={testJobLoader} bind:isLoading={testIsLoading} bind:job />
<JobLoader noCode={true} bind:this={jobLoader} bind:isLoading={testIsLoading} bind:job />
<Drawer bind:open size="900px">
<DrawerContent
@@ -180,7 +180,7 @@
<Button
color="red"
variant="border"
on:click={() => testJobLoader?.cancelJob()}
on:click={() => jobLoader?.cancelJob()}
>
<Loader2 size={14} class="animate-spin mr-2" />
@@ -1,7 +1,7 @@
<script lang="ts">
import { getContext, untrack } from 'svelte'
import type { AppEditorContext } from '../types'
import TestJobLoader from '$lib/components/TestJobLoader.svelte'
import JobLoader from '$lib/components/JobLoader.svelte'
import type { Job } from '$lib/gen'
import RunnableJobPanelInner from './RunnableJobPanelInner.svelte'
@@ -25,7 +25,7 @@
getContext<AppEditorContext>('AppEditorContext')
let testIsLoading = $state(false)
let testJobLoader: TestJobLoader | undefined = $state()
let jobLoader: JobLoader | undefined = $state()
function updateSelectedJob() {
const selectedComponent = $selectedComponentInEditor
@@ -40,7 +40,7 @@
testJob = undefined
}
jobToWatch = { componentId: selectedComponent, job: backendJob }
testJobLoader?.watchJob(backendJob)
jobLoader?.watchJob(backendJob)
} else {
testJob = undefined
jobToWatch = undefined
@@ -60,7 +60,7 @@
})
</script>
<TestJobLoader bind:this={testJobLoader} bind:isLoading={testIsLoading} bind:job={testJob} />
<JobLoader bind:this={jobLoader} bind:isLoading={testIsLoading} bind:job={testJob} />
{#if ($runnableJobEditorPanel.focused && $selectedComponentInEditor) || logDrawerOpen || resultDrawerOpen || !float}
{@const frontendJob = $runnableJobEditorPanel?.frontendJobs[$selectedComponentInEditor ?? '']}
@@ -6,7 +6,7 @@
import { onDestroy, tick } from 'svelte'
import { fade } from 'svelte/transition'
import { type Job } from '../../gen'
import TestJobLoader from '../TestJobLoader.svelte'
import JobLoader from '../JobLoader.svelte'
import DisplayResult from '../DisplayResult.svelte'
import JobArgs from '../JobArgs.svelte'
import { writable } from 'svelte/store'
@@ -29,7 +29,7 @@
let hovered = $state(false)
let timeout: NodeJS.Timeout | undefined
let result: any = $state()
let testJobLoader: TestJobLoader | undefined = $state()
let jobLoader: JobLoader | undefined = $state()
let loaded = false
let wrapper: HTMLElement | undefined = $state()
let popupOnTop = $state(true)
@@ -43,7 +43,7 @@
openStore.set(id)
if (!loaded) {
await tick()
testJobLoader?.watchJob(id)
jobLoader?.watchJob(id)
}
} else {
timeout && clearTimeout(timeout)
@@ -88,7 +88,7 @@
<svelte:window onkeydown={({ key }) => ['Escape', 'Esc'].includes(key) && close()} />
{#if hovered}
<TestJobLoader bind:job bind:this={testJobLoader} on:done={onDone} />
<JobLoader bind:job bind:this={jobLoader} on:done={onDone} />
{/if}
<!-- svelte-ignore a11y_no_static_element_interactions -->
@@ -11,7 +11,7 @@
import SplitPanesWrapper from '../splitPanes/SplitPanesWrapper.svelte'
import SchemaForm from '../SchemaForm.svelte'
import RunnableJobPanelInner from '../apps/editor/RunnableJobPanelInner.svelte'
import TestJobLoader from '../TestJobLoader.svelte'
import JobLoader from '../JobLoader.svelte'
import type { Job } from '$lib/gen'
interface Props {
@@ -52,7 +52,7 @@
return {}
}
let testJobLoader: TestJobLoader | undefined = $state()
let jobLoader: JobLoader | undefined = $state()
let testJob: Job | undefined = $state()
let testIsLoading = $state(false)
let scriptProgress = $state(0)
@@ -71,7 +71,7 @@
async function testPreview() {
selectedTab = 'test'
if (runnable?.type == 'runnableByName' && runnable.inlineScript?.language != 'frontend') {
await testJobLoader?.runPreview(
await jobLoader?.runPreview(
appPath + '/' + id,
runnable.inlineScript?.content ?? '',
runnable.inlineScript?.language,
@@ -79,11 +79,11 @@
undefined
)
} else if (runnable?.type == 'runnableByPath') {
if (testJobLoader && runnable?.type == 'runnableByPath') {
if (jobLoader && runnable?.type == 'runnableByPath') {
if (runnable.runType == 'flow') {
await testJobLoader.runFlowByPath(runnable.path, args)
await jobLoader.runFlowByPath(runnable.path, args)
} else if (runnable.runType == 'script' || runnable.runType == 'hubscript') {
await testJobLoader.runScriptByPath(runnable.path, args)
await jobLoader.runScriptByPath(runnable.path, args)
}
}
}
@@ -94,10 +94,10 @@
})
</script>
<TestJobLoader
<JobLoader
noCode={true}
bind:scriptProgress
bind:this={testJobLoader}
bind:this={jobLoader}
bind:isLoading={testIsLoading}
bind:job={testJob}
/>
@@ -118,8 +118,8 @@
isLoading={testIsLoading}
onRun={testPreview}
onCancel={async () => {
if (testJobLoader) {
await testJobLoader.cancelJob()
if (jobLoader) {
await jobLoader.cancelJob()
}
}}
on:delete
@@ -137,8 +137,8 @@
isLoading={testIsLoading}
onRun={testPreview}
onCancel={async () => {
if (testJobLoader) {
await testJobLoader.cancelJob()
if (jobLoader) {
await jobLoader.cancelJob()
}
}}
/>
@@ -1,7 +1,7 @@
<script lang="ts">
import { base } from '$lib/base'
import { ConcurrencyGroupsService, type Job, type WorkflowStatus } from '../../gen'
import TestJobLoader from '../TestJobLoader.svelte'
import JobLoader from '../JobLoader.svelte'
import DisplayResult from '../DisplayResult.svelte'
import JobArgs from '../JobArgs.svelte'
import LogViewer from '../LogViewer.svelte'
@@ -56,23 +56,23 @@
}
})
$effect(() => {
id && testJobLoader && untrack(() => testJobLoader?.watchJob(id))
id && jobLoader && untrack(() => jobLoader?.watchJob(id))
})
$effect(() => {
job?.logs == undefined && job && viewTab == 'logs' && untrack(() => testJobLoader?.getLogs())
job?.logs == undefined && job && viewTab == 'logs' && untrack(() => jobLoader?.getLogs())
})
$effect(() => {
job?.id && lastJobId !== job.id && untrack(() => job && getConcurrencyKey(job))
})
let testJobLoader: TestJobLoader | undefined = $state(undefined)
let jobLoader: JobLoader | undefined = $state(undefined)
</script>
<TestJobLoader
<JobLoader
lazyLogs
workspaceOverride={workspace}
bind:job={currentJob}
bind:this={testJobLoader}
bind:this={jobLoader}
on:done={onDone}
/>
@@ -60,7 +60,7 @@
} from '$lib/stores'
import FlowStatusViewer from '$lib/components/FlowStatusViewer.svelte'
import HighlightCode from '$lib/components/HighlightCode.svelte'
import TestJobLoader from '$lib/components/TestJobLoader.svelte'
import JobLoader from '$lib/components/JobLoader.svelte'
import LogViewer from '$lib/components/LogViewer.svelte'
import { ActionRow, Button, Skeleton, Tab, Alert, DrawerContent } from '$lib/components/common'
import Popover from '$lib/components/meltComponents/Popover.svelte'
@@ -108,7 +108,7 @@
let restartBranchNames: [number, string][] = []
let testIsLoading = $state(false)
let testJobLoader: TestJobLoader | undefined = $state(undefined)
let jobLoader: JobLoader | undefined = $state(undefined)
let persistentScriptDrawer: PersistentScriptDrawer | undefined = $state(undefined)
@@ -171,7 +171,7 @@
}
async function getJob() {
await testJobLoader?.watchJob($page.params.run)
await jobLoader?.watchJob($page.params.run)
initView()
}
@@ -355,7 +355,7 @@
job &&
viewTab == 'logs' &&
isNotFlow(job?.job_kind) &&
testJobLoader?.getLogs()
jobLoader?.getLogs()
})
$effect(() => {
job?.id && lastJobId !== job.id && untrack(() => getConcurrencyKey(job))
@@ -364,10 +364,7 @@
$workspaceStore && $page.params.run && untrack(() => onRunsPageChange())
})
$effect(() => {
$workspaceStore &&
$page.params.run &&
testJobLoader &&
untrack(() => onRunsPageChangeWithLoader())
$workspaceStore && $page.params.run && jobLoader && untrack(() => onRunsPageChangeWithLoader())
})
$effect(() => {
selectedJobStep !== undefined && untrack(() => onSelectedJobStepChange())
@@ -413,11 +410,11 @@
</Drawer>
{/if}
{#if !job || (job?.job_kind != 'flow' && job?.job_kind != 'flownode' && job?.job_kind != 'flowpreview')}
<TestJobLoader
<JobLoader
lazyLogs
bind:scriptProgress
on:done={() => job?.['result'] != undefined && (viewTab = 'result')}
bind:this={testJobLoader}
bind:this={jobLoader}
bind:isLoading={testIsLoading}
bind:job
bind:jobUpdateLastFetch
+1 -1
View File
@@ -191,7 +191,7 @@
return
}
//@ts-ignore
testJobLoader.runPreview(currentScript.path, currentScript.content, args, undefined)
jobLoader.runPreview(currentScript.path, currentScript.content, args, undefined)
}
function onKeyDown(event: KeyboardEvent) {