This is an automated email from the ASF dual-hosted git repository.

roryqi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git


The following commit(s) were added to refs/heads/master by this push:
     new 8eff38e29 [#1778] improvement(dashboard): Dashboard adds the ability 
to automatically format code. (#1779)
8eff38e29 is described below

commit 8eff38e29ba9e9326fc460b231925de927aa412f
Author: yl09099 <[email protected]>
AuthorDate: Sun Jun 16 00:19:40 2024 +0800

    [#1778] improvement(dashboard): Dashboard adds the ability to automatically 
format code. (#1779)
    
    ### What changes were proposed in this pull request?
    
    Introducing the front-end eslint code validation tool and formatting the 
front-end code.
    
    ### Why are the changes needed?
    
    Fix: #1778
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Existential test.
---
 .../uniffle/common}/web/resource/BaseResource.java |   4 +-
 .../uniffle/common/web/resource}/Response.java     |   2 +-
 .../coordinator/web/resource/AdminResource.java    |   3 +-
 .../web/resource/ApplicationResource.java          |   3 +-
 .../web/resource/CoordinatorServerResource.java    |   3 +-
 .../coordinator/web/resource/ServerResource.java   |   3 +-
 .../coordinator/web/UniffleServicesRESTTest.java   |   2 +-
 .../dashboard/web/resource/BaseResource.java       |  36 -------
 .../web/resource/CoordinatorResource.java          |   3 +
 .../uniffle/dashboard/web/resource/Response.java   |  70 --------------
 dashboard/src/main/webapp/.eslintignore            |  21 ++++
 .../main/webapp/{babel.config.js => .eslintrc.js}  |  17 +++-
 .../webapp/{jsconfig.json => .prettierrc.json}     |  22 +----
 dashboard/src/main/webapp/babel.config.js          |   4 +-
 dashboard/src/main/webapp/jsconfig.json            |  11 +--
 dashboard/src/main/webapp/package.json             |  33 ++-----
 .../src/main/webapp/packagescript/cleanfile.js     |  12 +--
 .../src/main/webapp/packagescript/fileutils.js     | 106 ++++++++++-----------
 dashboard/src/main/webapp/public/index.html        |  15 +--
 dashboard/src/main/webapp/src/App.vue              |   2 +-
 dashboard/src/main/webapp/src/api/api.js           |  54 +++++------
 .../src/main/webapp/src/components/LayoutPage.vue  |  44 +++++----
 dashboard/src/main/webapp/src/main.js              |  10 +-
 .../src/main/webapp/src/pages/ApplicationPage.vue  |  48 +++++-----
 .../webapp/src/pages/CoordinatorServerPage.vue     |  59 ++++++------
 .../main/webapp/src/pages/ShuffleServerPage.vue    |  40 ++++----
 .../src/pages/serverstatus/ActiveNodeListPage.vue  |  67 ++++++++-----
 .../serverstatus/DecommissionednodeListPage.vue    |  69 ++++++++------
 .../serverstatus/DecommissioningNodeListPage.vue   |  71 ++++++++------
 .../src/pages/serverstatus/ExcludeNodeList.vue     |  22 ++---
 .../webapp/src/pages/serverstatus/LostNodeList.vue |  71 ++++++++------
 .../pages/serverstatus/UnhealthyNodeListPage.vue   |  70 ++++++++------
 dashboard/src/main/webapp/src/router/index.js      |  98 +++++++++++--------
 .../main/webapp/src/store/useCurrentServerStore.js |   8 +-
 dashboard/src/main/webapp/src/utils/common.js      |  26 ++---
 dashboard/src/main/webapp/src/utils/http.js        |  63 ++++++------
 dashboard/src/main/webapp/src/utils/request.js     |  66 +++++++------
 dashboard/src/main/webapp/vue.config.js            |  24 ++---
 .../uniffle/test/CoordinatorAdminServiceTest.java  |   2 +-
 .../java/org/apache/uniffle/test/ServletTest.java  |   2 +-
 40 files changed, 639 insertions(+), 647 deletions(-)

diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/BaseResource.java
 b/common/src/main/java/org/apache/uniffle/common/web/resource/BaseResource.java
similarity index 91%
rename from 
coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/BaseResource.java
rename to 
common/src/main/java/org/apache/uniffle/common/web/resource/BaseResource.java
index 861f91bae..0e5d3cb79 100644
--- 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/BaseResource.java
+++ 
b/common/src/main/java/org/apache/uniffle/common/web/resource/BaseResource.java
@@ -15,12 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.uniffle.coordinator.web.resource;
+package org.apache.uniffle.common.web.resource;
 
 import java.util.concurrent.Callable;
 
-import org.apache.uniffle.coordinator.web.Response;
-
 public abstract class BaseResource {
   protected <T> Response<T> execute(Callable<T> callable) {
     try {
diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/Response.java 
b/common/src/main/java/org/apache/uniffle/common/web/resource/Response.java
similarity index 97%
rename from 
coordinator/src/main/java/org/apache/uniffle/coordinator/web/Response.java
rename to 
common/src/main/java/org/apache/uniffle/common/web/resource/Response.java
index 3313459af..25e21c753 100644
--- a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/Response.java
+++ b/common/src/main/java/org/apache/uniffle/common/web/resource/Response.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.uniffle.coordinator.web;
+package org.apache.uniffle.common.web.resource;
 
 public class Response<T> {
   private static final int SUCCESS_CODE = 0;
diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/AdminResource.java
 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/AdminResource.java
index d895c1df2..63daef6da 100644
--- 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/AdminResource.java
+++ 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/AdminResource.java
@@ -28,10 +28,11 @@ import 
org.apache.hbase.thirdparty.javax.ws.rs.core.MediaType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.uniffle.common.web.resource.BaseResource;
+import org.apache.uniffle.common.web.resource.Response;
 import org.apache.uniffle.coordinator.AccessManager;
 import org.apache.uniffle.coordinator.ServerNode;
 import org.apache.uniffle.coordinator.access.checker.AccessChecker;
-import org.apache.uniffle.coordinator.web.Response;
 
 @Produces({MediaType.APPLICATION_JSON})
 public class AdminResource extends BaseResource {
diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/ApplicationResource.java
 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/ApplicationResource.java
index 7c621c5b4..7106d66d1 100644
--- 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/ApplicationResource.java
+++ 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/ApplicationResource.java
@@ -30,8 +30,9 @@ import org.apache.hbase.thirdparty.javax.ws.rs.Produces;
 import org.apache.hbase.thirdparty.javax.ws.rs.core.Context;
 import org.apache.hbase.thirdparty.javax.ws.rs.core.MediaType;
 
+import org.apache.uniffle.common.web.resource.BaseResource;
+import org.apache.uniffle.common.web.resource.Response;
 import org.apache.uniffle.coordinator.ApplicationManager;
-import org.apache.uniffle.coordinator.web.Response;
 import org.apache.uniffle.coordinator.web.vo.AppInfoVO;
 import org.apache.uniffle.coordinator.web.vo.UserAppNumVO;
 
diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/CoordinatorServerResource.java
 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/CoordinatorServerResource.java
index f6822366c..e09d3dbdc 100644
--- 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/CoordinatorServerResource.java
+++ 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/CoordinatorServerResource.java
@@ -31,10 +31,11 @@ import org.apache.hbase.thirdparty.javax.ws.rs.core.Context;
 import org.apache.hbase.thirdparty.javax.ws.rs.core.MediaType;
 
 import org.apache.uniffle.common.util.RssUtils;
+import org.apache.uniffle.common.web.resource.BaseResource;
+import org.apache.uniffle.common.web.resource.Response;
 import org.apache.uniffle.coordinator.CoordinatorConf;
 import org.apache.uniffle.coordinator.CoordinatorServer;
 import org.apache.uniffle.coordinator.util.CoordinatorUtils;
-import org.apache.uniffle.coordinator.web.Response;
 import org.apache.uniffle.coordinator.web.vo.CoordinatorConfVO;
 
 import static org.apache.uniffle.common.config.RssBaseConf.JETTY_HTTP_PORT;
diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/ServerResource.java
 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/ServerResource.java
index f30027f11..d78796adf 100644
--- 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/ServerResource.java
+++ 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/web/resource/ServerResource.java
@@ -39,10 +39,11 @@ import 
org.apache.hbase.thirdparty.javax.ws.rs.core.MediaType;
 
 import org.apache.uniffle.common.Application;
 import org.apache.uniffle.common.ServerStatus;
+import org.apache.uniffle.common.web.resource.BaseResource;
+import org.apache.uniffle.common.web.resource.Response;
 import org.apache.uniffle.coordinator.ApplicationManager;
 import org.apache.uniffle.coordinator.ClusterManager;
 import org.apache.uniffle.coordinator.ServerNode;
-import org.apache.uniffle.coordinator.web.Response;
 import org.apache.uniffle.coordinator.web.request.ApplicationRequest;
 import org.apache.uniffle.coordinator.web.request.CancelDecommissionRequest;
 import org.apache.uniffle.coordinator.web.request.DecommissionRequest;
diff --git 
a/coordinator/src/test/java/org/apache/uniffle/coordinator/web/UniffleServicesRESTTest.java
 
b/coordinator/src/test/java/org/apache/uniffle/coordinator/web/UniffleServicesRESTTest.java
index 95e40332b..badd8a246 100644
--- 
a/coordinator/src/test/java/org/apache/uniffle/coordinator/web/UniffleServicesRESTTest.java
+++ 
b/coordinator/src/test/java/org/apache/uniffle/coordinator/web/UniffleServicesRESTTest.java
@@ -46,7 +46,7 @@ import org.apache.uniffle.coordinator.CoordinatorConf;
 import org.apache.uniffle.coordinator.GenericTestUtils;
 import org.apache.uniffle.coordinator.web.request.ApplicationRequest;
 
-import static org.apache.uniffle.coordinator.web.Response.fail;
+import static org.apache.uniffle.common.web.resource.Response.fail;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git 
a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/BaseResource.java
 
b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/BaseResource.java
deleted file mode 100644
index 5ed197302..000000000
--- 
a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/BaseResource.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.uniffle.dashboard.web.resource;
-
-import java.util.concurrent.Callable;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class BaseResource {
-  private static final Logger LOG = 
LoggerFactory.getLogger(BaseResource.class);
-
-  protected <T> Response<T> execute(Callable<T> callable) {
-    try {
-      return Response.success(callable.call());
-    } catch (Throwable e) {
-      LOG.error("Call failure:", e);
-      return Response.fail(e.getMessage());
-    }
-  }
-}
diff --git 
a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/CoordinatorResource.java
 
b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/CoordinatorResource.java
index 2aed5ca0d..e563e66b2 100644
--- 
a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/CoordinatorResource.java
+++ 
b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/CoordinatorResource.java
@@ -26,6 +26,9 @@ import org.apache.hbase.thirdparty.javax.ws.rs.Produces;
 import org.apache.hbase.thirdparty.javax.ws.rs.core.Context;
 import org.apache.hbase.thirdparty.javax.ws.rs.core.MediaType;
 
+import org.apache.uniffle.common.web.resource.BaseResource;
+import org.apache.uniffle.common.web.resource.Response;
+
 @Produces({MediaType.APPLICATION_JSON})
 public class CoordinatorResource extends BaseResource {
 
diff --git 
a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/Response.java
 
b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/Response.java
deleted file mode 100644
index ef71a320b..000000000
--- 
a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/resource/Response.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.uniffle.dashboard.web.resource;
-
-public class Response<T> {
-  private static final int SUCCESS_CODE = 0;
-  private static final int ERROR_CODE = -1;
-  private int code;
-  private T data;
-  private String msg;
-
-  public Response() {}
-
-  public Response(int code, T data, String msg) {
-    this.code = code;
-    this.data = data;
-    this.msg = msg;
-  }
-
-  public static <T> Response<T> success(T data) {
-    return new Response<>(SUCCESS_CODE, data, "success");
-  }
-
-  public static <T> Response<T> fail(String msg) {
-    return new Response<>(ERROR_CODE, null, msg);
-  }
-
-  public static <T> Response<T> fail(String msg, int code) {
-    return new Response<>(code, null, msg);
-  }
-
-  public int getCode() {
-    return code;
-  }
-
-  public void setCode(int code) {
-    this.code = code;
-  }
-
-  public T getData() {
-    return data;
-  }
-
-  public void setData(T data) {
-    this.data = data;
-  }
-
-  public String getErrMsg() {
-    return msg;
-  }
-
-  public void setErrMsg(String errMsg) {
-    this.msg = errMsg;
-  }
-}
diff --git a/dashboard/src/main/webapp/.eslintignore 
b/dashboard/src/main/webapp/.eslintignore
new file mode 100644
index 000000000..fd399c872
--- /dev/null
+++ b/dashboard/src/main/webapp/.eslintignore
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+/node_modules
+/package-lock.json
+/dist
+.DS_Store
diff --git a/dashboard/src/main/webapp/babel.config.js 
b/dashboard/src/main/webapp/.eslintrc.js
similarity index 76%
copy from dashboard/src/main/webapp/babel.config.js
copy to dashboard/src/main/webapp/.eslintrc.js
index 0b134436b..71e913eec 100644
--- a/dashboard/src/main/webapp/babel.config.js
+++ b/dashboard/src/main/webapp/.eslintrc.js
@@ -16,7 +16,18 @@
  */
 
 module.exports = {
-  presets: [
-    '@vue/cli-plugin-babel/preset'
-  ]
+  env: {
+    browser: true,
+    commonjs: true,
+    es2021: true,
+    node: true
+  },
+  extends: ['plugin:vue/essential', 'standard', '@vue/prettier'],
+  parserOptions: {
+    ecmaVersion: 13
+  },
+  plugins: ['vue'],
+  rules: {
+    quotes: [2, 'single']
+  }
 }
diff --git a/dashboard/src/main/webapp/jsconfig.json 
b/dashboard/src/main/webapp/.prettierrc.json
similarity index 76%
copy from dashboard/src/main/webapp/jsconfig.json
copy to dashboard/src/main/webapp/.prettierrc.json
index bb01e412c..03b19d246 100644
--- a/dashboard/src/main/webapp/jsconfig.json
+++ b/dashboard/src/main/webapp/.prettierrc.json
@@ -17,21 +17,9 @@
     "See the License for the specific language governing permissions and",
     "limitations under the License."
   ],
-  "compilerOptions": {
-    "target": "es5",
-    "module": "esnext",
-    "baseUrl": "./",
-    "moduleResolution": "node",
-    "paths": {
-      "@/*": [
-        "src/*"
-      ]
-    },
-    "lib": [
-      "esnext",
-      "dom",
-      "dom.iterable",
-      "scripthost"
-    ]
-  }
+  "semi": false,
+  "tabWidth": 2,
+  "singleQuote": true,
+  "printWidth": 100,
+  "trailingComma": "none"
 }
diff --git a/dashboard/src/main/webapp/babel.config.js 
b/dashboard/src/main/webapp/babel.config.js
index 0b134436b..8f440e211 100644
--- a/dashboard/src/main/webapp/babel.config.js
+++ b/dashboard/src/main/webapp/babel.config.js
@@ -16,7 +16,5 @@
  */
 
 module.exports = {
-  presets: [
-    '@vue/cli-plugin-babel/preset'
-  ]
+  presets: ['@vue/cli-plugin-babel/preset']
 }
diff --git a/dashboard/src/main/webapp/jsconfig.json 
b/dashboard/src/main/webapp/jsconfig.json
index bb01e412c..ee5027303 100644
--- a/dashboard/src/main/webapp/jsconfig.json
+++ b/dashboard/src/main/webapp/jsconfig.json
@@ -23,15 +23,8 @@
     "baseUrl": "./",
     "moduleResolution": "node",
     "paths": {
-      "@/*": [
-        "src/*"
-      ]
+      "@/*": ["src/*"]
     },
-    "lib": [
-      "esnext",
-      "dom",
-      "dom.iterable",
-      "scripthost"
-    ]
+    "lib": ["esnext", "dom", "dom.iterable", "scripthost"]
   }
 }
diff --git a/dashboard/src/main/webapp/package.json 
b/dashboard/src/main/webapp/package.json
index 0ab9bfba4..ad6e8bbfc 100644
--- a/dashboard/src/main/webapp/package.json
+++ b/dashboard/src/main/webapp/package.json
@@ -44,31 +44,18 @@
     "@vue/cli-plugin-babel": "~5.0.0",
     "@vue/cli-plugin-eslint": "~5.0.0",
     "@vue/cli-service": "^5.0.8",
-    "eslint": "^7.32.0",
-    "eslint-plugin-vue": "^8.0.3",
+    "@vue/eslint-config-prettier": "^9.0.0",
+    "eslint": "^8.57.0",
+    "eslint-config-standard": "^17.1.0",
+    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-n": "^16.6.2",
+    "eslint-plugin-prettier": "^5.1.3",
+    "eslint-plugin-promise": "^6.2.0",
+    "eslint-plugin-vue": "^9.26.0",
     "node-sass": "^9.0.0",
+    "prettier": "^3.3.2",
     "sass-loader": "^13.3.1",
     "vue-loader": "^17.2.2",
     "vue-template-compiler": "^2.7.14"
-  },
-  "eslintConfig": {
-    "root": true,
-    "env": {
-      "node": true
-    },
-    "extends": [
-      "plugin:vue/vue3-essential",
-      "eslint:recommended"
-    ],
-    "parserOptions": {
-      "parser": "@babel/eslint-parser"
-    },
-    "rules": {}
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions",
-    "not dead",
-    "not ie 11"
-  ]
+  }
 }
diff --git a/dashboard/src/main/webapp/packagescript/cleanfile.js 
b/dashboard/src/main/webapp/packagescript/cleanfile.js
index e7cad78b5..bd4af60cf 100644
--- a/dashboard/src/main/webapp/packagescript/cleanfile.js
+++ b/dashboard/src/main/webapp/packagescript/cleanfile.js
@@ -22,12 +22,12 @@ const nodeModulesPath = p.join(__dirname, '../node_modules')
 const lockJsonPath = p.join(__dirname, '../package-lock.json')
 
 if (fs.existsSync(nodeModulesPath)) {
-    const fileUtil = require('./fileutils')
+  const fileUtil = require('./fileutils')
 
-    //fileUtil.deleteFolderByRimraf(nodeModulesPath)
-    fileUtil.deleteFolder(nodeModulesPath)
-    console.log('Deleted node_modules successfully!')
+  // fileUtil.deleteFolderByRimraf(nodeModulesPath)
+  fileUtil.deleteFolder(nodeModulesPath)
+  console.log('Deleted node_modules successfully!')
 
-    fileUtil.deleteFile(lockJsonPath)
-    console.log('Delete package-lock.json successfully!')
+  fileUtil.deleteFile(lockJsonPath)
+  console.log('Delete package-lock.json successfully!')
 }
diff --git a/dashboard/src/main/webapp/packagescript/fileutils.js 
b/dashboard/src/main/webapp/packagescript/fileutils.js
index 221d1c9d1..7021b3d4f 100644
--- a/dashboard/src/main/webapp/packagescript/fileutils.js
+++ b/dashboard/src/main/webapp/packagescript/fileutils.js
@@ -16,44 +16,44 @@
  */
 
 const fs = require('fs')
-const pathName = require("path");
+const pathName = require('path')
 
 /**
  * Delete folder
  * @param path Path of the folder to be deleted
  */
-function deleteFolder (path) {
-    let files = [];
-    if (fs.existsSync(path)) {
-        if (fs.statSync(path).isDirectory()) {
-            files = fs.readdirSync(path)
-            files.forEach((file) => {
-                const curPath = path + '/' + file;
-                if (fs.statSync(curPath).isDirectory()) {
-                    deleteFolder(curPath)
-                } else {
-                    fs.unlinkSync(curPath)
-                }
-            })
-            fs.rmdirSync(path)
+function deleteFolder(path) {
+  let files = []
+  if (fs.existsSync(path)) {
+    if (fs.statSync(path).isDirectory()) {
+      files = fs.readdirSync(path)
+      files.forEach((file) => {
+        const curPath = path + '/' + file
+        if (fs.statSync(curPath).isDirectory()) {
+          deleteFolder(curPath)
         } else {
-            fs.unlinkSync(path)
+          fs.unlinkSync(curPath)
         }
+      })
+      fs.rmdirSync(path)
+    } else {
+      fs.unlinkSync(path)
     }
+  }
 }
 
 /**
  * Delete file
  * @param path Path of the file to be deleted
  */
-function deleteFile (path) {
-    if (fs.existsSync(path)) {
-        if (fs.statSync(path).isDirectory()) {
-            deleteFolder(path)
-        } else {
-            fs.unlinkSync(path)
-        }
+function deleteFile(path) {
+  if (fs.existsSync(path)) {
+    if (fs.statSync(path).isDirectory()) {
+      deleteFolder(path)
+    } else {
+      fs.unlinkSync(path)
     }
+  }
 }
 
 /**
@@ -61,43 +61,43 @@ function deleteFile (path) {
  * @param from Source directory
  * @param to Target directory
  */
-function copyFolder (from, to) {
-    let files = []
-    // Whether the file exists If it does not exist, it is created
-    if (fs.existsSync(to)) {
-        files = fs.readdirSync(from)
-        files.forEach((file) => {
-            const targetPath = from + '/' + file;
-            const toPath = to + '/' + file;
+function copyFolder(from, to) {
+  let files = []
+  // Whether the file exists If it does not exist, it is created
+  if (fs.existsSync(to)) {
+    files = fs.readdirSync(from)
+    files.forEach((file) => {
+      const targetPath = from + '/' + file
+      const toPath = to + '/' + file
 
-            // Copy folder
-            if (fs.statSync(targetPath).isDirectory()) {
-                copyFolder(targetPath, toPath)
-            } else {
-                // Copy file
-                fs.copyFileSync(targetPath, toPath)
-            }
-        })
-    } else {
-        mkdirsSync(to)
-        copyFolder(from, to)
-    }
+      // Copy folder
+      if (fs.statSync(targetPath).isDirectory()) {
+        copyFolder(targetPath, toPath)
+      } else {
+        // Copy file
+        fs.copyFileSync(targetPath, toPath)
+      }
+    })
+  } else {
+    mkdirsSync(to)
+    copyFolder(from, to)
+  }
 }
 
 // Create a directory synchronization method recursively
 function mkdirsSync(dirname) {
-    if (fs.existsSync(dirname)) {
-        return true;
-    } else {
-        if (mkdirsSync(pathName.dirname(dirname))) {
-            fs.mkdirSync(dirname);
-            return true;
-        }
+  if (fs.existsSync(dirname)) {
+    return true
+  } else {
+    if (mkdirsSync(pathName.dirname(dirname))) {
+      fs.mkdirSync(dirname)
+      return true
     }
+  }
 }
 
 module.exports = {
-    deleteFolder,
-    deleteFile,
-    copyFolder
+  deleteFolder,
+  deleteFile,
+  copyFolder
 }
diff --git a/dashboard/src/main/webapp/public/index.html 
b/dashboard/src/main/webapp/public/index.html
index d703f0fe3..6d36f664e 100644
--- a/dashboard/src/main/webapp/public/index.html
+++ b/dashboard/src/main/webapp/public/index.html
@@ -15,18 +15,21 @@
   ~ limitations under the License.
   -->
 
-<!DOCTYPE html>
+<!doctype html>
 <html lang="">
   <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
     <title><%= htmlWebpackPlugin.options.title %></title>
   </head>
   <body>
     <noscript>
-      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't 
work properly without JavaScript enabled. Please enable it to continue.</strong>
+      <strong
+        >We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work 
properly without
+        JavaScript enabled. Please enable it to continue.</strong
+      >
     </noscript>
     <div id="app"></div>
     <!-- built files will be auto injected -->
diff --git a/dashboard/src/main/webapp/src/App.vue 
b/dashboard/src/main/webapp/src/App.vue
index deaa982ad..1eb251396 100644
--- a/dashboard/src/main/webapp/src/App.vue
+++ b/dashboard/src/main/webapp/src/App.vue
@@ -20,7 +20,7 @@
 </template>
 
 <script>
-import LayoutPage from "@/components/LayoutPage";
+import LayoutPage from '@/components/LayoutPage'
 export default {
   name: 'App',
   components: {
diff --git a/dashboard/src/main/webapp/src/api/api.js 
b/dashboard/src/main/webapp/src/api/api.js
index 8d4c7cd6f..155759a28 100644
--- a/dashboard/src/main/webapp/src/api/api.js
+++ b/dashboard/src/main/webapp/src/api/api.js
@@ -15,68 +15,68 @@
  * limitations under the License.
  */
 
-import http from "@/utils/http";
+import http from '@/utils/http'
 // Create a Coordinator information interface
-export function getCoordinatorServerInfo(params,headers) {
-    return http.get('/coordinator/info', params, headers, 0)
+export function getCoordinatorServerInfo(params, headers) {
+  return http.get('/coordinator/info', params, headers, 0)
 }
 
 // Create a coordinator configuration file interface
-export function getCoordinatorConf(params,headers) {
-    return http.get('/coordinator/conf', params, headers, 0)
+export function getCoordinatorConf(params, headers) {
+  return http.get('/coordinator/conf', params, headers, 0)
 }
 
 // Create an interface for the total number of nodes
-export function getShufflegetStatusTotal(params,headers) {
-    return http.get('/server/nodes/summary', params, headers, 0)
+export function getShufflegetStatusTotal(params, headers) {
+  return http.get('/server/nodes/summary', params, headers, 0)
 }
 
 // Create an interface for activeNodes
-export function getShuffleActiveNodes(params,headers) {
-    return http.get('/server/nodes?status=active', params, headers, 0)
+export function getShuffleActiveNodes(params, headers) {
+  return http.get('/server/nodes?status=active', params, headers, 0)
 }
 
 // Create an interface for lostNodes
-export function getShuffleLostList(params,headers) {
-    return http.get('/server/nodes?status=lost', params, headers, 0)
+export function getShuffleLostList(params, headers) {
+  return http.get('/server/nodes?status=lost', params, headers, 0)
 }
 
 // Create an interface for unhealthyNodes
-export function getShuffleUnhealthyList(params,headers) {
-    return http.get('/server/nodes?status=unhealthy', params, headers, 0)
+export function getShuffleUnhealthyList(params, headers) {
+  return http.get('/server/nodes?status=unhealthy', params, headers, 0)
 }
 
 // Create an interface for decommissioningNodes
-export function getShuffleDecommissioningList(params,headers) {
-    return http.get('/server/nodes?status=decommissioning', params, headers, 0)
+export function getShuffleDecommissioningList(params, headers) {
+  return http.get('/server/nodes?status=decommissioning', params, headers, 0)
 }
 
 // Create an interface for decommissionedNodes
-export function getShuffleDecommissionedList(params,headers) {
-    return http.get('/server/nodes?status=decommissioned', params, headers, 0)
+export function getShuffleDecommissionedList(params, headers) {
+  return http.get('/server/nodes?status=decommissioned', params, headers, 0)
 }
 
 // Create an interface for excludeNodes
-export function getShuffleExcludeNodes(params,headers) {
-    return http.get('/server/nodes?status=excluded', params, headers, 0)
+export function getShuffleExcludeNodes(params, headers) {
+  return http.get('/server/nodes?status=excluded', params, headers, 0)
 }
 
 // Total number of interfaces for new App
-export function getAppTotal(params,headers) {
-    return http.get('/app/total', params, headers, 0)
+export function getAppTotal(params, headers) {
+  return http.get('/app/total', params, headers, 0)
 }
 
 // Create an interface for the app basic information list
-export function getApplicationInfoList(params,headers) {
-    return http.get('/app/appInfos', params, headers, 0)
+export function getApplicationInfoList(params, headers) {
+  return http.get('/app/appInfos', params, headers, 0)
 }
 
 // Create an interface for the number of apps for a user
-export function getTotalForUser(params,headers) {
-    return http.get('/app/userTotal', params, headers, 0)
+export function getTotalForUser(params, headers) {
+  return http.get('/app/userTotal', params, headers, 0)
 }
 
 // Obtain the configured coordinator server list
-export function getAllCoordinatorAddrees(params,headers) {
-    return http.get('/coordinator/coordinatorServers', params, headers, 1)
+export function getAllCoordinatorAddrees(params, headers) {
+  return http.get('/coordinator/coordinatorServers', params, headers, 1)
 }
diff --git a/dashboard/src/main/webapp/src/components/LayoutPage.vue 
b/dashboard/src/main/webapp/src/components/LayoutPage.vue
index aa24a3847..a3ccbdcb7 100644
--- a/dashboard/src/main/webapp/src/components/LayoutPage.vue
+++ b/dashboard/src/main/webapp/src/components/LayoutPage.vue
@@ -22,17 +22,18 @@
         <el-row>
           <el-col :span="24">
             <el-menu
-                :default-active="activeIndex1"
-                router
-                class="el-menu-demo"
-                mode="horizontal"
-                background-color="#20B2AA"
-                box-shadow="0 -2px 8px 0 rgba(0,0,0,0.12)"
-                text-color="#fff"
-                active-text-color="#ffd04b">
+              :default-active="activeIndex1"
+              router
+              class="el-menu-demo"
+              mode="horizontal"
+              background-color="#20B2AA"
+              box-shadow="0 -2px 8px 0 rgba(0,0,0,0.12)"
+              text-color="#fff"
+              active-text-color="#ffd04b"
+            >
               <el-menu-item index="0">
                 <div class="unffilelogo">
-                  <img src="../assets/uniffle-logo.png" alt="unffile">
+                  <img src="../assets/uniffle-logo.png" alt="unffile" />
                 </div>
               </el-menu-item>
               <el-menu-item index="/coordinatorserverpage">
@@ -50,10 +51,11 @@
               <el-sub-menu index="">
                 <template #title>Switching server</template>
                 <el-menu-item
-                    v-for="item in hostNameAndPorts"
-                    :key="item.label"
-                    index="/nullpage"
-                    @click="changeServer(item.label)">
+                  v-for="item in hostNameAndPorts"
+                  :key="item.label"
+                  index="/nullpage"
+                  @click="changeServer(item.label)"
+                >
                   <span>{{ item.label }}</span>
                 </el-menu-item>
               </el-sub-menu>
@@ -75,9 +77,9 @@
 </template>
 
 <script>
-import {ref, reactive, onMounted} from 'vue'
-import {getAllCoordinatorAddrees} from '@/api/api'
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { ref, reactive, onMounted } from 'vue'
+import { getAllCoordinatorAddrees } from '@/api/api'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
@@ -96,11 +98,11 @@ export default {
 
     async function getSelectCurrentServer() {
       const res = await getAllCoordinatorAddrees()
-      const  selectCurrentServer = res.data.data
+      const selectCurrentServer = res.data.data
       currentServerStore.currentServer = Object.keys(selectCurrentServer)[0]
       hostNameAndPorts.length = 0
       Object.entries(selectCurrentServer).forEach(([key, value]) => {
-        hostNameAndPorts.push({"value": value, "label": key})
+        hostNameAndPorts.push({ value: value, label: key })
       })
     }
 
@@ -112,7 +114,7 @@ export default {
       activeIndex1,
       currentServerStore,
       hostNameAndPorts,
-      changeServer,
+      changeServer
     }
   }
 }
@@ -125,7 +127,7 @@ a {
 }
 
 .unffilelogo {
-  background-color: #20B2AA;
+  background-color: #20b2aa;
   height: 100%;
   position: relative;
 }
@@ -135,7 +137,7 @@ a {
 }
 
 .currentserver {
-  font-family: "Andale Mono";
+  font-family: 'Andale Mono';
   font-size: smaller;
   color: yellow;
 }
diff --git a/dashboard/src/main/webapp/src/main.js 
b/dashboard/src/main/webapp/src/main.js
index 1c5e2f3f1..4ab274134 100644
--- a/dashboard/src/main/webapp/src/main.js
+++ b/dashboard/src/main/webapp/src/main.js
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-import {createApp} from 'vue';
-import {createPinia} from 'pinia'
+import { createApp } from 'vue'
+import { createPinia } from 'pinia'
 import App from './App.vue'
 import ElementPlus from 'element-plus'
 import * as ElementPlusIconsVue from '@element-plus/icons-vue'
 import 'element-plus/dist/index.css'
-import router from "@/router";
+import router from '@/router'
 const app = createApp(App)
 const pinia = createPinia()
-Object.keys(ElementPlusIconsVue).forEach(key => {
-    app.component(key, ElementPlusIconsVue[key])
+Object.keys(ElementPlusIconsVue).forEach((key) => {
+  app.component(key, ElementPlusIconsVue[key])
 })
 app.use(router).use(pinia).use(ElementPlus).mount('#app')
diff --git a/dashboard/src/main/webapp/src/pages/ApplicationPage.vue 
b/dashboard/src/main/webapp/src/pages/ApplicationPage.vue
index 0a29fa897..0e0f31b31 100644
--- a/dashboard/src/main/webapp/src/pages/ApplicationPage.vue
+++ b/dashboard/src/main/webapp/src/pages/ApplicationPage.vue
@@ -29,84 +29,80 @@
         </el-card>
       </el-col>
     </el-row>
-    <el-divider/>
+    <el-divider />
     <el-tag>User App ranking</el-tag>
     <div>
       <el-table :data="pageData.userAppCount" height="250" style="width: 100%">
-        <el-table-column prop="userName" label="UserName" min-width="180"/>
-        <el-table-column prop="appNum" label="Totality" min-width="180"/>
+        <el-table-column prop="userName" label="UserName" min-width="180" />
+        <el-table-column prop="appNum" label="Totality" min-width="180" />
       </el-table>
     </div>
-    <el-divider/>
+    <el-divider />
     <el-tag>Apps</el-tag>
     <div>
       <el-table :data="pageData.appInfoData" height="250" style="width: 100%">
-        <el-table-column prop="appId" label="AppId" min-width="180"/>
-        <el-table-column prop="userName" label="UserName" min-width="180"/>
-        <el-table-column prop="updateTime" label="Update Time" 
min-width="180"/>
+        <el-table-column prop="appId" label="AppId" min-width="180" />
+        <el-table-column prop="userName" label="UserName" min-width="180" />
+        <el-table-column prop="updateTime" label="Update Time" min-width="180" 
/>
       </el-table>
     </div>
   </div>
 </template>
 
 <script>
-import {
-  getApplicationInfoList,
-  getAppTotal,
-  getTotalForUser
-} from "@/api/api";
-import {onMounted, reactive} from "vue";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { getApplicationInfoList, getAppTotal, getTotalForUser } from 
'@/api/api'
+import { onMounted, reactive } from 'vue'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
     const pageData = reactive({
       apptotal: {},
       userAppCount: [{}],
-      appInfoData: [{appId: "", userName: "", updateTime: ""}]
+      appInfoData: [{ appId: '', userName: '', updateTime: '' }]
     })
     const currentServerStore = useCurrentServerStore()
 
     async function getApplicationInfoListPage() {
-      const res = await getApplicationInfoList();
+      const res = await getApplicationInfoList()
       pageData.appInfoData = res.data.data
     }
 
     async function getTotalForUserPage() {
-      const res = await getTotalForUser();
+      const res = await getTotalForUser()
       pageData.userAppCount = res.data.data
     }
 
     async function getAppTotalPage() {
-      const res = await getAppTotal();
+      const res = await getAppTotal()
       pageData.apptotal = res.data.data
     }
 
     // The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
     currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
-        getApplicationInfoListPage();
-        getTotalForUserPage();
-        getAppTotalPage();
+        getApplicationInfoListPage()
+        getTotalForUserPage()
+        getAppTotalPage()
       }
     })
 
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getApplicationInfoListPage();
-        getTotalForUserPage();
-        getAppTotalPage();
+        getApplicationInfoListPage()
+        getTotalForUserPage()
+        getAppTotalPage()
       }
     })
-    return {pageData}
+    return { pageData }
   }
 }
 </script>
 
 <style>
 .appcnt {
-  font-family: "Lantinghei SC";
+  font-family: 'Lantinghei SC';
   font-style: normal;
   font-weight: bolder;
   font-size: 30px;
diff --git a/dashboard/src/main/webapp/src/pages/CoordinatorServerPage.vue 
b/dashboard/src/main/webapp/src/pages/CoordinatorServerPage.vue
index a0a292790..a13be3bde 100644
--- a/dashboard/src/main/webapp/src/pages/CoordinatorServerPage.vue
+++ b/dashboard/src/main/webapp/src/pages/CoordinatorServerPage.vue
@@ -20,16 +20,12 @@
     <el-collapse v-model="pageData.activeNames" accordion:false>
       <el-collapse-item title="Coordinator Server" name="1">
         <div>
-          <el-descriptions
-              class="margin-top"
-              :column="3"
-              :size="size"
-              border>
+          <el-descriptions class="margin-top" :column="3" :size="size" border>
             <el-descriptions-item>
               <template #label>
                 <div class="cell-item">
                   <el-icon :style="iconStyle">
-                    <Platform/>
+                    <Platform />
                   </el-icon>
                   Coordinatro ID
                 </div>
@@ -40,7 +36,7 @@
               <template #label>
                 <div class="cell-item">
                   <el-icon :style="iconStyle">
-                    <Link/>
+                    <Link />
                   </el-icon>
                   IP Address
                 </div>
@@ -51,7 +47,7 @@
               <template #label>
                 <div class="cell-item">
                   <el-icon :style="iconStyle">
-                    <Wallet/>
+                    <Wallet />
                   </el-icon>
                   Coordinator Server Port
                 </div>
@@ -62,7 +58,7 @@
               <template #label>
                 <div class="cell-item">
                   <el-icon :style="iconStyle">
-                    <Wallet/>
+                    <Wallet />
                   </el-icon>
                   Coordinator Web Port
                 </div>
@@ -74,8 +70,8 @@
       </el-collapse-item>
       <el-collapse-item title="Coordinator Properties" name="2">
         <el-table :data="pageData.tableData" stripe style="width: 100%">
-          <el-table-column prop="argumentKey" label="Name" min-width="380"/>
-          <el-table-column prop="argumentValue" label="Value" min-width="380"/>
+          <el-table-column prop="argumentKey" label="Name" min-width="380" />
+          <el-table-column prop="argumentValue" label="Value" min-width="380" 
/>
         </el-table>
       </el-collapse-item>
     </el-collapse>
@@ -83,19 +79,18 @@
 </template>
 
 <script>
-import {ref, reactive, computed, onMounted} from 'vue'
-import {getCoordinatorConf, getCoordinatorServerInfo} from "@/api/api";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { ref, reactive, computed, onMounted } from 'vue'
+import { getCoordinatorConf, getCoordinatorServerInfo } from '@/api/api'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
     const pageData = reactive({
-          activeNames: ['1', '2'],
-          tableData: [],
-          serverInfo: {}
-        }
-    );
-    const currentServerStore= useCurrentServerStore()
+      activeNames: ['1', '2'],
+      tableData: [],
+      serverInfo: {}
+    })
+    const currentServerStore = useCurrentServerStore()
 
     async function getCoordinatorServerConfPage() {
       const res = await getCoordinatorConf()
@@ -106,41 +101,43 @@ export default {
       pageData.serverInfo = res.data.data
     }
 
-    //The system obtains data from global variables and requests the interface 
to obtain new data after data changes.
-    currentServerStore.$subscribe((mutable,state)=>{
+    /**
+     * The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
+     */
+    currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
-        getCoordinatorServerConfPage();
-        getCoorServerInfo();
+        getCoordinatorServerConfPage()
+        getCoorServerInfo()
       }
     })
 
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getCoordinatorServerConfPage();
-        getCoorServerInfo();
+        getCoordinatorServerConfPage()
+        getCoorServerInfo()
       }
     })
-    
+
     const size = ref('')
     const iconStyle = computed(() => {
       const marginMap = {
         large: '8px',
         default: '6px',
-        small: '4px',
+        small: '4px'
       }
       return {
-        marginRight: marginMap[size.value] || marginMap.default,
+        marginRight: marginMap[size.value] || marginMap.default
       }
     })
     const blockMargin = computed(() => {
       const marginMap = {
         large: '32px',
         default: '28px',
-        small: '24px',
+        small: '24px'
       }
       return {
-        marginTop: marginMap[size.value] || marginMap.default,
+        marginTop: marginMap[size.value] || marginMap.default
       }
     })
 
diff --git a/dashboard/src/main/webapp/src/pages/ShuffleServerPage.vue 
b/dashboard/src/main/webapp/src/pages/ShuffleServerPage.vue
index 0c6ce6955..6c70f42dd 100644
--- a/dashboard/src/main/webapp/src/pages/ShuffleServerPage.vue
+++ b/dashboard/src/main/webapp/src/pages/ShuffleServerPage.vue
@@ -38,7 +38,9 @@
                 <span class="cardtile">Decommissioning</span>
               </div>
             </template>
-            <div class="decommissioningnode">{{ 
dataList.allshuffleServerSize.DECOMMISSIONING ?? 0 }}</div>
+            <div class="decommissioningnode">
+              {{ dataList.allshuffleServerSize.DECOMMISSIONING ?? 0 }}
+            </div>
           </el-card>
         </router-link>
       </el-col>
@@ -50,7 +52,9 @@
                 <span class="cardtile">Decommissioned</span>
               </div>
             </template>
-            <div class="decommissionednode">{{ 
dataList.allshuffleServerSize.DECOMMISSIONED ?? 0 }}</div>
+            <div class="decommissionednode">
+              {{ dataList.allshuffleServerSize.DECOMMISSIONED ?? 0 }}
+            </div>
           </el-card>
         </router-link>
       </el-col>
@@ -91,7 +95,7 @@
         </router-link>
       </el-col>
     </el-row>
-    <el-divider/>
+    <el-divider />
     <el-row :gutter="24">
       <div style="width: 100%">
         <router-view></router-view>
@@ -101,9 +105,9 @@
 </template>
 
 <script>
-import {onMounted, reactive} from 'vue'
-import {getShufflegetStatusTotal} from "@/api/api"
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { onMounted, reactive } from 'vue'
+import { getShufflegetStatusTotal } from '@/api/api'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
@@ -117,27 +121,27 @@ export default {
         UNHEALTHY: 0
       }
     })
-    const currentServerStore= useCurrentServerStore()
+    const currentServerStore = useCurrentServerStore()
 
     async function getShufflegetStatusTotalPage() {
-      const res = await getShufflegetStatusTotal();
+      const res = await getShufflegetStatusTotal()
       dataList.allshuffleServerSize = res.data.data
     }
 
     // The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
-    currentServerStore.$subscribe((mutable,state)=>{
+    currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
-        getShufflegetStatusTotalPage();
+        getShufflegetStatusTotalPage()
       }
     })
 
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getShufflegetStatusTotalPage();
+        getShufflegetStatusTotalPage()
       }
     })
-    return {dataList}
+    return { dataList }
   }
 }
 </script>
@@ -148,7 +152,7 @@ export default {
 }
 
 .activenode {
-  font-family: "Lantinghei SC";
+  font-family: 'Lantinghei SC';
   font-style: normal;
   font-weight: bolder;
   font-size: 30px;
@@ -157,7 +161,7 @@ export default {
 }
 
 .decommissioningnode {
-  font-family: "Lantinghei SC";
+  font-family: 'Lantinghei SC';
   font-style: normal;
   font-weight: bolder;
   font-size: 30px;
@@ -166,7 +170,7 @@ export default {
 }
 
 .decommissionednode {
-  font-family: "Lantinghei SC";
+  font-family: 'Lantinghei SC';
   font-style: normal;
   font-weight: bolder;
   font-size: 30px;
@@ -175,7 +179,7 @@ export default {
 }
 
 .lostnode {
-  font-family: "Lantinghei SC";
+  font-family: 'Lantinghei SC';
   font-style: normal;
   font-weight: bolder;
   font-size: 30px;
@@ -184,7 +188,7 @@ export default {
 }
 
 .unhealthynode {
-  font-family: "Lantinghei SC";
+  font-family: 'Lantinghei SC';
   font-style: normal;
   font-weight: bolder;
   font-size: 30px;
@@ -193,7 +197,7 @@ export default {
 }
 
 .excludesnode {
-  font-family: "Lantinghei SC";
+  font-family: 'Lantinghei SC';
   font-style: normal;
   font-weight: bolder;
   font-size: 30px;
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/ActiveNodeListPage.vue 
b/dashboard/src/main/webapp/src/pages/serverstatus/ActiveNodeListPage.vue
index e1dce0767..35166900b 100644
--- a/dashboard/src/main/webapp/src/pages/serverstatus/ActiveNodeListPage.vue
+++ b/dashboard/src/main/webapp/src/pages/serverstatus/ActiveNodeListPage.vue
@@ -18,54 +18,69 @@
 <template>
   <div>
     <el-table :data="pageData.tableData" height="550" style="width: 100%">
-      <el-table-column prop="id" label="Id" min-width="140"/>
-      <el-table-column prop="ip" label="IP" min-width="80"/>
-      <el-table-column prop="grpcPort" label="GrpcPort" min-width="80"/>
-      <el-table-column prop="nettyPort" label="NettyPort" min-width="80"/>
-      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter"/>
-      <el-table-column prop="preAllocatedMemory" label="PreAllocatedMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="availableMemory" label="AvailableMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80"/>
-      <el-table-column prop="status" label="Status" min-width="80"/>
-      <el-table-column prop="timestamp" label="RegistrationTime" 
min-width="80" :formatter="dateFormatter"/>
-      <el-table-column prop="tags" label="Tags" min-width="80"/>
+      <el-table-column prop="id" label="Id" min-width="140" />
+      <el-table-column prop="ip" label="IP" min-width="80" />
+      <el-table-column prop="grpcPort" label="GrpcPort" min-width="80" />
+      <el-table-column prop="nettyPort" label="NettyPort" min-width="80" />
+      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter" />
+      <el-table-column
+        prop="preAllocatedMemory"
+        label="PreAllocatedMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column
+        prop="availableMemory"
+        label="AvailableMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
+      <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+        prop="timestamp"
+        label="RegistrationTime"
+        min-width="80"
+        :formatter="dateFormatter"
+      />
+      <el-table-column prop="tags" label="Tags" min-width="80" />
     </el-table>
   </div>
 </template>
 <script>
-import {onMounted, reactive} from 'vue'
-import { getShuffleActiveNodes} from "@/api/api";
-import {memFormatter, dateFormatter} from "@/utils/common";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { onMounted, reactive } from 'vue'
+import { getShuffleActiveNodes } from '@/api/api'
+import { memFormatter, dateFormatter } from '@/utils/common'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
     const pageData = reactive({
       tableData: [
         {
-          id: "",
-          ip: "",
+          id: '',
+          ip: '',
           grpcPort: 0,
-          nettyPort:0,
+          nettyPort: 0,
           usedMemory: 0,
           preAllocatedMemory: 0,
           availableMemory: 0,
           eventNumInFlush: 0,
-          tags: "",
-          status: "",
-          timestamp: ""
+          tags: '',
+          status: '',
+          timestamp: ''
         }
       ]
     })
-    const currentServerStore= useCurrentServerStore()
+    const currentServerStore = useCurrentServerStore()
 
     async function getShuffleActiveNodesPage() {
-      const res = await getShuffleActiveNodes();
+      const res = await getShuffleActiveNodes()
       pageData.tableData = res.data.data
     }
 
     // The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
-    currentServerStore.$subscribe((mutable,state)=>{
+    currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
         getShuffleActiveNodesPage()
       }
@@ -74,11 +89,11 @@ export default {
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getShuffleActiveNodesPage();
+        getShuffleActiveNodesPage()
       }
     })
 
-    return {pageData, memFormatter, dateFormatter}
+    return { pageData, memFormatter, dateFormatter }
   }
 }
 </script>
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/DecommissionednodeListPage.vue
 
b/dashboard/src/main/webapp/src/pages/serverstatus/DecommissionednodeListPage.vue
index c95da69bd..cdcc3fb55 100644
--- 
a/dashboard/src/main/webapp/src/pages/serverstatus/DecommissionednodeListPage.vue
+++ 
b/dashboard/src/main/webapp/src/pages/serverstatus/DecommissionednodeListPage.vue
@@ -18,67 +18,82 @@
 <template>
   <div>
     <el-table :data="pageData.tableData" height="550" style="width: 100%">
-      <el-table-column prop="id" label="Id" min-width="140"/>
-      <el-table-column prop="ip" label="IP" min-width="80"/>
-      <el-table-column prop="grpcPort" label="Port" min-width="80"/>
-      <el-table-column prop="nettyPort" label="NettyPort" min-width="80"/>
-      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter"/>
-      <el-table-column prop="preAllocatedMemory" label="PreAllocatedMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="availableMemory" label="AvailableMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80"/>
-      <el-table-column prop="status" label="Status" min-width="80"/>
-      <el-table-column prop="timestamp" label="RegistrationTime" 
min-width="80" :formatter="dateFormatter"/>
-      <el-table-column prop="tags" label="Tags" min-width="80"/>
+      <el-table-column prop="id" label="Id" min-width="140" />
+      <el-table-column prop="ip" label="IP" min-width="80" />
+      <el-table-column prop="grpcPort" label="Port" min-width="80" />
+      <el-table-column prop="nettyPort" label="NettyPort" min-width="80" />
+      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter" />
+      <el-table-column
+        prop="preAllocatedMemory"
+        label="PreAllocatedMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column
+        prop="availableMemory"
+        label="AvailableMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
+      <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+        prop="timestamp"
+        label="RegistrationTime"
+        min-width="80"
+        :formatter="dateFormatter"
+      />
+      <el-table-column prop="tags" label="Tags" min-width="80" />
     </el-table>
   </div>
 </template>
 <script>
-import {onMounted, reactive} from 'vue'
-import { getShuffleDecommissionedList } from "@/api/api";
-import {memFormatter, dateFormatter} from "@/utils/common";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore';
+import { onMounted, reactive } from 'vue'
+import { getShuffleDecommissionedList } from '@/api/api'
+import { memFormatter, dateFormatter } from '@/utils/common'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
     const pageData = reactive({
       tableData: [
         {
-          id: "",
-          ip: "",
+          id: '',
+          ip: '',
           grpcPort: 0,
-          nettyPort:0,
+          nettyPort: 0,
           usedMemory: 0,
           preAllocatedMemory: 0,
           availableMemory: 0,
           eventNumInFlush: 0,
-          tags: "",
-          status: "",
-          timestamp: ""
+          tags: '',
+          status: '',
+          timestamp: ''
         }
       ]
     })
-    const currentServerStore= useCurrentServerStore()
+    const currentServerStore = useCurrentServerStore()
 
     async function getShuffleDecommissionedListPage() {
-      const res = await getShuffleDecommissionedList();
+      const res = await getShuffleDecommissionedList()
       pageData.tableData = res.data.data
     }
 
     // The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
-    currentServerStore.$subscribe((mutable,state)=>{
+    currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
-        getShuffleDecommissionedListPage();
+        getShuffleDecommissionedListPage()
       }
     })
 
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getShuffleDecommissionedListPage();
+        getShuffleDecommissionedListPage()
       }
     })
 
-    return {pageData, memFormatter, dateFormatter}
+    return { pageData, memFormatter, dateFormatter }
   }
 }
 </script>
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/DecommissioningNodeListPage.vue
 
b/dashboard/src/main/webapp/src/pages/serverstatus/DecommissioningNodeListPage.vue
index d6d7a75e6..a289fa6b6 100644
--- 
a/dashboard/src/main/webapp/src/pages/serverstatus/DecommissioningNodeListPage.vue
+++ 
b/dashboard/src/main/webapp/src/pages/serverstatus/DecommissioningNodeListPage.vue
@@ -18,69 +18,82 @@
 <template>
   <div>
     <el-table :data="pageData.tableData" height="550" style="width: 100%">
-      <el-table-column prop="id" label="Id" min-width="140"/>
-      <el-table-column prop="ip" label="IP" min-width="80"/>
-      <el-table-column prop="grpcPort" label="Port" min-width="80"/>
-      <el-table-column prop="nettyPort" label="NettyPort" min-width="80"/>
-      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter"/>
-      <el-table-column prop="preAllocatedMemory" label="PreAllocatedMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="availableMemory" label="AvailableMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80"/>
-      <el-table-column prop="status" label="Status" min-width="80"/>
-      <el-table-column prop="timestamp" label="RegistrationTime" 
min-width="80" :formatter="dateFormatter"/>
-      <el-table-column prop="tags" label="Tags" min-width="80"/>
+      <el-table-column prop="id" label="Id" min-width="140" />
+      <el-table-column prop="ip" label="IP" min-width="80" />
+      <el-table-column prop="grpcPort" label="Port" min-width="80" />
+      <el-table-column prop="nettyPort" label="NettyPort" min-width="80" />
+      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter" />
+      <el-table-column
+        prop="preAllocatedMemory"
+        label="PreAllocatedMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column
+        prop="availableMemory"
+        label="AvailableMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
+      <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+        prop="timestamp"
+        label="RegistrationTime"
+        min-width="80"
+        :formatter="dateFormatter"
+      />
+      <el-table-column prop="tags" label="Tags" min-width="80" />
     </el-table>
   </div>
 </template>
 <script>
-import {onMounted, reactive} from 'vue'
-import { getShuffleDecommissioningList } from "@/api/api";
-import {memFormatter, dateFormatter} from "@/utils/common";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { onMounted, reactive } from 'vue'
+import { getShuffleDecommissioningList } from '@/api/api'
+import { memFormatter, dateFormatter } from '@/utils/common'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
     const pageData = reactive({
       tableData: [
         {
-          id: "",
-          ip: "",
+          id: '',
+          ip: '',
           grpcPort: 0,
-          nettyPort:0,
+          nettyPort: 0,
           usedMemory: 0,
           preAllocatedMemory: 0,
           availableMemory: 0,
           eventNumInFlush: 0,
-          tags: "",
-          status: "",
-          timestamp: ""
+          tags: '',
+          status: '',
+          timestamp: ''
         }
       ]
     })
-    const currentServerStore= useCurrentServerStore()
+    const currentServerStore = useCurrentServerStore()
 
     async function getShuffleDecommissioningListPage() {
-      const res = await getShuffleDecommissioningList();
+      const res = await getShuffleDecommissioningList()
       pageData.tableData = res.data.data
     }
 
     // The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
-    currentServerStore.$subscribe((mutable,state)=>{
+    currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
-        getShuffleDecommissioningListPage();
+        getShuffleDecommissioningListPage()
       }
     })
 
