From 65797c49dbd89a85ebbc817e83d0fceca63273b7 Mon Sep 17 00:00:00 2001 From: zhujingyang <72259332+zjy365@users.noreply.github.com> Date: Wed, 23 Aug 2023 17:46:21 +0800 Subject: [PATCH] feat:template git err & terminal insufficient balance (#3755) * fix: catch template git error Signed-off-by: jingyang <3161362058@qq.com> * fix:template yaml tool Signed-off-by: jingyang <3161362058@qq.com> * Insufficient balance Signed-off-by: jingyang <3161362058@qq.com> --------- Signed-off-by: jingyang <3161362058@qq.com> --- .../template/src/pages/api/platform/getEnv.ts | 16 +++++++++++++++- .../template/src/pages/api/updateRepo.ts | 10 ++++------ .../template/src/pages/develop/index.tsx | 9 +++------ .../template/src/services/backend/response.ts | 2 +- .../providers/terminal/src/pages/error.tsx | 5 +++++ .../providers/terminal/src/pages/index.tsx | 19 ++++++++++++++++++- 6 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 frontend/providers/terminal/src/pages/error.tsx diff --git a/frontend/providers/template/src/pages/api/platform/getEnv.ts b/frontend/providers/template/src/pages/api/platform/getEnv.ts index 4c9cd3cb08c..da61ab6ab63 100644 --- a/frontend/providers/template/src/pages/api/platform/getEnv.ts +++ b/frontend/providers/template/src/pages/api/platform/getEnv.ts @@ -1,14 +1,28 @@ +import { authSession } from '@/services/backend/auth'; +import { getK8s } from '@/services/backend/kubernetes'; import { jsonRes } from '@/services/backend/response'; import { ApiResp } from '@/services/kubernet'; import type { NextApiRequest, NextApiResponse } from 'next'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { + let user_namespace = ''; + + try { + const { namespace } = await getK8s({ + kubeconfig: await authSession(req.headers) + }); + user_namespace = namespace; + } catch (error) { + console.log(error, 'errpr-'); + } + jsonRes(res, { data: { SEALOS_CLOUD_DOMAIN: process.env.SEALOS_CLOUD_DOMAIN || 'cloud.sealos.io', SEALOS_CERT_SECRET_NAME: process.env.SEALOS_CERT_SECRET_NAME || 'wildcard-cert', TEMPLATE_REPO_URL: - process.env.TEMPLATE_REPO_URL || 'https://github.com/labring-actions/templates' + process.env.TEMPLATE_REPO_URL || 'https://github.com/labring-actions/templates', + SEALOS_NAMESPACE: user_namespace || '' } }); } diff --git a/frontend/providers/template/src/pages/api/updateRepo.ts b/frontend/providers/template/src/pages/api/updateRepo.ts index e41ddf7ab7f..dd35717fd98 100644 --- a/frontend/providers/template/src/pages/api/updateRepo.ts +++ b/frontend/providers/template/src/pages/api/updateRepo.ts @@ -5,6 +5,8 @@ import fs from 'fs'; import JSYAML from 'js-yaml'; import type { NextApiRequest, NextApiResponse } from 'next'; import path from 'path'; +import util from 'util'; +const execAsync = util.promisify(exec); const readFileList = (targetPath: string, fileList: unknown[] = [], handlePath: string) => { // fix ci @@ -37,13 +39,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< const jsonPath = path.resolve(originalPath, 'fast_deploy_template.json'); if (!fs.existsSync(targetPath)) { - exec(`git clone ${repoHttpUrl} ${targetPath}`, (error, stdout, stderr) => { - console.log(error, stdout); - }); + await execAsync(`git clone ${repoHttpUrl} ${targetPath}`); } else { - exec(`cd ${targetPath} && git pull`, (error, stdout, stderr) => { - console.log(error, stdout); - }); + await execAsync(`cd ${targetPath} && git pull`); } if (!fs.existsSync(targetPath)) { diff --git a/frontend/providers/template/src/pages/develop/index.tsx b/frontend/providers/template/src/pages/develop/index.tsx index 18a40b2cc69..241b6e100ac 100644 --- a/frontend/providers/template/src/pages/develop/index.tsx +++ b/frontend/providers/template/src/pages/develop/index.tsx @@ -124,8 +124,7 @@ const Develop = () => { borderRadius={'8px'} overflowY={'hidden'} overflowX={'scroll'} - flex={1} - > + flex={1}> {/* left */} { alignItems={'center'} backgroundColor={'#F8FAFB'} px="36px" - borderRadius={'8px 8px 0px 0px '} - > + borderRadius={'8px 8px 0px 0px '}> {t('develop.Development')} @@ -164,8 +162,7 @@ const Develop = () => { alignItems={'center'} backgroundColor={'#F8FAFB'} pl="42px" - borderRadius={'8px 8px 0px 0px '} - > + borderRadius={'8px 8px 0px 0px '}> {t('develop.Preview')} diff --git a/frontend/providers/template/src/services/backend/response.ts b/frontend/providers/template/src/services/backend/response.ts index 9394c33c968..20355c0509a 100644 --- a/frontend/providers/template/src/services/backend/response.ts +++ b/frontend/providers/template/src/services/backend/response.ts @@ -26,7 +26,7 @@ export const jsonRes = ( } else if (error?.code && error.code in ERROR_TEXT) { msg = ERROR_TEXT[error.code]; } - console.log('jsonRes error: ', error); + console.error('jsonRes error------------\n ', error); } res.json({ diff --git a/frontend/providers/terminal/src/pages/error.tsx b/frontend/providers/terminal/src/pages/error.tsx new file mode 100644 index 00000000000..0b087e873c4 --- /dev/null +++ b/frontend/providers/terminal/src/pages/error.tsx @@ -0,0 +1,5 @@ +import { Box } from '@chakra-ui/react'; + +export default function ErrPage() { + return ; +} diff --git a/frontend/providers/terminal/src/pages/index.tsx b/frontend/providers/terminal/src/pages/index.tsx index cafa2c45220..0eb7d35e0b6 100644 --- a/frontend/providers/terminal/src/pages/index.tsx +++ b/frontend/providers/terminal/src/pages/index.tsx @@ -1,7 +1,7 @@ import Terminal from '@/components/terminal'; import request from '@/service/request'; import useSessionStore from '@/stores/session'; -import { Box, Flex, Spinner } from '@chakra-ui/react'; +import { Box, Flex, Spinner, useToast } from '@chakra-ui/react'; import { useQuery } from '@tanstack/react-query'; import { useEffect, useState } from 'react'; import { createSealosApp, sealosApp } from 'sealos-desktop-sdk/app'; @@ -15,6 +15,7 @@ export default function Index(props: ServiceEnv) { const { setSession, isUserLogin } = useSessionStore(); const [url, setUrl] = useState(''); const [isLoading, setIsLoading] = useState(true); + const toast = useToast(); useEffect(() => { return createSealosApp(); @@ -48,6 +49,22 @@ export default function Index(props: ServiceEnv) { .catch((err) => {}); } }, + onError(err: any) { + if ((err?.data?.code === 500, err?.data?.data)) { + const reason = err?.data?.data?.body?.reason; + if (reason.startsWith('40001')) { + setIsLoading(false); + toast({ + position: 'top', + description: 'Insufficient balance', + status: 'error', + duration: 8000, + isClosable: true + }); + setUrl('/error'); + } + } + }, refetchInterval: url === '' ? 500 : false, enabled: url === '' });