From 568ab24fd9a4909af788bbddadb1752dff64a391 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 13 Jan 2023 14:17:36 +0100 Subject: [PATCH] wip: trpc --- apps/client/src/lib/components/DocLink.svelte | 44 + .../src/lib/components/ExternalLink.svelte | 10 + .../icons/services/ServiceIcons.svelte | 1 + apps/client/src/lib/store.ts | 8 + .../src/routes/services/[id]/+layout.svelte | 366 ++ .../src/routes/services/[id]/+layout.ts | 46 + .../src/routes/services/[id]/+page.svelte | 562 +++ .../services/[id]/components/Menu.svelte | 138 + .../[id]/components/ServiceLinks.svelte | 14 + .../[id]/components/ServiceStatus.svelte | 37 + .../services/[id]/components/Wordpress.svelte | 85 + .../routes/services/[id]/danger/+page.svelte | 46 + .../routes/services/[id]/logs/+page.svelte | 173 + .../routes/services/[id]/secrets/+page.svelte | 98 + .../src/routes/services/[id]/secrets/+page.ts | 16 + .../[id]/secrets/components/Secret.svelte | 101 + .../src/routes/services/[id]/secrets/utils.ts | 78 + .../services/[id]/storages/+page.svelte | 73 + .../routes/services/[id]/storages/+page.ts | 16 + .../[id]/storages/components/Storage.svelte | 167 + apps/client/src/routes/services/[id]/utils.ts | 79 + apps/server/devTags.json | 1013 +++++ apps/server/devTemplates.yaml | 3582 +++++++++++++++++ apps/server/src/lib/common.ts | 44 +- apps/server/src/scheduler.ts | 2 +- apps/server/src/trpc/routers/services.ts | 171 - .../server/src/trpc/routers/services/index.ts | 895 ++++ apps/server/src/trpc/routers/services/lib.ts | 376 ++ apps/server/tags.json | 1013 +++++ apps/server/templates.json | 1 + 30 files changed, 9082 insertions(+), 173 deletions(-) create mode 100644 apps/client/src/lib/components/DocLink.svelte create mode 100644 apps/client/src/lib/components/ExternalLink.svelte create mode 100644 apps/client/src/routes/services/[id]/+layout.svelte create mode 100644 apps/client/src/routes/services/[id]/+layout.ts create mode 100644 apps/client/src/routes/services/[id]/+page.svelte create mode 100644 apps/client/src/routes/services/[id]/components/Menu.svelte create mode 100644 apps/client/src/routes/services/[id]/components/ServiceLinks.svelte create mode 100644 apps/client/src/routes/services/[id]/components/ServiceStatus.svelte create mode 100644 apps/client/src/routes/services/[id]/components/Wordpress.svelte create mode 100644 apps/client/src/routes/services/[id]/danger/+page.svelte create mode 100644 apps/client/src/routes/services/[id]/logs/+page.svelte create mode 100644 apps/client/src/routes/services/[id]/secrets/+page.svelte create mode 100644 apps/client/src/routes/services/[id]/secrets/+page.ts create mode 100644 apps/client/src/routes/services/[id]/secrets/components/Secret.svelte create mode 100644 apps/client/src/routes/services/[id]/secrets/utils.ts create mode 100644 apps/client/src/routes/services/[id]/storages/+page.svelte create mode 100644 apps/client/src/routes/services/[id]/storages/+page.ts create mode 100644 apps/client/src/routes/services/[id]/storages/components/Storage.svelte create mode 100644 apps/client/src/routes/services/[id]/utils.ts create mode 100644 apps/server/devTags.json create mode 100644 apps/server/devTemplates.yaml delete mode 100644 apps/server/src/trpc/routers/services.ts create mode 100644 apps/server/src/trpc/routers/services/index.ts create mode 100644 apps/server/src/trpc/routers/services/lib.ts create mode 100644 apps/server/tags.json create mode 100644 apps/server/templates.json diff --git a/apps/client/src/lib/components/DocLink.svelte b/apps/client/src/lib/components/DocLink.svelte new file mode 100644 index 000000000..803b48583 --- /dev/null +++ b/apps/client/src/lib/components/DocLink.svelte @@ -0,0 +1,44 @@ + + + + + + + {text} + {#if isExternal} + + {/if} + +{#if !text} + See details in the documentation +{/if} diff --git a/apps/client/src/lib/components/ExternalLink.svelte b/apps/client/src/lib/components/ExternalLink.svelte new file mode 100644 index 000000000..62f2e312a --- /dev/null +++ b/apps/client/src/lib/components/ExternalLink.svelte @@ -0,0 +1,10 @@ + + + diff --git a/apps/client/src/lib/components/icons/services/ServiceIcons.svelte b/apps/client/src/lib/components/icons/services/ServiceIcons.svelte index 7f146e3fb..7f3ead42e 100644 --- a/apps/client/src/lib/components/icons/services/ServiceIcons.svelte +++ b/apps/client/src/lib/components/icons/services/ServiceIcons.svelte @@ -5,6 +5,7 @@ const handleError = (ev: { target: { src: string } }) => (ev.target.src = fallback); let extension = 'png'; let svgs = [ + 'directus', 'pocketbase', 'gitea', 'languagetool', diff --git a/apps/client/src/lib/store.ts b/apps/client/src/lib/store.ts index 87afa0034..dc45778b2 100644 --- a/apps/client/src/lib/store.ts +++ b/apps/client/src/lib/store.ts @@ -171,3 +171,11 @@ export const setLocation = (resource: any, settings?: any) => { } }; export const selectedBuildId: any = writable(null) +export function checkIfDeploymentEnabledServices( service: any) { + return ( + service.fqdn && + service.destinationDocker && + service.version && + service.type + ); +} \ No newline at end of file diff --git a/apps/client/src/routes/services/[id]/+layout.svelte b/apps/client/src/routes/services/[id]/+layout.svelte new file mode 100644 index 000000000..f218a664c --- /dev/null +++ b/apps/client/src/routes/services/[id]/+layout.svelte @@ -0,0 +1,366 @@ + + +
+ +
+ {#if $status.service.initialLoading} + + {:else if $status.service.overallStatus === 'healthy'} + + + {:else if $status.service.overallStatus === 'degraded'} + + {:else if $status.service.overallStatus === 'stopped'} + {#if $status.service.overallStatus === 'degraded'} + + {:else if $status.service.overallStatus === 'stopped'} + + {/if} + {/if} +
+
+ +
+ {#if !$page.url.pathname.startsWith(`/services/${id}/configuration/`)} + + {/if} +
+ +
+
diff --git a/apps/client/src/routes/services/[id]/+layout.ts b/apps/client/src/routes/services/[id]/+layout.ts new file mode 100644 index 000000000..9027326c5 --- /dev/null +++ b/apps/client/src/routes/services/[id]/+layout.ts @@ -0,0 +1,46 @@ +import { error } from '@sveltejs/kit'; +import { trpc } from '$lib/store'; +import type { LayoutLoad } from './$types'; +import { redirect } from '@sveltejs/kit'; + +function checkConfiguration(service: any): string | null { + let configurationPhase = null; + if (!service.type) { + configurationPhase = 'type'; + } else if (!service.destinationDockerId) { + configurationPhase = 'destination'; + } + return configurationPhase; +} + +export const load: LayoutLoad = async ({ params, url }) => { + const { pathname } = new URL(url); + const { id } = params; + try { + const service = await trpc.services.getServices.query({ id }); + if (!service) { + throw redirect(307, '/services'); + } + const configurationPhase = checkConfiguration(service); + console.log({ configurationPhase }); + // if ( + // configurationPhase && + // pathname !== `/applications/${params.id}/configuration/${configurationPhase}` + // ) { + // throw redirect(302, `/applications/${params.id}/configuration/${configurationPhase}`); + // } + return { + ...service.data + }; + } catch (err) { + if (err instanceof Error) { + throw error(500, { + message: 'An unexpected error occurred, please try again later.' + '

' + err.message + }); + } + + throw error(500, { + message: 'An unexpected error occurred, please try again later.' + }); + } +}; diff --git a/apps/client/src/routes/services/[id]/+page.svelte b/apps/client/src/routes/services/[id]/+page.svelte new file mode 100644 index 000000000..2dd38eadb --- /dev/null +++ b/apps/client/src/routes/services/[id]/+page.svelte @@ -0,0 +1,562 @@ + + +
+
+
+
+
General
+ {#if $appSession.isAdmin} + + {/if} + {#if service.type === 'plausibleanalytics' && $status.service.overallStatus === 'healthy'} + + + {/if} + {#if service.type === 'appwrite' && $status.service.overallStatus === 'healthy'} + +
+ +
+ {/if} +
+
+ +
+
+ + +
+
+ + {#if tags.tags?.length > 0} +
+ + {/if} +
+ +
+ +
+ {#if service.destinationDockerId} +
+ +
+ {/if} +
+
+ +
+ + +
+ {#each Object.keys(template) as oneService} + {#each template[oneService].fqdns as fqdn} +
+ + +
+ {/each} + {/each} +
+ {#if forceSave} +
+ {#if isNonWWWDomainOK} + + {:else} + + {/if} + {#if dualCerts} + {#if isWWWDomainOK} + + {:else} + + {/if} + {/if} +
+ {/if} + +
+
+ You need to have both DNS entries set in advance.

Service needs to be restarted."} + on:click={() => !$status.service.isRunning && changeSettings('dualCerts')} + /> +
+ {#if hostPorts.length === 0} +
+ + +
+ {/if} +
+
+ {#each Object.keys(template) as oneService} +
0 && + template[oneService].environment.find((env) => env.main === oneService)} + class:border-b={template[oneService].environment.length > 0 && + template[oneService].environment.find((env) => env.main === oneService)} + class:border-coolgray-500={template[oneService].environment.length > 0 && + template[oneService].environment.find((env) => env.main === oneService)} + > +
+ {template[oneService].name || + oneService.replace(`${id}-`, '').replace(id, service.type)} +
+ +
+
+ {#if template[oneService].environment.length > 0} + {#each template[oneService].environment as variable} + {#if variable.main === oneService} +
+ + {#if variable.defaultValue === '$$generate_fqdn'} + + {:else if variable.defaultValue === '$$generate_fqdn_slash'} + + {:else if variable.defaultValue === '$$generate_domain'} + + {:else if variable.defaultValue === '$$generate_network'} + + {:else if variable.defaultValue === 'true' || variable.defaultValue === 'false'} + {#if variable.value === 'true' || variable.value === 'false' || variable.value === 'invite_only'} + + {:else} + + {/if} + {:else if variable.defaultValue === '$$generate_password'} + + {:else if variable.type === 'textarea'} +