-
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getShuffleDecommissioningListPage();
+        getShuffleDecommissioningListPage()
       }
     })
 
-
-    return {pageData, memFormatter, dateFormatter}
+    return { pageData, memFormatter, dateFormatter }
   }
 }
 </script>
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/ExcludeNodeList.vue 
b/dashboard/src/main/webapp/src/pages/serverstatus/ExcludeNodeList.vue
index 3566657f9..4e3b7f861 100644
--- a/dashboard/src/main/webapp/src/pages/serverstatus/ExcludeNodeList.vue
+++ b/dashboard/src/main/webapp/src/pages/serverstatus/ExcludeNodeList.vue
@@ -18,46 +18,46 @@
 <template>
   <div>
     <el-table :data="pageData.tableData" height="550" style="width: 100%">
-      <el-table-column prop="id" label="ExcludeNodeId" min-width="180"/>
+      <el-table-column prop="id" label="ExcludeNodeId" min-width="180" />
     </el-table>
   </div>
 </template>
 <script>
-import {onMounted, reactive} from 'vue'
-import { getShuffleExcludeNodes } from "@/api/api";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { onMounted, reactive } from 'vue'
+import { getShuffleExcludeNodes } from '@/api/api'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
     const pageData = reactive({
       tableData: [
         {
-          id:""
+          id: ''
         }
       ]
     })
