From da11bae67cc2db0dde004facd060a662e6eaa98d Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 8 Jul 2022 14:11:18 +0200 Subject: [PATCH] fix: do not run cleanup and build parallel fix: UI error toasts --- apps/api/src/index.ts | 21 ++++++++++++------- apps/api/src/jobs/deployApplication.ts | 10 ++++++--- apps/api/src/lib/scheduler.ts | 18 +++++++++++----- apps/ui/src/lib/common.ts | 4 ++++ .../routes/applications/[id]/_Storage.svelte | 4 ++-- .../routes/applications/[id]/__layout.svelte | 3 ++- .../configuration/_GithubRepositories.svelte | 4 ++-- .../configuration/_GitlabRepositories.svelte | 2 +- .../[id]/configuration/destination.svelte | 2 +- .../src/routes/applications/[id]/index.svelte | 2 +- .../applications/[id]/logs/build.svelte | 2 +- .../src/routes/databases/[id]/__layout.svelte | 6 +++--- .../destinations/[id]/_LocalDocker.svelte | 8 +++---- .../destinations/[id]/_RemoteDocker.svelte | 8 +++---- .../services/[id]/_Services/_Wordpress.svelte | 2 +- .../src/routes/services/[id]/_Storage.svelte | 4 ++-- apps/ui/src/routes/settings/index.svelte | 6 +++--- .../ui/src/routes/sources/[id]/_Gitlab.svelte | 2 +- 18 files changed, 66 insertions(+), 42 deletions(-) diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 22d9fc81a..073732c5f 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -106,23 +106,30 @@ fastify.listen({ port, host }, async (err: any, address: any) => { await scheduler.start('cleanupStorage'); await scheduler.start('checkProxies') - // Check if no build is running, try to autoupdate. + // Check if no build is running + + // Check for update setInterval(async () => { const { isAutoUpdateEnabled } = await prisma.setting.findFirst(); if (isAutoUpdateEnabled) { if (scheduler.workers.has('deployApplication')) { - scheduler.workers.get('deployApplication').postMessage("status"); + scheduler.workers.get('deployApplication').postMessage("status:autoUpdater"); } } - }, 30000 * 10) + }, 60000 * 15) + + // Cleanup storage + setInterval(async () => { + if (scheduler.workers.has('deployApplication')) { + scheduler.workers.get('deployApplication').postMessage("status:cleanupStorage"); + } + }, 60000 * 10) scheduler.on('worker deleted', async (name) => { - if (name === 'autoUpdater') { - await scheduler.start('deployApplication'); + if (name === 'autoUpdater' || name === 'cleanupStorage') { + if (!scheduler.workers.has('deployApplication')) await scheduler.start('deployApplication'); } - }); - }); async function initServer() { diff --git a/apps/api/src/jobs/deployApplication.ts b/apps/api/src/jobs/deployApplication.ts index 10703a105..c975de41f 100644 --- a/apps/api/src/jobs/deployApplication.ts +++ b/apps/api/src/jobs/deployApplication.ts @@ -4,7 +4,7 @@ import fs from 'fs/promises'; import yaml from 'js-yaml'; import { copyBaseConfigurationFiles, makeLabelForStandaloneApplication, saveBuildLog, setDefaultConfiguration } from '../lib/buildPacks/common'; -import { asyncExecShell, createDirectories, decrypt, getDomain, prisma } from '../lib/common'; +import { asyncExecShell, createDirectories, decrypt, getDomain, prisma } from '../lib/common'; import { dockerInstance, getEngine } from '../lib/docker'; import * as importers from '../lib/importers'; import * as buildpacks from '../lib/buildPacks'; @@ -21,8 +21,12 @@ import * as buildpacks from '../lib/buildPacks'; parentPort.postMessage('cancelled'); return; } - if (message === 'status') { - parentPort.postMessage({ size: queue.size, pending: queue.pending }); + if (message === 'status:autoUpdater') { + parentPort.postMessage({ size: queue.size, pending: queue.pending, caller: 'autoUpdater' }); + return; + } + if (message === 'status:cleanupStorage') { + parentPort.postMessage({ size: queue.size, pending: queue.pending, caller: 'cleanupStorage' }); return; } diff --git a/apps/api/src/lib/scheduler.ts b/apps/api/src/lib/scheduler.ts index 929016570..c32226bc9 100644 --- a/apps/api/src/lib/scheduler.ts +++ b/apps/api/src/lib/scheduler.ts @@ -11,11 +11,20 @@ const options: any = { logger: false, workerMessageHandler: async ({ name, message }) => { if (name === 'deployApplication') { - if (message.pending === 0) { - if (!scheduler.workers.has('autoUpdater')) { - await scheduler.stop('deployApplication'); - await scheduler.run('autoUpdater') + if (message.pending === 0 && message.size === 0) { + if (message.caller === 'autoUpdater') { + if (!scheduler.workers.has('autoUpdater')) { + await scheduler.stop('deployApplication'); + await scheduler.run('autoUpdater') + } } + if (message.caller === 'cleanupStorage') { + if (!scheduler.workers.has('cleanupStorage')) { + await scheduler.stop('deployApplication'); + await scheduler.run('cleanupStorage') + } + } + } } }, @@ -25,7 +34,6 @@ const options: any = { }, { name: 'cleanupStorage', - interval: '10m' }, { name: 'checkProxies', diff --git a/apps/ui/src/lib/common.ts b/apps/ui/src/lib/common.ts index 288dab986..4b0ae7fb4 100644 --- a/apps/ui/src/lib/common.ts +++ b/apps/ui/src/lib/common.ts @@ -4,6 +4,10 @@ export const asyncSleep = (delay: number) => export function errorNotification(error: any): void { if (error.message) { + if (error.message === 'Cannot read properties of undefined (reading \'postMessage\')') { + toast.push('Currently there is background process in progress. Please try again later.'); + return; + } toast.push(error.message); } else { toast.push('Ooops, something is not okay, are you okay?'); diff --git a/apps/ui/src/routes/applications/[id]/_Storage.svelte b/apps/ui/src/routes/applications/[id]/_Storage.svelte index 868f95e54..803b1ed9d 100644 --- a/apps/ui/src/routes/applications/[id]/_Storage.svelte +++ b/apps/ui/src/routes/applications/[id]/_Storage.svelte @@ -32,7 +32,7 @@ } if (newStorage) toast.push($t('application.storage.storage_saved')); else toast.push($t('application.storage.storage_updated')); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -41,7 +41,7 @@ await del(`/applications/${id}/storages`, { path: storage.path }); dispatch('refresh'); toast.push($t('application.storage.storage_deleted')); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } diff --git a/apps/ui/src/routes/applications/[id]/__layout.svelte b/apps/ui/src/routes/applications/[id]/__layout.svelte index a14815450..d88e445f9 100644 --- a/apps/ui/src/routes/applications/[id]/__layout.svelte +++ b/apps/ui/src/routes/applications/[id]/__layout.svelte @@ -110,7 +110,7 @@ loading = true; await post(`/applications/${id}/stop`, {}); return window.location.reload(); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -118,6 +118,7 @@ if ($status.application.loading) return; $status.application.loading = true; const data = await get(`/applications/${id}`); + isQueueActive = data.isQueueActive; $status.application.isRunning = data.isRunning; $status.application.isExited = data.isExited; $status.application.loading = false; diff --git a/apps/ui/src/routes/applications/[id]/configuration/_GithubRepositories.svelte b/apps/ui/src/routes/applications/[id]/configuration/_GithubRepositories.svelte index b0efbfac2..cff6769d0 100644 --- a/apps/ui/src/routes/applications/[id]/configuration/_GithubRepositories.svelte +++ b/apps/ui/src/routes/applications/[id]/configuration/_GithubRepositories.svelte @@ -109,7 +109,7 @@ return true; } showSave = true; - } catch ({ error }) { + } catch (error) { showSave = false; return errorNotification(error); } @@ -138,7 +138,7 @@ return await goto(`${to}?from=${from}`); } return await goto(from || `/applications/${id}/configuration/destination`); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } diff --git a/apps/ui/src/routes/applications/[id]/configuration/_GitlabRepositories.svelte b/apps/ui/src/routes/applications/[id]/configuration/_GitlabRepositories.svelte index 453a86676..af9f3adf8 100644 --- a/apps/ui/src/routes/applications/[id]/configuration/_GitlabRepositories.svelte +++ b/apps/ui/src/routes/applications/[id]/configuration/_GitlabRepositories.svelte @@ -203,7 +203,7 @@ return true; } showSave = true; - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } diff --git a/apps/ui/src/routes/applications/[id]/configuration/destination.svelte b/apps/ui/src/routes/applications/[id]/configuration/destination.svelte index 3e14a4c1e..b7d9eea99 100644 --- a/apps/ui/src/routes/applications/[id]/configuration/destination.svelte +++ b/apps/ui/src/routes/applications/[id]/configuration/destination.svelte @@ -51,7 +51,7 @@ try { await post(`/applications/${id}/configuration/destination`, { destinationId }); return await goto(from || `/applications/${id}/configuration/buildpack`); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } diff --git a/apps/ui/src/routes/applications/[id]/index.svelte b/apps/ui/src/routes/applications/[id]/index.svelte index fdc4e803f..a00f404eb 100644 --- a/apps/ui/src/routes/applications/[id]/index.svelte +++ b/apps/ui/src/routes/applications/[id]/index.svelte @@ -199,7 +199,7 @@ toast.push('DNS configuration is valid.'); isWWW ? (isWWWDomainOK = true) : (isNonWWWDomainOK = true); return true; - } catch ({ error }) { + } catch (error) { errorNotification(error); isWWW ? (isWWWDomainOK = false) : (isNonWWWDomainOK = false); return false; diff --git a/apps/ui/src/routes/applications/[id]/logs/build.svelte b/apps/ui/src/routes/applications/[id]/logs/build.svelte index dd6b35eab..17bb3f2dc 100644 --- a/apps/ui/src/routes/applications/[id]/logs/build.svelte +++ b/apps/ui/src/routes/applications/[id]/logs/build.svelte @@ -68,7 +68,7 @@ const data = await get(`/applications/${id}/logs/build?skip=${skip}`); builds = builds.concat(data.builds); return; - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } else { diff --git a/apps/ui/src/routes/databases/[id]/__layout.svelte b/apps/ui/src/routes/databases/[id]/__layout.svelte index 01729341b..cfd575583 100644 --- a/apps/ui/src/routes/databases/[id]/__layout.svelte +++ b/apps/ui/src/routes/databases/[id]/__layout.svelte @@ -73,7 +73,7 @@ try { await del(`/databases/${database.id}`, { id: database.id }); return await goto('/databases'); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } finally { loading = false; @@ -87,7 +87,7 @@ try { await post(`/databases/${database.id}/stop`, {}); return window.location.reload(); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -97,7 +97,7 @@ try { await post(`/databases/${database.id}/start`, {}); return window.location.reload(); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } diff --git a/apps/ui/src/routes/destinations/[id]/_LocalDocker.svelte b/apps/ui/src/routes/destinations/[id]/_LocalDocker.svelte index e034b736e..7da9ffd88 100644 --- a/apps/ui/src/routes/destinations/[id]/_LocalDocker.svelte +++ b/apps/ui/src/routes/destinations/[id]/_LocalDocker.svelte @@ -77,7 +77,7 @@ } else { await startProxy(); } - } catch ({ error }) { + } catch (error) { return errorNotification(error); } finally { loadingProxy = false; @@ -88,7 +88,7 @@ try { await post(`/destinations/${id}/stop`, { engine: destination.engine }); return toast.push($t('destination.coolify_proxy_stopped')); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -96,7 +96,7 @@ try { await post(`/destinations/${id}/start`, { engine: destination.engine }); return toast.push($t('destination.coolify_proxy_started')); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -110,7 +110,7 @@ engine: destination.engine, fqdn: settings.fqdn }); - } catch ({ error }) { + } catch (error) { setTimeout(() => { window.location.reload(); }, 5000); diff --git a/apps/ui/src/routes/destinations/[id]/_RemoteDocker.svelte b/apps/ui/src/routes/destinations/[id]/_RemoteDocker.svelte index 1e23818cd..4a0997280 100644 --- a/apps/ui/src/routes/destinations/[id]/_RemoteDocker.svelte +++ b/apps/ui/src/routes/destinations/[id]/_RemoteDocker.svelte @@ -82,7 +82,7 @@ import { appSession } from '$lib/store'; } else { await startProxy(); } - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -92,7 +92,7 @@ import { appSession } from '$lib/store'; const engine = generateRemoteEngine(destination); await post(`/destinations/${id}/stop.json`, { engine }); return toast.push($t('destination.coolify_proxy_stopped')); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -101,7 +101,7 @@ import { appSession } from '$lib/store'; const engine = generateRemoteEngine(destination); await post(`/destinations/${id}/start.json`, { engine }); return toast.push($t('destination.coolify_proxy_started')); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -115,7 +115,7 @@ import { appSession } from '$lib/store'; engine: destination.engine, fqdn: settings.fqdn }); - } catch ({ error }) { + } catch (error) { setTimeout(() => { window.location.reload(); }, 5000); diff --git a/apps/ui/src/routes/services/[id]/_Services/_Wordpress.svelte b/apps/ui/src/routes/services/[id]/_Services/_Wordpress.svelte index 8ba3ae16f..845263024 100644 --- a/apps/ui/src/routes/services/[id]/_Services/_Wordpress.svelte +++ b/apps/ui/src/routes/services/[id]/_Services/_Wordpress.svelte @@ -61,7 +61,7 @@ ownMysql }); service.wordpress.ownMysql = ownMysql; - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } diff --git a/apps/ui/src/routes/services/[id]/_Storage.svelte b/apps/ui/src/routes/services/[id]/_Storage.svelte index 5993d6897..755a04426 100644 --- a/apps/ui/src/routes/services/[id]/_Storage.svelte +++ b/apps/ui/src/routes/services/[id]/_Storage.svelte @@ -31,7 +31,7 @@ } if (newStorage) toast.push('Storage saved.'); else toast.push('Storage updated.'); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -40,7 +40,7 @@ await del(`/services/${id}/storages`, { path: storage.path }); dispatch('refresh'); toast.push('Storage deleted.'); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } diff --git a/apps/ui/src/routes/settings/index.svelte b/apps/ui/src/routes/settings/index.svelte index b07085eaf..b27ad07f2 100644 --- a/apps/ui/src/routes/settings/index.svelte +++ b/apps/ui/src/routes/settings/index.svelte @@ -87,7 +87,7 @@ isDNSCheckEnabled }); return toast.push(t.get('application.settings_saved')); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } } @@ -134,7 +134,7 @@ toast.push('DNS configuration is valid.'); isWWW ? (isWWWDomainOK = true) : (isNonWWWDomainOK = true); return true; - } catch ({ error }) { + } catch (error) { errorNotification(error); isWWW ? (isWWWDomainOK = false) : (isNonWWWDomainOK = false); return false; @@ -151,7 +151,7 @@ const data = await get(`/settings`); $isTraefikUsed = data.settings.isTraefikUsed; return toast.push('Proxy migration started, it takes a few seconds.'); - } catch ({ error }) { + } catch (error) { return errorNotification(error); } finally { loading.proxyMigration = false; diff --git a/apps/ui/src/routes/sources/[id]/_Gitlab.svelte b/apps/ui/src/routes/sources/[id]/_Gitlab.svelte index 94c5a2f52..47acc27af 100644 --- a/apps/ui/src/routes/sources/[id]/_Gitlab.svelte +++ b/apps/ui/src/routes/sources/[id]/_Gitlab.svelte @@ -106,7 +106,7 @@ await post(`/sources/${id}/check`, { oauthId: source.gitlabApp?.oauthId }); - } catch ({ error }) { + } catch (error) { source.gitlabApp.oauthId = null; oauthIdEl.focus(); return errorNotification(error);