diff --git a/docs/configs/docsdev.js b/docs/configs/docsdev.js
index d29f273e48..91fdafd148 100644
--- a/docs/configs/docsdev.js
+++ b/docs/configs/docsdev.js
@@ -393,6 +393,10 @@ export default {
title: 'Expansion and Reduction',
link: '/en-us/docs/dev/user_doc/guide/expansion-reduction.html',
},
+ {
+ title: 'Demo',
+ link: '/en-us/docs/dev/user_doc/guide/demo.html',
+ },
],
},
{
@@ -1013,6 +1017,10 @@ export default {
title: '扩/缩容',
link: '/zh-cn/docs/dev/user_doc/guide/expansion-reduction.html',
},
+ {
+ title: 'Demo',
+ link: '/zh-cn/docs/dev/user_doc/guide/demo.html',
+ },
],
},
{
diff --git a/docs/docs/en/guide/demo.md b/docs/docs/en/guide/demo.md
new file mode 100644
index 0000000000..1e63c021d4
--- /dev/null
+++ b/docs/docs/en/guide/demo.md
@@ -0,0 +1,39 @@
+# DolphinScheduler Initialize The Workflow Demo
+
+## Prepare
+
+### Backup Previous Version's Files and Database
+
+To prevent data loss by some miss-operation, it is recommended to back up data before initializing the workflow demo. The backup way according to your environment.
+
+### Download the Latest Version Installation Package
+
+Download the latest binary distribute package from [download](/en-us/download/download.html) and then put it in the different
+directory where current service running. And all below command is running in this directory.
+
+## Start
+
+### Start Services of DolphinScheduler
+
+Start all services of dolphinscheduler according to your deployment method. If you deploy your dolphinscheduler according to [cluster deployment](installation/cluster.md), you can start all services by command `sh ./script/start-all.sh`.
+
+### Database Configuration
+
+Initializing the workflow demo needs to store metabase in other database like MySQL or PostgreSQL, they have to change some configuration. Follow the instructions in [datasource-setting](howto/datasource-setting.md) `Standalone Switching Metadata Database Configuration` section to create and initialize database.
+
+### Tenant Configuration
+
+#### Change `dolphinscheduler-tools/resources/application.yaml` Placement Details
+
+```
+demo:
+ tenant-code: default
+ domain-name: localhost
+ api-server-port: 5173
+```
+
+Mentioned above, tenant-code is the default tenant, users can modify the user name according to their operating system, this replaces the manual tenant creation action, api-server-port is the port number of the service.
+
+Then execute the startup script that initializes the workflow demo service: `sh ./tools/bin/create-demo-processes.sh` to start the service.
+
+To create a demo, you can refer to [Quick Start](start/quick-start.md)
diff --git a/docs/docs/zh/guide/demo.md b/docs/docs/zh/guide/demo.md
new file mode 100644
index 0000000000..8d60432324
--- /dev/null
+++ b/docs/docs/zh/guide/demo.md
@@ -0,0 +1,40 @@
+# DolphinScheduler 初始化工作流 demo
+
+## 准备工作
+
+### 备份上一版本文件和数据库
+
+为了防止操作错误导致数据丢失,建议初始化工作流 demo 服务之前备份数据,备份方法请结合你数据库的情况来定
+
+### 下载新版本的安装包
+
+在[下载](/zh-cn/download/download.html)页面下载最新版本的二进制安装包,并将二进制包放到与当前 dolphinscheduler 服务不一样的路径中,以下服务启动操作都需要在新版本的目录进行。
+
+## 服务启动步骤
+
+### 开启 dolphinscheduler 服务
+
+根据你部署方式开启 dolphinscheduler 的所有服务,如果你是通过 [集群部署](installation/cluster.md) 来部署你的 dolphinscheduler 的话,可以通过 `sh ./script/start-all.sh` 开启全部服务。
+
+### 数据库配置
+
+初始化工作流 demo 服务需要使用 MySQL 或 PostgreSQL 等其他数据库作为其元数据存储数据,因此必须更改一些配置。
+请参考[数据源配置](howto/datasource-setting.md) `Standalone 切换元数据库`创建并初始化数据库 ,然后运行 demo 服务启动脚本。
+
+### 租户配置
+
+#### 修改 `dolphinscheduler-tools/resources/application.yaml` 配置内容
+
+```
+demo:
+ tenant-code: default
+ domain-name: localhost
+ api-server-port: 5173
+```
+
+其中 tenant-code 是默认租户 default ,用户可以根据自己操作系统用户名修改,从而代替手动创建租户操作。api-server-port 是 dolphinscheduler 服务的端口号
+
+然后执行初始化工作流 demo 服务的启动脚本:`sh ./tools/bin/create-demo-processes.sh` 来启动服务。
+
+创建 demo 可以参考[快速上手](start/quick-start.md)
+
diff --git a/dolphinscheduler-common/pom.xml b/dolphinscheduler-common/pom.xml
index 1f13e92552..652e15dc19 100644
--- a/dolphinscheduler-common/pom.xml
+++ b/dolphinscheduler-common/pom.xml
@@ -107,6 +107,11 @@
netty-all
+
+ com.squareup.okhttp3
+ okhttp
+
+
javax.servlet
servlet-api
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/utils/OkHttpUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OkHttpUtils.java
similarity index 73%
rename from dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/utils/OkHttpUtils.java
rename to dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OkHttpUtils.java
index 38f54aa26f..a7229a23e9 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/utils/OkHttpUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/OkHttpUtils.java
@@ -15,14 +15,13 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.plugin.task.api.utils;
-
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
+package org.apache.dolphinscheduler.common.utils;
import org.apache.http.HttpStatus;
import java.io.IOException;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
@@ -36,7 +35,11 @@ import okhttp3.Response;
public class OkHttpUtils {
- private static final OkHttpClient CLIENT = new OkHttpClient();
+ private static final OkHttpClient CLIENT = new OkHttpClient.Builder()
+ .connectTimeout(5, TimeUnit.MINUTES) // connect timeout
+ .writeTimeout(5, TimeUnit.MINUTES) // write timeout
+ .readTimeout(5, TimeUnit.MINUTES) // read timeout
+ .build();
public static @NonNull String get(@NonNull String url,
@Nullable Map httpHeaders,
@@ -65,6 +68,32 @@ public class OkHttpUtils {
}
}
+ public static @NonNull String demoPost(@NonNull String url,
+ @Nullable String token,
+ @Nullable Map requestBodyMap) throws IOException {
+
+ StringBuffer stringBuffer = new StringBuffer();
+ if (requestBodyMap != null) {
+ for (String key : requestBodyMap.keySet()) {
+ stringBuffer.append(key + "=" + requestBodyMap.get(key) + "&");
+ }
+ }
+
+ RequestBody body =
+ RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), stringBuffer.toString());
+
+ Request request = new Request.Builder()
+ .url(url)
+ .header("token", token)
+ .addHeader("accpect", "application/json")
+ .post(body)
+ .build();
+
+ try (Response response = CLIENT.newCall(request).execute()) {
+ return response.body().string();
+ }
+
+ }
private static String addUrlParams(@Nullable Map requestParams, @NonNull String url) {
if (requestParams == null) {
return url;
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskCancelTaskMethodDefinition.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskCancelTaskMethodDefinition.java
index 11620164c9..31216b68eb 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskCancelTaskMethodDefinition.java
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskCancelTaskMethodDefinition.java
@@ -17,10 +17,10 @@
package org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method;
+import org.apache.dolphinscheduler.common.utils.OkHttpUtils;
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskCancelMethodDefinition;
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceInfo;
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskMethodDefinition;
-import org.apache.dolphinscheduler.plugin.task.api.utils.OkHttpUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskQueryStatusMethodDefinition.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskQueryStatusMethodDefinition.java
index 3c7740fc11..ce08f75633 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskQueryStatusMethodDefinition.java
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskQueryStatusMethodDefinition.java
@@ -17,13 +17,13 @@
package org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method;
+import org.apache.dolphinscheduler.common.utils.OkHttpUtils;
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceInfo;
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceStatus;
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskQueryStatusMethodDefinition;
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskInstanceStatus;
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskMethodDefinition;
import org.apache.dolphinscheduler.plugin.task.api.utils.JsonPathUtils;
-import org.apache.dolphinscheduler.plugin.task.api.utils.OkHttpUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskSubmitTaskMethodDefinition.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskSubmitTaskMethodDefinition.java
index ec6e3af1a6..75893d41f2 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskSubmitTaskMethodDefinition.java
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/loop/template/http/method/HttpLoopTaskSubmitTaskMethodDefinition.java
@@ -17,12 +17,12 @@
package org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method;
+import org.apache.dolphinscheduler.common.utils.OkHttpUtils;
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceInfo;
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskSubmitTaskMethodDefinition;
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskInstanceInfo;
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskMethodDefinition;
import org.apache.dolphinscheduler.plugin.task.api.utils.JsonPathUtils;
-import org.apache.dolphinscheduler.plugin.task.api.utils.OkHttpUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/dolphinscheduler-tools/src/main/bin/create-demo-processes.sh b/dolphinscheduler-tools/src/main/bin/create-demo-processes.sh
new file mode 100644
index 0000000000..f3025994e2
--- /dev/null
+++ b/dolphinscheduler-tools/src/main/bin/create-demo-processes.sh
@@ -0,0 +1,31 @@
+#!/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.
+#
+
+BIN_DIR=$(dirname $0)
+DOLPHINSCHEDULER_HOME=${DOLPHINSCHEDULER_HOME:-$(cd $BIN_DIR/../..; pwd)}
+
+if [ "$DOCKER" != "true" ]; then
+ source "$DOLPHINSCHEDULER_HOME/bin/env/dolphinscheduler_env.sh"
+fi
+
+JAVA_OPTS=${JAVA_OPTS:-"-server -Duser.timezone=${SPRING_JACKSON_TIME_ZONE} -Xms1g -Xmx1g -Xmn512m -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.hprof"}
+
+$JAVA_HOME/bin/java $JAVA_OPTS \
+ -cp "$DOLPHINSCHEDULER_HOME/tools/conf":"$DOLPHINSCHEDULER_HOME/tools/libs/*":"$DOLPHINSCHEDULER_HOME/tools/sql" \
+ -Dspring.profiles.active=demo,${DATABASE} \
+ org.apache.dolphinscheduler.tools.demo.CreateProcessDemo
diff --git a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/CreateDemoTenant.java b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/CreateDemoTenant.java
new file mode 100644
index 0000000000..7c5c2b27d0
--- /dev/null
+++ b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/CreateDemoTenant.java
@@ -0,0 +1,55 @@
+/*
+ * 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.dolphinscheduler.tools.demo;
+
+import org.apache.dolphinscheduler.dao.entity.Tenant;
+import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
+
+import java.util.Date;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class CreateDemoTenant {
+
+ private static final Logger logger = LoggerFactory.getLogger(CreateDemoTenant.class);
+ @Autowired
+ private TenantMapper tenantMapper;
+
+ public void createTenantCode(String tenantCode) {
+ Date now = new Date();
+
+ if (!tenantCode.equals("default")) {
+ Boolean existTenant = tenantMapper.existTenant(tenantCode);
+ if (!Boolean.TRUE.equals(existTenant)) {
+ Tenant tenant = new Tenant();
+ tenant.setTenantCode(tenantCode);
+ tenant.setQueueId(1);
+ tenant.setDescription("");
+ tenant.setCreateTime(now);
+ tenant.setUpdateTime(now);
+ // save
+ tenantMapper.insert(tenant);
+ logger.info("create tenant success");
+ } else {
+ logger.warn("os tenant code already exists");
+ }
+ }
+ }
+}
diff --git a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/CreateProcessDemo.java b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/CreateProcessDemo.java
new file mode 100644
index 0000000000..2535e1f3a7
--- /dev/null
+++ b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/CreateProcessDemo.java
@@ -0,0 +1,60 @@
+/*
+ * 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.dolphinscheduler.tools.demo;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Component;
+
+@SpringBootApplication
+@ComponentScan(value = "org.apache.dolphinscheduler", excludeFilters = {
+ @ComponentScan.Filter(type = FilterType.REGEX, pattern = {
+ "org.apache.dolphinscheduler.tools.datasource.*",
+ })
+})
+public class CreateProcessDemo {
+
+ public static void main(String[] args) {
+ SpringApplication.run(CreateProcessDemo.class, args);
+ }
+
+ @Component
+ @Profile("demo")
+ static class DemoRunner implements CommandLineRunner {
+
+ private static final Logger logger = LoggerFactory.getLogger(DemoRunner.class);
+
+ private final ProcessDefinitionDemo processDefinitionDemo;
+
+ DemoRunner(ProcessDefinitionDemo processDefinitionDemo) {
+ this.processDefinitionDemo = processDefinitionDemo;
+ }
+
+ @Override
+ public void run(String... args) throws Exception {
+ processDefinitionDemo.createProcessDefinitionDemo();
+ logger.info("create process definition demo success");
+ }
+ }
+}
diff --git a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/DemoContants.java b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/DemoContants.java
new file mode 100644
index 0000000000..8cb308c00b
--- /dev/null
+++ b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/DemoContants.java
@@ -0,0 +1,32 @@
+/*
+ * 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.dolphinscheduler.tools.demo;
+
+public class DemoContants {
+
+ public static final String PARAMETER_CONTEXT_PARAMS =
+ "[{\"prop\":\"output\",\"value\":\"100\",\"direct\":\"IN\",\"type\":\"VARCHAR\"},{\"prop\":\"value\",\"value\":\"99\",\"direct\":\"IN\",\"type\":\"VARCHAR\"}]";
+
+ public static final String SHELL_GLOBAL_PARAMS =
+ "[{\"prop\":\"resources\",\"value\":\"Processing information\",\"direct\":\"IN\",\"type\":\"VARCHAR\"}]";
+
+ public static final String SWITCH_GLOBAL_PARAMS =
+ "[{\"prop\":\"switchValue\",\"value\":\"A\",\"direct\":\"IN\",\"type\":\"VARCHAR\"}]";
+
+ public static final String Expire_Time = "2050-09-30 15:59:23";
+}
diff --git a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProcessDefinitionDemo.java b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProcessDefinitionDemo.java
new file mode 100644
index 0000000000..63ac66fa66
--- /dev/null
+++ b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProcessDefinitionDemo.java
@@ -0,0 +1,827 @@
+/*
+ * 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.dolphinscheduler.tools.demo;
+
+import static org.apache.dolphinscheduler.common.enums.ConditionType.NONE;
+import static org.apache.dolphinscheduler.common.enums.Flag.YES;
+import static org.apache.dolphinscheduler.common.enums.Priority.MEDIUM;
+import static org.apache.dolphinscheduler.common.enums.ProcessExecutionTypeEnum.PARALLEL;
+
+import org.apache.dolphinscheduler.common.enums.TimeoutFlag;
+import org.apache.dolphinscheduler.common.utils.CodeGenerateUtils;
+import org.apache.dolphinscheduler.common.utils.DateUtils;
+import org.apache.dolphinscheduler.common.utils.EncryptionUtils;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.dao.entity.AccessToken;
+import org.apache.dolphinscheduler.dao.entity.ProcessDefinitionLog;
+import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelationLog;
+import org.apache.dolphinscheduler.dao.entity.Project;
+import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog;
+import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.mapper.AccessTokenMapper;
+import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
+import org.apache.dolphinscheduler.dao.mapper.UserMapper;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ProcessDefinitionDemo {
+
+ private static final Logger logger = LoggerFactory.getLogger(ProcessDefinitionDemo.class);
+
+ @Value("${demo.tenant-code}")
+ private String tenantCode;
+
+ @Autowired
+ private ProjectMapper projectMapper;
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @Autowired
+ private AccessTokenMapper accessTokenMapper;
+
+ @Autowired
+ private ProxyProcessDefinitionController proxyProcessDefinitionController;
+
+ public void createProcessDefinitionDemo() throws Exception {
+ // get user
+ User loginUser = userMapper.selectById("1");
+ Date now = new Date();
+
+ // create demo tenantCode
+ CreateDemoTenant createDemoTenant = new CreateDemoTenant();
+ createDemoTenant.createTenantCode(tenantCode);
+
+ // create and get demo projectCode
+ Project project = projectMapper.queryByName("demo");
+ if (project != null) {
+ logger.warn("Project {} already exists.", project.getName());
+ }
+ try {
+ project = Project
+ .builder()
+ .name("demo")
+ .code(CodeGenerateUtils.getInstance().genCode())
+ .description("")
+ .userId(loginUser.getId())
+ .userName(loginUser.getUserName())
+ .createTime(now)
+ .updateTime(now)
+ .build();
+ } catch (CodeGenerateUtils.CodeGenerateException e) {
+ logger.error("create project error", e);
+ }
+ if (projectMapper.insert(project) > 0) {
+ logger.info("create project success");
+ } else {
+ throw new Exception("create project error");
+ }
+ Long projectCode = null;
+ try {
+ projectCode = project.getCode();
+ } catch (NullPointerException e) {
+ logger.error("project code is null", e);
+ }
+
+ // generate access token
+ String expireTime = DemoContants.Expire_Time;
+ String token = EncryptionUtils.getMd5(1 + expireTime + System.currentTimeMillis());
+ AccessToken accessToken = new AccessToken();
+ accessToken.setUserId(1);
+ accessToken.setExpireTime(DateUtils.stringToDate(expireTime));
+ accessToken.setToken(token);
+ accessToken.setCreateTime(new Date());
+ accessToken.setUpdateTime(new Date());
+
+ int insert = accessTokenMapper.insert(accessToken);
+
+ if (insert > 0) {
+ logger.info("create access token success");
+ } else {
+ logger.info("create access token error");
+ }
+
+ // creat process definition demo
+ // shell demo
+ ProxyResult shellResult = shellDemo(token, projectCode, tenantCode);
+ logger.info("create shell demo {}", shellResult.getMsg());
+
+ // subprocess demo
+ LinkedHashMap subProcess = (LinkedHashMap) shellResult.getData();
+ String subProcessCode = String.valueOf(subProcess.get("code"));
+ ProxyResult subProcessResult = subProcessDemo(token, projectCode, tenantCode, subProcessCode);
+ logger.info("create subprocess demo {}", subProcessResult.getMsg());
+
+ // switch demo
+ ProxyResult switchResult = swicthDemo(token, projectCode, tenantCode);
+ logger.info("create switch demo {}", switchResult.getMsg());
+
+ // condition demo
+ ProxyResult conditionResult = conditionDemo(token, projectCode, tenantCode);
+ logger.info("create condition demo {}", conditionResult.getMsg());
+
+ // dependent demo
+ LinkedHashMap switchProcess = (LinkedHashMap) switchResult.getData();
+ String switchProcessCode = String.valueOf(switchProcess.get("code"));
+ ProxyResult dependentResult =
+ dependentProxyResultDemo(token, projectCode, tenantCode, subProcessCode, switchProcessCode);
+ logger.info("create dependent demo {}", dependentResult.getMsg());
+
+ // parameter context demo
+ ProxyResult parameterContextResult = parameterContextDemo(token, projectCode, tenantCode);
+ logger.info("create parameter context demo {}", parameterContextResult.getMsg());
+
+ // clear log demo
+ ProxyResult clearLogResult = clearLogDemo(token, projectCode, tenantCode);
+ logger.info("create clear log demo {}", clearLogResult.getMsg());
+
+ }
+
+ public ProxyResult clearLogDemo(String token, long projectCode, String tenantCode) {
+
+ // get demo taskcode
+ List taskCodes = new ArrayList<>();
+ try {
+ for (int i = 0; i < 1; i++) {
+ taskCodes.add(CodeGenerateUtils.getInstance().genCode());
+ }
+ } catch (CodeGenerateUtils.CodeGenerateException e) {
+ logger.error("task code get error, ", e);
+ }
+ String taskCodeFirst = String.valueOf(taskCodes.get(0)).replaceAll("\\[|\\]", "");
+ String absolutePath = System.getProperty("user.dir");
+
+ ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog();
+ processDefinitionLog.setName("demo_clear_log");
+ processDefinitionLog.setDescription("Clear the DS log files from 30 days ago");
+ processDefinitionLog.setGlobalParams("[]");
+ processDefinitionLog.setLocations(null);
+ processDefinitionLog.setTimeout(0);
+
+ List processTaskRelationLogs = new ArrayList<>();
+ for (int i = 0; i < 1; i++) {
+ ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog();
+ processTaskRelationLog.setName("");
+ processTaskRelationLog.setConditionType(NONE);
+ processTaskRelationLog.setConditionParams("{}");
+ processTaskRelationLogs.add(processTaskRelationLog);
+ }
+ ProcessTaskRelationLog processTaskRelationLogFirst = processTaskRelationLogs.get(0);
+ processTaskRelationLogFirst.setPreTaskCode(0);
+ processTaskRelationLogFirst.setPreTaskVersion(0);
+ processTaskRelationLogFirst.setPostTaskCode(taskCodes.get(0));
+ processTaskRelationLogFirst.setPostTaskVersion(1);
+
+ String taskRelationJson = JSONUtils.toJsonString(processTaskRelationLogs);
+
+ List taskDefinitionLogs = new ArrayList<>();
+ for (int i = 0; i < 1; i++) {
+ TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog();
+ taskDefinitionLog.setFlag(YES);
+ taskDefinitionLog.setDelayTime(0);
+ taskDefinitionLog.setEnvironmentCode(-1);
+ taskDefinitionLog.setFailRetryInterval(1);
+ taskDefinitionLog.setFailRetryTimes(0);
+ taskDefinitionLog.setTaskPriority(MEDIUM);
+ taskDefinitionLog.setTimeout(0);
+ taskDefinitionLog.setTimeoutFlag(TimeoutFlag.CLOSE);
+ taskDefinitionLog.setTimeoutNotifyStrategy(null);
+ taskDefinitionLog.setWorkerGroup("default");
+ taskDefinitionLog.setTaskType("SHELL");
+ taskDefinitionLogs.add(taskDefinitionLog);
+ }
+ TaskDefinitionLog taskDefinitionLogFirst = taskDefinitionLogs.get(0);
+ taskDefinitionLogFirst.setCode(taskCodes.get(0));
+ taskDefinitionLogFirst.setName("Clear log node");
+ taskDefinitionLogFirst.setDescription("");
+ taskDefinitionLogFirst.setTaskParams("{\"localParams\":[],\"rawScript\":\"cd cd " + absolutePath
+ + "\\r\\nfind ./logs/ -mtime +30 -name \\\"*.log\\\" -exec rm -rf {} \\\\;\",\"resourceList\":[]}");
+
+ String taskDefinitionJson = JSONUtils.toJsonString(taskDefinitionLogs);
+
+ ProxyResult ProxyResult = proxyProcessDefinitionController.createProcessDefinition(token, projectCode,
+ processDefinitionLog.getName(),
+ processDefinitionLog.getDescription(),
+ processDefinitionLog.getGlobalParams(),
+ processDefinitionLog.getLocations(),
+ processDefinitionLog.getTimeout(),
+ tenantCode,
+ taskRelationJson,
+ taskDefinitionJson,
+ PARALLEL);
+ return ProxyResult;
+ }
+ public ProxyResult dependentProxyResultDemo(String token, long projectCode, String tenantCode,
+ String shellProcessCode, String switchProcessCode) {
+
+ // get demo taskcode
+ List taskCodes = new ArrayList<>();
+ try {
+ for (int i = 0; i < 2; i++) {
+ taskCodes.add(CodeGenerateUtils.getInstance().genCode());
+ }
+ } catch (CodeGenerateUtils.CodeGenerateException e) {
+ logger.error("task code get error, ", e);
+ }
+ String taskCodeFirst = String.valueOf(taskCodes.get(0)).replaceAll("\\[|\\]", "");
+ String taskCodeSecond = String.valueOf(taskCodes.get(1)).replaceAll("\\[|\\]", "");
+
+ ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog();
+ processDefinitionLog.setName("demo_dependent");
+ processDefinitionLog.setDescription("Check the completion of daily tasks");
+ processDefinitionLog.setGlobalParams("[]");
+ processDefinitionLog.setLocations(null);
+ processDefinitionLog.setTimeout(0);
+
+ List processTaskRelationLogs = new ArrayList<>();
+ for (int i = 0; i < 2; i++) {
+ ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog();
+ processTaskRelationLog.setName("");
+ processTaskRelationLog.setConditionType(NONE);
+ processTaskRelationLog.setConditionParams("{}");
+ processTaskRelationLogs.add(processTaskRelationLog);
+ }
+ ProcessTaskRelationLog processTaskRelationLogFirst = processTaskRelationLogs.get(0);
+ processTaskRelationLogFirst.setPreTaskCode(0);
+ processTaskRelationLogFirst.setPreTaskVersion(0);
+ processTaskRelationLogFirst.setPostTaskCode(taskCodes.get(0));
+ processTaskRelationLogFirst.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogSecond = processTaskRelationLogs.get(1);
+ processTaskRelationLogSecond.setPreTaskCode(taskCodes.get(0));
+ processTaskRelationLogSecond.setPreTaskVersion(1);
+ processTaskRelationLogSecond.setPostTaskCode(taskCodes.get(1));
+ processTaskRelationLogSecond.setPostTaskVersion(1);
+
+ String taskRelationJson = JSONUtils.toJsonString(processTaskRelationLogs);
+
+ List taskDefinitionLogs = new ArrayList<>();
+ for (int i = 0; i < 2; i++) {
+ TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog();
+ taskDefinitionLog.setFlag(YES);
+ taskDefinitionLog.setDelayTime(0);
+ taskDefinitionLog.setEnvironmentCode(-1);
+ taskDefinitionLog.setFailRetryInterval(1);
+ taskDefinitionLog.setFailRetryTimes(0);
+ taskDefinitionLog.setTaskPriority(MEDIUM);
+ taskDefinitionLog.setTimeout(0);
+ taskDefinitionLog.setTimeoutFlag(TimeoutFlag.CLOSE);
+ taskDefinitionLog.setTimeoutNotifyStrategy(null);
+ taskDefinitionLog.setWorkerGroup("default");
+ taskDefinitionLogs.add(taskDefinitionLog);
+ }
+ TaskDefinitionLog taskDefinitionLogFirst = taskDefinitionLogs.get(0);
+ taskDefinitionLogFirst.setCode(taskCodes.get(0));
+ taskDefinitionLogFirst.setName("Weekly report task");
+ taskDefinitionLogFirst.setDescription(
+ "The weekly report task requires the demo_shell and demo_switch tasks to be successfully executed every day of the last week");
+ taskDefinitionLogFirst.setTaskParams(
+ "{\"localParams\":[],\"resourceList\":[],\"dependence\":{\"relation\":\"AND\",\"dependTaskList\":[{\"relation\":\"AND\",\"dependItemList\":[{\"projectCode\":"
+ + projectCode + ",\"definitionCode\":" + shellProcessCode
+ + ",\"depTaskCode\":0,\"cycle\":\"day\",\"dateValue\":\"last1Days\",\"state\":null},{\"projectCode\":"
+ + projectCode + ",\"definitionCode\":" + switchProcessCode
+ + ",\"depTaskCode\":0,\"cycle\":\"day\",\"dateValue\":\"last1Days\",\"state\":null}]}]}}");
+ taskDefinitionLogFirst.setTaskType("DEPENDENT");
+
+ TaskDefinitionLog taskDefinitionLogSecond = taskDefinitionLogs.get(1);
+ taskDefinitionLogSecond.setCode(taskCodes.get(1));
+ taskDefinitionLogSecond.setName("Weekly Report Task Result");
+ taskDefinitionLogSecond.setDescription("Result report after the completion of the weekly report task");
+ taskDefinitionLogSecond
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo \\\"end of report\\\"\",\"resourceList\":[]}");
+ taskDefinitionLogSecond.setTaskType("SHELL");
+ String taskDefinitionJson = JSONUtils.toJsonString(taskDefinitionLogs);
+
+ ProxyResult ProxyResult = proxyProcessDefinitionController.createProcessDefinition(token, projectCode,
+ processDefinitionLog.getName(),
+ processDefinitionLog.getDescription(),
+ processDefinitionLog.getGlobalParams(),
+ processDefinitionLog.getLocations(),
+ processDefinitionLog.getTimeout(),
+ tenantCode,
+ taskRelationJson,
+ taskDefinitionJson,
+ PARALLEL);
+ return ProxyResult;
+ }
+ public ProxyResult parameterContextDemo(String token, long projectCode, String tenantCode) {
+
+ // get demo taskcode
+ List taskCodes = new ArrayList<>();
+ try {
+ for (int i = 0; i < 2; i++) {
+ taskCodes.add(CodeGenerateUtils.getInstance().genCode());
+ }
+ } catch (CodeGenerateUtils.CodeGenerateException e) {
+ logger.error("task code get error, ", e);
+ }
+ String taskCodeFirst = String.valueOf(taskCodes.get(0)).replaceAll("\\[|\\]", "");
+ String taskCodeSecond = String.valueOf(taskCodes.get(1)).replaceAll("\\[|\\]", "");
+
+ ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog();
+ processDefinitionLog.setName("demo_parameter_context");
+ processDefinitionLog.setDescription("Upstream and downstream task node parameter transfer");
+ processDefinitionLog.setGlobalParams(DemoContants.PARAMETER_CONTEXT_PARAMS);
+ processDefinitionLog.setLocations(null);
+ processDefinitionLog.setTimeout(0);
+
+ List processTaskRelationLogs = new ArrayList<>();
+ for (int i = 0; i < 2; i++) {
+ ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog();
+ processTaskRelationLog.setName("");
+ processTaskRelationLog.setConditionType(NONE);
+ processTaskRelationLog.setConditionParams("{}");
+ processTaskRelationLogs.add(processTaskRelationLog);
+ }
+ ProcessTaskRelationLog processTaskRelationLogFirst = processTaskRelationLogs.get(0);
+ processTaskRelationLogFirst.setPreTaskCode(0);
+ processTaskRelationLogFirst.setPreTaskVersion(0);
+ processTaskRelationLogFirst.setPostTaskCode(taskCodes.get(0));
+ processTaskRelationLogFirst.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogSecond = processTaskRelationLogs.get(1);
+ processTaskRelationLogSecond.setPreTaskCode(taskCodes.get(0));
+ processTaskRelationLogSecond.setPreTaskVersion(1);
+ processTaskRelationLogSecond.setPostTaskCode(taskCodes.get(1));
+ processTaskRelationLogSecond.setPostTaskVersion(1);
+
+ String taskRelationJson = JSONUtils.toJsonString(processTaskRelationLogs);
+
+ List taskDefinitionLogs = new ArrayList<>();
+ for (int i = 0; i < 2; i++) {
+ TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog();
+ taskDefinitionLog.setFlag(YES);
+ taskDefinitionLog.setDelayTime(0);
+ taskDefinitionLog.setEnvironmentCode(-1);
+ taskDefinitionLog.setFailRetryInterval(1);
+ taskDefinitionLog.setFailRetryTimes(0);
+ taskDefinitionLog.setTaskPriority(MEDIUM);
+ taskDefinitionLog.setTimeout(0);
+ taskDefinitionLog.setTimeoutFlag(TimeoutFlag.CLOSE);
+ taskDefinitionLog.setTimeoutNotifyStrategy(null);
+ taskDefinitionLog.setWorkerGroup("default");
+ taskDefinitionLog.setTaskType("SHELL");
+ taskDefinitionLogs.add(taskDefinitionLog);
+ }
+ TaskDefinitionLog taskDefinitionLogFirst = taskDefinitionLogs.get(0);
+ taskDefinitionLogFirst.setCode(taskCodes.get(0));
+ taskDefinitionLogFirst.setName("Upstream task node");
+ taskDefinitionLogFirst.setDescription("Create a local parameter and pass the assignment to the downstream");
+ taskDefinitionLogFirst.setTaskParams(
+ "{\"localParams\":[{\"prop\":\"value\",\"direct\":\"IN\",\"type\":\"VARCHAR\",\"value\":\"0\"},{\"prop\":\"output\",\"direct\":\"OUT\",\"type\":\"VARCHAR\",\"value\":\"\"}],\"rawScript\":\"echo \\\"====Node start====\\\"\\r\\necho '${setValue(output=1)}'\\r\\n\\r\\necho ${output}\\r\\necho ${value}\\r\\n\\r\\necho \\\"====Node end====\\\"\",\"resourceList\":[]}");
+
+ TaskDefinitionLog taskDefinitionLogSecond = taskDefinitionLogs.get(1);
+ taskDefinitionLogSecond.setCode(taskCodes.get(1));
+ taskDefinitionLogSecond.setName("Downstream task node");
+ taskDefinitionLogSecond.setDescription("Test outputs the parameters passed by the upstream task");
+ taskDefinitionLogSecond.setTaskParams(
+ "{\"localParams\":[],\"rawScript\":\"echo \\\"====node start====\\\"\\r\\n\\r\\necho ${output}\\r\\n\\r\\necho ${value}\\r\\n\\r\\necho \\\"====Node end====\\\"\",\"resourceList\":[]}");
+ String taskDefinitionJson = JSONUtils.toJsonString(taskDefinitionLogs);
+
+ ProxyResult ProxyResult = proxyProcessDefinitionController.createProcessDefinition(token, projectCode,
+ processDefinitionLog.getName(),
+ processDefinitionLog.getDescription(),
+ processDefinitionLog.getGlobalParams(),
+ processDefinitionLog.getLocations(),
+ processDefinitionLog.getTimeout(),
+ tenantCode,
+ taskRelationJson,
+ taskDefinitionJson,
+ PARALLEL);
+ return ProxyResult;
+ }
+ public ProxyResult conditionDemo(String token, long projectCode, String tenantCode) {
+
+ // get demo taskcode
+ List taskCodes = new ArrayList<>();
+ try {
+ for (int i = 0; i < 4; i++) {
+ taskCodes.add(CodeGenerateUtils.getInstance().genCode());
+ }
+ } catch (CodeGenerateUtils.CodeGenerateException e) {
+ logger.error("task code get error, ", e);
+ }
+ String taskCodeFirst = String.valueOf(taskCodes.get(0)).replaceAll("\\[|\\]", "");
+ String taskCodeSecond = String.valueOf(taskCodes.get(1)).replaceAll("\\[|\\]", "");
+ String taskCodeThird = String.valueOf(taskCodes.get(2)).replaceAll("\\[|\\]", "");
+ String taskCodeFourth = String.valueOf(taskCodes.get(3)).replaceAll("\\[|\\]", "");
+
+ ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog();
+ processDefinitionLog.setName("demo_condition");
+ processDefinitionLog.setDescription("Coin Toss");
+ processDefinitionLog.setGlobalParams("[]");
+ processDefinitionLog.setLocations(null);
+ processDefinitionLog.setTimeout(0);
+
+ List processTaskRelationLogs = new ArrayList<>();
+ for (int i = 0; i < 4; i++) {
+ ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog();
+ processTaskRelationLog.setName("");
+ processTaskRelationLog.setConditionType(NONE);
+ processTaskRelationLog.setConditionParams("{}");
+ processTaskRelationLogs.add(processTaskRelationLog);
+ }
+ ProcessTaskRelationLog processTaskRelationLogFirst = processTaskRelationLogs.get(0);
+ processTaskRelationLogFirst.setPreTaskCode(0);
+ processTaskRelationLogFirst.setPreTaskVersion(0);
+ processTaskRelationLogFirst.setPostTaskCode(taskCodes.get(1));
+ processTaskRelationLogFirst.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogSecond = processTaskRelationLogs.get(1);
+ processTaskRelationLogSecond.setPreTaskCode(taskCodes.get(0));
+ processTaskRelationLogSecond.setPreTaskVersion(1);
+ processTaskRelationLogSecond.setPostTaskCode(taskCodes.get(2));
+ processTaskRelationLogSecond.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogThird = processTaskRelationLogs.get(2);
+ processTaskRelationLogThird.setPreTaskCode(taskCodes.get(0));
+ processTaskRelationLogThird.setPreTaskVersion(1);
+ processTaskRelationLogThird.setPostTaskCode(taskCodes.get(3));
+ processTaskRelationLogThird.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogFourth = processTaskRelationLogs.get(3);
+ processTaskRelationLogFourth.setPreTaskCode(taskCodes.get(1));
+ processTaskRelationLogFourth.setPreTaskVersion(1);
+ processTaskRelationLogFourth.setPostTaskCode(taskCodes.get(0));
+ processTaskRelationLogFourth.setPostTaskVersion(1);
+ String taskRelationJson = JSONUtils.toJsonString(processTaskRelationLogs);
+
+ List taskDefinitionLogs = new ArrayList<>();
+ for (int i = 0; i < 4; i++) {
+ TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog();
+ taskDefinitionLog.setFlag(YES);
+ taskDefinitionLog.setDelayTime(0);
+ taskDefinitionLog.setEnvironmentCode(-1);
+ taskDefinitionLog.setFailRetryInterval(1);
+ taskDefinitionLog.setFailRetryTimes(0);
+ taskDefinitionLog.setTaskPriority(MEDIUM);
+ taskDefinitionLog.setTimeout(0);
+ taskDefinitionLog.setTimeoutFlag(TimeoutFlag.CLOSE);
+ taskDefinitionLog.setTimeoutNotifyStrategy(null);
+ taskDefinitionLog.setWorkerGroup("default");
+ taskDefinitionLogs.add(taskDefinitionLog);
+ }
+ TaskDefinitionLog taskDefinitionLogFirst = taskDefinitionLogs.get(0);
+ taskDefinitionLogFirst.setCode(taskCodes.get(0));
+ taskDefinitionLogFirst.setName("condition");
+ taskDefinitionLogFirst.setDescription("head is the status of success, tail is the status of failure");
+ taskDefinitionLogFirst.setTaskParams(
+ "{\"localParams\":[],\"resourceList\":[],\"dependence\":{\"relation\":\"AND\",\"dependTaskList\":[]},\"conditionResult\":{\"successNode\":["
+ + taskCodeThird + "],\"failedNode\":[" + taskCodeFourth + "]}}");
+ taskDefinitionLogFirst.setTaskType("CONDITIONS");
+
+ TaskDefinitionLog taskDefinitionLogSecond = taskDefinitionLogs.get(1);
+ taskDefinitionLogSecond.setCode(taskCodes.get(1));
+ taskDefinitionLogSecond.setName("coin");
+ taskDefinitionLogSecond.setDescription("Toss a coin");
+ taskDefinitionLogSecond
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo \\\"Start\\\"\",\"resourceList\":[]}");
+ taskDefinitionLogSecond.setTaskType("SHELL");
+
+ TaskDefinitionLog taskDefinitionLogThird = taskDefinitionLogs.get(2);
+ taskDefinitionLogThird.setCode(taskCodes.get(2));
+ taskDefinitionLogThird.setName("head");
+ taskDefinitionLogThird.setDescription("Choose to learn if the result is head");
+ taskDefinitionLogThird.setTaskParams(
+ "{\"localParams\":[],\"rawScript\":\"echo \\\"Start learning\\\"\",\"resourceList\":[]}");
+ taskDefinitionLogThird.setTaskType("SHELL");
+
+ TaskDefinitionLog taskDefinitionLogFourth = taskDefinitionLogs.get(3);
+ taskDefinitionLogFourth.setCode(taskCodes.get(3));
+ taskDefinitionLogFourth.setName("tail");
+ taskDefinitionLogFourth.setDescription("Choose to play if the result is tail");
+ taskDefinitionLogFourth
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo \\\"Start playing\\\"\",\"resourceList\":[]}");
+ taskDefinitionLogFourth.setTaskType("SHELL");
+ String taskDefinitionJson = JSONUtils.toJsonString(taskDefinitionLogs);
+
+ ProxyResult ProxyResult = proxyProcessDefinitionController.createProcessDefinition(token, projectCode,
+ processDefinitionLog.getName(),
+ processDefinitionLog.getDescription(),
+ processDefinitionLog.getGlobalParams(),
+ processDefinitionLog.getLocations(),
+ processDefinitionLog.getTimeout(),
+ tenantCode,
+ taskRelationJson,
+ taskDefinitionJson,
+ PARALLEL);
+ return ProxyResult;
+ }
+ public ProxyResult swicthDemo(String token, long projectCode, String tenantCode) {
+
+ // get demo taskcode
+ List taskCodes = new ArrayList<>();
+ try {
+ for (int i = 0; i < 4; i++) {
+ taskCodes.add(CodeGenerateUtils.getInstance().genCode());
+ }
+ } catch (CodeGenerateUtils.CodeGenerateException e) {
+ logger.error("task code get error, ", e);
+ }
+ String taskCodeFirst = String.valueOf(taskCodes.get(0)).replaceAll("\\[|\\]", "");
+ String taskCodeSecond = String.valueOf(taskCodes.get(1)).replaceAll("\\[|\\]", "");
+ String taskCodeThird = String.valueOf(taskCodes.get(2)).replaceAll("\\[|\\]", "");
+ String taskCodeFourth = String.valueOf(taskCodes.get(3)).replaceAll("\\[|\\]", "");
+
+ ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog();
+ processDefinitionLog.setName("demo_switch");
+ processDefinitionLog.setDescription("Determine which task to perform based on conditions");
+ processDefinitionLog.setGlobalParams(DemoContants.SWITCH_GLOBAL_PARAMS);
+ processDefinitionLog.setLocations(null);
+ processDefinitionLog.setTimeout(0);
+
+ List processTaskRelationLogs = new ArrayList<>();
+ for (int i = 0; i < 4; i++) {
+ ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog();
+ processTaskRelationLog.setName("");
+ processTaskRelationLog.setConditionType(NONE);
+ processTaskRelationLog.setConditionParams("{}");
+ processTaskRelationLogs.add(processTaskRelationLog);
+ }
+ ProcessTaskRelationLog processTaskRelationLogFirst = processTaskRelationLogs.get(0);
+ processTaskRelationLogFirst.setPreTaskCode(0);
+ processTaskRelationLogFirst.setPreTaskVersion(0);
+ processTaskRelationLogFirst.setPostTaskCode(taskCodes.get(0));
+ processTaskRelationLogFirst.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogSecond = processTaskRelationLogs.get(1);
+ processTaskRelationLogSecond.setPreTaskCode(taskCodes.get(0));
+ processTaskRelationLogSecond.setPreTaskVersion(1);
+ processTaskRelationLogSecond.setPostTaskCode(taskCodes.get(1));
+ processTaskRelationLogSecond.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogThird = processTaskRelationLogs.get(2);
+ processTaskRelationLogThird.setPreTaskCode(taskCodes.get(0));
+ processTaskRelationLogThird.setPreTaskVersion(1);
+ processTaskRelationLogThird.setPostTaskCode(taskCodes.get(2));
+ processTaskRelationLogThird.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogFourth = processTaskRelationLogs.get(3);
+ processTaskRelationLogFourth.setPreTaskCode(taskCodes.get(0));
+ processTaskRelationLogFourth.setPreTaskVersion(1);
+ processTaskRelationLogFourth.setPostTaskCode(taskCodes.get(3));
+ processTaskRelationLogFourth.setPostTaskVersion(1);
+ String taskRelationJson = JSONUtils.toJsonString(processTaskRelationLogs);
+
+ List taskDefinitionLogs = new ArrayList<>();
+ for (int i = 0; i < 4; i++) {
+ TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog();
+ taskDefinitionLog.setFlag(YES);
+ taskDefinitionLog.setDelayTime(0);
+ taskDefinitionLog.setEnvironmentCode(-1);
+ taskDefinitionLog.setFailRetryInterval(1);
+ taskDefinitionLog.setFailRetryTimes(0);
+ taskDefinitionLog.setTaskPriority(MEDIUM);
+ taskDefinitionLog.setTimeout(0);
+ taskDefinitionLog.setTimeoutFlag(TimeoutFlag.CLOSE);
+ taskDefinitionLog.setTimeoutNotifyStrategy(null);
+ taskDefinitionLog.setWorkerGroup("default");
+ taskDefinitionLogs.add(taskDefinitionLog);
+ }
+ TaskDefinitionLog taskDefinitionLogFirst = taskDefinitionLogs.get(0);
+ taskDefinitionLogFirst.setCode(taskCodes.get(0));
+ taskDefinitionLogFirst.setName("switch node");
+ taskDefinitionLogFirst.setDescription(
+ "The global parameter is to execute TaskA for A, and for B to execute TaskB, otherwise the default task is executed");
+ taskDefinitionLogFirst.setTaskParams(
+ "{\"localParams\":[],\"rawScript\":\"\",\"resourceList\":[],\"switchResult\":{\"dependTaskList\":[{\"condition\":\"${switchValue} == \\\"A\\\"\",\"nextNode\":"
+ + taskCodeThird + "},{\"condition\":\"${switchValue} == \\\"B\\\"\",\"nextNode\":"
+ + taskCodeFourth + "}],\"nextNode\":" + taskCodeSecond + "}}");
+ taskDefinitionLogFirst.setTaskType("SWITCH");
+
+ TaskDefinitionLog taskDefinitionLogSecond = taskDefinitionLogs.get(1);
+ taskDefinitionLogSecond.setCode(taskCodes.get(1));
+ taskDefinitionLogSecond.setName("default");
+ taskDefinitionLogSecond.setDescription("executed default task");
+ taskDefinitionLogSecond
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo \\\"default\\\"\",\"resourceList\":[]}");
+ taskDefinitionLogSecond.setTaskType("SHELL");
+
+ TaskDefinitionLog taskDefinitionLogThird = taskDefinitionLogs.get(2);
+ taskDefinitionLogThird.setCode(taskCodes.get(2));
+ taskDefinitionLogThird.setName("TaskA");
+ taskDefinitionLogThird.setDescription("execute TaskA");
+ taskDefinitionLogThird
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo \\\"TaskA\\\"\",\"resourceList\":[]}");
+ taskDefinitionLogThird.setTaskType("SHELL");
+
+ TaskDefinitionLog taskDefinitionLogFourth = taskDefinitionLogs.get(3);
+ taskDefinitionLogFourth.setCode(taskCodes.get(3));
+ taskDefinitionLogFourth.setName("TaskB");
+ taskDefinitionLogFourth.setDescription("execute TaskB");
+ taskDefinitionLogFourth
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo \\\"TaskB\\\"\",\"resourceList\":[]}");
+ taskDefinitionLogFourth.setTaskType("SHELL");
+ String taskDefinitionJson = JSONUtils.toJsonString(taskDefinitionLogs);
+
+ ProxyResult ProxyResult = proxyProcessDefinitionController.createProcessDefinition(token, projectCode,
+ processDefinitionLog.getName(),
+ processDefinitionLog.getDescription(),
+ processDefinitionLog.getGlobalParams(),
+ processDefinitionLog.getLocations(),
+ processDefinitionLog.getTimeout(),
+ tenantCode,
+ taskRelationJson,
+ taskDefinitionJson,
+ PARALLEL);
+ return ProxyResult;
+ }
+ public ProxyResult shellDemo(String token, long projectCode, String tenantCode) {
+
+ // get demo taskcode
+ List taskCodes = new ArrayList<>();
+ try {
+ for (int i = 0; i < 3; i++) {
+ taskCodes.add(CodeGenerateUtils.getInstance().genCode());
+ }
+ } catch (CodeGenerateUtils.CodeGenerateException e) {
+ logger.error("task code get error, ", e);
+ }
+ String taskCodeFirst = String.valueOf(taskCodes.get(0)).replaceAll("\\[|\\]", "");
+ String taskCodeSecond = String.valueOf(taskCodes.get(1)).replaceAll("\\[|\\]", "");
+ String taskCodeThird = String.valueOf(taskCodes.get(2)).replaceAll("\\[|\\]", "");
+
+ ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog();
+ processDefinitionLog.setName("demo_shell");
+ processDefinitionLog.setDescription("Production, processing and sales of a series of processes");
+ processDefinitionLog.setGlobalParams(DemoContants.SHELL_GLOBAL_PARAMS);
+ processDefinitionLog.setLocations(null);
+ processDefinitionLog.setTimeout(0);
+
+ List processTaskRelationLogs = new ArrayList<>();
+ for (int i = 0; i < 3; i++) {
+ ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog();
+ processTaskRelationLog.setName("");
+ processTaskRelationLog.setConditionType(NONE);
+ processTaskRelationLog.setConditionParams("{}");
+ processTaskRelationLogs.add(processTaskRelationLog);
+ }
+ ProcessTaskRelationLog processTaskRelationLogFirst = processTaskRelationLogs.get(0);
+ processTaskRelationLogFirst.setPreTaskCode(0);
+ processTaskRelationLogFirst.setPreTaskVersion(0);
+ processTaskRelationLogFirst.setPostTaskCode(taskCodes.get(0));
+ processTaskRelationLogFirst.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogSecond = processTaskRelationLogs.get(1);
+ processTaskRelationLogSecond.setPreTaskCode(taskCodes.get(0));
+ processTaskRelationLogSecond.setPreTaskVersion(1);
+ processTaskRelationLogSecond.setPostTaskCode(taskCodes.get(1));
+ processTaskRelationLogSecond.setPostTaskVersion(1);
+
+ ProcessTaskRelationLog processTaskRelationLogThird = processTaskRelationLogs.get(2);
+ processTaskRelationLogThird.setPreTaskCode(taskCodes.get(1));
+ processTaskRelationLogThird.setPreTaskVersion(1);
+ processTaskRelationLogThird.setPostTaskCode(taskCodes.get(2));
+ processTaskRelationLogThird.setPostTaskVersion(1);
+ String taskRelationJson = JSONUtils.toJsonString(processTaskRelationLogs);
+
+ List taskDefinitionLogs = new ArrayList<>();
+ for (int i = 0; i < 3; i++) {
+ TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog();
+ taskDefinitionLog.setFlag(YES);
+ taskDefinitionLog.setDelayTime(0);
+ taskDefinitionLog.setEnvironmentCode(-1);
+ taskDefinitionLog.setFailRetryInterval(1);
+ taskDefinitionLog.setFailRetryTimes(0);
+ taskDefinitionLog.setTaskPriority(MEDIUM);
+ taskDefinitionLog.setTimeout(0);
+ taskDefinitionLog.setTimeoutFlag(TimeoutFlag.CLOSE);
+ taskDefinitionLog.setTimeoutNotifyStrategy(null);
+ taskDefinitionLog.setWorkerGroup("default");
+ taskDefinitionLog.setTaskType("SHELL");
+ taskDefinitionLogs.add(taskDefinitionLog);
+ }
+ TaskDefinitionLog taskDefinitionLogFirst = taskDefinitionLogs.get(0);
+ taskDefinitionLogFirst.setCode(taskCodes.get(0));
+ taskDefinitionLogFirst.setName("001");
+ taskDefinitionLogFirst.setDescription("Make production order");
+ taskDefinitionLogFirst
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo \\\"start\\\"\",\"resourceList\":[]}");
+
+ TaskDefinitionLog taskDefinitionLogSecond = taskDefinitionLogs.get(1);
+ taskDefinitionLogSecond.setCode(taskCodes.get(1));
+ taskDefinitionLogSecond.setName("002");
+ taskDefinitionLogSecond.setDescription("Get Information Processing");
+ taskDefinitionLogSecond
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo ${resources}\",\"resourceList\":[]}");
+
+ TaskDefinitionLog taskDefinitionLogThird = taskDefinitionLogs.get(2);
+ taskDefinitionLogThird.setCode(taskCodes.get(2));
+ taskDefinitionLogThird.setName("003");
+ taskDefinitionLogThird.setDescription("Sell after completion");
+ taskDefinitionLogThird
+ .setTaskParams("{\"localParams\":[],\"rawScript\":\"echo \\\"end\\\"\",\"resourceList\":[]}");
+ String taskDefinitionJson = JSONUtils.toJsonString(taskDefinitionLogs);
+
+ ProxyResult ProxyResult = proxyProcessDefinitionController.createProcessDefinition(token, projectCode,
+ processDefinitionLog.getName(),
+ processDefinitionLog.getDescription(),
+ processDefinitionLog.getGlobalParams(),
+ processDefinitionLog.getLocations(),
+ processDefinitionLog.getTimeout(),
+ tenantCode,
+ taskRelationJson,
+ taskDefinitionJson,
+ PARALLEL);
+ return ProxyResult;
+ }
+ public ProxyResult subProcessDemo(String token, long projectCode, String tenantCode, String subProcessCode) {
+
+ // get demo taskcode
+ List taskCodes = new ArrayList<>();
+ try {
+ for (int i = 0; i < 1; i++) {
+ taskCodes.add(CodeGenerateUtils.getInstance().genCode());
+ }
+ } catch (CodeGenerateUtils.CodeGenerateException e) {
+ logger.error("task code get error, ", e);
+ }
+ String taskCode = String.valueOf(taskCodes.get(0)).replaceAll("\\[|\\]", "");
+
+ ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog();
+ processDefinitionLog.setName("demo_sub_process");
+ processDefinitionLog.setDescription("Start the production line");
+ processDefinitionLog.setGlobalParams("[]");
+ processDefinitionLog.setLocations(null);
+ processDefinitionLog.setTimeout(0);
+
+ List processTaskRelationLogs = new ArrayList<>();
+ for (int i = 0; i < 1; i++) {
+ ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog();
+ processTaskRelationLog.setName("");
+ processTaskRelationLog.setConditionType(NONE);
+ processTaskRelationLog.setConditionParams("{}");
+ processTaskRelationLogs.add(processTaskRelationLog);
+ }
+ ProcessTaskRelationLog processTaskRelationLogFirst = processTaskRelationLogs.get(0);
+ processTaskRelationLogFirst.setPreTaskCode(0);
+ processTaskRelationLogFirst.setPreTaskVersion(0);
+ processTaskRelationLogFirst.setPostTaskCode(taskCodes.get(0));
+ processTaskRelationLogFirst.setPostTaskVersion(1);
+
+ String taskRelationJson = JSONUtils.toJsonString(processTaskRelationLogs);
+
+ List taskDefinitionLogs = new ArrayList<>();
+ for (int i = 0; i < 1; i++) {
+ TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog();
+ taskDefinitionLog.setFlag(YES);
+ taskDefinitionLog.setDelayTime(0);
+ taskDefinitionLog.setEnvironmentCode(-1);
+ taskDefinitionLog.setFailRetryInterval(1);
+ taskDefinitionLog.setFailRetryTimes(0);
+ taskDefinitionLog.setTaskPriority(MEDIUM);
+ taskDefinitionLog.setTimeout(0);
+ taskDefinitionLog.setTimeoutFlag(TimeoutFlag.CLOSE);
+ taskDefinitionLog.setTimeoutNotifyStrategy(null);
+ taskDefinitionLog.setWorkerGroup("default");
+ taskDefinitionLog.setTaskType("SUB_PROCESS");
+ taskDefinitionLogs.add(taskDefinitionLog);
+ }
+ TaskDefinitionLog taskDefinitionLogFirst = taskDefinitionLogs.get(0);
+ taskDefinitionLogFirst.setCode(taskCodes.get(0));
+ taskDefinitionLogFirst.setName("subprocess node");
+ taskDefinitionLogFirst.setDescription("Enter the demo_shell subnode");
+ taskDefinitionLogFirst.setTaskParams(
+ "{\"localParams\":[],\"resourceList\":[],\"processDefinitionCode\":" + subProcessCode + "}");
+
+ String taskDefinitionJson = JSONUtils.toJsonString(taskDefinitionLogs);
+
+ ProxyResult ProxyResult = proxyProcessDefinitionController.createProcessDefinition(token, projectCode,
+ processDefinitionLog.getName(),
+ processDefinitionLog.getDescription(),
+ processDefinitionLog.getGlobalParams(),
+ processDefinitionLog.getLocations(),
+ processDefinitionLog.getTimeout(),
+ tenantCode,
+ taskRelationJson,
+ taskDefinitionJson,
+ PARALLEL);
+ return ProxyResult;
+ }
+
+}
diff --git a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProxyProcessDefinitionController.java b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProxyProcessDefinitionController.java
new file mode 100644
index 0000000000..820c94f445
--- /dev/null
+++ b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProxyProcessDefinitionController.java
@@ -0,0 +1,79 @@
+/*
+ * 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.dolphinscheduler.tools.demo;
+
+import org.apache.dolphinscheduler.common.enums.ProcessExecutionTypeEnum;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.utils.OkHttpUtils;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ProxyProcessDefinitionController {
+
+ @Value("${demo.api-server-port}")
+ private String ServerPort;
+
+ @Value("${demo.domain-name}")
+ private String DomainName;
+
+ public ProxyResult createProcessDefinition(String token,
+ long projectCode,
+ String name,
+ String description,
+ String globalParams,
+ String locations,
+ int timeout,
+ String tenantCode,
+ String taskRelationJson,
+ String taskDefinitionJson,
+ ProcessExecutionTypeEnum executionType) {
+ ProxyResult proxyResult = new ProxyResult();
+ String url =
+ "http://" + DomainName + ":" + ServerPort + "/dolphinscheduler/projects/" + projectCode
+ + "/process-definition";
+ String responseBody;
+ Map requestBodyMap = new HashMap<>();
+
+ requestBodyMap.put("name", name);
+ requestBodyMap.put("description", description);
+ requestBodyMap.put("globalParams", globalParams);
+ requestBodyMap.put("locations", locations);
+ requestBodyMap.put("timeout", timeout);
+ requestBodyMap.put("tenantCode", tenantCode);
+ requestBodyMap.put("taskRelationJson", taskRelationJson);
+ requestBodyMap.put("taskDefinitionJson", taskDefinitionJson);
+ requestBodyMap.put("otherParamsJson", null);
+ requestBodyMap.put("executionType", executionType);
+
+ try {
+ responseBody = OkHttpUtils.demoPost(url, token, requestBodyMap);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ proxyResult = JSONUtils.parseObject(responseBody, ProxyResult.class);
+
+ return proxyResult;
+
+ }
+}
diff --git a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProxyResult.java b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProxyResult.java
new file mode 100644
index 0000000000..37b558c397
--- /dev/null
+++ b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/demo/ProxyResult.java
@@ -0,0 +1,54 @@
+/*
+ * 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.dolphinscheduler.tools.demo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProxyResult {
+
+ private Integer code;
+
+ private String msg;
+
+ private T data;
+
+ public static ProxyResult success(T data) {
+ return new ProxyResult<>(0, "success", data);
+ }
+
+ public static ProxyResult success() {
+ return success(null);
+ }
+
+ public boolean isSuccess() {
+ if (code == 0) {
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isFailed() {
+ return !this.isSuccess();
+ }
+
+}
diff --git a/dolphinscheduler-tools/src/main/resources/application.yaml b/dolphinscheduler-tools/src/main/resources/application.yaml
index 84a89097d8..a6688770b4 100644
--- a/dolphinscheduler-tools/src/main/resources/application.yaml
+++ b/dolphinscheduler-tools/src/main/resources/application.yaml
@@ -34,6 +34,11 @@ spring:
leak-detection-threshold: 0
initialization-fail-timeout: 1
+demo:
+ tenant-code: default
+ domain-name: localhost
+ api-server-port: 5173
+
# Override by profile
---