You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampark.apache.org by be...@apache.org on 2023/04/02 09:20:46 UTC

[incubator-streampark] branch flinkenv created (now e11ea668c)

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

benjobs pushed a change to branch flinkenv
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


      at e11ea668c FlinkHome page improvement

This branch includes the following new commits:

     new e11ea668c FlinkHome page improvement

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-streampark] 01/01: FlinkHome page improvement

Posted by be...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

benjobs pushed a commit to branch flinkenv
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git

commit e11ea668caa28ae28a3e0ea7a25152365191341d
Author: benjobs <be...@apache.org>
AuthorDate: Sun Apr 2 17:20:29 2023 +0800

    FlinkHome page improvement
---
 .../core/controller/FlinkEnvController.java        |   8 +-
 .../console/core/service/FlinkEnvService.java      |   2 +-
 .../core/service/impl/FlinkEnvServiceImpl.java     |  22 +++-
 .../src/api/flink/setting/flinkEnv.ts              |   6 +-
 .../views/setting/FlinkHome/components/Modal.vue   | 129 +++++++++------------
 5 files changed, 84 insertions(+), 83 deletions(-)

diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkEnvController.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkEnvController.java
index 7c2cc7b92..4686dccd2 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkEnvController.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkEnvController.java
@@ -45,10 +45,10 @@ public class FlinkEnvController {
     return RestResponse.success(list);
   }
 