-    const currentServerStore= useCurrentServerStore()
+    const currentServerStore = useCurrentServerStore()
 
     async function getShuffleExcludeNodesPage() {
-      const res = await getShuffleExcludeNodes();
+      const res = await getShuffleExcludeNodes()
       pageData.tableData = res.data.data
     }
 
     // The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
-    currentServerStore.$subscribe((mutable,state)=>{
+    currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
-        getShuffleExcludeNodesPage();
+        getShuffleExcludeNodesPage()
       }
     })
 
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getShuffleExcludeNodesPage();
+        getShuffleExcludeNodesPage()
       }
     })
 
-    return {pageData}
+    return { pageData }
   }
 }
 </script>
diff --git a/dashboard/src/main/webapp/src/pages/serverstatus/LostNodeList.vue 
b/dashboard/src/main/webapp/src/pages/serverstatus/LostNodeList.vue
index adfef3f52..9beb8d881 100644
--- a/dashboard/src/main/webapp/src/pages/serverstatus/LostNodeList.vue
+++ b/dashboard/src/main/webapp/src/pages/serverstatus/LostNodeList.vue
@@ -18,70 +18,83 @@
 <template>
   <div>
     <el-table :data="pageData.tableData" height="550" style="width: 100%">
-      <el-table-column prop="id" label="Id" min-width="140"/>
-      <el-table-column prop="ip" label="IP" min-width="80"/>
-      <el-table-column prop="grpcPort" label="Port" min-width="80"/>
-      <el-table-column prop="nettyPort" label="NettyPort" min-width="80"/>
-      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter"/>
-      <el-table-column prop="preAllocatedMemory" label="PreAllocatedMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="availableMemory" label="AvailableMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80"/>
-      <el-table-column prop="status" label="Status" min-width="80"/>
-      <el-table-column prop="timestamp" label="RegistrationTime" 
min-width="80" :formatter="dateFormatter"/>
-      <el-table-column prop="tags" label="Tags" min-width="80"/>
+      <el-table-column prop="id" label="Id" min-width="140" />
+      <el-table-column prop="ip" label="IP" min-width="80" />
+      <el-table-column prop="grpcPort" label="Port" min-width="80" />
+      <el-table-column prop="nettyPort" label="NettyPort" min-width="80" />
+      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter" />
+      <el-table-column
+        prop="preAllocatedMemory"
+        label="PreAllocatedMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column
+        prop="availableMemory"
+        label="AvailableMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
+      <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+        prop="timestamp"
+        label="RegistrationTime"
+        min-width="80"
+        :formatter="dateFormatter"
+      />
+      <el-table-column prop="tags" label="Tags" min-width="80" />
     </el-table>
   </div>
 </template>
 <script>
