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

dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 8e04720bd [INLONG-7030][Manager][Sort] Build tool for local debugging 
environment (#7031)
8e04720bd is described below

commit 8e04720bd93bf55dcd3e954ef5ff40212102c7c4
Author: feat <featzh...@outlook.com>
AuthorDate: Wed Feb 8 11:33:47 2023 +0800

    [INLONG-7030][Manager][Sort] Build tool for local debugging environment 
(#7031)
---
 .gitignore                             |  10 +++
 inlong-tools/dev/README.md             | 138 +++++++++++++++++++++++++++++++
 inlong-tools/dev/inlong-dev-toolkit.sh | 143 +++++++++++++++++++++++++++++++++
 3 files changed, 291 insertions(+)

diff --git a/.gitignore b/.gitignore
index 4c0d2df5c..655dd273d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -71,3 +71,13 @@ inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/release/bin/
 
 # Docker mysql storage
 docker/docker-compose/mysql
+
+# Directories for local debugging
+## The connectors for loading to Flink job
+/inlong-sort/connectors
+## The plugins for submitting job to Flink cluster
+/plugins
+## The jar for parsing job info
+/inlong-sort/sort-dist.jar
+## The directory for load plugins by manager
+/inlong-manager/plugins
\ No newline at end of file
diff --git a/inlong-tools/dev/README.md b/inlong-tools/dev/README.md
new file mode 100644
index 000000000..95ba5a0ec
--- /dev/null
+++ b/inlong-tools/dev/README.md
@@ -0,0 +1,138 @@
+<!--
+
+    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.
+
+-->
+
+## Apache InLong dev toolkit
+
+### Overview
+
+The Apache InLong project includes modules such as "Dashboard", "DataProxy", 
"Manager" and "TubeMQ".
+When debugging in a development environment such as `Intellij IDEA`,
+The environment is difficult to build.
+
+Take the `inlong-manager` as an example, it depends on too many configurations 
and packages.
+When debugging locally in the IDE, multiple default directories need to be 
created, which is more complicated.
+So a script is urgently needed to quickly support local debugging.
+
+Also, similar tools are required for local debugging of other modules. 
+Temporarily named `InLong dev toolkit`, looking forward to adding more 
features.
+
+### Use case
+
+#### Help
+
+```shell
+❯ inlong-tools/dev/inlong-dev-toolkit.sh
+####################################################################################
+#                 Welcome to use the Apache InLong dev toolkit!                
    #
+#                                          @2022-12-23 20:38:34                
    #
+####################################################################################
+
+
+inlong-tools/dev/inlong-dev-toolkit.sh help | h
+      :help
+
+inlong-tools/dev/inlong-dev-toolkit.sh manager | m
+      :build manager local debugging environment
+
+Have a nice day, bye!
+
+```
+
+#### Manager
+
+Rely of Manager:
+
+| Directory/File                                                           | 
link target                                                                     
                               | Rely modules                    | 
+|--------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------------------|
+| `./plugins`                                                              | 
`inlong-manager/manger-plugins/target/plugins`                                  
                               | `inlong-sort/sort-plugin`       |
+| `./inlong-sort/connectors`                                               | - 
                                                                                
                             | `inlong-sort/sort-connectors/*` |                
                 |
+| `./inlong-sort/connectors/sort-connector-${name}-${project.version}.jar` | 
`inlong-sort/sort-connectors/${connector.name}/target/sort-connector-${connector.name}-${project.version}.jar`
 | `inlong-sort/sort-connectors/*` |
+| `./sort-dist.jar`                                                        | 
`sort-dist/target/sort-dist-${project.version}.jar`                             
                               | `inlong-sort/sort-dist`         |
+
+```shell
+❯ inlong-tools/dev/inlong-dev-toolkit.sh m
+Execute action: manager
+# start build manager local debugging environment ...
+current_version: 1.5.0-SNAPSHOT
+associate plugins directory: inlong-manager/manager-plugins/target/plugins
+associate sort dist: inlong-sort/sort-dist/target/sort-dist
+recreate connector dir: inlong-sort/connectors
+All connector names: 
+hive mysql-cdc kafka jdbc pulsar iceberg postgres-cdc mongodb-cdc 
sqlserver-cdc oracle-cdc elasticsearch-6 elasticsearch-7 redis tubemq 
filesystem doris starrocks hudi
+associate connector: hive
+associate connector: mysql-cdc
+associate connector: kafka
+associate connector: jdbc
+associate connector: pulsar
+associate connector: iceberg
+associate connector: postgres-cdc
+associate connector: mongodb-cdc
+associate connector: sqlserver-cdc
+associate connector: oracle-cdc
+associate connector: elasticsearch-6
+associate connector: elasticsearch-7
+associate connector: redis
+associate connector: tubemq
+associate connector: filesystem
+associate connector: doris
+associate connector: starrocks
+associate connector: hudi
+build dev env of manager finished.
+Have a nice day, bye!
+```
+
+### Development: add more function
+
+#### Public variables
+
+| inner variable     | implication                       |
+|--------------------|-----------------------------------|
+| `script_dir`       | the directory of this script file |
+| `script_file_name` | the script file name              |
+| `base_dir`         | the root directory of project     |
+
+#### Step 1. implement function
+
+#### Step 2. register function
+
+Create a global array variable:
+
+- It is recommended to end with `_action`, such as `manager_action`.
+- It must have 4 elements.
+- The 1st element is the long opt command.
+- The 2nd element is the sort opt command.
+- The 3rd element is the details of the function.
+- The 4th element is the function name, which implements in Step 1.
+
+Add the variable to the `actions` array, like:
+
+```shell
+actions=(
+    help_action
+    manger_action
+)
+```
+
+#### Step 3. ignore the temporary file
+
+Add temporary files to `.gitignore`
+
+> Notice: must base on project base directory
diff --git a/inlong-tools/dev/inlong-dev-toolkit.sh 
b/inlong-tools/dev/inlong-dev-toolkit.sh
new file mode 100755
index 000000000..89b253953
--- /dev/null
+++ b/inlong-tools/dev/inlong-dev-toolkit.sh
@@ -0,0 +1,143 @@
+#!/bin/bash
+#
+# 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.
+# Initialize the configuration files of inlong components
+
+script_dir=$(dirname "$0")
+script_file_name=$(basename "$0")
+
+# the absolute dir of project
+base_dir=$(
+  cd $script_dir
+  cd ../..
+  pwd
+)
+
+help_action=(
+  'help'
+  'h'
+  'help: show all actions'
+  'welcome'
+)
+
+manager_action=(
+  'manager'
+  'm'
+  'build manager local debugging environment'
+  'manager'
+)
+
+actions=(
+  help_action
+  manager_action
+)
+
+function welcome() {
+  local_date_time=$(date +"%Y-%m-%d %H:%M:%S")
+  echo 
'####################################################################################'
+  echo '#                 Welcome to use Apache InLong dev toolkit !           
            #'
+  echo '#                                        @'$local_date_time'           
           #'
+  echo 
'####################################################################################'
+  echo ''
+
+  # shellcheck disable=SC2068
+  for action in ${actions[@]}; do
+    # shellcheck disable=SC1087
+    TMP=$action[@]
+    TempB=("${!TMP}")
+    name=${TempB[0]}
+    simple_name=${TempB[1]}
+    desc=${TempB[2]}
+
+    echo $script_dir'/'$script_file_name' '$name' | '$simple_name
+    echo '      :'$desc
+  done
+  echo ''
+}
+
+function manager() {
+  echo '# start build manager local debugging environment ...'
+
+  project_version=$(mvn -q \
+    -Dexec.executable=echo \
+    -Dexec.args='${project.version}' \
+    --non-recursive \
+    exec:exec)
+
+  echo 'current_version: '"$project_version"
+  #
+  echo 'associate plugins directory: 
inlong-manager/manager-plugins/target/plugins'
+  # plugins -> manager-plugins/target/plugins
+  cd "$base_dir"
+  rm -rf plugins
+  ln -s inlong-manager/manager-plugins/target/plugins plugins
+  #
+  echo 'associate sort dist: inlong-sort/sort-dist/target/sort-dist'
+  cd "$base_dir"/inlong-sort
+  rm -rf sort-dist.jar
+  ln -s sort-dist/target/sort-dist-"$project_version".jar sort-dist.jar
+  # inlong-manager:    plugins -> manager-plugins/target/plugins
+  cd "$base_dir"/inlong-manager
+  rm -rf plugins
+  ln -s manager-plugins/target/plugins plugins
+  #   mkdir inlong-sort/connectors
+  sort_connector_dir=$base_dir/inlong-sort/connectors
+  echo 'recreate connector dir: '"$sort_connector_dir"
+  # shellcheck disable=SC2086
+  rm -rf $sort_connector_dir
+  mkdir "$sort_connector_dir"
+  cd "$sort_connector_dir"
+  connector_names=$(grep '<module>' 
"$base_dir"/inlong-sort/sort-connectors/pom.xml | sed 's/<module>//g' | sed 
's/<\/module>//g' | grep -v base)
+
+  echo 'All connector names: '
+  echo $connector_names | tr -d '\n'
+
+  for connector_name in $connector_names; do
+    echo 'associate connector: '"$connector_name"
+    connector_suffix_name=$(echo "$connector_name" | sed 
's/elasticsearch-6/elasticsearch6/g' | sed 's/elasticsearch-7/elasticsearch7/g')
+    ln -s 
../sort-connectors/"${connector_name}"/target/sort-connector-"${connector_suffix_name}"-"$project_version".jar
 sort-connector-"${connector_name}".jar
+  done
+
+  echo 'build dev env of manager finished .'
+}
+
+function main() {
+  action=$1
+
+  if [ ! -n "$action" ]; then
+    welcome
+  fi
+
+  # shellcheck disable=SC2068
+  for one_action in ${actions[@]}; do
+    # shellcheck disable=SC1087
+    TMP=$one_action[@]
+    TempB=("${!TMP}")
+    name=${TempB[0]}
+    simple_name=${TempB[1]}
+    function_name=${TempB[3]}
+    desc=${TempB[4]}
+
+    if [[ X"$name" == X"$action" ]] || [[ X"$simple_name" == X"$action" ]]; 
then
+      echo 'Execute action: '"$function_name"
+      $function_name
+    fi
+  done
+
+  echo 'Have a nice day, bye!'
+}
+
+main $1

Reply via email to