-  @PostMapping("exists")
-  public RestResponse exists(FlinkEnv version) {
-    boolean checked = flinkEnvService.exists(version);
-    return RestResponse.success(checked);
+  @PostMapping("check")
+  public RestResponse check(FlinkEnv version) {
+    Integer checkResp = flinkEnvService.check(version);
+    return RestResponse.success(checkResp);
   }
 
   @PostMapping("create")
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/FlinkEnvService.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/FlinkEnvService.java
index 3ad42bc39..4bbc9e924 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/FlinkEnvService.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/FlinkEnvService.java
@@ -31,7 +31,7 @@ public interface FlinkEnvService extends IService<FlinkEnv> {
    * @param version
    * @return
    */
-  boolean exists(FlinkEnv version);
+  Integer check(FlinkEnv version);
 
   /**
    * create new
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkEnvServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkEnvServiceImpl.java
index f874c1d40..0f1c3d89d 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkEnvServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkEnvServiceImpl.java
@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.Date;
 
@@ -38,16 +39,31 @@ import java.util.Date;
 public class FlinkEnvServiceImpl extends ServiceImpl<FlinkEnvMapper, FlinkEnv>
     implements FlinkEnvService {
 
-  /** two places will be checked: 1) name cannot be repeated 2) flink version need to be parsed */
+  /** two places will be checked: 1) name repeated 2) flink-dist -1) invalid path 0) ok */
   @Override
-  public boolean exists(FlinkEnv version) {
+  public Integer check(FlinkEnv version) {
     // 1) check name
     LambdaQueryWrapper<FlinkEnv> queryWrapper =
         new LambdaQueryWrapper<FlinkEnv>().eq(FlinkEnv::getFlinkName, version.getFlinkName());
     if (version.getId() != null) {
       queryWrapper.ne(FlinkEnv::getId, version.getId());
     }
-    return this.count(queryWrapper) == 0;
+    if (this.count(queryWrapper) > 0) {
+      return 1;
+    }
+
+    // 2) check dist_jar
+    String lib = version.getFlinkHome().concat("/lib");
+    File flinkLib = new File(lib);
+    if (flinkLib.exists() && flinkLib.isDirectory()) {
+      int distSize = flinkLib.listFiles(f -> f.getName().matches("flink-dist.*\\.jar")).length;
+      if (distSize > 1) {
+        return 2;
+      }
+    } else {
+      return -1;
+    }
+    return 0;
   }
 
   @Override
diff --git a/streampark-console/streampark-console-webapp/src/api/flink/setting/flinkEnv.ts b/streampark-console/streampark-console-webapp/src/api/flink/setting/flinkEnv.ts
index 312e4a5bf..84a0911eb 100644
--- a/streampark-console/streampark-console-webapp/src/api/flink/setting/flinkEnv.ts
+++ b/streampark-console/streampark-console-webapp/src/api/flink/setting/flinkEnv.ts
@@ -22,7 +22,7 @@ import { defHttp } from '/@/utils/http/axios';
 enum FLINK_API {
   LIST = '/flink/env/list',
   CREATE = '/flink/env/create',
-  EXISTS = '/flink/env/exists',
+  CHECK = '/flink/env/check',
   GET = '/flink/env/get',
   SYNC = '/flink/env/sync',
   UPDATE = '/flink/env/update',
@@ -66,12 +66,12 @@ export function fetchFlinkInfo(id: string): Promise<FlinkEnv> {
  * @param {Recordable} data
  * @returns {Promise<Boolean>}
  */
-export function fetchExistsEnv(data: {
+export function fetchCheckEnv(data: {
   id: string | null;
   flinkName: string;
   flinkHome: string;
 }): Promise<AxiosResponse<Result<boolean>>> {
-  return defHttp.post({ url: FLINK_API.EXISTS, data }, { isReturnNativeResponse: true });
+  return defHttp.post({ url: FLINK_API.CHECK, data }, { isReturnNativeResponse: true });
 }
 /**
  * Create flink
diff --git a/streampark-console/streampark-console-webapp/src/views/setting/FlinkHome/components/Modal.vue b/streampark-console/streampark-console-webapp/src/views/setting/FlinkHome/components/Modal.vue
index 5dc9010e7..5cad2ed23 100644
--- a/streampark-console/streampark-console-webapp/src/views/setting/FlinkHome/components/Modal.vue
+++ b/streampark-console/streampark-console-webapp/src/views/setting/FlinkHome/components/Modal.vue
@@ -28,16 +28,12 @@
   import { SvgIcon } from '/@/components/Icon';
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { useMessage } from '/@/hooks/web/useMessage';
-  import {
-    fetchExistsEnv,
-    fetchFlinkCreate,
-    fetchFlinkUpdate,
-  } from '/@/api/flink/setting/flinkEnv';
+  import { fetchCheckEnv, fetchFlinkCreate, fetchFlinkUpdate } from '/@/api/flink/setting/flinkEnv';
 
   const emit = defineEmits(['reload', 'register']);
   const versionId = ref<string | null>(null);
   const { t } = useI18n();
-  const { createConfirm, Swal, createMessage } = useMessage();
+  const { Swal } = useMessage();
   const [registerForm, { setFieldsValue, validate, resetFields }] = useForm({
     labelWidth: 120,
     colon: true,
@@ -95,82 +91,71 @@
 
   /* form submit */
   async function handleSubmit() {
-    try {
-      changeOkLoading(true);
-      const formValue = await validate();
-      // Detection environment
-      const { data: resp } = await fetchExistsEnv({
-        id: versionId.value,
-        flinkName: formValue.flinkName,
-        flinkHome: formValue.flinkHome,
-      });
+    changeOkLoading(true);
+    const formValue = await validate();
+    // Detection environment
+    const { data: resp } = await fetchCheckEnv({
+      id: versionId.value,
+      flinkName: formValue.flinkName,
+      flinkHome: formValue.flinkHome,
+    });
+    const checkResp = parseInt(resp.data);
+    if (checkResp != 0) {
       // Environment detection is successful
-      if (resp.data) {
-        let message: string;
-        let success = false;
-        // create
-        if (versionId.value == null) {
-          const { data } = await fetchFlinkCreate(formValue);
-          if (data.data) {
-            success = true;
-            message = formValue.flinkName.concat(
-              t('setting.flinkHome.operateMessage.createFlinkHomeSuccessful'),
-            );
-          } else {
-            message = data.message;
-          }
-        } else {
-          // update
-          const { data } = await fetchFlinkUpdate({
-            id: versionId.value,
-            ...formValue,
-          });
-          if (data.data) {
-            message = formValue.flinkName.concat(
-              t('setting.flinkHome.operateMessage.updateFlinkHomeSuccessful'),
-            );
-            success = true;
-          } else {
-            message = data.message;
-          }
-        }
-        if (success) {
-          Swal.fire({
-            icon: 'success',
-            title: message,
-            showConfirmButton: false,
-            timer: 2000,
-          });
-          closeModal();
-          emit('reload');
+      if (checkResp == -1) {
+        Swal.fire('Failed', 'FLINK_HOME invalid path.', 'error');
+      } else if (checkResp == 1) {
+        Swal.fire('Failed', t('setting.flinkHome.operateMessage.flinkNameIsUnique'), 'error');
+      } else if (checkResp == 2) {
+        Swal.fire(
+          'Failed',
+          'can no found flink-dist or found multiple flink-dist, FLINK_HOME error.',
+          'error',
+        );
+      }
+      return;
+    }
+
+    try {
+      let message: string;
+      let success = false;
+      // create
+      if (versionId.value == null) {
+        const { data } = await fetchFlinkCreate(formValue);
+        if (data.data) {
+          success = true;
+          message = formValue.flinkName.concat(
+            t('setting.flinkHome.operateMessage.createFlinkHomeSuccessful'),
+          );
         } else {
-          Swal.fire('Failed', message.replaceAll(/\[StreamPark]/g, ''), 'error');
+          message = data.message;
         }
       } else {
-        if (resp.status === 'error') {
-          Swal.fire(
-            'Failed',
-            'can no found flink-dist or found multiple flink-dist, FLINK_HOME error.',
-            'error',
+        // update
+        const { data } = await fetchFlinkUpdate({
+          id: versionId.value,
+          ...formValue,
+        });
+        if (data.data) {
+          message = formValue.flinkName.concat(
+            t('setting.flinkHome.operateMessage.updateFlinkHomeSuccessful'),
           );
+          success = true;
         } else {
-          Swal.fire('Failed', t('setting.flinkHome.operateMessage.flinkNameIsUnique'), 'error');
+          message = data.message;
         }
       }
-    } catch (error: any) {
-      /* custom alert message */
-      if (error?.response?.data?.message) {
-        createConfirm({
-          iconType: 'error',
-          title: 'Operation Failed',
-          content: h(
-            'div',
-            { class: 'whitespace-pre-wrap' },
-            error?.response?.data?.message.replaceAll(/\[StreamPark]/g, ''),
-          ),
+      if (success) {
+        Swal.fire({
+          icon: 'success',
+          title: message,
+          showConfirmButton: false,
+          timer: 2000,
         });
+        closeModal();
+        emit('reload');
       } else {
-        createMessage.error('error');
+        Swal.fire('Failed', message.replaceAll(/\[StreamPark]/g, ''), 'error');
       }
     } finally {
       changeOkLoading(false);