From c9c83c9db9a8fd6ce8541a0c90944b23d15f8130 Mon Sep 17 00:00:00 2001 From: 0xJacky Date: Mon, 13 Feb 2023 13:24:19 +0800 Subject: [PATCH] feat: added restart nginx btn --- frontend/components.d.ts | 3 + frontend/package.json | 6 +- frontend/src/api/ngx.ts | 8 ++ .../components/NginxControl/NginxControl.vue | 110 ++++++++++++++++++ frontend/src/layouts/HeaderLayout.vue | 31 +---- frontend/src/lib/http/index.ts | 5 + frontend/src/version.json | 2 +- frontend/src/views/pty/Terminal.vue | 5 +- frontend/version.json | 2 +- frontend/yarn.lock | 24 ++-- server/api/ngx.go | 23 ++++ server/pkg/nginx/nginx.go | 34 +++++- server/router/routers.go | 4 + server/settings/settings.go | 1 + 14 files changed, 209 insertions(+), 49 deletions(-) create mode 100644 frontend/src/components/NginxControl/NginxControl.vue diff --git a/frontend/components.d.ts b/frontend/components.d.ts index de4b86c2..c592fc84 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -8,6 +8,7 @@ export {} declare module '@vue/runtime-core' { export interface GlobalComponents { AAlert: typeof import('ant-design-vue/es')['Alert'] + ABadge: typeof import('ant-design-vue/es')['Badge'] ABreadcrumb: typeof import('ant-design-vue/es')['Breadcrumb'] ABreadcrumbItem: typeof import('ant-design-vue/es')['BreadcrumbItem'] AButton: typeof import('ant-design-vue/es')['Button'] @@ -37,6 +38,7 @@ declare module '@vue/runtime-core' { AModal: typeof import('ant-design-vue/es')['Modal'] APagination: typeof import('ant-design-vue/es')['Pagination'] APopconfirm: typeof import('ant-design-vue/es')['Popconfirm'] + APopover: typeof import('ant-design-vue/es')['Popover'] AProgress: typeof import('ant-design-vue/es')['Progress'] AResult: typeof import('ant-design-vue/es')['Result'] ARow: typeof import('ant-design-vue/es')['Row'] @@ -59,6 +61,7 @@ declare module '@vue/runtime-core' { CodeEditorCodeEditor: typeof import('./src/components/CodeEditor/CodeEditor.vue')['default'] FooterToolbarFooterToolBar: typeof import('./src/components/FooterToolbar/FooterToolBar.vue')['default'] LogoLogo: typeof import('./src/components/Logo/Logo.vue')['default'] + NginxControlNginxControl: typeof import('./src/components/NginxControl/NginxControl.vue')['default'] PageHeaderPageHeader: typeof import('./src/components/PageHeader/PageHeader.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] diff --git a/frontend/package.json b/frontend/package.json index 61deabf1..f1b04bdc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,9 +32,9 @@ "vue3-apexcharts": "^1.4.1", "vue3-gettext": "^2.3.4", "vuedraggable": "^4.1.0", - "xterm": "^5.0.0", - "xterm-addon-attach": "^0.7.0", - "xterm-addon-fit": "^0.6.0" + "xterm": "^5.1.0", + "xterm-addon-attach": "^0.8.0", + "xterm-addon-fit": "^0.7.0" }, "devDependencies": { "@vitejs/plugin-vue": "^4.0.0", diff --git a/frontend/src/api/ngx.ts b/frontend/src/api/ngx.ts index 5a2e32e2..62e3db1b 100644 --- a/frontend/src/api/ngx.ts +++ b/frontend/src/api/ngx.ts @@ -13,10 +13,18 @@ const ngx = { return http.post('/ngx/format_code', {content}) }, + status() { + return http.get('/nginx/status') + }, + reload() { return http.post('/nginx/reload') }, + restart() { + return http.post('/nginx/restart') + }, + test() { return http.post('/nginx/test') } diff --git a/frontend/src/components/NginxControl/NginxControl.vue b/frontend/src/components/NginxControl/NginxControl.vue new file mode 100644 index 00000000..a544dc45 --- /dev/null +++ b/frontend/src/components/NginxControl/NginxControl.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/frontend/src/layouts/HeaderLayout.vue b/frontend/src/layouts/HeaderLayout.vue index 943657af..8b94e18c 100644 --- a/frontend/src/layouts/HeaderLayout.vue +++ b/frontend/src/layouts/HeaderLayout.vue @@ -3,10 +3,9 @@ import SetLanguage from '@/components/SetLanguage/SetLanguage.vue' import gettext from '@/gettext' import {message} from 'ant-design-vue' import auth from '@/api/auth' -import {HomeOutlined, LogoutOutlined, MenuUnfoldOutlined, ReloadOutlined} from '@ant-design/icons-vue' +import {HomeOutlined, LogoutOutlined, MenuUnfoldOutlined} from '@ant-design/icons-vue' import {useRouter} from 'vue-router' -import ngx from '@/api/ngx' -import logLevel from '@/views/config/constants' +import NginxControl from '@/components/NginxControl/NginxControl.vue' const {$gettext} = gettext @@ -19,20 +18,6 @@ function logout() { router.push('/login') }) } - -function reload_nginx() { - ngx.reload().then(r => { - if (r.level < logLevel.Warn) { - message.success($gettext('Nginx reloaded successfully')) - } else if (r.level === logLevel.Warn) { - message.warn(r.message) - } else { - message.error(r.message) - } - }).catch(e => { - message.error($gettext('Server error') + ' ' + e?.message) - }) -}