-import {onMounted, reactive} from 'vue'
-import { getShuffleLostList } from "@/api/api";
-import {memFormatter, dateFormatter} from "@/utils/common";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { onMounted, reactive } from 'vue'
+import { getShuffleLostList } from '@/api/api'
+import { memFormatter, dateFormatter } from '@/utils/common'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
     const pageData = reactive({
       tableData: [
         {
-          id: "",
-          ip: "",
+          id: '',
+          ip: '',
           grpcPort: 0,
-          nettyPort:0,
+          nettyPort: 0,
           usedMemory: 0,
           preAllocatedMemory: 0,
           availableMemory: 0,
           eventNumInFlush: 0,
-          tags: "",
-          status: "",
-          timestamp: ""
+          tags: '',
+          status: '',
+          timestamp: ''
         }
       ]
     })
 
-    const currentServerStore= useCurrentServerStore()
+    const currentServerStore = useCurrentServerStore()
 
     async function getShuffleLostListPage() {
-      const res = await getShuffleLostList();
+      const res = await getShuffleLostList()
       pageData.tableData = res.data.data
     }
 
     // The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
-    currentServerStore.$subscribe((mutable,state)=>{
+    currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
-        getShuffleLostListPage();
+        getShuffleLostListPage()
       }
     })
 
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getShuffleLostListPage();
+        getShuffleLostListPage()
       }
     })
 
