diff --git a/backend/windmill-queue/src/jobs.rs b/backend/windmill-queue/src/jobs.rs index 1c36b40432..ecac35800c 100644 --- a/backend/windmill-queue/src/jobs.rs +++ b/backend/windmill-queue/src/jobs.rs @@ -524,7 +524,14 @@ pub async fn add_completed_job< ); } - if let Err(e) = send_error_to_workspace_handler(rsmq.clone(), &queued_job, canceled_by.is_some(), db, result).await + if let Err(e) = send_error_to_workspace_handler( + rsmq.clone(), + &queued_job, + canceled_by.is_some(), + db, + result, + ) + .await { tracing::error!( "Could not run workspace error handler for job {}: {}", @@ -2623,7 +2630,7 @@ pub async fn push<'c, T: Serialize + Send + Sync, R: rsmq_async::RsmqConnection ) .fetch_one(&mut tx) .await - .map_err(|e| Error::InternalErr(format!("Could not insert into queue {job_id}: {e}")))?; + .map_err(|e| Error::InternalErr(format!("Could not insert into queue {job_id} with tag {tag}, schedule_path {schedule_path:?}, script_path: {script_path:?}, email {email}, workspace_id {workspace_id}: {e}")))?; // TODO: technically the job isn't queued yet, as the transaction can be rolled back. Should be solved when moving these metrics to the queue abstraction. if METRICS_ENABLED.load(std::sync::atomic::Ordering::Relaxed) { diff --git a/frontend/src/lib/cloud.ts b/frontend/src/lib/cloud.ts index 48c4466642..cc6319127a 100644 --- a/frontend/src/lib/cloud.ts +++ b/frontend/src/lib/cloud.ts @@ -1,27 +1,5 @@ import { BROWSER } from 'esm-env' -import { premiumStore, userStore, workspaceStore } from './stores' -import { getUserExt } from './user' -import { WorkspaceService } from './gen' export function isCloudHosted(): boolean { return BROWSER && window.location.hostname == 'app.windmill.dev' } - -if (BROWSER) { - workspaceStore.subscribe(async (workspace) => { - if (workspace) { - try { - localStorage.setItem('workspace', String(workspace)) - } catch (e) { - console.error('Could not persist workspace to local storage', e) - } - const user = await getUserExt(workspace) - userStore.set(user) - if (isCloudHosted() && user?.is_admin) { - premiumStore.set(await WorkspaceService.getPremiumInfo({ workspace })) - } - } else { - userStore.set(undefined) - } - }) -} diff --git a/frontend/src/lib/components/Dev.svelte b/frontend/src/lib/components/Dev.svelte new file mode 100644 index 0000000000..5e50ed6b10 --- /dev/null +++ b/frontend/src/lib/components/Dev.svelte @@ -0,0 +1,426 @@ + + + + + + +
+ {#if mode == 'script'} +
+
+ +
+
+ {currentScript?.path ?? 'Not editing a script'} + {currentScript?.language ?? ''} +
+
+ {#if $userStore != undefined} + As {$userStore?.username} in {$workspaceStore} + {:else} + Unable to login + {/if} +
+ {#if !validCode} +
Invalid code
+ {/if} +
+ {#if testIsLoading} + + {:else} + + {/if} +
+ + +
+
+ +
+
+
+ + + +
+
+ {:else} + +
+
+
+ + {#if $userStore} + As {$userStore?.username} in {$workspaceStore} + {:else} + Unable to login on {$workspaceStore} + {/if} +
+ +
+ +
+ + + {#if $flowStore?.value?.modules} + + {:else} +
Missing flow modules
+ {/if} +
+ + + +
+
+
+ {/if} +
diff --git a/frontend/src/lib/components/FlowPreviewContent.svelte b/frontend/src/lib/components/FlowPreviewContent.svelte index 86c5c788fe..1bd657d413 100644 --- a/frontend/src/lib/components/FlowPreviewContent.svelte +++ b/frontend/src/lib/components/FlowPreviewContent.svelte @@ -40,6 +40,10 @@ let isRunning: boolean = false let jobProgressReset: () => void + export function test() { + runPreview($previewArgs, undefined) + } + const { selectedId, previewArgs, flowStateStore, flowStore, pathStore, initialPath } = getContext('FlowEditorContext') const dispatch = createEventDispatcher() diff --git a/frontend/src/lib/components/SchemaEditor.svelte b/frontend/src/lib/components/SchemaEditor.svelte index 1626cc88b5..523da9613b 100644 --- a/frontend/src/lib/components/SchemaEditor.svelte +++ b/frontend/src/lib/components/SchemaEditor.svelte @@ -97,14 +97,21 @@ // If editing the arg's name, oldName containing the old argument name must be provided argError = '' modalProperty.name = modalProperty.name.trim() + if (modalProperty.name.length === 0) { argError = 'Arguments need to have a name' } else if ( - Object.keys(schema.properties).includes(modalProperty.name) && + Object.keys(schema.properties ?? {}).includes(modalProperty.name) && (!editing || (editing && oldArgName && oldArgName !== modalProperty.name)) ) { argError = 'There is already an argument with this name' } else { + if (!schema.properties) { + schema.properties = {} + } + if (!schema.required) { + schema.required = [] + } schema.properties[modalProperty.name] = modalToSchema(modalProperty) if (modalProperty.required) { if (!schema.required.includes(modalProperty.name)) { @@ -126,10 +133,12 @@ schemaModal.closeDrawer() } + schema = schema syncOrders() schemaString = JSON.stringify(schema, null, '\t') jsonEditor?.setCode(schemaString) + sendUserToast('FOO') dispatch('change', schema) } diff --git a/frontend/src/lib/components/flows/header/FlowPreviewButtons.svelte b/frontend/src/lib/components/flows/header/FlowPreviewButtons.svelte index f10557ce4f..48cc09f7a2 100644 --- a/frontend/src/lib/components/flows/header/FlowPreviewButtons.svelte +++ b/frontend/src/lib/components/flows/header/FlowPreviewButtons.svelte @@ -13,6 +13,15 @@ let previewOpen = false let previewMode: 'upTo' | 'whole' = 'whole' + export async function openPreview() { + if (!previewOpen) { + previewOpen = true + } else { + flowPreviewContent?.test() + } + } + + let flowPreviewContent: FlowPreviewContent let jobId: string | undefined = undefined let job: Job | undefined = undefined @@ -73,6 +82,7 @@ { menuOpen = false }) diff --git a/frontend/src/routes/scripts/p/dev/+page.js b/frontend/src/routes/dev/+page.js similarity index 100% rename from frontend/src/routes/scripts/p/dev/+page.js rename to frontend/src/routes/dev/+page.js diff --git a/frontend/src/routes/dev/+page.svelte b/frontend/src/routes/dev/+page.svelte new file mode 100644 index 0000000000..e390d8b933 --- /dev/null +++ b/frontend/src/routes/dev/+page.svelte @@ -0,0 +1,5 @@ + + + diff --git a/frontend/src/routes/scripts/dev/+page.svelte b/frontend/src/routes/scripts/dev/+page.svelte index 1890550b0f..e390d8b933 100644 --- a/frontend/src/routes/scripts/dev/+page.svelte +++ b/frontend/src/routes/scripts/dev/+page.svelte @@ -1,273 +1,5 @@ - - - - -
-
-
- -
-
- {currentScript?.path ?? 'Not editing a script'} - {currentScript?.language ?? ''} -
-
- {#if $userStore} - As {$userStore?.username} in {$workspaceStore} - {:else} - Unable to login - {/if} -
- - {#if !validCode} -
Invalid code
- {/if} -
- {#if testIsLoading} - - {:else} - - {/if} -
- - -
-
- -
-
-
- - - -
-
-
+ diff --git a/frontend/src/routes/scripts/p/dev/+page.svelte b/frontend/src/routes/scripts/p/dev/+page.svelte deleted file mode 100644 index 313dfabd40..0000000000 --- a/frontend/src/routes/scripts/p/dev/+page.svelte +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - -
-
-
- -
-
- {currentScript?.path ?? 'Not editing a script'} - {currentScript?.language ?? ''} -
- - {#if !validCode} -
Invalid code
- {/if} -
- {#if testIsLoading} - - {:else} - - {/if} -
- - -
-
- -
-
-
- - - -
-
-