You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by ki...@apache.org on 2022/07/27 14:45:11 UTC
[incubator-seatunnel] branch dev updated: [seatunnel-1947][seatunnel-server] add scheduler spi & integration with dolphinscheduler. (#2190)
This is an automated email from the ASF dual-hosted git repository.
kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new 31e0a7318 [seatunnel-1947][seatunnel-server] add scheduler spi & integration with dolphinscheduler. (#2190)
31e0a7318 is described below
commit 31e0a73186d2b053101f404b20b48695d4dbd159
Author: dijie <nj...@gmail.com>
AuthorDate: Wed Jul 27 22:45:05 2022 +0800
[seatunnel-1947][seatunnel-server] add scheduler spi & integration with dolphinscheduler. (#2190)
---
pom.xml | 11 +
seatunnel-dist/release-docs/LICENSE | 1 +
.../release-docs/licenses/LICENSE-jsoup.txt | 21 +
seatunnel-server/pom.xml | 11 +
seatunnel-server/seatunnel-app/pom.xml | 12 +
.../apache/seatunnel/app/SeatunnelApplication.java | 2 +-
.../org/apache/seatunnel/app/common/Result.java | 2 +
.../seatunnel/app/controller/ScriptController.java | 8 +
.../seatunnel/app/controller/TaskController.java | 65 +++
.../{IUserDao.java => ISchedulerConfigDao.java} | 22 +-
.../dao/{IUserDao.java => IScriptJobApplyDao.java} | 23 +-
.../org/apache/seatunnel/app/dal/dao/IUserDao.java | 2 +
.../dao/impl/SchedulerConfigDaoImpl.java} | 39 +-
.../seatunnel/app/dal/dao/impl/ScriptDaoImpl.java | 2 +-
.../app/dal/dao/impl/ScriptJobApplyDaoImpl.java | 59 ++
.../seatunnel/app/dal/dao/impl/UserDaoImpl.java | 9 +-
.../IUserDao.java => entity/SchedulerConfig.java} | 33 +-
.../IUserDao.java => entity/ScriptJobApply.java} | 25 +-
.../SchedulerConfigMapper.java} | 24 +-
.../ScriptJobApplyMapper.java} | 24 +-
.../dto/job/PushScriptDto.java} | 28 +-
.../dto/job/RecycleScriptDto.java} | 28 +-
.../dto/job/ScriptJobApplyDto.java} | 34 +-
.../request/script/PublishScriptReq.java} | 39 +-
.../request/task/InstanceListReq.java} | 37 +-
.../request/task/JobListReq.java} | 37 +-
.../request/task/RecycleScriptReq.java} | 39 +-
.../response/task/InstanceSimpleInfoRes.java | 49 ++
.../app/domain/response/task/JobSimpleInfoRes.java | 43 ++
.../seatunnel/app/service/IScriptService.java | 3 +
.../IUserDao.java => service/ITaskService.java} | 27 +-
.../app/service/impl/ScriptServiceImpl.java | 25 +-
.../app/service/impl/TaskServiceImpl.java | 225 ++++++++
.../seatunnel/app/util/GlobalExceptionHandler.java | 4 +-
.../app/dal/mapper/SchedulerConfigMapper.xml | 71 +++
.../app/dal/mapper/ScriptJobApplyMapper.xml | 66 +++
seatunnel-server/{ => seatunnel-scheduler}/pom.xml | 14 +-
.../seatunnel-scheduler-dolphinscheduler/pom.xml | 66 +++
.../dolphinscheduler/IDolphinschedulerService.java | 56 ++
.../constants/DolphinschedulerConstants.java | 173 ++++++
.../dolphinscheduler/dto/ConditionResult.java} | 26 +-
.../dto/ListProcessDefinitionDto.java} | 29 +-
.../dto/ListProcessInstanceDto.java} | 29 +-
.../dolphinscheduler/dto/LocalParam.java} | 34 +-
.../dolphinscheduler/dto/LocationDto.java} | 29 +-
.../dto/OnlineCreateResourceDto.java} | 50 +-
.../dolphinscheduler/dto/ProcessDefinitionDto.java | 50 ++
.../dolphinscheduler/dto/ProjectDto.java} | 28 +-
.../dolphinscheduler/dto/ResourceDto.java} | 28 +-
.../dolphinscheduler/dto/SchedulerDto.java | 53 ++
.../dto/StartProcessDefinitionDto.java} | 39 +-
.../dolphinscheduler/dto/TaskDefinitionDto.java} | 46 +-
.../dolphinscheduler/dto/TaskDescriptionDto.java} | 38 +-
.../dolphinscheduler/dto/TaskInstanceDto.java | 64 +++
.../dolphinscheduler/dto/TaskParamDto.java} | 34 +-
.../dolphinscheduler/dto/TaskRelationDto.java} | 37 +-
.../dto/UpdateProcessDefinitionDto.java} | 38 +-
.../impl/DolphinschedulerServiceImpl.java | 621 +++++++++++++++++++++
.../dolphinscheduler/impl/InstanceServiceImpl.java | 64 +++
.../dolphinscheduler/impl/JobServiceImpl.java | 102 ++++
.../dolphinscheduler/utils/HttpUtils.java | 173 ++++++
.../{ => seatunnel-server-common}/pom.xml | 15 +-
.../apache/seatunnel/server/common/Constants.java} | 24 +-
.../apache/seatunnel/server/common/DateUtils.java | 69 +++
.../server}/common/SeatunnelErrorEnum.java | 17 +-
.../server}/common/SeatunnelException.java | 10 +-
seatunnel-server/{ => seatunnel-spi}/pom.xml | 16 +-
.../seatunnel/spi/scheduler/IInstanceService.java} | 23 +-
.../seatunnel/spi/scheduler/IJobService.java} | 22 +-
.../seatunnel/spi/scheduler/dto/InstanceDto.java} | 41 +-
.../spi/scheduler/dto/InstanceListDto.java} | 29 +-
.../spi/scheduler/dto/InstanceLogDto.java} | 34 +-
.../seatunnel/spi/scheduler/dto/JobDto.java} | 39 +-
.../seatunnel/spi/scheduler/dto/JobListDto.java} | 29 +-
.../spi/scheduler/dto/JobSimpleInfoDto.java} | 38 +-
.../spi/scheduler/dto/SchedulerConfigDto.java} | 31 +-
tools/dependencies/known-dependencies.txt | 1 +
77 files changed, 2709 insertions(+), 800 deletions(-)
diff --git a/pom.xml b/pom.xml
index 6f4eac234..693c6db83 100644
--- a/pom.xml
+++ b/pom.xml
@@ -214,11 +214,14 @@
<jmockdata.version>4.3.0</jmockdata.version>
<snappy-java.version>1.1.8.3</snappy-java.version>
<spring-boot.version>2.6.8</spring-boot.version>
+ <spring.version>5.3.20</spring.version>
<mybatis-spring-boot-starter.version>2.2.2</mybatis-spring-boot-starter.version>
<druid-spring-boot-starter.version>1.2.9</druid-spring-boot-starter.version>
<springfox-swagger.version>2.6.1</springfox-swagger.version>
<swagger-annotations.version>1.5.10</swagger-annotations.version>
<hibernate.validator.version>6.2.2.Final</hibernate.validator.version>
+ <jsoup.version>1.14.3</jsoup.version>
+ <javax.annotation-api.version>1.3.2</javax.annotation-api.version>
</properties>
<dependencyManagement>
@@ -922,6 +925,14 @@
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
</dependency>
+
+ <!-- http -->
+ <dependency>
+ <groupId>org.jsoup</groupId>
+ <artifactId>jsoup</artifactId>
+ <version>${jsoup.version}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
diff --git a/seatunnel-dist/release-docs/LICENSE b/seatunnel-dist/release-docs/LICENSE
index 8191c55a0..8e3f37ff1 100644
--- a/seatunnel-dist/release-docs/LICENSE
+++ b/seatunnel-dist/release-docs/LICENSE
@@ -968,6 +968,7 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
(MIT License) SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.10 - http://www.slf4j.org)
(MIT License) SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.15 - http://www.slf4j.org)
(MIT License) SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.16 - http://www.slf4j.org)
+ (MIT License) jsoup (org.jsoup:jsoup:1.14.3 - https://github.com/jhy/jsoup)
(MIT) Jedis (redis.clients:jedis:3.2.0 - https://github.com/xetorthio/jedis)
(MIT-License) spoiwo (com.norbitltd:spoiwo_2.11:1.8.0 - https://github.com/norbert-radyk/spoiwo/)
(The MIT License (MIT)) influxdb java bindings (org.influxdb:influxdb-java:2.22 - http://www.influxdb.org)
diff --git a/seatunnel-dist/release-docs/licenses/LICENSE-jsoup.txt b/seatunnel-dist/release-docs/licenses/LICENSE-jsoup.txt
new file mode 100644
index 000000000..7a3ed027a
--- /dev/null
+++ b/seatunnel-dist/release-docs/licenses/LICENSE-jsoup.txt
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2009-2022 Jonathan Hedley <https://jsoup.org/>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/seatunnel-server/pom.xml b/seatunnel-server/pom.xml
index dc9361510..36dc537a0 100644
--- a/seatunnel-server/pom.xml
+++ b/seatunnel-server/pom.xml
@@ -27,6 +27,17 @@
<packaging>pom</packaging>
<modules>
<module>seatunnel-app</module>
+ <module>seatunnel-spi</module>
+ <module>seatunnel-scheduler</module>
+ <module>seatunnel-server-common</module>
</modules>
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
</project>
\ No newline at end of file
diff --git a/seatunnel-server/seatunnel-app/pom.xml b/seatunnel-server/seatunnel-app/pom.xml
index eeb6b7ced..b9d4c84fd 100644
--- a/seatunnel-server/seatunnel-app/pom.xml
+++ b/seatunnel-server/seatunnel-app/pom.xml
@@ -141,6 +141,18 @@
<artifactId>scala-library</artifactId>
<scope>provided</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-spi</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-scheduler-dolphinscheduler</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
<build>
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/SeatunnelApplication.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/SeatunnelApplication.java
index 757e863fd..4947195fe 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/SeatunnelApplication.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/SeatunnelApplication.java
@@ -25,7 +25,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
-@SpringBootApplication
+@SpringBootApplication(scanBasePackages = {"org.apache.seatunnel.app", "org.apache.seatunnel.scheduler"})
@EnableTransactionManagement
@EnableConfigurationProperties
@EnableScheduling
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/Result.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/Result.java
index 79d7ae12b..e08323ffc 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/Result.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/Result.java
@@ -17,6 +17,8 @@
package org.apache.seatunnel.app.common;
+import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
+
public class Result<T> {
private static final Result<Void> OK = success();
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
index a17d0fc12..bf4133de8 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
@@ -19,6 +19,7 @@ package org.apache.seatunnel.app.controller;
import org.apache.seatunnel.app.common.Result;
import org.apache.seatunnel.app.domain.request.script.AddEmptyScriptReq;
+import org.apache.seatunnel.app.domain.request.script.PublishScriptReq;
import org.apache.seatunnel.app.domain.request.script.ScriptListReq;
import org.apache.seatunnel.app.domain.request.script.UpdateScriptContentReq;
import org.apache.seatunnel.app.domain.request.script.UpdateScriptParamReq;
@@ -103,4 +104,11 @@ public class ScriptController {
public Result<List<ScriptParamRes>> fetchScriptParam(@RequestParam @NotNull Integer id) {
return Result.success(iScriptService.fetchScriptParam(id));
}
+
+ @PutMapping("/publish")
+ @ApiOperation(value = "publish script", httpMethod = "PUT")
+ public Result<Void> publish(@RequestBody @NotNull PublishScriptReq req) {
+ iScriptService.publishScript(req);
+ return Result.success();
+ }
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
new file mode 100644
index 000000000..3a4934c52
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
@@ -0,0 +1,65 @@
+/*
+ * 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.seatunnel.app.controller;
+
+import org.apache.seatunnel.app.common.Result;
+import org.apache.seatunnel.app.domain.request.task.InstanceListReq;
+import org.apache.seatunnel.app.domain.request.task.JobListReq;
+import org.apache.seatunnel.app.domain.request.task.RecycleScriptReq;
+import org.apache.seatunnel.app.domain.response.task.InstanceSimpleInfoRes;
+import org.apache.seatunnel.app.domain.response.task.JobSimpleInfoRes;
+import org.apache.seatunnel.app.service.ITaskService;
+
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+
+import java.util.List;
+
+@RequestMapping("/api/v1/task")
+@RestController
+public class TaskController {
+
+ @Resource
+ private ITaskService iTaskService;
+
+ @PutMapping("/recycle")
+ @ApiOperation(value = "recycle script", httpMethod = "PUT")
+ Result<Void> recycle(@RequestBody @NotNull RecycleScriptReq req) {
+ iTaskService.recycleScriptFromScheduler(req);
+ return Result.success();
+ }
+
+ @GetMapping("/listJob")
+ @ApiOperation(value = "list job", httpMethod = "GET")
+ Result<List<JobSimpleInfoRes>> listJob(@RequestBody @NotNull JobListReq req) {
+ return Result.success(iTaskService.listJob(req));
+ }
+
+ @GetMapping("/listInstance")
+ @ApiOperation(value = "list instance", httpMethod = "GET")
+ Result<List<InstanceSimpleInfoRes>> listInstance(@RequestBody @NotNull InstanceListReq req) {
+ return Result.success(iTaskService.listInstance(req));
+ }
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/ISchedulerConfigDao.java
similarity index 63%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/ISchedulerConfigDao.java
index 146771460..1844db15f 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/ISchedulerConfigDao.java
@@ -17,24 +17,10 @@
package org.apache.seatunnel.app.dal.dao;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import org.apache.seatunnel.app.dal.entity.SchedulerConfig;
-import java.util.List;
+public interface ISchedulerConfigDao {
+ boolean exists(int scriptId);
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+ SchedulerConfig getSchedulerConfig(int scriptId);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
similarity index 63%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
index 146771460..0efdae262 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
@@ -17,24 +17,11 @@
package org.apache.seatunnel.app.dal.dao;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import org.apache.seatunnel.app.dal.entity.ScriptJobApply;
+import org.apache.seatunnel.app.domain.dto.job.ScriptJobApplyDto;
-import java.util.List;
+public interface IScriptJobApplyDao {
+ void insertOrUpdate(ScriptJobApplyDto dto);
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+ ScriptJobApply getByScriptId(Integer id);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
index 146771460..2572efe97 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
@@ -37,4 +37,6 @@ public interface IUserDao {
void disable(int id);
List<User> list(ListUserDto dto, int pageNo, int pageSize);
+
+ User getById(int operatorId);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelException.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/SchedulerConfigDaoImpl.java
similarity index 50%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelException.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/SchedulerConfigDaoImpl.java
index e68329631..fa78042bd 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelException.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/SchedulerConfigDaoImpl.java
@@ -15,34 +15,31 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.dal.dao.impl;
-import java.util.Arrays;
+import org.apache.seatunnel.app.dal.dao.ISchedulerConfigDao;
+import org.apache.seatunnel.app.dal.entity.SchedulerConfig;
+import org.apache.seatunnel.app.dal.mapper.SchedulerConfigMapper;
-public class SeatunnelException extends RuntimeException{
- private SeatunnelErrorEnum errorEnum;
+import org.springframework.stereotype.Repository;
- public SeatunnelException(SeatunnelErrorEnum e) {
- super(e.getMsg());
- this.errorEnum = e;
- }
-
- public SeatunnelException(SeatunnelErrorEnum e, String... msg) {
- super(e.getMsg().concat(" ").concat(Arrays.toString(msg)));
- this.errorEnum = e;
- }
+import javax.annotation.Resource;
- public static SeatunnelException newInstance(SeatunnelErrorEnum e, String... msg) {
- return new SeatunnelException(e, msg);
-
- }
+import java.util.Objects;
- public static SeatunnelException newInstance(SeatunnelErrorEnum e) {
- return new SeatunnelException(e);
+@Repository
+public class SchedulerConfigDaoImpl implements ISchedulerConfigDao {
+ @Resource
+ private SchedulerConfigMapper schedulerConfigMapper;
+ @Override
+ public boolean exists(int scriptId) {
+ SchedulerConfig config = schedulerConfigMapper.selectByScriptId(scriptId);
+ return Objects.nonNull(config);
}
- public SeatunnelErrorEnum getErrorEnum() {
- return errorEnum;
+ @Override
+ public SchedulerConfig getSchedulerConfig(int scriptId) {
+ return schedulerConfigMapper.selectByScriptId(scriptId);
}
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java
index 1a485bec7..d3df27b8f 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java
@@ -17,7 +17,7 @@
package org.apache.seatunnel.app.dal.dao.impl;
-import static org.apache.seatunnel.app.common.SeatunnelErrorEnum.SCRIPT_ALREADY_EXIST;
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.SCRIPT_ALREADY_EXIST;
import static com.google.common.base.Preconditions.checkState;
import org.apache.seatunnel.app.common.ScriptStatusEnum;
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptJobApplyDaoImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptJobApplyDaoImpl.java
new file mode 100644
index 000000000..1b5b1d50c
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptJobApplyDaoImpl.java
@@ -0,0 +1,59 @@
+/*
+ * 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.seatunnel.app.dal.dao.impl;
+
+import org.apache.seatunnel.app.dal.dao.IScriptJobApplyDao;
+import org.apache.seatunnel.app.dal.entity.ScriptJobApply;
+import org.apache.seatunnel.app.dal.mapper.ScriptJobApplyMapper;
+import org.apache.seatunnel.app.domain.dto.job.ScriptJobApplyDto;
+
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.Resource;
+
+import java.util.Objects;
+
+@Repository
+public class ScriptJobApplyDaoImpl implements IScriptJobApplyDao {
+
+ @Resource
+ private ScriptJobApplyMapper scriptJobApplyMapper;
+
+ @Override
+ public void insertOrUpdate(ScriptJobApplyDto dto) {
+ ScriptJobApply apply = scriptJobApplyMapper.selectByScriptId(dto.getScriptId());
+ if (Objects.isNull(apply)) {
+ apply = new ScriptJobApply();
+ apply.setScriptId(dto.getScriptId());
+ apply.setJobId(dto.getJobId());
+ apply.setOperatorId(dto.getUserId());
+ apply.setSchedulerConfigId(dto.getSchedulerConfigId());
+ scriptJobApplyMapper.insert(apply);
+ } else {
+ apply.setJobId(dto.getJobId());
+ apply.setOperatorId(dto.getUserId());
+ apply.setSchedulerConfigId(dto.getSchedulerConfigId());
+ scriptJobApplyMapper.update(apply);
+ }
+ }
+
+ @Override
+ public ScriptJobApply getByScriptId(Integer id) {
+ return scriptJobApplyMapper.selectByScriptId(id);
+ }
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
index 0affd510f..bea735acc 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
@@ -17,8 +17,8 @@
package org.apache.seatunnel.app.dal.dao.impl;
-import static org.apache.seatunnel.app.common.SeatunnelErrorEnum.NO_SUCH_USER;
-import static org.apache.seatunnel.app.common.SeatunnelErrorEnum.USER_ALREADY_EXISTS;
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.NO_SUCH_USER;
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.USER_ALREADY_EXISTS;
import static com.google.common.base.Preconditions.checkState;
import org.apache.seatunnel.app.common.UserStatusEnum;
@@ -92,4 +92,9 @@ public class UserDaoImpl implements IUserDao {
user.setUsername(dto.getName());
return userMapper.selectBySelectiveAndPage(user, pageNo * pageSize, pageSize);
}
+
+ @Override
+ public User getById(int operatorId) {
+ return userMapper.selectByPrimaryKey(operatorId);
+ }
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/SchedulerConfig.java
similarity index 61%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/SchedulerConfig.java
index 146771460..b529c3030 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/SchedulerConfig.java
@@ -15,26 +15,33 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.app.dal.entity;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Data;
-import java.util.List;
+import java.util.Date;
-public interface IUserDao {
- int add(UpdateUserDto dto);
+@Data
+public class SchedulerConfig {
+ private Integer id;
- void checkUserExists(String username);
+ private Integer scriptId;
- void update(UpdateUserDto dto);
+ private String triggerExpression;
- void delete(int id);
+ private Integer retryTimes;
- void enable(int id);
+ private Integer retryInterval;
- void disable(int id);
+ private Date activeStartTime;
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+ private Date activeEndTime;
+
+ private Date createTime;
+
+ private Date updateTime;
+
+ private Integer creatorId;
+
+ private Integer updateId;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/ScriptJobApply.java
similarity index 61%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/ScriptJobApply.java
index 146771460..d986bc5c3 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/ScriptJobApply.java
@@ -15,26 +15,25 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.app.dal.entity;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Data;
-import java.util.List;
+import java.util.Date;
-public interface IUserDao {
- int add(UpdateUserDto dto);
+@Data
+public class ScriptJobApply {
+ private Integer id;
- void checkUserExists(String username);
+ private Integer scriptId;
- void update(UpdateUserDto dto);
+ private Integer schedulerConfigId;
- void delete(int id);
+ private Long jobId;
- void enable(int id);
+ private Integer operatorId;
- void disable(int id);
+ private Date createTime;
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+ private Date updateTime;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/SchedulerConfigMapper.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/SchedulerConfigMapper.java
index 146771460..ab4ee6cec 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/SchedulerConfigMapper.java
@@ -15,26 +15,18 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.app.dal.mapper;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import org.apache.seatunnel.app.dal.entity.SchedulerConfig;
-import java.util.List;
+import org.apache.ibatis.annotations.Param;
-public interface IUserDao {
- int add(UpdateUserDto dto);
+public interface SchedulerConfigMapper {
+ int deleteByPrimaryKey(Integer id);
- void checkUserExists(String username);
+ int insert(SchedulerConfig record);
- void update(UpdateUserDto dto);
+ SchedulerConfig selectByPrimaryKey(Integer id);
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+ SchedulerConfig selectByScriptId(@Param("scriptId") int scriptId);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.java
index 146771460..4115fd9ca 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.java
@@ -15,26 +15,20 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.app.dal.mapper;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import org.apache.seatunnel.app.dal.entity.ScriptJobApply;
-import java.util.List;
+import org.apache.ibatis.annotations.Param;
-public interface IUserDao {
- int add(UpdateUserDto dto);
+public interface ScriptJobApplyMapper {
+ int deleteByPrimaryKey(Integer id);
- void checkUserExists(String username);
+ int insert(ScriptJobApply record);
- void update(UpdateUserDto dto);
+ ScriptJobApply selectByPrimaryKey(Integer id);
- void delete(int id);
+ void update(ScriptJobApply record);
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+ ScriptJobApply selectByScriptId(@Param("scriptId") int scriptId);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/PushScriptDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/PushScriptDto.java
index 146771460..c17a22bd4 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/PushScriptDto.java
@@ -15,26 +15,14 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.app.domain.dto.job;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Builder;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@Builder
+public class PushScriptDto {
+ private int scriptId;
+ private int userId;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/RecycleScriptDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/RecycleScriptDto.java
index 146771460..b8480a351 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/RecycleScriptDto.java
@@ -15,26 +15,14 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.app.domain.dto.job;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Builder;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Builder
+@Data
+public class RecycleScriptDto {
+ private int scriptId;
+ private int operatorId;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/ScriptJobApplyDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/ScriptJobApplyDto.java
index 146771460..2b1ffe9c3 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/job/ScriptJobApplyDto.java
@@ -15,26 +15,16 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.app.domain.dto.job;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class ScriptJobApplyDto {
+ private int scriptId;
+ private int schedulerConfigId;
+ private long jobId;
+ private int userId;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/PublishScriptReq.java
similarity index 58%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/PublishScriptReq.java
index 146771460..1b1352f4c 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/PublishScriptReq.java
@@ -15,26 +15,21 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.app.domain.request.script;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "publishScriptReq", description = "publish script")
+public class PublishScriptReq {
+ @ApiModelProperty(value = "script id", required = true, dataType = "Integer")
+ @NotNull
+ private int scriptId;
+ @ApiModelProperty(value = "operator id", required = true, dataType = "Integer")
+ @NotNull
+ private int operatorId;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/InstanceListReq.java
similarity index 57%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/InstanceListReq.java
index 146771460..461a4f8fd 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/InstanceListReq.java
@@ -15,26 +15,19 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.app.domain.request.task;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "listInstanceReq", description = "list instance")
+public class InstanceListReq {
+ @ApiModelProperty(value = "instance name", required = true, dataType = "String")
+ private String name;
+ @ApiModelProperty(value = "page number", required = true, dataType = "Integer")
+ private Integer pageNo;
+ @ApiModelProperty(value = "page size", required = true, dataType = "Integer")
+ private Integer pageSize;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java
similarity index 58%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java
index 146771460..544352178 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java
@@ -15,26 +15,19 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.app.domain.request.task;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "listJobReq", description = "list job")
+public class JobListReq {
+ @ApiModelProperty(value = "job name", required = true, dataType = "String")
+ private String name;
+ @ApiModelProperty(value = "page number", required = true, dataType = "Integer")
+ private Integer pageNo;
+ @ApiModelProperty(value = "page size", required = true, dataType = "Integer")
+ private Integer pageSize;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/RecycleScriptReq.java
similarity index 58%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/RecycleScriptReq.java
index 146771460..5ee65d637 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/RecycleScriptReq.java
@@ -15,26 +15,21 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.app.domain.request.task;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "recycleScriptReq", description = "recycle script")
+public class RecycleScriptReq {
+ @ApiModelProperty(value = "script id", required = true, dataType = "Integer")
+ @NotNull
+ private int scriptId;
+ @ApiModelProperty(value = "operator id", required = true, dataType = "Integer")
+ @NotNull
+ private int operatorId;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/task/InstanceSimpleInfoRes.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/task/InstanceSimpleInfoRes.java
new file mode 100644
index 000000000..b47d8b54b
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/task/InstanceSimpleInfoRes.java
@@ -0,0 +1,49 @@
+/*
+ * 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.seatunnel.app.domain.response.task;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@Builder
+@ApiModel(value = "instanceSimpleInfoRes", description = "instance simple information")
+public class InstanceSimpleInfoRes {
+ @ApiModelProperty(value = "instance id", dataType = "Long")
+ private long instanceId;
+ @ApiModelProperty(value = "instance code", dataType = "Long")
+ private long instanceCode;
+ @ApiModelProperty(value = "instance name", dataType = "String")
+ private String instanceName;
+ @ApiModelProperty(value = "submit time", dataType = "Date")
+ private Date submitTime;
+ @ApiModelProperty(value = "start time", dataType = "Date")
+ private Date startTime;
+ @ApiModelProperty(value = "end time", dataType = "Date")
+ private Date endTime;
+ @ApiModelProperty(value = "task status", dataType = "String")
+ private String status;
+ @ApiModelProperty(value = "execution duration", dataType = "String")
+ private String executionDuration;
+ @ApiModelProperty(value = "retry times", dataType = "Long")
+ private long retryTimes;
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/task/JobSimpleInfoRes.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/task/JobSimpleInfoRes.java
new file mode 100644
index 000000000..40b003bee
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/task/JobSimpleInfoRes.java
@@ -0,0 +1,43 @@
+/*
+ * 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.seatunnel.app.domain.response.task;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Date;
+
+@ApiModel(value = "jobSimpleInfoRes", description = "job simple information")
+@Data
+@Builder
+public class JobSimpleInfoRes {
+ @ApiModelProperty(value = "job id", dataType = "Long")
+ private long jobId;
+ @ApiModelProperty(value = "job status", dataType = "String")
+ private String jobStatus;
+ @ApiModelProperty(value = "job creator", dataType = "String")
+ private String creatorName;
+ @ApiModelProperty(value = "job mender", dataType = "String")
+ private String menderName;
+ @ApiModelProperty(value = "job create time", dataType = "String")
+ private Date createTime;
+ @ApiModelProperty(value = "job update time", dataType = "String")
+ private Date updateTime;
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java
index 7aee7de45..99b993ad7 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java
@@ -18,6 +18,7 @@
package org.apache.seatunnel.app.service;
import org.apache.seatunnel.app.domain.request.script.AddEmptyScriptReq;
+import org.apache.seatunnel.app.domain.request.script.PublishScriptReq;
import org.apache.seatunnel.app.domain.request.script.ScriptListReq;
import org.apache.seatunnel.app.domain.request.script.UpdateScriptContentReq;
import org.apache.seatunnel.app.domain.request.script.UpdateScriptParamReq;
@@ -41,4 +42,6 @@ public interface IScriptService {
List<ScriptParamRes> fetchScriptParam(Integer id);
void updateScriptParam(UpdateScriptParamReq updateScriptParamReq);
+
+ void publishScript(PublishScriptReq req);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskService.java
similarity index 53%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskService.java
index 146771460..93b423c41 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskService.java
@@ -15,26 +15,23 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.app.service;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import org.apache.seatunnel.app.domain.dto.job.PushScriptDto;
+import org.apache.seatunnel.app.domain.request.task.InstanceListReq;
+import org.apache.seatunnel.app.domain.request.task.JobListReq;
+import org.apache.seatunnel.app.domain.request.task.RecycleScriptReq;
+import org.apache.seatunnel.app.domain.response.task.InstanceSimpleInfoRes;
+import org.apache.seatunnel.app.domain.response.task.JobSimpleInfoRes;
import java.util.List;
-public interface IUserDao {
- int add(UpdateUserDto dto);
+public interface ITaskService {
+ Long pushScriptToScheduler(PushScriptDto pushScriptDto);
- void checkUserExists(String username);
+ void recycleScriptFromScheduler(RecycleScriptReq req);
- void update(UpdateUserDto dto);
+ List<JobSimpleInfoRes> listJob(JobListReq req);
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+ List<InstanceSimpleInfoRes> listInstance(InstanceListReq dto);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/ScriptServiceImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/ScriptServiceImpl.java
index 13f41af71..3d6d2f139 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/ScriptServiceImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/ScriptServiceImpl.java
@@ -17,21 +17,24 @@
package org.apache.seatunnel.app.service.impl;
-import static org.apache.seatunnel.app.common.SeatunnelErrorEnum.NO_SUCH_SCRIPT;
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.NO_SUCH_SCRIPT;
import static com.google.common.base.Preconditions.checkState;
import org.apache.seatunnel.app.common.ScriptParamStatusEnum;
import org.apache.seatunnel.app.common.ScriptStatusEnum;
import org.apache.seatunnel.app.dal.dao.IScriptDao;
import org.apache.seatunnel.app.dal.dao.IScriptParamDao;
+import org.apache.seatunnel.app.dal.dao.IUserDao;
import org.apache.seatunnel.app.dal.entity.Script;
import org.apache.seatunnel.app.dal.entity.ScriptParam;
+import org.apache.seatunnel.app.domain.dto.job.PushScriptDto;
import org.apache.seatunnel.app.domain.dto.script.AddEmptyScriptDto;
import org.apache.seatunnel.app.domain.dto.script.CheckScriptDuplicateDto;
import org.apache.seatunnel.app.domain.dto.script.ListScriptsDto;
import org.apache.seatunnel.app.domain.dto.script.UpdateScriptContentDto;
import org.apache.seatunnel.app.domain.dto.script.UpdateScriptParamDto;
import org.apache.seatunnel.app.domain.request.script.AddEmptyScriptReq;
+import org.apache.seatunnel.app.domain.request.script.PublishScriptReq;
import org.apache.seatunnel.app.domain.request.script.ScriptListReq;
import org.apache.seatunnel.app.domain.request.script.UpdateScriptContentReq;
import org.apache.seatunnel.app.domain.request.script.UpdateScriptParamReq;
@@ -39,7 +42,9 @@ import org.apache.seatunnel.app.domain.response.script.AddEmptyScriptRes;
import org.apache.seatunnel.app.domain.response.script.ScriptParamRes;
import org.apache.seatunnel.app.domain.response.script.ScriptSimpleInfoRes;
import org.apache.seatunnel.app.service.IScriptService;
+import org.apache.seatunnel.app.service.ITaskService;
import org.apache.seatunnel.app.util.Md5Utils;
+import org.apache.seatunnel.scheduler.dolphinscheduler.impl.InstanceServiceImpl;
import com.google.common.base.Strings;
import org.springframework.stereotype.Component;
@@ -62,6 +67,15 @@ public class ScriptServiceImpl implements IScriptService {
@Resource
private IScriptParamDao scriptParamDaoImpl;
+ @Resource
+ private InstanceServiceImpl instanceService;
+
+ @Resource
+ private IUserDao userDaoImpl;
+
+ @Resource
+ private ITaskService iTaskService;
+
@Override
public AddEmptyScriptRes addEmptyScript(AddEmptyScriptReq addEmptyScriptReq) {
// 1. check script name.
@@ -171,6 +185,15 @@ public class ScriptServiceImpl implements IScriptService {
scriptParamDaoImpl.batchInsert(dto);
}
+ @Override
+ public void publishScript(PublishScriptReq req){
+ final PushScriptDto dto = PushScriptDto.builder()
+ .scriptId(req.getScriptId())
+ .userId(req.getOperatorId())
+ .build();
+ iTaskService.pushScriptToScheduler(dto);
+ }
+
private ScriptParamRes translate(ScriptParam scriptParam) {
final ScriptParamRes res = new ScriptParamRes();
res.setId(scriptParam.getId());
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskServiceImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskServiceImpl.java
new file mode 100644
index 000000000..237554401
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskServiceImpl.java
@@ -0,0 +1,225 @@
+/*
+ * 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.seatunnel.app.service.impl;
+
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.NO_SUCH_SCRIPT;
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.SCHEDULER_CONFIG_NOT_EXIST;
+
+import org.apache.seatunnel.app.dal.dao.ISchedulerConfigDao;
+import org.apache.seatunnel.app.dal.dao.IScriptDao;
+import org.apache.seatunnel.app.dal.dao.IScriptJobApplyDao;
+import org.apache.seatunnel.app.dal.dao.IScriptParamDao;
+import org.apache.seatunnel.app.dal.entity.SchedulerConfig;
+import org.apache.seatunnel.app.dal.entity.Script;
+import org.apache.seatunnel.app.dal.entity.ScriptJobApply;
+import org.apache.seatunnel.app.dal.entity.ScriptParam;
+import org.apache.seatunnel.app.domain.dto.job.PushScriptDto;
+import org.apache.seatunnel.app.domain.dto.job.ScriptJobApplyDto;
+import org.apache.seatunnel.app.domain.request.task.InstanceListReq;
+import org.apache.seatunnel.app.domain.request.task.JobListReq;
+import org.apache.seatunnel.app.domain.request.task.RecycleScriptReq;
+import org.apache.seatunnel.app.domain.response.task.InstanceSimpleInfoRes;
+import org.apache.seatunnel.app.domain.response.task.JobSimpleInfoRes;
+import org.apache.seatunnel.app.service.ITaskService;
+import org.apache.seatunnel.server.common.SeatunnelException;
+import org.apache.seatunnel.spi.scheduler.IInstanceService;
+import org.apache.seatunnel.spi.scheduler.IJobService;
+import org.apache.seatunnel.spi.scheduler.dto.InstanceDto;
+import org.apache.seatunnel.spi.scheduler.dto.InstanceListDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobListDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobSimpleInfoDto;
+import org.apache.seatunnel.spi.scheduler.dto.SchedulerConfigDto;
+
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+
+@Component
+@Slf4j
+public class TaskServiceImpl implements ITaskService {
+
+ @Resource
+ private IJobService iJobService;
+
+ @Resource
+ private IInstanceService iInstanceService;
+
+ @Resource
+ private IScriptDao scriptDaoImpl;
+
+ @Resource
+ private IScriptParamDao scriptParamDaoImpl;
+
+ @Resource
+ private ISchedulerConfigDao schedulerConfigDaoImpl;
+
+ @Resource
+ private IScriptJobApplyDao scriptJobApplyDaoImpl;
+
+ @Override
+ public Long pushScriptToScheduler(PushScriptDto pushScriptDto) {
+ final int scriptId = pushScriptDto.getScriptId();
+ final int userId = pushScriptDto.getUserId();
+
+ // check scheduler param
+ SchedulerConfig config = schedulerConfigDaoImpl.getSchedulerConfig(scriptId);
+ if (Objects.isNull(config)) {
+ throw new SeatunnelException(SCHEDULER_CONFIG_NOT_EXIST);
+ }
+
+ final Script script = checkAndGetScript(scriptId);
+ final List<ScriptParam> scriptParams = scriptParamDaoImpl.getParamsByScriptId(scriptId);
+ Map<String, Object> params = Maps.newHashMap();
+
+ if (!CollectionUtils.isEmpty(params)) {
+ scriptParams.forEach(scriptParam -> params.put(scriptParam.getKey(), scriptParam.getValue()));
+ }
+
+ final SchedulerConfigDto schedulerConfigDto = SchedulerConfigDto.builder()
+ .retryInterval(config.getRetryInterval())
+ .retryTimes(config.getRetryTimes())
+ .startTime(config.getActiveStartTime())
+ .endTime(config.getActiveEndTime())
+ .triggerExpression(config.getTriggerExpression())
+ .build();
+
+ final JobDto jobDto = JobDto.builder()
+ .jobName(script.getName())
+ .jobContent(script.getContent())
+ .params(params)
+ .operatorId(userId)
+ .schedulerConfigDto(schedulerConfigDto)
+ //todo fix to real execute script
+ .executorScript(script.getContent())
+ .jobId(null)
+ .build();
+
+ ScriptJobApply apply = scriptJobApplyDaoImpl.getByScriptId(script.getId());
+ if (Objects.nonNull(apply)) {
+ jobDto.setJobId(apply.getJobId());
+ }
+
+ // push script
+ final long jobId = iJobService.submitJob(jobDto);
+
+ // Use future to ensure that the page does not show exceptions due to database errors.
+ syncScriptJobMapping(scriptId, userId, config.getId(), jobId);
+ return jobId;
+ }
+
+ @Override
+ public void recycleScriptFromScheduler(RecycleScriptReq req) {
+ final Script script = checkAndGetScript(req.getScriptId());
+ ScriptJobApply apply = scriptJobApplyDaoImpl.getByScriptId(script.getId());
+
+ final JobDto jobDto = JobDto.builder()
+ .jobId(apply.getJobId())
+ .jobName(script.getName())
+ .operatorId(req.getOperatorId())
+ .build();
+
+ iJobService.offlineJob(jobDto);
+
+ syncScriptJobMapping(script.getId(), req.getOperatorId(), apply.getSchedulerConfigId(), apply.getJobId());
+ }
+
+ @Override
+ public List<JobSimpleInfoRes> listJob(JobListReq req) {
+ // Search from scheduler.
+ final JobListDto dto = JobListDto.builder()
+ .name(req.getName())
+ .pageNo(req.getPageNo())
+ .pageSize(req.getPageSize())
+ .build();
+ final List<JobSimpleInfoDto> list = iJobService.list(dto);
+ return list.stream().map(this::translate).collect(Collectors.toList());
+ }
+
+ @Override
+ public List<InstanceSimpleInfoRes> listInstance(InstanceListReq req) {
+ // Search from scheduler.
+ final InstanceListDto dto = InstanceListDto.builder()
+ .name(req.getName())
+ .pageNo(req.getPageNo())
+ .pageSize(req.getPageSize())
+ .build();
+ final List<InstanceDto> list = iInstanceService.list(dto);
+ return list.stream().map(this::translate).collect(Collectors.toList());
+ }
+
+ private JobSimpleInfoRes translate(JobSimpleInfoDto dto) {
+ return JobSimpleInfoRes.builder()
+ .jobId(dto.getJobId())
+ .jobStatus(dto.getJobStatus())
+ .creatorName(dto.getCreatorName())
+ .menderName(dto.getMenderName())
+ .createTime(dto.getCreateTime())
+ .updateTime(dto.getUpdateTime())
+ .build();
+ }
+
+ private InstanceSimpleInfoRes translate(InstanceDto dto) {
+ return InstanceSimpleInfoRes.builder()
+ .instanceId(dto.getInstanceId())
+ .instanceCode(dto.getInstanceCode())
+ .instanceName(dto.getInstanceName())
+ .submitTime(dto.getSubmitTime())
+ .startTime(dto.getStartTime())
+ .endTime(dto.getEndTime())
+ .status(dto.getStatus())
+ .executionDuration(dto.getExecutionDuration())
+ .retryTimes(dto.getRetryTimes())
+ .build();
+ }
+
+ private Script checkAndGetScript(int scriptId) {
+ final Script script = scriptDaoImpl.getScript(scriptId);
+ if (Objects.isNull(script)) {
+ throw new SeatunnelException(NO_SUCH_SCRIPT);
+ }
+ return script;
+ }
+
+ private void syncScriptJobMapping(int scriptId, int userId, int schedulerConfigId, long jobId) {
+ CompletableFuture.runAsync(() -> {
+ // store script and job mapping
+ final ScriptJobApplyDto dto = ScriptJobApplyDto.builder()
+ .scriptId(scriptId)
+ .schedulerConfigId(schedulerConfigId)
+ .jobId(jobId)
+ .userId(userId)
+ .build();
+ scriptJobApplyDaoImpl.insertOrUpdate(dto);
+ }).whenComplete((_return, e) -> {
+ if (Objects.nonNull(e)) {
+ log.error("Store script and job mapping failed, please maintain this mapping manually. \n" +
+ "scriptId [{}], schedulerConfigId [{}], jobId [{}], userId [{}]", scriptId, schedulerConfigId, jobId, userId, e);
+ }
+ });
+ }
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/util/GlobalExceptionHandler.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/util/GlobalExceptionHandler.java
index 511dbe597..306adbbc0 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/util/GlobalExceptionHandler.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/util/GlobalExceptionHandler.java
@@ -18,8 +18,8 @@
package org.apache.seatunnel.app.util;
import org.apache.seatunnel.app.common.Result;
-import org.apache.seatunnel.app.common.SeatunnelErrorEnum;
-import org.apache.seatunnel.app.common.SeatunnelException;
+import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
+import org.apache.seatunnel.server.common.SeatunnelException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
diff --git a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/SchedulerConfigMapper.xml b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/SchedulerConfigMapper.xml
new file mode 100644
index 000000000..30a6ad933
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/SchedulerConfigMapper.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.apache.seatunnel.app.dal.mapper.SchedulerConfigMapper">
+ <resultMap id="BaseResultMap" type="org.apache.seatunnel.app.dal.entity.SchedulerConfig">
+ <id column="id" jdbcType="INTEGER" property="id"/>
+ <result column="script_id" jdbcType="INTEGER" property="scriptId"/>
+ <result column="trigger_expression" jdbcType="VARCHAR" property="triggerExpression"/>
+ <result column="retry_times" jdbcType="INTEGER" property="retryTimes"/>
+ <result column="retry_interval" jdbcType="INTEGER" property="retryInterval"/>
+ <result column="active_start_time" jdbcType="TIMESTAMP" property="activeStartTime"/>
+ <result column="active_end_time" jdbcType="TIMESTAMP" property="activeEndTime"/>
+ <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+ <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+ <result column="creator_id" jdbcType="INTEGER" property="creatorId"/>
+ <result column="update_id" jdbcType="INTEGER" property="updateId"/>
+ </resultMap>
+ <sql id="Base_Column_List">
+ id,
+ script_id,
+ trigger_expression,
+ retry_times,
+ retry_interval,
+ active_start_time,
+ active_end_time,
+ create_time,
+ update_time,
+ creator_id,
+ update_id
+ </sql>
+ <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List"/>
+ from scheduler_config
+ where id = #{id,jdbcType=INTEGER}
+ </select>
+ <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+ delete
+ from scheduler_config
+ where id = #{id,jdbcType=INTEGER}
+ </delete>
+ <insert id="insert" keyColumn="id" keyProperty="id"
+ parameterType="org.apache.seatunnel.app.dal.entity.SchedulerConfig" useGeneratedKeys="true">
+ insert into scheduler_config (script_id, trigger_expression, retry_times, retry_interval,
+ active_start_time, active_end_time, create_time,
+ update_time, creator_id, update_id)
+ values (#{scriptId,jdbcType=INTEGER}, #{retryTimes,jdbcType=INTEGER}, #{retryInterval,jdbcType=INTEGER},
+ #{activeStartTime,jdbcType=TIMESTAMP}, #{activeEndTime,jdbcType=TIMESTAMP},
+ #{createTime,jdbcType=TIMESTAMP},
+ #{updateTime,jdbcType=TIMESTAMP}, #{creatorId,jdbcType=INTEGER}, #{updateId,jdbcType=INTEGER})
+ </insert>
+ <select id="selectByScriptId" resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List"/>
+ from scheduler_config
+ where script_id = #{scriptId,jdbcType=INTEGER}
+ </select>
+</mapper>
diff --git a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.xml b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.xml
new file mode 100644
index 000000000..c5e28ed67
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.apache.seatunnel.app.dal.mapper.ScriptJobApplyMapper">
+ <resultMap id="BaseResultMap" type="org.apache.seatunnel.app.dal.entity.ScriptJobApply">
+ <id column="id" jdbcType="INTEGER" property="id"/>
+ <result column="script_id" jdbcType="INTEGER" property="scriptId"/>
+ <result column="scheduler_config_id" jdbcType="INTEGER" property="schedulerConfigId"/>
+ <result column="job_id" jdbcType="BIGINT" property="jobId"/>
+ <result column="operator_id" jdbcType="INTEGER" property="operatorId"/>
+ <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+ <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+ </resultMap>
+ <sql id="Base_Column_List">
+ id,
+ script_id,
+ scheduler_config_id,
+ job_id,
+ operator_id,
+ create_time,
+ update_time
+ </sql>
+ <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List"/>
+ from script_job_apply
+ where id = #{id,jdbcType=INTEGER}
+ </select>
+ <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+ delete
+ from script_job_apply
+ where id = #{id,jdbcType=INTEGER}
+ </delete>
+ <insert id="insert" parameterType="org.apache.seatunnel.app.dal.entity.ScriptJobApply">
+ insert into script_job_apply (script_id, scheduler_config_id,
+ job_id, operator_id)
+ values (#{scriptId,jdbcType=INTEGER}, #{schedulerConfigId,jdbcType=INTEGER},
+ #{jobId,jdbcType=BIGINT}, #{operatorId,jdbcType=INTEGER})
+ </insert>
+ <update id="update">
+ update script_job_apply
+ set script_id = #{scriptId,jdbcType=INTEGER},
+ scheduler_config_id = #{schedulerConfigId,jdbcType=INTEGER},
+ job_id = #{jobId},
+ operator_id = #{operatorId,jdbcType=INTEGER}
+ </update>
+ <select id="selectByScriptId" resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List"/>
+ from script_job_apply
+ where script_id = #{scriptId,jdbcType=INTEGER}
+ </select>
+</mapper>
diff --git a/seatunnel-server/pom.xml b/seatunnel-server/seatunnel-scheduler/pom.xml
similarity index 75%
copy from seatunnel-server/pom.xml
copy to seatunnel-server/seatunnel-scheduler/pom.xml
index dc9361510..682437b8a 100644
--- a/seatunnel-server/pom.xml
+++ b/seatunnel-server/seatunnel-scheduler/pom.xml
@@ -17,16 +17,24 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <artifactId>seatunnel</artifactId>
+ <artifactId>seatunnel-server</artifactId>
<groupId>org.apache.seatunnel</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>seatunnel-server</artifactId>
+ <artifactId>seatunnel-scheduler</artifactId>
<packaging>pom</packaging>
<modules>
- <module>seatunnel-app</module>
+ <module>seatunnel-scheduler-dolphinscheduler</module>
</modules>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-spi</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
</project>
\ No newline at end of file
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/pom.xml b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/pom.xml
new file mode 100644
index 000000000..1a283d7ea
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>seatunnel-scheduler</artifactId>
+ <groupId>org.apache.seatunnel</groupId>
+ <version>${revision}</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>seatunnel-scheduler-dolphinscheduler</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ <version>${spring.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>${spring.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <!-- http -->
+ <dependency>
+ <groupId>org.jsoup</groupId>
+ <artifactId>jsoup</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-collections4</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.annotation</groupId>
+ <artifactId>javax.annotation-api</artifactId>
+ <version>${javax.annotation-api.version}</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/IDolphinschedulerService.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/IDolphinschedulerService.java
new file mode 100644
index 000000000..9abc5e3f6
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/IDolphinschedulerService.java
@@ -0,0 +1,56 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler;
+
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ListProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ListProcessInstanceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ResourceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.SchedulerDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskInstanceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.UpdateProcessDefinitionDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobDto;
+
+import java.util.List;
+
+public interface IDolphinschedulerService {
+
+ ProcessDefinitionDto createOrUpdateProcessDefinition(UpdateProcessDefinitionDto dto);
+
+ List<ProcessDefinitionDto> listProcessDefinition(ListProcessDefinitionDto dto);
+
+ ProcessDefinitionDto fetchProcessDefinitionByName(String processDefinitionName);
+
+ void startProcessDefinition(long processDefinitionCode);
+
+ void updateProcessDefinitionState(long processDefinitionCode, String processDefinitionName, String state);
+
+ SchedulerDto createOrUpdateSchedule(JobDto dto);
+
+ List<SchedulerDto> listSchedule(long processDefinitionCode);
+
+ void scheduleOnline(int scheduleId);
+
+ void scheduleOffline(int scheduleId);
+
+ List<Long> genTaskCodes(long projectCode, int num);
+
+ ResourceDto createOrUpdateScriptContent(String resourceName, String content);
+
+ List<TaskInstanceDto> listTaskInstance(ListProcessInstanceDto dto);
+}
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/constants/DolphinschedulerConstants.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/constants/DolphinschedulerConstants.java
new file mode 100644
index 000000000..dc67ff535
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/constants/DolphinschedulerConstants.java
@@ -0,0 +1,173 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler.constants;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class DolphinschedulerConstants {
+
+ /**
+ * api url
+ */
+ public static final String QUERY_PROJECT_LIST_PAGING = "/projects";
+ public static final String QUERY_LIST_PAGING = "/projects/%s/process-definition";
+ public static final String GEN_TASK_CODE_LIST = "/projects/%s/task-definition/gen-task-codes";
+ public static final String VERIFY_RESOURCE_NAME = "/resources/verify-name";
+ public static final String QUERY_RESOURCE = "/resources/%s";
+ public static final String ONLINE_CREATE_RESOURCE = "/resources/online-create";
+ public static final String UPDATE_CONTENT = "/resources/%s/update-content";
+ public static final String LOG_DETAIL = "/log/detail";
+ public static final String RELEASE = "/projects/%s/process-definition/%s/release";
+ public static final String START_PROCESS_INSTANCE = "/projects/%s/executors/start-process-instance";
+ public static final String QUERY_PROCESS_DEFINITION_BY_NAME = "/projects/%s/process-definition/query-by-name";
+ public static final String QUERY_TASK_LIST_PAGING = "/projects/%s/task-instances";
+ public static final String CREATE_PROCESS_DEFINITION = "/projects/%s/process-definition/";
+ public static final String CREATE_SCHEDULE = "/projects/%s/schedules/";
+ public static final String QUERY_SCHEDULE_LIST_PAGING = "/projects/%s/schedules";
+ public static final String SCHEDULE_ONLINE = "/projects/%s/schedules/%s/online";
+ public static final String SCHEDULE_OFFLINE = "/projects/%s/schedules/%s/offline";
+
+ /**
+ * request param
+ */
+ public static final String TOKEN = "token";
+ public static final String SEARCH_VAL = "searchVal";
+ public static final String PAGE_SIZE = "pageSize";
+ public static final int PAGE_SIZE_DEFAULT = 10;
+ public static final String PAGE_NO = "pageNo";
+ public static final int PAGE_NO_DEFAULT = 1;
+ public static final String GEN_NUM = "genNum";
+ public static final int GEN_NUM_DEFAULT = 1;
+ public static final String RESOURCE_SEPARATOR = "/";
+ public static final String FULL_NAME = "fullName";
+ public static final String RESOURCE_TYPE = "type";
+ public static final String RESOURCE_TYPE_FILE = "FILE";
+ public static final String RESOURCE_TYPE_FILE_SUFFIX = "suffix";
+ public static final String RESOURCE_TYPE_FILE_SUFFIX_DEFAULT = "conf";
+ public static final String RESOURCE_TYPE_FILE_CONTENT = "content";
+ public static final String RESOURCE_TYPE_UDF = "UDF";
+ public static final int RESOURCE_ID_DEFAULT = 0;
+ public static final String RESOURCE_ID = "id";
+ public static final String TASK_INSTANCE_ID = "taskInstanceId";
+ public static final String LOG_SKIP_LINE_NUM = "skipLineNum";
+ public static final String LOG_LIMIT_NUM = "limit";
+ public static final String PROCESS_DEFINITION_NAME = "name";
+ public static final String RELEASE_STATE = "releaseState";
+ public static final String RELEASE_STATE_ONLINE = "ONLINE";
+ public static final String RELEASE_STATE_OFFLINE = "OFFLINE";
+ public static final String FAILURE_STRATEGY = "failureStrategy";
+ public static final String FAILURE_STRATEGY_DEFAULT = "CONTINUE";
+ public static final String WORKER_GROUP = "workerGroup";
+ public static final String WORKER_GROUP_DEFAULT = "default";
+ public static final String WARNING_TYPE = "warningType";
+ public static final String WARNING_TYPE_DEFAULT = "NONE";
+ public static final String WARNING_GROUP_ID = "warningGroupId";
+ public static final int WARNING_GROUP_ID_DEFAULT = 0;
+ public static final String TASK_DEPEND_TYPE_DEFAULT = "TASK_POST";
+ public static final String RUN_MODE_DEFAULT = "RUN_MODE_SERIAL";
+ public static final String PROCESS_INSTANCE_PRIORITY = "processInstancePriority";
+ public static final String PROCESS_INSTANCE_PRIORITY_DEFAULT = "MEDIUM";
+ public static final int DRY_RUN = 0;
+ public static final String PROCESS_DEFINITION = "processDefinition";
+ public static final String PROCESS_INSTANCE_NAME = "processInstanceName";
+ public static final String LOCATIONS = "locations";
+ public static final String LOCATIONS_X = "x";
+ public static final int LOCATIONS_X_DEFAULT = 200;
+ public static final String LOCATIONS_Y = "y";
+ public static final int LOCATIONS_Y_DEFAULT = 200;
+ public static final String TASK_CODE = "taskCode";
+ public static final String TASK_DEFINITION_JSON = "taskDefinitionJson";
+ public static final String TASK_RELATION_JSON = "taskRelationJson";
+ public static final String TENANT_CODE = "tenantCode";
+ public static final String TASK_RELATION_JSON_NAME = "name";
+ public static final String PRE_TASK_CODE = "preTaskCode";
+ public static final long PRE_TASK_CODE_DEFAULT = 0;
+ public static final String PRE_TASK_VERSION = "preTaskVersion";
+ public static final int PRE_TASK_VERSION_DEFAULT = 0;
+ public static final String POST_TASK_CODE = "postTaskCode";
+ public static final String POST_TASK_VERSION = "postTaskVersion";
+ public static final int POST_TASK_VERSION_DEFAULT = 1;
+ public static final String CONDITION_TYPE = "conditionType";
+ public static final int CONDITION_TYPE_DEFAULT = 0;
+ public static final String CONDITION_PARAMS = "conditionParams";
+ public static final String TASK_DEFINITION_JSON_CODE = "code";
+ public static final String TASK_DEFINITION_JSON_NAME = "name";
+ public static final String VERSION = "version";
+ public static final int VERSION_DEFAULT = 1;
+ public static final String DESCRIPTION = "description";
+ public static final String DESCRIPTION_DEFAULT = "";
+ public static final String DELAY_TIME = "delayTime";
+ public static final int DELAY_TIME_DEFAULT = 0;
+ public static final String TASK_TYPE = "taskType";
+ public static final String TASK_TYPE_DEFAULT = "SHELL";
+ public static final String TASK_PARAMS = "taskParams";
+ public static final String RESOURCE_LIST = "resourceList";
+ public static final String LOCAL_PARAMS = "localParams";
+ public static final String LOCAL_PARAMS_PROP = "prop";
+ public static final String LOCAL_PARAMS_DIRECT = "direct";
+ public static final String LOCAL_PARAMS_DIRECT_DEFAULT = "IN";
+ public static final String LOCAL_PARAMS_TYPE = "type";
+ public static final String LOCAL_PARAMS_TYPE_DEFAULT = "VARCHAR";
+ public static final String LOCAL_PARAMS_VALUE = "value";
+ public static final String RAW_SCRIPT = "rawScript";
+ public static final String DEPENDENCE = "dependence";
+ public static final Map<String, Object> DEPENDENCE_DEFAULT = Collections.emptyMap();
+ public static final String CONDITION_RESULT = "conditionResult";
+ public static final String SUCCESS_NODE = "successNode";
+ public static final List<Object> SUCCESS_NODE_DEFAULT = Collections.emptyList();
+ public static final String FAILED_NODE = "failedNode";
+ public static final List<Object> FAILED_NODE_DEFAULT = Collections.emptyList();
+ public static final String WAIT_START_TIMEOUT = "waitStartTimeout";
+ public static final int WAIT_START_TIMEOUT_DEFAULT = 0;
+ public static final String SWITCH_RESULT = "switchResult";
+ public static final int SWITCH_RESULT_DEFAULT = 0;
+ public static final String FLAG = "flag";
+ public static final String FLAG_DEFAULT = "YES";
+ public static final String TASK_PRIORITY = "taskPriority";
+ public static final String TASK_PRIORITY_DEFAULT = "MEDIUM";
+ public static final String FAIL_RETRY_TIMES = "failRetryTimes";
+ public static final String FAIL_RETRY_INTERVAL = "failRetryInterval";
+ public static final String TIMEOUT_FLAG = "timeoutFlag";
+ public static final String TIMEOUT_FLAG_DEFAULT = "CLOSE";
+ public static final String TIMEOUT_NOTIFY_STRATEGY = "timeoutNotifyStrategy";
+ public static final String TIMEOUT_NOTIFY_STRATEGY_DEFAULT = "WARN";
+ public static final String TIMEOUT = "timeout";
+ public static final int TIMEOUT_DEFAULT = 0;
+ public static final String ENVIRONMENT_CODE = "environmentCode";
+ public static final int ENVIRONMENT_CODE_DEFAULT = -1;
+ public static final String PROCESS_DEFINITION_CODE = "processDefinitionCode";
+ public static final String START_TIME = "startTime";
+ public static final String END_TIME = "endTime";
+ public static final String CRONTAB = "crontab";
+ public static final String TIMEZONE_ID = "timezoneId";
+ public static final String TIMEZONE_ID_DEFAULT = "Asia/Shanghai";
+ public static final String SCHEDULE = "schedule";
+ public static final String SCHEDULE_ID = "id";
+ public static final String DEFAULT_FILE_SUFFIX = ".conf";
+
+ /**
+ * response param
+ */
+ public static final String DATA = "data";
+ public static final String DATA_TOTAL_LIST = "totalList";
+ public static final String CODE = "code";
+ public static final int CODE_SUCCESS = 0;
+ public static final String MSG = "msg";
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ConditionResult.java
similarity index 62%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ConditionResult.java
index 146771460..629b2be9d 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ConditionResult.java
@@ -15,26 +15,16 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
import java.util.List;
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ConditionResult {
+ private List<Object> successNode;
+ private List<Object> failedNode;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ListProcessDefinitionDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ListProcessDefinitionDto.java
index 146771460..c6bc80250 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ListProcessDefinitionDto.java
@@ -15,26 +15,15 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Builder;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@Builder
+public class ListProcessDefinitionDto {
+ private String name;
+ private int pageNo;
+ private int pageSize;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ListProcessInstanceDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ListProcessInstanceDto.java
index 146771460..b2d428ab5 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ListProcessInstanceDto.java
@@ -15,26 +15,15 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Builder;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@Builder
+public class ListProcessInstanceDto {
+ private String processInstanceName;
+ private int pageNo;
+ private int pageSize;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/LocalParam.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/LocalParam.java
index 146771460..4596d02fb 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/LocalParam.java
@@ -15,26 +15,16 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class LocalParam {
+ private String prop;
+ private String direct;
+ private String type;
+ private Object value;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/LocationDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/LocationDto.java
index 146771460..33fa65389 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/LocationDto.java
@@ -15,26 +15,15 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class LocationDto {
+ private Long taskCode;
+ private int x;
+ private int y;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/OnlineCreateResourceDto.java
similarity index 52%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/OnlineCreateResourceDto.java
index 146771460..acd909b73 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/OnlineCreateResourceDto.java
@@ -15,26 +15,32 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
+
+import com.google.common.collect.Maps;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Map;
+
+@Builder
+@Data
+public class OnlineCreateResourceDto {
+ private String type;
+ private int pid;
+ private String currentDir;
+ private String fileName;
+ private String suffix;
+ private String content;
+
+ public Map<String, Object> toMap() {
+ final Map<String, Object> map = Maps.newHashMap();
+ map.put("type", type);
+ map.put("pid", pid);
+ map.put("currentDir", currentDir);
+ map.put("fileName", fileName);
+ map.put("suffix", suffix);
+ map.put("content", content);
+ return map;
+ }
}
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProcessDefinitionDto.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProcessDefinitionDto.java
new file mode 100644
index 000000000..68504d432
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProcessDefinitionDto.java
@@ -0,0 +1,50 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler.dto;
+
+import static org.apache.seatunnel.server.common.DateUtils.DEFAULT_DATETIME_FORMAT;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ProcessDefinitionDto {
+ private int id;
+ private long code;
+ private String name;
+ private String releaseState;
+ private long projectCode;
+ private String description;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date createTime;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date updateTime;
+ private String userName;
+ private String projectName;
+ private String locations;
+ private String scheduleReleaseState;
+ private int timeout;
+ private int tenantId;
+ private String tenantCode;
+ private String modifyBy;
+ private int warningGroupId;
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProjectDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProjectDto.java
index 146771460..edcf1998b 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProjectDto.java
@@ -15,26 +15,14 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ProjectDto {
+ private long code;
+ private String name;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ResourceDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ResourceDto.java
index 146771460..995e981c4 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ResourceDto.java
@@ -15,26 +15,14 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true, value = {"pid"})
+public class ResourceDto {
+ private int id;
+ private int pid;
}
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/SchedulerDto.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/SchedulerDto.java
new file mode 100644
index 000000000..acc660072
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/SchedulerDto.java
@@ -0,0 +1,53 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler.dto;
+
+import static org.apache.seatunnel.server.common.DateUtils.DEFAULT_DATETIME_FORMAT;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SchedulerDto {
+ private int id;
+ private long processDefinitionCode;
+ private String processDefinitionName;
+ private String projectName;
+ private String definitionDescription;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date startTime;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date endTime;
+ private String timezoneId;
+ private String crontab;
+ private String failureStrategy;
+ private String warningType;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date createTime;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date updateTime;
+ private int userId;
+ private String userName;
+ private String releaseState;
+ private int warningGroupId;
+ private String processInstancePriority;
+ private String workerGroup;
+ private int environmentCode;
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/StartProcessDefinitionDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/StartProcessDefinitionDto.java
index 146771460..617a3d1a7 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/StartProcessDefinitionDto.java
@@ -15,26 +15,21 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Builder
+@Data
+public class StartProcessDefinitionDto {
+ private long processDefinitionCode;
+ private String failureStrategy;
+ private String warningType;
+ private int warningGroupId;
+ private String taskDependType;
+ private String runMode;
+ private String processInstancePriority;
+ private String workerGroup;
+ private int dryRun;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskDefinitionDto.java
similarity index 53%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskDefinitionDto.java
index 146771460..c0b02569e 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskDefinitionDto.java
@@ -15,26 +15,28 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class TaskDefinitionDto {
+ private Long code;
+ private String name;
+ private String description;
+ private String taskType;
+ private TaskParamDto taskParams;
+ private String flag;
+ private String taskPriority;
+ private String workerGroup;
+ private int failRetryTimes;
+ private int failRetryInterval;
+ private String timeoutFlag;
+ private String timeoutNotifyStrategy;
+ private int timeout;
+ private int delayTime;
+ private int environmentCode;
+ private int version;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskDescriptionDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskDescriptionDto.java
index 146771460..1dc971611 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskDescriptionDto.java
@@ -15,26 +15,20 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Map;
+
+@Data
+@Builder
+public class TaskDescriptionDto {
+ private String name;
+ private String executeScript;
+ private String content;
+ private Map<String, Object> params;
+ private int retryInterval;
+ private int retryTimes;
}
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskInstanceDto.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskInstanceDto.java
new file mode 100644
index 000000000..2e49196f6
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskInstanceDto.java
@@ -0,0 +1,64 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler.dto;
+
+import static org.apache.seatunnel.server.common.DateUtils.DEFAULT_DATETIME_FORMAT;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class TaskInstanceDto {
+ private boolean taskComplete;
+ private boolean firstRun;
+ private int dryRun;
+ private String flag;
+ private int environmentCode;
+ private String processInstance;
+ private int pid;
+ private String taskParams;
+ private String duration;
+ private String taskType;
+ private long taskCode;
+ private String taskInstancePriority;
+ private String host;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date startTime;
+ private int id;
+ private String state;
+ private String workerGroup;
+ private String processInstancePriority;
+ private int processInstanceId;
+ private int executorId;
+ private String firstSubmitTime;
+ private String resources;
+ private int maxRetryTimes;
+ private int retryTimes;
+ private String executorName;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date submitTime;
+ private String name;
+ private int retryInterval;
+ @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
+ private Date endTime;
+ private String processInstanceName;
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskParamDto.java
similarity index 61%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskParamDto.java
index 146771460..36ab04ee3 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskParamDto.java
@@ -15,26 +15,22 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+import java.util.Map;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class TaskParamDto {
+ private List<ResourceDto> resourceList;
+ private List<LocalParam> localParams;
+ private String rawScript;
+ private Map<String, Object> dependence;
+ private ConditionResult conditionResult;
+ private int waitStartTimeout;
+ private int switchResult;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskRelationDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskRelationDto.java
index 146771460..c0c80b228 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/TaskRelationDto.java
@@ -15,26 +15,19 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class TaskRelationDto {
+ private String name;
+ private long preTaskCode;
+ private int preTaskVersion;
+ private long postTaskCode;
+ private long postTaskVersion;
+ private int conditionType;
+ private String conditionParams;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/UpdateProcessDefinitionDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/UpdateProcessDefinitionDto.java
index 146771460..1486e4464 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/UpdateProcessDefinitionDto.java
@@ -15,26 +15,20 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.scheduler.dolphinscheduler.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@Builder
+public class UpdateProcessDefinitionDto {
+ private Long processDefinitionCode;
+ private String name;
+ private Date startTime;
+ private Date endTime;
+ private String cronExpression;
+ private TaskDescriptionDto taskDescriptionDto;
}
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/DolphinschedulerServiceImpl.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/DolphinschedulerServiceImpl.java
new file mode 100644
index 000000000..28726fbf8
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/DolphinschedulerServiceImpl.java
@@ -0,0 +1,621 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler.impl;
+
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.CODE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.CODE_SUCCESS;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.CONDITION_TYPE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.CREATE_PROCESS_DEFINITION;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.CREATE_SCHEDULE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.CRONTAB;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DATA;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DATA_TOTAL_LIST;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DEFAULT_FILE_SUFFIX;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DELAY_TIME_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DEPENDENCE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DESCRIPTION_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DRY_RUN;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.END_TIME;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.ENVIRONMENT_CODE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.ENVIRONMENT_CODE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.FAILED_NODE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.FAILURE_STRATEGY;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.FAILURE_STRATEGY_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.FLAG_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.FULL_NAME;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.GEN_NUM;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.GEN_NUM_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.GEN_TASK_CODE_LIST;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.LOCAL_PARAMS_DIRECT_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.LOCAL_PARAMS_TYPE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.LOCATIONS;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.LOCATIONS_X_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.LOCATIONS_Y_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.LOG_DETAIL;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.LOG_LIMIT_NUM;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.LOG_SKIP_LINE_NUM;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.MSG;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.ONLINE_CREATE_RESOURCE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PAGE_NO;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PAGE_NO_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PAGE_SIZE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PAGE_SIZE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.POST_TASK_VERSION_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PRE_TASK_CODE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PRE_TASK_VERSION_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PROCESS_DEFINITION;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PROCESS_DEFINITION_CODE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PROCESS_DEFINITION_NAME;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PROCESS_INSTANCE_NAME;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PROCESS_INSTANCE_PRIORITY;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.PROCESS_INSTANCE_PRIORITY_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.QUERY_LIST_PAGING;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.QUERY_PROCESS_DEFINITION_BY_NAME;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.QUERY_PROJECT_LIST_PAGING;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.QUERY_RESOURCE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.QUERY_SCHEDULE_LIST_PAGING;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.QUERY_TASK_LIST_PAGING;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RELEASE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RELEASE_STATE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RELEASE_STATE_OFFLINE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RESOURCE_ID;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RESOURCE_ID_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RESOURCE_SEPARATOR;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RESOURCE_TYPE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RESOURCE_TYPE_FILE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RESOURCE_TYPE_FILE_CONTENT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RESOURCE_TYPE_FILE_SUFFIX_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RUN_MODE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.SCHEDULE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.SCHEDULE_ID;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.SCHEDULE_OFFLINE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.SCHEDULE_ONLINE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.SEARCH_VAL;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.START_PROCESS_INSTANCE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.START_TIME;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.SUCCESS_NODE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.SWITCH_RESULT_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TASK_DEFINITION_JSON;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TASK_DEPEND_TYPE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TASK_INSTANCE_ID;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TASK_PRIORITY_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TASK_RELATION_JSON;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TASK_TYPE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TENANT_CODE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TIMEOUT_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TIMEOUT_FLAG_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TIMEOUT_NOTIFY_STRATEGY_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TIMEZONE_ID;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TIMEZONE_ID_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.TOKEN;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.UPDATE_CONTENT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.VERSION_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.WAIT_START_TIMEOUT_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.WARNING_GROUP_ID;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.WARNING_GROUP_ID_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.WARNING_TYPE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.WARNING_TYPE_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.WORKER_GROUP;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.WORKER_GROUP_DEFAULT;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.utils.HttpUtils.createParamMap;
+import static org.apache.seatunnel.server.common.Constants.BLANK_SPACE;
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.NO_MATCHED_PROJECT;
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.UNEXPECTED_RETURN_CODE;
+
+import org.apache.seatunnel.scheduler.dolphinscheduler.IDolphinschedulerService;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ConditionResult;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ListProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ListProcessInstanceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.LocalParam;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.LocationDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.OnlineCreateResourceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ProjectDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ResourceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.SchedulerDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.StartProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskDescriptionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskInstanceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskParamDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskRelationDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.UpdateProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.utils.HttpUtils;
+import org.apache.seatunnel.server.common.DateUtils;
+import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
+import org.apache.seatunnel.server.common.SeatunnelException;
+import org.apache.seatunnel.spi.scheduler.dto.InstanceLogDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobDto;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
+import org.jsoup.Connection;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component
+public class DolphinschedulerServiceImpl implements IDolphinschedulerService, InitializingBean {
+
+ @Value("${ds.api.prefix}")
+ private String apiPrefix;
+ @Value("${ds.api.token}")
+ private String token;
+ @Value("${ds.tenant.default}")
+ private String defaultTenantName;
+ @Value("${ds.project.default}")
+ private String defaultProjectName;
+ @Value("${ds.script.dir}")
+ private String defaultScriptDir;
+ private long defaultProjectCode;
+
+ private static final ObjectMapper MAPPER = new ObjectMapper();
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ final ProjectDto projectDto = queryProjectCodeByName(defaultProjectName);
+ defaultProjectCode = projectDto.getCode();
+ }
+
+ @Override
+ public ProcessDefinitionDto createOrUpdateProcessDefinition(UpdateProcessDefinitionDto dto) {
+ // gen task code
+ final List<Long> taskCodes = genTaskCodes(defaultProjectCode, GEN_NUM_DEFAULT);
+
+ // build taskDefinitionJson and taskRelationJson.
+ final Long taskCode = taskCodes.get(0);
+ List<TaskDefinitionDto> taskDefinitionJson = Collections.singletonList(buildTaskDefinitionJson(taskCode, dto.getTaskDescriptionDto()));
+ List<TaskRelationDto> taskRelationJson = buildTaskRelationJson(taskCode, dto.getTaskDescriptionDto());
+ List<LocationDto> locations = buildLocation(taskCodes);
+
+ String url = apiPrefix.concat(String.format(CREATE_PROCESS_DEFINITION, defaultProjectCode));
+ Connection.Method method = Connection.Method.POST;
+ if (Objects.nonNull(dto.getProcessDefinitionCode())) {
+ method = Connection.Method.PUT;
+ url = url.concat(String.valueOf(dto.getProcessDefinitionCode()));
+ // offline process
+ updateProcessDefinitionState(dto.getProcessDefinitionCode(), dto.getName(), RELEASE_STATE_OFFLINE);
+ }
+
+ final Map<String, String> paramMap = createParamMap(LOCATIONS, locations,
+ TASK_DEFINITION_JSON, this.objectToString(taskDefinitionJson),
+ TASK_RELATION_JSON, this.objectToString(taskRelationJson),
+ TENANT_CODE, defaultTenantName,
+ PROCESS_DEFINITION_NAME, dto.getName());
+
+ final Map result = HttpUtils.builder()
+ .withUrl(url)
+ .withMethod(method)
+ .withData(paramMap)
+ .withRequestBody(this.objectToString(null))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+
+ checkResult(result, false);
+ final Map<String, Object> map = MapUtils.getMap(result, DATA);
+ return mapToPojo(map, ProcessDefinitionDto.class);
+ }
+
+ @Override
+ public List<ProcessDefinitionDto> listProcessDefinition(ListProcessDefinitionDto dto) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(QUERY_LIST_PAGING, defaultProjectCode)))
+ .withMethod(Connection.Method.GET)
+ .withData(createParamMap(SEARCH_VAL, dto.getName(), PAGE_NO, dto.getPageNo(), PAGE_SIZE, dto.getPageSize()))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+
+ final List<Map<String, Object>> processDefinitionList = (List<Map<String, Object>>) MapUtils.getMap(result, DATA).get(DATA_TOTAL_LIST);
+ if (CollectionUtils.isEmpty(processDefinitionList)) {
+ return Collections.emptyList();
+ }
+ return processDefinitionList.stream().map(m -> this.mapToPojo(m, ProcessDefinitionDto.class)).collect(Collectors.toList());
+ }
+
+ @Override
+ public ProcessDefinitionDto fetchProcessDefinitionByName(String processDefinitionName) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(QUERY_PROCESS_DEFINITION_BY_NAME, defaultProjectCode)))
+ .withMethod(Connection.Method.GET)
+ .withData(createParamMap(PROCESS_DEFINITION_NAME, processDefinitionName))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+
+ final Map<String, Object> map = (Map<String, Object>) MapUtils.getMap(result, DATA).get(PROCESS_DEFINITION);
+ return this.mapToPojo(map, ProcessDefinitionDto.class);
+ }
+
+ @Override
+ public void startProcessDefinition(long processDefinitionCode) {
+ final StartProcessDefinitionDto dto = StartProcessDefinitionDto.builder()
+ .processDefinitionCode(processDefinitionCode)
+ .failureStrategy(FAILURE_STRATEGY_DEFAULT)
+ .warningType(WARNING_TYPE_DEFAULT)
+ .warningGroupId(WARNING_GROUP_ID_DEFAULT)
+ .taskDependType(TASK_DEPEND_TYPE_DEFAULT)
+ .runMode(RUN_MODE_DEFAULT)
+ .processInstancePriority(PROCESS_INSTANCE_PRIORITY_DEFAULT)
+ .workerGroup(WORKER_GROUP_DEFAULT)
+ .dryRun(DRY_RUN)
+ .build();
+
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(START_PROCESS_INSTANCE, processDefinitionCode)))
+ .withMethod(Connection.Method.POST)
+ .withRequestBody(this.objectToString(dto))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+ }
+
+ @Override
+ public void updateProcessDefinitionState(long processDefinitionCode, String processDefinitionName, String state) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(RELEASE, defaultProjectCode, processDefinitionCode)))
+ .withMethod(Connection.Method.POST)
+ .withData(createParamMap(PROCESS_DEFINITION_NAME, processDefinitionName, RELEASE_STATE, state))
+ .withRequestBody(this.objectToString(null))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+ }
+
+ @Override
+ public SchedulerDto createOrUpdateSchedule(JobDto dto) {
+ final Map<String, Object> map = Maps.newHashMap();
+ map.put(FAILURE_STRATEGY, FAILURE_STRATEGY_DEFAULT);
+ map.put(WARNING_TYPE, WARNING_TYPE_DEFAULT);
+ map.put(PROCESS_INSTANCE_PRIORITY, PROCESS_INSTANCE_PRIORITY_DEFAULT);
+ map.put(WARNING_GROUP_ID, WARNING_GROUP_ID_DEFAULT);
+ map.put(WORKER_GROUP, WORKER_GROUP_DEFAULT);
+ map.put(ENVIRONMENT_CODE, ENVIRONMENT_CODE_DEFAULT);
+ map.put(PROCESS_DEFINITION_CODE, dto.getJobId());
+
+ final Map<String, Object> schedule = Maps.newHashMap();
+ schedule.put(START_TIME, DateUtils.format(dto.getSchedulerConfigDto().getStartTime()));
+ schedule.put(END_TIME, DateUtils.format(dto.getSchedulerConfigDto().getEndTime()));
+ schedule.put(CRONTAB, dto.getSchedulerConfigDto().getTriggerExpression());
+ schedule.put(TIMEZONE_ID, TIMEZONE_ID_DEFAULT);
+
+ map.put(SCHEDULE, this.objectToString(schedule));
+
+ String url = String.format(CREATE_SCHEDULE, defaultProjectCode);
+
+ final List<SchedulerDto> schedulerDtos = listSchedule(dto.getJobId());
+ boolean flag = false;
+ if (!CollectionUtils.isEmpty(schedulerDtos)) {
+ url = url.concat(String.valueOf(schedulerDtos.get(0).getId()));
+ flag = true;
+ }
+
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(url))
+ .withData(translate(map))
+ .withMethod(flag ? Connection.Method.PUT : Connection.Method.POST)
+ .withRequestBody(this.objectToString(null))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+
+ if (flag){
+ schedulerDtos.clear();
+ schedulerDtos.addAll(listSchedule(dto.getJobId()));
+ return schedulerDtos.get(0);
+ }
+
+ Map<String, Object> resultMap = MapUtils.getMap(result, DATA);
+ return this.mapToPojo(resultMap, SchedulerDto.class);
+ }
+
+ @Override
+ public List<SchedulerDto> listSchedule(long processDefinitionCode) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(QUERY_SCHEDULE_LIST_PAGING, defaultProjectCode)))
+ .withMethod(Connection.Method.GET)
+ .withData(createParamMap(PROCESS_DEFINITION_CODE, processDefinitionCode, PAGE_NO, PAGE_NO_DEFAULT, PAGE_SIZE, PAGE_SIZE_DEFAULT))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+
+ final List<Map<String, Object>> scheduleList = (List<Map<String, Object>>) MapUtils.getMap(result, DATA).get(DATA_TOTAL_LIST);
+ if (CollectionUtils.isEmpty(scheduleList)) {
+ return Collections.emptyList();
+ }
+ return scheduleList.stream().map(m -> this.mapToPojo(m, SchedulerDto.class)).collect(Collectors.toList());
+ }
+
+ @Override
+ public void scheduleOnline(int scheduleId) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(SCHEDULE_ONLINE, defaultProjectCode, scheduleId)))
+ .withMethod(Connection.Method.POST)
+ .withData(createParamMap(SCHEDULE_ID, scheduleId))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+ }
+
+ @Override
+ public void scheduleOffline(int scheduleId) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(SCHEDULE_OFFLINE, defaultProjectCode, scheduleId)))
+ .withMethod(Connection.Method.POST)
+ .withData(createParamMap(SCHEDULE_ID, scheduleId))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+ }
+
+ @Override
+ public List<Long> genTaskCodes(long projectCode, int num) {
+ final String url = String.format(GEN_TASK_CODE_LIST, projectCode);
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(url))
+ .withMethod(Connection.Method.GET)
+ .withData(createParamMap(GEN_NUM, num))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+
+ return (List<Long>) result.get(DATA);
+ }
+
+ @Override
+ public ResourceDto createOrUpdateScriptContent(String resourceName, String content) {
+ // check resource exists
+ final String fullName = defaultScriptDir.concat(RESOURCE_SEPARATOR.concat(resourceName));
+ final ResourceDto parentResourceDto = getResourceDto(defaultScriptDir, RESOURCE_TYPE_FILE);
+ if (Objects.isNull(parentResourceDto)) {
+ throw new SeatunnelException(SeatunnelErrorEnum.NO_MATCHED_SCRIPT_SAVE_DIR, defaultScriptDir);
+ }
+ final ResourceDto dto = getResourceDto(fullName.concat(DEFAULT_FILE_SUFFIX), RESOURCE_TYPE_FILE);
+ if (Objects.isNull(dto)) {
+ final OnlineCreateResourceDto createDto = OnlineCreateResourceDto.builder()
+ .type(RESOURCE_TYPE_FILE)
+ .pid(parentResourceDto.getId())
+ .fileName(resourceName)
+ .currentDir(defaultScriptDir)
+ .suffix(RESOURCE_TYPE_FILE_SUFFIX_DEFAULT)
+ .content(content)
+ .build();
+ onlineCreateResource(createDto);
+ return getResourceDto(fullName.concat(DEFAULT_FILE_SUFFIX), RESOURCE_TYPE_FILE);
+ } else {
+ updateContent(dto.getId(), content);
+ return dto;
+ }
+ }
+
+ @Override
+ public List<TaskInstanceDto> listTaskInstance(ListProcessInstanceDto dto) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(QUERY_TASK_LIST_PAGING, defaultProjectCode)))
+ .withMethod(Connection.Method.GET)
+ .withData(createParamMap(PROCESS_INSTANCE_NAME, dto.getProcessInstanceName(), PAGE_NO, dto.getPageNo(), PAGE_SIZE, dto.getPageSize()))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+
+ checkResult(result, false);
+ final List<Map<String, Object>> taskInstanceList = (List<Map<String, Object>>) MapUtils.getMap(result, DATA).get(DATA_TOTAL_LIST);
+ if (CollectionUtils.isEmpty(taskInstanceList)) {
+ return Collections.emptyList();
+ }
+
+ return taskInstanceList.stream().map(m -> this.mapToPojo(m, TaskInstanceDto.class)).collect(Collectors.toList());
+ }
+
+ private ProjectDto queryProjectCodeByName(String projectName) throws IOException {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(QUERY_PROJECT_LIST_PAGING))
+ .withMethod(Connection.Method.GET)
+ .withData(createParamMap(SEARCH_VAL, projectName, PAGE_NO, PAGE_NO_DEFAULT, PAGE_SIZE, PAGE_SIZE_DEFAULT))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+
+ final List<Map<String, Object>> projectList = (List<Map<String, Object>>) MapUtils.getMap(result, DATA).get(DATA_TOTAL_LIST);
+ final ProjectDto projectDto = projectList.stream().map(m -> this.mapToPojo(m, ProjectDto.class)).filter(p -> p.getName().equalsIgnoreCase(projectName)).findAny().orElse(null);
+ if (Objects.isNull(projectDto)) {
+ throw new SeatunnelException(NO_MATCHED_PROJECT, projectName);
+ }
+ return projectDto;
+ }
+
+ private TaskDefinitionDto buildTaskDefinitionJson(Long taskCode, TaskDescriptionDto taskDescriptionDto) {
+ final ResourceDto resourceDto = createOrUpdateScriptContent(taskDescriptionDto.getName(), taskDescriptionDto.getContent());
+ final TaskDefinitionDto taskDefinitionDto = new TaskDefinitionDto();
+ taskDefinitionDto.setCode(taskCode);
+ taskDefinitionDto.setName(taskDescriptionDto.getName());
+ taskDefinitionDto.setDescription(DESCRIPTION_DEFAULT);
+ taskDefinitionDto.setTaskType(TASK_TYPE_DEFAULT);
+
+ final TaskParamDto taskParamDto = new TaskParamDto();
+
+ taskParamDto.setResourceList(Collections.singletonList(resourceDto));
+
+ final List<LocalParam> localParams = getLocalParams(taskDescriptionDto);
+ taskParamDto.setLocalParams(localParams);
+ taskParamDto.setRawScript(taskDescriptionDto.getExecuteScript());
+ taskParamDto.setDependence(DEPENDENCE_DEFAULT);
+
+ final ConditionResult conditionResult = new ConditionResult();
+ conditionResult.setSuccessNode(SUCCESS_NODE_DEFAULT);
+ conditionResult.setFailedNode(FAILED_NODE_DEFAULT);
+
+ taskParamDto.setConditionResult(conditionResult);
+ taskParamDto.setWaitStartTimeout(WAIT_START_TIMEOUT_DEFAULT);
+ taskParamDto.setSwitchResult(SWITCH_RESULT_DEFAULT);
+
+ taskDefinitionDto.setTaskParams(taskParamDto);
+ taskDefinitionDto.setFlag(FLAG_DEFAULT);
+ taskDefinitionDto.setTaskPriority(TASK_PRIORITY_DEFAULT);
+ taskDefinitionDto.setWorkerGroup(WORKER_GROUP_DEFAULT);
+ taskDefinitionDto.setFailRetryTimes(taskDescriptionDto.getRetryTimes());
+ taskDefinitionDto.setFailRetryInterval(taskDescriptionDto.getRetryInterval());
+ taskDefinitionDto.setTimeoutFlag(TIMEOUT_FLAG_DEFAULT);
+ taskDefinitionDto.setTimeoutNotifyStrategy(TIMEOUT_NOTIFY_STRATEGY_DEFAULT);
+ taskDefinitionDto.setTimeout(TIMEOUT_DEFAULT);
+ taskDefinitionDto.setDelayTime(DELAY_TIME_DEFAULT);
+ taskDefinitionDto.setEnvironmentCode(ENVIRONMENT_CODE_DEFAULT);
+ taskDefinitionDto.setVersion(VERSION_DEFAULT);
+ return taskDefinitionDto;
+ }
+
+ private List<LocalParam> getLocalParams(TaskDescriptionDto taskDescriptionDto) {
+ final Map<String, Object> params = taskDescriptionDto.getParams();
+ final List<LocalParam> localParams = Lists.newArrayListWithCapacity(params.size());
+ params.forEach((k, v) -> {
+ final LocalParam localParam = new LocalParam();
+ localParam.setProp(k);
+ localParam.setDirect(LOCAL_PARAMS_DIRECT_DEFAULT);
+ localParam.setType(LOCAL_PARAMS_TYPE_DEFAULT);
+ localParam.setValue(v);
+ localParams.add(localParam);
+ });
+ return localParams;
+ }
+
+ private List<TaskRelationDto> buildTaskRelationJson(Long taskCode, TaskDescriptionDto taskDescriptionDto) {
+
+ final TaskRelationDto taskRelationDto = new TaskRelationDto();
+ taskRelationDto.setName(BLANK_SPACE);
+ taskRelationDto.setPreTaskCode(PRE_TASK_CODE_DEFAULT);
+ taskRelationDto.setPreTaskVersion(PRE_TASK_VERSION_DEFAULT);
+ taskRelationDto.setPostTaskCode(taskCode);
+ taskRelationDto.setPostTaskVersion(POST_TASK_VERSION_DEFAULT);
+ taskRelationDto.setConditionType(CONDITION_TYPE_DEFAULT);
+ taskRelationDto.setConditionParams(null);
+ return Collections.singletonList(taskRelationDto);
+ }
+
+ private List<LocationDto> buildLocation(List<Long> taskCode) {
+ final List<LocationDto> locations = Lists.newArrayListWithCapacity(taskCode.size());
+ for (int i = 0; i < taskCode.size(); i++) {
+ final LocationDto locationDto = new LocationDto();
+ locationDto.setTaskCode(taskCode.get(i));
+ locationDto.setX(LOCATIONS_X_DEFAULT * i);
+ locationDto.setY(LOCATIONS_Y_DEFAULT * i);
+ locations.add(locationDto);
+ }
+ return locations;
+ }
+
+ private void updateContent(int id, String content) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(UPDATE_CONTENT, id)))
+ .withMethod(Connection.Method.PUT)
+ .withData(createParamMap(RESOURCE_ID, id, RESOURCE_TYPE_FILE_CONTENT, content))
+ .withRequestBody(this.objectToString(null))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+ }
+
+ private void onlineCreateResource(OnlineCreateResourceDto createDto) {
+ final Map<String, Object> map = createDto.toMap();
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(ONLINE_CREATE_RESOURCE))
+ .withMethod(Connection.Method.POST)
+ .withData(translate(map))
+ .withRequestBody(this.objectToString(null))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+ }
+
+ private ResourceDto getResourceDto(String fullName, String fileType) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(String.format(QUERY_RESOURCE, RESOURCE_ID_DEFAULT)))
+ .withMethod(Connection.Method.GET)
+ .withData(createParamMap(FULL_NAME, fullName, RESOURCE_TYPE, RESOURCE_TYPE_FILE))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ final int code = checkResult(result, true);
+ if (code != CODE_SUCCESS) {
+ return null;
+ }
+ final Map<String, Object> map = MapUtils.getMap(result, DATA);
+ return this.mapToPojo(map, ResourceDto.class);
+ }
+
+ public InstanceLogDto getInstanceLog(long instanceId, int skipNum, int limitNum) {
+ final Map result = HttpUtils.builder()
+ .withUrl(apiPrefix.concat(LOG_DETAIL))
+ .withMethod(Connection.Method.GET)
+ .withData(createParamMap(TASK_INSTANCE_ID, instanceId, LOG_SKIP_LINE_NUM, skipNum, LOG_LIMIT_NUM, limitNum))
+ .withToken(TOKEN, token)
+ .execute(Map.class);
+ checkResult(result, false);
+ final String logContent = MapUtils.getString(result, DATA);
+ return InstanceLogDto.builder()
+ .lastSkipNum(skipNum)
+ .lastLimitNum(limitNum)
+ .instanceId(instanceId)
+ .content(logContent)
+ .build();
+ }
+
+ private int checkResult(Map result, boolean ignore) {
+ final int intValue = MapUtils.getIntValue(result, CODE, -1);
+ if (!ignore && CODE_SUCCESS != intValue) {
+ final String msg = MapUtils.getString(result, MSG);
+ throw new SeatunnelException(UNEXPECTED_RETURN_CODE, intValue, msg);
+ }
+ return intValue;
+ }
+
+ private Map<String, String> translate(Map<String, Object> origin) {
+ final HashMap<String, String> map = Maps.newHashMapWithExpectedSize(origin.size());
+ origin.forEach((k, v) -> map.put(k, String.valueOf(v)));
+ return map;
+ }
+
+ private <T> T mapToPojo(Map map, Class<T> pojo) {
+ try {
+ return MAPPER.readValue(MAPPER.writeValueAsString(map), pojo);
+ } catch (JsonProcessingException e) {
+ log.error("Map translate to Pojo failed.", e);
+ throw new SeatunnelException(SeatunnelErrorEnum.JSON_TRANSFORM_FAILED);
+ }
+ }
+
+ private String objectToString(Object o) {
+ try {
+ return MAPPER.writeValueAsString(o);
+ } catch (JsonProcessingException e) {
+ log.error("Map translate to Pojo failed.", e);
+ throw new SeatunnelException(SeatunnelErrorEnum.JSON_TRANSFORM_FAILED);
+ }
+ }
+}
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/InstanceServiceImpl.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/InstanceServiceImpl.java
new file mode 100644
index 000000000..57615943c
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/InstanceServiceImpl.java
@@ -0,0 +1,64 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler.impl;
+
+import org.apache.seatunnel.scheduler.dolphinscheduler.IDolphinschedulerService;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ListProcessInstanceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskInstanceDto;
+import org.apache.seatunnel.spi.scheduler.IInstanceService;
+import org.apache.seatunnel.spi.scheduler.dto.InstanceDto;
+import org.apache.seatunnel.spi.scheduler.dto.InstanceListDto;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component
+public class InstanceServiceImpl implements IInstanceService {
+
+ @Resource
+ private IDolphinschedulerService iDolphinschedulerService;
+
+ @Override
+ public List<InstanceDto> list(InstanceListDto dto) {
+
+ final ListProcessInstanceDto listDto = ListProcessInstanceDto.builder()
+ .processInstanceName(dto.getName())
+ .pageNo(dto.getPageNo())
+ .pageSize(dto.getPageSize())
+ .build();
+ final List<TaskInstanceDto> taskInstanceDtos = iDolphinschedulerService.listTaskInstance(listDto);
+
+ return taskInstanceDtos.stream().map(t -> InstanceDto.builder()
+ .instanceId(t.getId())
+ .instanceCode(t.getProcessInstanceId())
+ .instanceName(t.getProcessInstanceName())
+ .status(t.getState())
+ .startTime(t.getStartTime())
+ .endTime(t.getEndTime())
+ .submitTime(t.getSubmitTime())
+ .executionDuration(t.getDuration())
+ .retryTimes(t.getRetryTimes())
+ .build()).collect(Collectors.toList());
+ }
+}
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java
new file mode 100644
index 000000000..71dc5f1c5
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java
@@ -0,0 +1,102 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler.impl;
+
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RELEASE_STATE_OFFLINE;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.RELEASE_STATE_ONLINE;
+
+import org.apache.seatunnel.scheduler.dolphinscheduler.IDolphinschedulerService;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ListProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.SchedulerDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskDescriptionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.dto.UpdateProcessDefinitionDto;
+import org.apache.seatunnel.spi.scheduler.IJobService;
+import org.apache.seatunnel.spi.scheduler.dto.JobDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobListDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobSimpleInfoDto;
+
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+public class JobServiceImpl implements IJobService {
+ @Resource
+ private IDolphinschedulerService iDolphinschedulerService;
+
+ @Override
+ public long submitJob(JobDto dto) {
+ // one process == one seatunnel script == one job
+
+ final TaskDescriptionDto taskDescriptionDto = TaskDescriptionDto.builder()
+ .name(dto.getJobName())
+ .executeScript(dto.getExecutorScript())
+ .content(dto.getJobContent())
+ .params(dto.getParams())
+ .retryInterval(dto.getSchedulerConfigDto().getRetryInterval())
+ .retryTimes(dto.getSchedulerConfigDto().getRetryTimes())
+ .build();
+
+ final UpdateProcessDefinitionDto processDto = UpdateProcessDefinitionDto.builder()
+ .name(dto.getJobName())
+ .startTime(dto.getSchedulerConfigDto().getStartTime())
+ .endTime(dto.getSchedulerConfigDto().getEndTime())
+ .cronExpression(dto.getSchedulerConfigDto().getTriggerExpression())
+ .taskDescriptionDto(taskDescriptionDto)
+ .processDefinitionCode(dto.getJobId())
+ .build();
+
+ final ProcessDefinitionDto processDefinition = iDolphinschedulerService.createOrUpdateProcessDefinition(processDto);
+ dto.setJobId(processDefinition.getCode());
+
+ iDolphinschedulerService.updateProcessDefinitionState(processDefinition.getCode(), processDefinition.getName(), RELEASE_STATE_ONLINE);
+ final SchedulerDto schedulerDto = iDolphinschedulerService.createOrUpdateSchedule(dto);
+ iDolphinschedulerService.scheduleOnline(schedulerDto.getId());
+
+ return processDefinition.getCode();
+ }
+
+ @Override
+ public void offlineJob(JobDto dto) {
+ iDolphinschedulerService.updateProcessDefinitionState(dto.getJobId(), dto.getJobName(), RELEASE_STATE_OFFLINE);
+ }
+
+ @Override
+ public List<JobSimpleInfoDto> list(JobListDto dto) {
+ final ListProcessDefinitionDto listDto = ListProcessDefinitionDto.builder()
+ .name(dto.getName())
+ .pageNo(dto.getPageNo())
+ .pageSize(dto.getPageSize())
+ .build();
+ final List<ProcessDefinitionDto> processDefinitionDtos = iDolphinschedulerService.listProcessDefinition(listDto);
+ return processDefinitionDtos.stream().map(p -> JobSimpleInfoDto.builder()
+ .jobId(p.getCode())
+ .jobStatus(p.getReleaseState())
+ .createTime(p.getCreateTime())
+ .updateTime(p.getUpdateTime())
+ .creatorName(p.getUserName())
+ .menderName(p.getUserName())
+ .build())
+ .collect(Collectors.toList());
+ }
+
+}
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/utils/HttpUtils.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/utils/HttpUtils.java
new file mode 100644
index 000000000..67512f70c
--- /dev/null
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/utils/HttpUtils.java
@@ -0,0 +1,173 @@
+/*
+ * 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.seatunnel.scheduler.dolphinscheduler.utils;
+
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.HTTP_REQUEST_FAILED;
+import static com.google.common.base.Preconditions.checkState;
+
+import org.apache.seatunnel.server.common.SeatunnelException;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.jsoup.Connection;
+import org.jsoup.Jsoup;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+@Slf4j
+public class HttpUtils {
+
+ private static final ObjectMapper MAPPER = new ObjectMapper();
+
+ @SuppressWarnings("MagicNumber")
+ public static Map<String, String> createParamMap(Object... elements) {
+ if (elements == null || elements.length == 0 || elements.length % 2 == 1) {
+ throw new IllegalArgumentException("params length must be even!");
+ }
+ Map<String, String> paramMap = Maps.newHashMapWithExpectedSize(elements.length / 2);
+ for (int i = 0; i < elements.length / 2; i++) {
+ Object key = elements[2 * i];
+ Object value = elements[2 * i + 1];
+ if (key == null) {
+ continue;
+ }
+
+ paramMap.put(key.toString(), value == null ? "" : value.toString());
+ }
+
+ return paramMap;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ @SuppressWarnings("MagicNumber")
+ public static class Builder {
+ private Connection connection;
+ private String url;
+ private Optional<Map<String, String>> data = Optional.empty();
+ private Optional<String> requestBody = Optional.empty();
+ private Optional<Integer> maxBodySize = Optional.of(2147483647);
+ private Optional<String> postDataCharset = Optional.of("UTF-8");
+ private Optional<Boolean> ignoreContentType = Optional.of(true);
+ private Optional<Integer> timeout = Optional.of(30000);
+ private Optional<Map<String, String>> headers;
+ private Optional<Connection.Method> method = Optional.empty();
+
+ private Optional<Type> type;
+
+ public Builder() {
+ HashMap<String, String> defaultMap = Maps.newHashMap();
+ defaultMap.put("Content-Type", "application/json; charset=UTF-8");
+ headers = Optional.of(defaultMap);
+ }
+
+ public Builder withUrl(String url) {
+ this.url = url;
+ return this;
+ }
+
+ public Builder withData(Map<String, String> data) {
+ this.data = Optional.ofNullable(data);
+ return this;
+ }
+
+ public Builder withRequestBody(String requestBody) {
+ this.requestBody = Optional.ofNullable(requestBody);
+ return this;
+ }
+
+ public Builder withMaxBodySize(int maxBodySize) {
+ this.maxBodySize = Optional.of(maxBodySize);
+ return this;
+ }
+
+ public Builder withPostDataCharset(String postDataCharset) {
+ this.postDataCharset = Optional.ofNullable(postDataCharset);
+ return this;
+ }
+
+ public Builder withIgnoreContentType(boolean ignoreContentType) {
+ this.ignoreContentType = Optional.of(ignoreContentType);
+ return this;
+ }
+
+ public Builder withTimeout(int timeout) {
+ this.timeout = Optional.of(timeout);
+ return this;
+ }
+
+ public Builder withHeaders(Map<String, String> headers) {
+ this.headers = Optional.ofNullable(headers);
+ return this;
+ }
+
+ public Builder withMethod(Connection.Method method) {
+ this.method = Optional.ofNullable(method);
+ return this;
+ }
+
+ public Builder withToken(String tokenKey, String tokenValue) {
+ this.headers.ifPresent(map -> map.put(tokenKey, tokenValue));
+ return this;
+ }
+
+ private Connection build() {
+ checkState(!Strings.isNullOrEmpty(url), "request url is empty");
+ connection = Jsoup.connect(url);
+ data.ifPresent(connection::data);
+ requestBody.ifPresent(connection::requestBody);
+ maxBodySize.ifPresent(connection::maxBodySize);
+ postDataCharset.ifPresent(connection::postDataCharset);
+ ignoreContentType.ifPresent(connection::ignoreContentType);
+ timeout.ifPresent(connection::timeout);
+ headers.ifPresent(connection::headers);
+ method.ifPresent(connection::method);
+
+ return connection;
+ }
+
+ public <T> T execute(Class<T> type) {
+ this.build();
+ try {
+ Connection.Response response = connection.execute();
+ return MAPPER.readValue(response.body(), type);
+ } catch (IOException e) {
+ log.error("Request url {} failed", this.url, e);
+ throw new SeatunnelException(HTTP_REQUEST_FAILED, this.url);
+ }
+ }
+
+ public void execute() throws IOException {
+ this.build();
+ try {
+ connection.execute();
+ } catch (IOException e) {
+ log.error("Request url {} failed", this.url, e);
+ throw new SeatunnelException(HTTP_REQUEST_FAILED, this.url);
+ }
+ }
+ }
+}
diff --git a/seatunnel-server/pom.xml b/seatunnel-server/seatunnel-server-common/pom.xml
similarity index 78%
copy from seatunnel-server/pom.xml
copy to seatunnel-server/seatunnel-server-common/pom.xml
index dc9361510..e468d6eb4 100644
--- a/seatunnel-server/pom.xml
+++ b/seatunnel-server/seatunnel-server-common/pom.xml
@@ -17,16 +17,19 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <artifactId>seatunnel</artifactId>
+ <artifactId>seatunnel-server</artifactId>
<groupId>org.apache.seatunnel</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>seatunnel-server</artifactId>
- <packaging>pom</packaging>
- <modules>
- <module>seatunnel-app</module>
- </modules>
+ <artifactId>seatunnel-server-common</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
</project>
\ No newline at end of file
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/Constants.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/Constants.java
index 146771460..d1370583b 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/Constants.java
@@ -15,26 +15,8 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.server.common;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+public class Constants {
+ public static final String BLANK_SPACE = " ";
}
diff --git a/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/DateUtils.java b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/DateUtils.java
new file mode 100644
index 000000000..47c016051
--- /dev/null
+++ b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/DateUtils.java
@@ -0,0 +1,69 @@
+/*
+ * 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.seatunnel.server.common;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+
+@Slf4j
+public class DateUtils {
+ public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+ public static final String DEFAULT_DATETIME_FORMAT_WITH_TIMEZONE = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ";
+
+ /**
+ * parse Date to String Date, use default datetime format 'yyyy-MM-dd HH:mm:ss'
+ * @param date which need been format to String date
+ * @return String date
+ */
+ public static String format(Date date) {
+ return format(date2LocalDateTime(date), DEFAULT_DATETIME_FORMAT);
+ }
+
+ public static String format(LocalDateTime localDateTime, String format) {
+ return localDateTime.format(DateTimeFormatter.ofPattern(format));
+ }
+
+ private static LocalDateTime date2LocalDateTime(Date date) {
+ return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
+ }
+
+ /**
+ * parse String date to Date, use default datetime format 'yyyy-MM-dd HH:mm:ss'
+ * @param date which need been parse to Date
+ * @return Date
+ */
+ public static Date parse(String date) {
+ LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(DEFAULT_DATETIME_FORMAT));
+ return localDateTime2Date(localDateTime);
+ }
+
+ public static Date parse(String date, String format) {
+ LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(format));
+ return localDateTime2Date(localDateTime);
+ }
+
+ private static Date localDateTime2Date(LocalDateTime localDateTime) {
+ Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
+ return Date.from(instant);
+ }
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelErrorEnum.java b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
similarity index 61%
rename from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelErrorEnum.java
rename to seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
index 5e54ef5fa..9de5b7436 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelErrorEnum.java
+++ b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.server.common;
public enum SeatunnelErrorEnum {
@@ -23,8 +23,21 @@ public enum SeatunnelErrorEnum {
NO_SUCH_SCRIPT(10002, "no such script", "No such script. Maybe deleted by others."),
USER_ALREADY_EXISTS(10003, "user already exist", "The same username [%s] is exist."),
NO_SUCH_USER(10002, "no such user", "No such user. Maybe deleted by others."),
+ SCHEDULER_CONFIG_NOT_EXIST(10003, "scheduler config not exist", "This script's scheduler config not exist, please check your config."),
+ JSON_TRANSFORM_FAILED(10004, "json transform failed", "Json transform failed, it may be a bug."),
+
+ /**
+ * request dolphinscheduler failed
+ */
+ UNEXPECTED_RETURN_CODE(20000, "Unexpected return code", "Unexpected return code : [%s], error msg is [%s]"),
+ QUERY_PROJECT_CODE_FAILED(20001, "query project code failed", "Request ds for querying project code failed"),
+ NO_MATCHED_PROJECT(20002, "no matched project", "No matched project [%s], please check your configuration"),
+ NO_MATCHED_SCRIPT_SAVE_DIR(20003, "no matched script save dir", "No matched script save dir [%s], please check your configuration"),
+
+ UNSUPPORTED_OPERATION(99996, "unsupported operation", "This operation [%s] is not supported now."),
+ HTTP_REQUEST_FAILED(99997, "http request failed", "Http request failed, url is %s"),
ILLEGAL_STATE(99998, "illegal state", "%s"),
- UNKNOWN(99999, "unknown exception", "%s")
+ UNKNOWN(99999, "unknown exception", "Unknown exception")
;
private final int code;
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelException.java b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelException.java
similarity index 86%
rename from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelException.java
rename to seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelException.java
index e68329631..49d5a8c81 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/SeatunnelException.java
+++ b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelException.java
@@ -15,9 +15,7 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.common;
-
-import java.util.Arrays;
+package org.apache.seatunnel.server.common;
public class SeatunnelException extends RuntimeException{
private SeatunnelErrorEnum errorEnum;
@@ -27,12 +25,12 @@ public class SeatunnelException extends RuntimeException{
this.errorEnum = e;
}
- public SeatunnelException(SeatunnelErrorEnum e, String... msg) {
- super(e.getMsg().concat(" ").concat(Arrays.toString(msg)));
+ public SeatunnelException(SeatunnelErrorEnum e, Object... msg) {
+ super(String.format(e.getTemplate(), msg));
this.errorEnum = e;
}
- public static SeatunnelException newInstance(SeatunnelErrorEnum e, String... msg) {
+ public static SeatunnelException newInstance(SeatunnelErrorEnum e, Object... msg) {
return new SeatunnelException(e, msg);
}
diff --git a/seatunnel-server/pom.xml b/seatunnel-server/seatunnel-spi/pom.xml
similarity index 77%
copy from seatunnel-server/pom.xml
copy to seatunnel-server/seatunnel-spi/pom.xml
index dc9361510..8d5920974 100644
--- a/seatunnel-server/pom.xml
+++ b/seatunnel-server/seatunnel-spi/pom.xml
@@ -17,16 +17,20 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <artifactId>seatunnel</artifactId>
+ <artifactId>seatunnel-server</artifactId>
<groupId>org.apache.seatunnel</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>seatunnel-server</artifactId>
- <packaging>pom</packaging>
- <modules>
- <module>seatunnel-app</module>
- </modules>
+ <artifactId>seatunnel-spi</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.seatunnel</groupId>
+ <artifactId>seatunnel-server-common</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
</project>
\ No newline at end of file
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IInstanceService.java
similarity index 62%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IInstanceService.java
index 146771460..80572b1cf 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IInstanceService.java
@@ -15,26 +15,13 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.spi.scheduler;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import org.apache.seatunnel.spi.scheduler.dto.InstanceDto;
+import org.apache.seatunnel.spi.scheduler.dto.InstanceListDto;
import java.util.List;
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+public interface IInstanceService {
+ List<InstanceDto> list(InstanceListDto dto);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IJobService.java
similarity index 62%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IJobService.java
index 146771460..87b0fb24b 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IJobService.java
@@ -15,26 +15,20 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.spi.scheduler;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobListDto;
+import org.apache.seatunnel.spi.scheduler.dto.JobSimpleInfoDto;
import java.util.List;
-public interface IUserDao {
- int add(UpdateUserDto dto);
+public interface IJobService {
- void checkUserExists(String username);
+ long submitJob(JobDto dto);
- void update(UpdateUserDto dto);
+ void offlineJob(JobDto dto);
- void delete(int id);
+ List<JobSimpleInfoDto> list(JobListDto dto);
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceDto.java
index 146771460..dbb06e07f 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceDto.java
@@ -15,26 +15,23 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.spi.scheduler.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@Builder
+public class InstanceDto {
+ private long instanceId;
+ private long instanceCode;
+ private String instanceName;
+ private Date submitTime;
+ private Date startTime;
+ private Date endTime;
+ private String status;
+ private String executionDuration;
+ private long retryTimes;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceListDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceListDto.java
index 146771460..0b05302d3 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceListDto.java
@@ -15,26 +15,15 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.spi.scheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Builder;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Builder
+@Data
+public class InstanceListDto {
+ private String name;
+ private int pageNo;
+ private int pageSize;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceLogDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceLogDto.java
index 146771460..f2ddc77f5 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceLogDto.java
@@ -15,26 +15,16 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.spi.scheduler.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Builder
+@Data
+public class InstanceLogDto {
+ private long instanceId;
+ private int lastSkipNum;
+ private int lastLimitNum;
+ private String content;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobDto.java
index 146771460..3f30194b6 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobDto.java
@@ -15,26 +15,21 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.spi.scheduler.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Map;
+
+@Data
+@Builder
+public class JobDto {
+ private Long jobId;
+ private String jobName;
+ private String executorScript;
+ private String jobContent;
+ private Integer operatorId;
+ private Map<String, Object> params;
+ private SchedulerConfigDto schedulerConfigDto;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobListDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobListDto.java
index 146771460..5e5b1fcdc 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobListDto.java
@@ -15,26 +15,15 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.spi.scheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Builder;
+import lombok.Data;
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@Builder
+public class JobListDto {
+ private String name;
+ private Integer pageNo;
+ private Integer pageSize;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
index 146771460..28e88e9c6 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
@@ -15,26 +15,20 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
-
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
-
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+package org.apache.seatunnel.spi.scheduler.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Date;
+
+@Builder
+@Data
+public class JobSimpleInfoDto {
+ private long jobId;
+ private String jobStatus;
+ private String creatorName;
+ private String menderName;
+ private Date createTime;
+ private Date updateTime;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/SchedulerConfigDto.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/SchedulerConfigDto.java
index 146771460..aa71ac686 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/SchedulerConfigDto.java
@@ -15,26 +15,19 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.spi.scheduler.dto;
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Builder;
+import lombok.Data;
-import java.util.List;
+import java.util.Date;
-public interface IUserDao {
- int add(UpdateUserDto dto);
-
- void checkUserExists(String username);
-
- void update(UpdateUserDto dto);
-
- void delete(int id);
-
- void enable(int id);
-
- void disable(int id);
-
- List<User> list(ListUserDto dto, int pageNo, int pageSize);
+@Data
+@Builder
+public class SchedulerConfigDto {
+ private int retryTimes;
+ private int retryInterval;
+ private Date startTime;
+ private Date endTime;
+ private String triggerExpression;
}
diff --git a/tools/dependencies/known-dependencies.txt b/tools/dependencies/known-dependencies.txt
index 6d80f5ad1..fd6f9ad8a 100755
--- a/tools/dependencies/known-dependencies.txt
+++ b/tools/dependencies/known-dependencies.txt
@@ -428,6 +428,7 @@ jpam-1.1.jar
jsch-0.1.54.jar
json-path-2.3.0.jar
json-smart-2.3.jar
+jsoup-1.14.3.jar
jsp-api-2.1.jar
jsr305-1.3.9.jar
jsr305-2.0.1.jar