-
-
-    return {pageData, memFormatter, dateFormatter}
+    return { pageData, memFormatter, dateFormatter }
   }
 }
 </script>
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue 
b/dashboard/src/main/webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue
index 627ce47cf..c568bf539 100644
--- a/dashboard/src/main/webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue
+++ b/dashboard/src/main/webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue
@@ -18,68 +18,82 @@
 <template>
   <div>
     <el-table :data="pageData.tableData" height="550" style="width: 100%">
-      <el-table-column prop="id" label="Id" min-width="140"/>
-      <el-table-column prop="ip" label="IP" min-width="80"/>
-      <el-table-column prop="grpcPort" label="Port" min-width="80"/>
-      <el-table-column prop="nettyPort" label="NettyPort" min-width="80"/>
-      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter"/>
-      <el-table-column prop="preAllocatedMemory" label="PreAllocatedMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="availableMemory" label="AvailableMem" 
min-width="80" :formatter="memFormatter"/>
-      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80"/>
-      <el-table-column prop="status" label="Status" min-width="80"/>
-      <el-table-column prop="timestamp" label="RegistrationTime" 
min-width="80" :formatter="dateFormatter"/>
-      <el-table-column prop="tags" label="Tags" min-width="80"/>
+      <el-table-column prop="id" label="Id" min-width="140" />
+      <el-table-column prop="ip" label="IP" min-width="80" />
+      <el-table-column prop="grpcPort" label="Port" min-width="80" />
+      <el-table-column prop="nettyPort" label="NettyPort" min-width="80" />
+      <el-table-column prop="usedMemory" label="UsedMem" min-width="80" 
:formatter="memFormatter" />
+      <el-table-column
+        prop="preAllocatedMemory"
+        label="PreAllocatedMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column
+        prop="availableMemory"
+        label="AvailableMem"
+        min-width="80"
+        :formatter="memFormatter"
+      />
+      <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
+      <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+        prop="timestamp"
+        label="RegistrationTime"
+        min-width="80"
+        :formatter="dateFormatter"
+      />
+      <el-table-column prop="tags" label="Tags" min-width="80" />
     </el-table>
   </div>
 </template>
 <script>
