From a1ea355fdbbf50699733bb84e50579afa1e9988c Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 7 Sep 2023 12:10:10 +0800 Subject: [PATCH] feat: add supports for check started status after start plugin operation (#4558) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /area console /kind improvement /milestone 2.10.x #### What this PR does / why we need it: 支持在启动插件之后检测插件的启动状态,防止直接刷新之后 bundle.js 的内容没有及时更新。 #### Does this PR introduce a user-facing change? ```release-note 优化 Console 端启动插件的逻辑 ``` --- .../system/plugins/composables/use-plugin.ts | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/console/src/modules/system/plugins/composables/use-plugin.ts b/console/src/modules/system/plugins/composables/use-plugin.ts index cc4e46549..9408e7247 100644 --- a/console/src/modules/system/plugins/composables/use-plugin.ts +++ b/console/src/modules/system/plugins/composables/use-plugin.ts @@ -49,10 +49,16 @@ export function usePluginLifeCycle( }); pluginToUpdate.spec.enabled = !pluginToUpdate.spec.enabled; - await apiClient.extension.plugin.updatepluginHaloRunV1alpha1Plugin({ - name: pluginToUpdate.metadata.name, - plugin: pluginToUpdate, - }); + + const { data: newPlugin } = + await apiClient.extension.plugin.updatepluginHaloRunV1alpha1Plugin({ + name: pluginToUpdate.metadata.name, + plugin: pluginToUpdate, + }); + + await checkStatus(newPlugin); + + return newPlugin; }, retry: 3, retryDelay: 1000, @@ -61,6 +67,38 @@ export function usePluginLifeCycle( }, }); + function checkStatus(plugin: Plugin) { + const maxRetry = 5; + let retryCount = 0; + return new Promise((resolve, reject) => { + const check = () => { + if (retryCount >= maxRetry) { + reject(false); + return; + } + apiClient.extension.plugin + .getpluginHaloRunV1alpha1Plugin({ name: plugin.metadata.name }) + .then((response) => { + const { enabled } = response.data.spec; + const { phase } = response.data.status || {}; + if ( + (enabled && phase === "STARTED") || + (!enabled && phase !== "STARTED") + ) { + resolve(true); + } else { + setTimeout(check, 1000); + retryCount++; + } + }) + .catch(() => { + reject(false); + }); + }; + check(); + }); + } + const uninstall = (deleteExtensions?: boolean) => { if (!plugin?.value) return;