-import {onMounted, reactive} from 'vue'
-import { getShuffleUnhealthyList } from "@/api/api";
-import {memFormatter, dateFormatter} from "@/utils/common";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
+import { onMounted, reactive } from 'vue'
+import { getShuffleUnhealthyList } from '@/api/api'
+import { memFormatter, dateFormatter } from '@/utils/common'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 export default {
   setup() {
     const pageData = reactive({
       tableData: [
         {
-          id: "",
-          ip: "",
+          id: '',
+          ip: '',
           grpcPort: 0,
-          nettyPort:0,
+          nettyPort: 0,
           usedMemory: 0,
           preAllocatedMemory: 0,
           availableMemory: 0,
           eventNumInFlush: 0,
-          tags: "",
-          status: "",
-          timestamp: ""
+          tags: '',
+          status: '',
+          timestamp: ''
         }
       ]
     })
-    const currentServerStore= useCurrentServerStore()
+    const currentServerStore = useCurrentServerStore()
 
     async function getShuffleUnhealthyListPage() {
-      const res = await getShuffleUnhealthyList();
+      const res = await getShuffleUnhealthyList()
       pageData.tableData = res.data.data
     }
 
     // The system obtains data from global variables and requests the 
interface to obtain new data after data changes.
-    currentServerStore.$subscribe((mutable,state)=>{
+    currentServerStore.$subscribe((mutable, state) => {
       if (state.currentServer) {
-        getShuffleUnhealthyListPage();
+        getShuffleUnhealthyListPage()
       }
     })
 
     onMounted(() => {
       // If the coordinator address to request is not found in the global 
variable, the request is not initiated.
       if (currentServerStore.currentServer) {
-        getShuffleUnhealthyListPage();
+        getShuffleUnhealthyListPage()
       }
     })
 
-
-    return {pageData, memFormatter, dateFormatter}
+    return { pageData, memFormatter, dateFormatter }
   }
 }
 </script>
diff --git a/dashboard/src/main/webapp/src/router/index.js 
b/dashboard/src/main/webapp/src/router/index.js
index 5bccc8496..950c11181 100644
--- a/dashboard/src/main/webapp/src/router/index.js
+++ b/dashboard/src/main/webapp/src/router/index.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import {createRouter, createWebHashHistory} from "vue-router"
+import { createRouter, createWebHashHistory } from 'vue-router'
 import ApplicationPage from '@/pages/ApplicationPage.vue'
 import CoordinatorServerPage from '@/pages/CoordinatorServerPage.vue'
 import ShuffleServerPage from '@/pages/ShuffleServerPage.vue'
@@ -27,49 +27,67 @@ import UnhealthyNodeListPage from 
'@/pages/serverstatus/UnhealthyNodeListPage'
 import ExcludeNodeList from '@/pages/serverstatus/ExcludeNodeList'
 
 const routes = [
-    {
-        path: '/coordinatorserverpage',
-        name: 'coordinatorserverpage',
-        component: CoordinatorServerPage
-    },
-    {
-        path: '/shuffleserverpage',
-        name: 'shuffleserverpage',
-        component: ShuffleServerPage,
-        redirect: '/shuffleserverpage/activeNodeList',
-        children: [
-            {path: '/shuffleserverpage/activeNodeList', name: 
"activeNodeList", component: ActiveNodeListPage},
-            {
-                path: '/shuffleserverpage/decommissioningNodeList',
-                name: "decommissioningNodeList",
-                component: DecommissioningNodeListPage
-            },
-            {
-                path: '/shuffleserverpage/decommissionedNodeList',
-                name: "decommissionedNodeList",
-                component: DecommissionednodeListPage
-            },
-            {path: '/shuffleserverpage/lostNodeList', name: "lostNodeList", 
component: LostNodeList},
-            {path: '/shuffleserverpage/unhealthyNodeList', name: 
"unhealthyNodeList", component: UnhealthyNodeListPage},
-            {path: '/shuffleserverpage/excludeNodeList', name: 
"excludeNodeList", component: ExcludeNodeList},
-        ]
-    },
-    {
-        path: '/applicationpage',
-        name: 'applicationpage',
-        component: ApplicationPage,
-    },
-    {
-        path: '/nullpage',
-        name: 'nullpage',
-        beforeEnter:(to,from,next)=>{next(false)},
-        component: ApplicationPage
+  {
+    path: '/coordinatorserverpage',
+    name: 'coordinatorserverpage',
+    component: CoordinatorServerPage
+  },
+  {
+    path: '/shuffleserverpage',
+    name: 'shuffleserverpage',
+    component: ShuffleServerPage,
+    redirect: '/shuffleserverpage/activeNodeList',
+    children: [
+      {
+        path: '/shuffleserverpage/activeNodeList',
+        name: 'activeNodeList',
+        component: ActiveNodeListPage
+      },
+      {
+        path: '/shuffleserverpage/decommissioningNodeList',
+        name: 'decommissioningNodeList',
+        component: DecommissioningNodeListPage
+      },
+      {
+        path: '/shuffleserverpage/decommissionedNodeList',
+        name: 'decommissionedNodeList',
+        component: DecommissionednodeListPage
+      },
+      {
+        path: '/shuffleserverpage/lostNodeList',
+        name: 'lostNodeList',
+        component: LostNodeList
+      },
+      {
+        path: '/shuffleserverpage/unhealthyNodeList',
+        name: 'unhealthyNodeList',
+        component: UnhealthyNodeListPage
+      },
+      {
+        path: '/shuffleserverpage/excludeNodeList',
+        name: 'excludeNodeList',
+        component: ExcludeNodeList
+      }
+    ]
+  },
+  {
+    path: '/applicationpage',
+    name: 'applicationpage',
+    component: ApplicationPage
+  },
+  {
+    path: '/nullpage',
+    name: 'nullpage',
+    beforeEnter: (to, from, next) => {
+      next(false)
     },
+    component: ApplicationPage
+  }
 ]
 
 const router = createRouter({
-    history: createWebHashHistory(),
-    routes
+  history: createWebHashHistory(),
+  routes
 })
 
 export default router
diff --git a/dashboard/src/main/webapp/src/store/useCurrentServerStore.js 
b/dashboard/src/main/webapp/src/store/useCurrentServerStore.js
index be6ab0807..f03375164 100644
--- a/dashboard/src/main/webapp/src/store/useCurrentServerStore.js
+++ b/dashboard/src/main/webapp/src/store/useCurrentServerStore.js
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-import {defineStore} from 'pinia'
-import {ref} from 'vue'
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
 
 /**
  * Create a global shared repository that allows you to share state across 
components/pages.
  * @type {StoreDefinition<"overall", 
_ExtractStateFromSetupStore<{currentServer: Ref<UnwrapRef<string>>}>, 
_ExtractGettersFromSetupStore<{currentServer: Ref<UnwrapRef<string>>}>, 
_ExtractActionsFromSetupStore<{currentServer: Ref<UnwrapRef<string>>}>>}
  */
 export const useCurrentServerStore = defineStore('overall', () => {
-    const currentServer = ref('')
-    return { currentServer }
+  const currentServer = ref('')
+  return { currentServer }
 })
diff --git a/dashboard/src/main/webapp/src/utils/common.js 
b/dashboard/src/main/webapp/src/utils/common.js
index d8c9488f2..d0e86397d 100644
--- a/dashboard/src/main/webapp/src/utils/common.js
+++ b/dashboard/src/main/webapp/src/utils/common.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import moment from "moment"
+import moment from 'moment'
 /**
  * Format the memory display value.
  * @param row
@@ -24,16 +24,16 @@ import moment from "moment"
  * @returns {string}
  */
 const memFormatter = (row, column, cellValue) => {
-    var arrUnit = ["B", "K", "M", "G", "T", "P"],
-        baseStep = 1024,
-        unitCount = arrUnit.length,
-        unitIndex = 0;
-    while(cellValue >= baseStep && unitIndex < unitCount - 1){
-        unitIndex++;
-        cellValue /= baseStep;
-    }
-    cellValue = cellValue.toFixed(2);
-    return cellValue + " " + arrUnit[unitIndex];
+  const arrUnit = ['B', 'K', 'M', 'G', 'T', 'P']
+  const baseStep = 1024
+  const unitCount = arrUnit.length
+  let unitIndex = 0
+  while (cellValue >= baseStep && unitIndex < unitCount - 1) {
+    unitIndex++
+    cellValue /= baseStep
+  }
+  cellValue = cellValue.toFixed(2)
+  return cellValue + ' ' + arrUnit[unitIndex]
 }
 /**
  * Format the time display value.
@@ -43,7 +43,7 @@ const memFormatter = (row, column, cellValue) => {
  * @returns {string}
  */
 const dateFormatter = (row, column, cellValue) => {
-    return moment(cellValue).format("YYYY-MM-DD HH:mm:ss");
+  return moment(cellValue).format('YYYY-MM-DD HH:mm:ss')
 }
 
-export {memFormatter, dateFormatter}
+export { memFormatter, dateFormatter }
diff --git a/dashboard/src/main/webapp/src/utils/http.js 
b/dashboard/src/main/webapp/src/utils/http.js
index 87ca359bb..c22f78e50 100644
--- a/dashboard/src/main/webapp/src/utils/http.js
+++ b/dashboard/src/main/webapp/src/utils/http.js
@@ -15,40 +15,39 @@
  * limitations under the License.
  */
 
-import request from "@/utils/request";
-import {useCurrentServerStore} from '@/store/useCurrentServerStore'
-
+import request from '@/utils/request'
+import { useCurrentServerStore } from '@/store/useCurrentServerStore'
 
 const http = {
-    get(url, params, headers, fontBackFlag) {
-        if (fontBackFlag == 0) {
-            // The system obtains the address of the Coordinator to be 
accessed from global variables.
-            const currentServerStore= useCurrentServerStore()
-            if (typeof headers !== 'undefined') {
-                headers['targetAddress'] = currentServerStore.currentServer;
-            } else {
-                headers = {}
-                headers['targetAddress'] = currentServerStore.currentServer;
-            }
-            return request.getBackEndAxiosInstance().get(url,{params,headers});
-        } else {
-            return 
request.getFrontEndAxiosInstance().get(url,{params,headers});
-        }
-    },
-    post(url, data, headers, fontBackFlag) {
-        if (fontBackFlag == 0) {
-            // The system obtains the address of the Coordinator to be 
accessed from global variables.
-            const currentServerStore= useCurrentServerStore()
-            if (typeof headers !== 'undefined') {
-                headers['targetAddress'] = currentServerStore.currentServer;
-            } else {
-                headers = {}
-                headers['targetAddress'] = currentServerStore.currentServer;
-            }
-            return request.getBackEndAxiosInstance().post(url,data,headers);
-        } else {
-            return request.getFrontEndAxiosInstance().post(url,data,headers);
-        }
+  get(url, params, headers, fontBackFlag) {
+    if (fontBackFlag === 0) {
+      // The system obtains the address of the Coordinator to be accessed from 
global variables.
+      const currentServerStore = useCurrentServerStore()
+      if (typeof headers !== 'undefined') {
+        headers.targetAddress = currentServerStore.currentServer
+      } else {
+        headers = {}
+        headers.targetAddress = currentServerStore.currentServer
+      }
+      return request.getBackEndAxiosInstance().get(url, { params, headers })
+    } else {
+      return request.getFrontEndAxiosInstance().get(url, { params, headers })
+    }
+  },
+  post(url, data, headers, fontBackFlag) {
+    if (fontBackFlag === 0) {
+      // The system obtains the address of the Coordinator to be accessed from 
global variables.
+      const currentServerStore = useCurrentServerStore()
+      if (typeof headers !== 'undefined') {
+        headers.targetAddress = currentServerStore.currentServer
+      } else {
+        headers = {}
+        headers.targetAddress = currentServerStore.currentServer
+      }
+      return request.getBackEndAxiosInstance().post(url, data, headers)
+    } else {
+      return request.getFrontEndAxiosInstance().post(url, data, headers)
     }
+  }
 }
 export default http
diff --git a/dashboard/src/main/webapp/src/utils/request.js 
b/dashboard/src/main/webapp/src/utils/request.js
index 5d7c72068..783539b72 100644
--- a/dashboard/src/main/webapp/src/utils/request.js
+++ b/dashboard/src/main/webapp/src/utils/request.js
@@ -22,49 +22,55 @@ import axios from 'axios'
  * @type {axios.AxiosInstance}
  */
 const frontEndAxiosInstance = axios.create({
-    baseURL: '/web',
-    timeout: 10000
+  baseURL: '/web',
+  timeout: 10000
 })
 /**
  * The root directory starts with API. The dashboard server reverse proxy 
requests Coordinator apis
  * @type {axios.AxiosInstance}
  */
-const backEndAxiosInstance=axios.create({
-    baseURL: '/api',
-    timeout: 10000
+const backEndAxiosInstance = axios.create({
+  baseURL: '/api',
+  timeout: 10000
 })
 
 const axiosInstance = {
-    getFrontEndAxiosInstance(){
-        return frontEndAxiosInstance
-    },
-    getBackEndAxiosInstance(){
-        return backEndAxiosInstance
-    }
+  getFrontEndAxiosInstance() {
+    return frontEndAxiosInstance
+  },
+  getBackEndAxiosInstance() {
+    return backEndAxiosInstance
+  }
 }
 
-frontEndAxiosInstance.interceptors.request.use(config => {
-    config.headers['Content-type'] = 'application/json';
-    config.headers['Accept'] = 'application/json';
-    return config;
+frontEndAxiosInstance.interceptors.request.use((config) => {
+  config.headers['Content-type'] = 'application/json'
+  config.headers.Accept = 'application/json'
+  return config
 })
 
-backEndAxiosInstance.interceptors.request.use(config => {
-    config.headers['Content-type'] = 'application/json';
-    config.headers['Accept'] = 'application/json';
-    return config;
+backEndAxiosInstance.interceptors.request.use((config) => {
+  config.headers['Content-type'] = 'application/json'
+  config.headers.Accept = 'application/json'
+  return config
 })
 
-frontEndAxiosInstance.interceptors.response.use(response => {
-    return response;
-}, error => {
-    return error;
-})
+frontEndAxiosInstance.interceptors.response.use(
+  (response) => {
+    return response
+  },
+  (error) => {
+    return error
+  }
+)
 
-backEndAxiosInstance.interceptors.response.use(response => {
-    return response;
-}, error => {
-    return error;
-})
+backEndAxiosInstance.interceptors.response.use(
+  (response) => {
+    return response
+  },
+  (error) => {
+    return error
+  }
+)
 
-export default axiosInstance;
+export default axiosInstance
diff --git a/dashboard/src/main/webapp/vue.config.js 
b/dashboard/src/main/webapp/vue.config.js
index 6bc469673..5d8136629 100644
--- a/dashboard/src/main/webapp/vue.config.js
+++ b/dashboard/src/main/webapp/vue.config.js
@@ -15,17 +15,17 @@
  * limitations under the License.
  */
 
-module.exports ={
-    // Proxies can be set up by configuring the vue.config.js file to proxy 
requests to the backend server.
-    devServer: {
-        host:'localhost',
-        port:8080,
-        proxy: {
-            '/': {
-                ws:false,
-                target: 'http://localhost:19997',
-                changeOrigin: true,
-            },
-        }
+module.exports = {
+  // Proxies can be set up by configuring the vue.config.js file to proxy 
requests to the backend server.
+  devServer: {
+    host: 'localhost',
+    port: 8080,
+    proxy: {
+      '/': {
+        ws: false,
+        target: 'http://localhost:19997',
+        changeOrigin: true
+      }
     }
+  }
 }
diff --git 
a/integration-test/common/src/test/java/org/apache/uniffle/test/CoordinatorAdminServiceTest.java
 
b/integration-test/common/src/test/java/org/apache/uniffle/test/CoordinatorAdminServiceTest.java
index 96614e8ca..0b8e21a03 100644
--- 
a/integration-test/common/src/test/java/org/apache/uniffle/test/CoordinatorAdminServiceTest.java
+++ 
b/integration-test/common/src/test/java/org/apache/uniffle/test/CoordinatorAdminServiceTest.java
@@ -28,8 +28,8 @@ import org.junit.jupiter.api.Test;
 import org.apache.uniffle.api.AdminRestApi;
 import org.apache.uniffle.client.UniffleRestClient;
 import org.apache.uniffle.common.config.RssBaseConf;
+import org.apache.uniffle.common.web.resource.Response;
 import org.apache.uniffle.coordinator.CoordinatorConf;
-import org.apache.uniffle.coordinator.web.Response;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git 
a/integration-test/common/src/test/java/org/apache/uniffle/test/ServletTest.java
 
b/integration-test/common/src/test/java/org/apache/uniffle/test/ServletTest.java
index 3f191ae53..56c02d63a 100644
--- 
a/integration-test/common/src/test/java/org/apache/uniffle/test/ServletTest.java
+++ 
b/integration-test/common/src/test/java/org/apache/uniffle/test/ServletTest.java
@@ -43,11 +43,11 @@ import org.apache.uniffle.common.ServerStatus;
 import org.apache.uniffle.common.config.RssBaseConf;
 import org.apache.uniffle.common.metrics.TestUtils;
 import org.apache.uniffle.common.rpc.ServerType;
+import org.apache.uniffle.common.web.resource.Response;
 import org.apache.uniffle.coordinator.CoordinatorConf;
 import org.apache.uniffle.coordinator.CoordinatorServer;
 import org.apache.uniffle.coordinator.ServerNode;
 import org.apache.uniffle.coordinator.SimpleClusterManager;
-import org.apache.uniffle.coordinator.web.Response;
 import org.apache.uniffle.coordinator.web.request.CancelDecommissionRequest;
 import org.apache.uniffle.coordinator.web.request.DecommissionRequest;
 import org.apache.uniffle.server.ShuffleServer;


Reply via email to