This is an automated email from the ASF dual-hosted git repository.
dijiekstra pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel-web.git
The following commit(s) were added to refs/heads/dev by this push:
new 2b31d451 [Improve][seatunnel-server] Update api style follow front-end
& product-design (#12)
2b31d451 is described below
commit 2b31d451ca94217fc312b7fe6cf985dd02027adb
Author: dijie <[email protected]>
AuthorDate: Wed Feb 8 21:16:39 2023 +0800
[Improve][seatunnel-server] Update api style follow front-end &
product-design (#12)
* [Improve][seatunnel-server] Update api style follow front-end &
product-design
* [Improve][seatunnel-server] Update api style follow front-end &
product-design
* [Improve][seatunnel-server] Bug fix
---------
Co-authored-by: dijie <[email protected]>
---
seatunnel-server/pom.xml | 1 +
seatunnel-server/seatunnel-app/pom.xml | 7 ++
.../apache/seatunnel/app/aspect/LoginAspect.java | 2 +
.../ObjectTypeEnum.java} | 32 +++---
.../seatunnel/app/controller/ScriptController.java | 5 -
.../seatunnel/app/controller/TaskController.java | 14 +--
.../seatunnel/app/controller/UserController.java | 2 +-
.../seatunnel/app/dal/dao/IScriptJobApplyDao.java | 7 ++
.../app/dal/dao/impl/ScriptJobApplyDaoImpl.java | 12 +++
.../seatunnel/app/dal/entity/JobDefine.java} | 29 +++--
.../app/dal/mapper/ScriptJobApplyMapper.java | 7 ++
.../app/domain/request/task/ExecuteReq.java | 4 +-
.../app/domain/request/task/RecycleScriptReq.java | 2 +-
.../app/domain/request/user/BaseUserReq.java | 4 +-
.../seatunnel/app/domain/response/PageInfo.java | 3 +-
.../response/task/InstanceSimpleInfoRes.java | 4 +
.../app/domain/response/task/JobSimpleInfoRes.java | 12 ++-
.../domain/response/user/UserSimpleInfoRes.java | 7 +-
.../app/service/impl/TaskServiceImpl.java | 117 ++++++++++++++++++---
.../app/utils/GlobalExceptionHandler.java | 9 +-
.../app/dal/mapper/ScriptJobApplyMapper.xml | 49 +++++++++
.../apache/seatunnel/app/dal/mapper/UserMapper.xml | 2 +-
.../dolphinscheduler/dto/ProcessDefinitionDto.java | 2 +-
.../dolphinscheduler/enums/ReleaseStateEnum.java} | 37 ++++---
.../dolphinscheduler/enums/RunFrequencyEnum.java} | 18 ++--
.../impl/DolphinschedulerServiceImpl.java | 5 +
.../dolphinscheduler/impl/InstanceServiceImpl.java | 2 +
.../dolphinscheduler/impl/JobServiceImpl.java | 9 +-
.../server/common/SeatunnelErrorEnum.java | 1 +
.../seatunnel/spi/scheduler/dto/InstanceDto.java | 1 +
.../spi/scheduler/dto/JobSimpleInfoDto.java | 2 +
31 files changed, 325 insertions(+), 83 deletions(-)
diff --git a/seatunnel-server/pom.xml b/seatunnel-server/pom.xml
index ed507338..17f65461 100644
--- a/seatunnel-server/pom.xml
+++ b/seatunnel-server/pom.xml
@@ -43,6 +43,7 @@
<javax.annotation-api.version>1.3.2</javax.annotation-api.version>
<jsoup.version>1.14.3</jsoup.version>
<jwt.version>0.10.7</jwt.version>
+ <cron-utils.version>9.1.6</cron-utils.version>
</properties>
<dependencyManagement>
diff --git a/seatunnel-server/seatunnel-app/pom.xml
b/seatunnel-server/seatunnel-app/pom.xml
index 9fc02f38..a268091c 100644
--- a/seatunnel-server/seatunnel-app/pom.xml
+++ b/seatunnel-server/seatunnel-app/pom.xml
@@ -176,6 +176,13 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
+
+ <!-- https://mvnrepository.com/artifact/com.cronutils/cron-utils -->
+ <dependency>
+ <groupId>com.cronutils</groupId>
+ <artifactId>cron-utils</artifactId>
+ <version>${cron-utils.version}</version>
+ </dependency>
</dependencies>
<build>
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/aspect/LoginAspect.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/aspect/LoginAspect.java
index 1bba7f74..5788c52c 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/aspect/LoginAspect.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/aspect/LoginAspect.java
@@ -65,6 +65,8 @@ public class LoginAspect {
final String token = jwtUtils.genToken(data.toMap());
response.setHeader(TOKEN, token);
+ data.setToken(token);
+
final UserLoginLogDto logDto = UserLoginLogDto.builder()
.token(token)
.tokenStatus(UserTokenStatusEnum.ENABLE.enable())
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ObjectTypeEnum.java
similarity index 56%
copy from
seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
copy to
seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ObjectTypeEnum.java
index b1c6af20..9bfdf720 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ObjectTypeEnum.java
@@ -15,23 +15,27 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.domain.response.user;
+package org.apache.seatunnel.app.common;
-import com.google.common.collect.Maps;
-import io.swagger.annotations.ApiModel;
+import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
+import org.apache.seatunnel.server.common.SeatunnelException;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Objects;
-@ApiModel(value = "userSimpleInfoRes", description = "user simple information")
-public class UserSimpleInfoRes extends BaseUserInfoRes {
+public enum ObjectTypeEnum {
+ SCRIPT,
+ JOB,
+ INSTANCE,
+ ;
- public Map<String, Object> toMap() {
- final HashMap<String, Object> userMap = Maps.newHashMap();
- userMap.put("id", getId());
- userMap.put("name", getName());
- userMap.put("status", getStatus());
- userMap.put("type", getType());
- return userMap;
+ public static ObjectTypeEnum parse(Integer type) {
+ if (Objects.nonNull(type)) {
+ for (ObjectTypeEnum value : ObjectTypeEnum.values()) {
+ if (value.ordinal() == type) {
+ return value;
+ }
+ }
+ }
+ throw new SeatunnelException(SeatunnelErrorEnum.NO_SUCH_ELEMENT);
}
}
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 f983cbdb..16574f07 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
@@ -30,8 +30,6 @@ 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 io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -119,9 +117,6 @@ public class ScriptController {
@GetMapping("/{scriptId}/param")
@ApiOperation(value = "fetch script param", httpMethod = "GET")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "script id", dataType =
"Integer"),
- })
public Result<List<ScriptParamRes>> fetchScriptParam(@ApiParam(value =
"script id", required = true) @PathVariable(value = "scriptId") Integer
scriptId) {
return Result.success(iScriptService.fetchScriptParam(scriptId));
}
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
index 5ca3ace8..8657a045 100644
---
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
@@ -51,12 +51,12 @@ public class TaskController {
@Resource
private ITaskService iTaskService;
- @PatchMapping("/{scriptId}/recycle")
- @ApiOperation(value = "recycle script", httpMethod = "PATCH")
- Result<Void> recycle(@ApiParam(value = "script id", required = true)
@PathVariable(value = "scriptId") Integer scriptId,
+ @PatchMapping("/{jobId}/recycle")
+ @ApiOperation(value = "recycle job", httpMethod = "PATCH")
+ Result<Void> recycle(@ApiParam(value = "job id", required = true)
@PathVariable(value = "jobId") Long jobId,
@ApiIgnore @UserId Integer operatorId) {
final RecycleScriptReq req = new RecycleScriptReq();
- req.setScriptId(scriptId);
+ req.setJobId(jobId);
req.setOperatorId(operatorId);
iTaskService.recycleScriptFromScheduler(req);
@@ -89,12 +89,12 @@ public class TaskController {
return Result.success(iTaskService.listInstance(req));
}
- @PostMapping("/{scriptId}/execute")
+ @PostMapping("/{objectId}/execute")
@ApiOperation(value = "execute script temporary", httpMethod = "POST")
- Result<InstanceSimpleInfoRes> tmpExecute(@ApiParam(value = "script id",
required = true) @PathVariable(value = "scriptId") Integer scriptId,
+ Result<InstanceSimpleInfoRes> tmpExecute(@ApiParam(value = "object id",
required = true) @PathVariable(value = "objectId") Long objectId,
@RequestBody @NotNull ExecuteReq
req,
@ApiIgnore @UserId Integer
operatorId) {
- req.setScriptId(scriptId);
+ req.setObjectId(objectId);
req.setOperatorId(operatorId);
return Result.success(iTaskService.tmpExecute(req));
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
index 59a59ee8..08cd9072 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
@@ -75,7 +75,7 @@ public class UserController {
@GetMapping
@ApiOperation(value = "user list", httpMethod = "GET")
- public Result<PageInfo<UserSimpleInfoRes>> list(@ApiParam(value = "job
name") @RequestParam(required = false) String name,
+ public Result<PageInfo<UserSimpleInfoRes>> list(@ApiParam(value = "user
name") @RequestParam(required = false) String name,
@ApiParam(value = "page
num", required = true) @RequestParam Integer pageNo,
@ApiParam(value = "page
size", required = true) @RequestParam Integer pageSize) {
final UserListReq req = new UserListReq();
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
index 0efdae26..7d571b71 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
@@ -17,11 +17,18 @@
package org.apache.seatunnel.app.dal.dao;
+import org.apache.seatunnel.app.dal.entity.JobDefine;
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);
ScriptJobApply getByScriptId(Integer id);
+
+ List<JobDefine> selectJobDefineByJobIds(List<Long> jobIds);
+
+ ScriptJobApply getByJobId(long jobId);
}
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
index 1b5b1d50..0aab6d50 100644
---
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
@@ -18,6 +18,7 @@
package org.apache.seatunnel.app.dal.dao.impl;
import org.apache.seatunnel.app.dal.dao.IScriptJobApplyDao;
+import org.apache.seatunnel.app.dal.entity.JobDefine;
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;
@@ -26,6 +27,7 @@ import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
+import java.util.List;
import java.util.Objects;
@Repository
@@ -56,4 +58,14 @@ public class ScriptJobApplyDaoImpl implements
IScriptJobApplyDao {
public ScriptJobApply getByScriptId(Integer id) {
return scriptJobApplyMapper.selectByScriptId(id);
}
+
+ @Override
+ public List<JobDefine> selectJobDefineByJobIds(List<Long> jobIds) {
+ return scriptJobApplyMapper.selectJobDefineByJobIds(jobIds);
+ }
+
+ @Override
+ public ScriptJobApply getByJobId(long jobId) {
+ return scriptJobApplyMapper.selectByJobId(jobId);
+ }
}
diff --git
a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/JobDefine.java
similarity index 70%
copy from
seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
copy to
seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/JobDefine.java
index 28e88e9c..9befbe97 100644
---
a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/JobDefine.java
@@ -15,20 +15,33 @@
* limitations under the License.
*/
-package org.apache.seatunnel.spi.scheduler.dto;
+package org.apache.seatunnel.app.dal.entity;
-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;
+public class JobDefine {
+ private Integer scriptId;
+
+ private Integer schedulerConfigId;
+
+ private Long jobId;
+
+ private Integer operatorId;
+
private Date createTime;
+
private Date updateTime;
+
+ private String triggerExpression;
+
+ private Integer retryTimes;
+
+ private Integer retryInterval;
+
+ private Date activeStartTime;
+
+ private Date activeEndTime;
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.java
index 4115fd9c..5dddcfc6 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptJobApplyMapper.java
@@ -17,10 +17,13 @@
package org.apache.seatunnel.app.dal.mapper;
+import org.apache.seatunnel.app.dal.entity.JobDefine;
import org.apache.seatunnel.app.dal.entity.ScriptJobApply;
import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
public interface ScriptJobApplyMapper {
int deleteByPrimaryKey(Integer id);
@@ -31,4 +34,8 @@ public interface ScriptJobApplyMapper {
void update(ScriptJobApply record);
ScriptJobApply selectByScriptId(@Param("scriptId") int scriptId);
+
+ List<JobDefine> selectJobDefineByJobIds(@Param("jobIds") List<Long>
jobIds);
+
+ ScriptJobApply selectByJobId(@Param("jobId") long jobId);
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/ExecuteReq.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/ExecuteReq.java
index fd853d43..4f77ca79 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/ExecuteReq.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/ExecuteReq.java
@@ -28,7 +28,9 @@ import java.util.Map;
@Data
public class ExecuteReq {
@ApiModelProperty(value = "script id", required = true, dataType =
"Integer", hidden = true)
- private Integer scriptId;
+ private Long objectId;
+ @ApiModelProperty(value = "object type", required = true, dataType =
"Integer")
+ private Integer objectType;
@ApiModelProperty(value = "execute content", required = true, dataType =
"String")
private String content;
@ApiModelProperty(value = "operator id", required = true, dataType =
"Integer", hidden = true)
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/RecycleScriptReq.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/RecycleScriptReq.java
index 5ee65d63..754949da 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/RecycleScriptReq.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/RecycleScriptReq.java
@@ -28,7 +28,7 @@ import javax.validation.constraints.NotNull;
public class RecycleScriptReq {
@ApiModelProperty(value = "script id", required = true, dataType =
"Integer")
@NotNull
- private int scriptId;
+ private long jobId;
@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/request/user/BaseUserReq.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/user/BaseUserReq.java
index 8ee3b671..87e44887 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/user/BaseUserReq.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/user/BaseUserReq.java
@@ -28,10 +28,10 @@ public class BaseUserReq {
private String username;
@ApiModelProperty(value = "user password", required = true, dataType =
"String")
private String password;
- @ApiModelProperty(value = "user status", required = true, dataType =
"Byte")
+ @ApiModelProperty(value = "user status", required = true, dataType =
"Integer")
@NotNull
private Byte status;
- @ApiModelProperty(value = "user type", required = true, dataType = "Byte")
+ @ApiModelProperty(value = "user type", required = true, dataType =
"Integer")
@NotNull
private Byte type;
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/PageInfo.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/PageInfo.java
index f4ced6e8..fb757c1e 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/PageInfo.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/PageInfo.java
@@ -19,12 +19,13 @@ package org.apache.seatunnel.app.domain.response;
import io.swagger.annotations.ApiModel;
+import java.util.Collections;
import java.util.List;
@ApiModel(value = "pageInfo", description = "page info")
@SuppressWarnings("MagicNumber")
public class PageInfo<T> {
- private List<T> data;
+ private List<T> data = Collections.emptyList();
private Integer totalCount = 0;
private Integer totalPage = 0;
private Integer pageNo = 1;
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
index 2a681574..1bf4038a 100644
---
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
@@ -40,10 +40,14 @@ public class InstanceSimpleInfoRes {
private Date startTime;
@ApiModelProperty(value = "end time", dataType = "Date")
private Date endTime;
+ @ApiModelProperty(value = "next execution time", dataType = "Date")
+ private Date nextExecutionTime;
@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;
+ @ApiModelProperty(value = "run frequency", dataType = "String")
+ private String runFrequency;
}
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
index 40b003be..90e8a4f5 100644
---
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
@@ -17,6 +17,7 @@
package org.apache.seatunnel.app.domain.response.task;
+import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
@@ -29,9 +30,18 @@ import java.util.Date;
@Builder
public class JobSimpleInfoRes {
@ApiModelProperty(value = "job id", dataType = "Long")
- private long jobId;
+ private Long jobId;
+ @ApiModelProperty(value = "script id", dataType = "Long")
+ private Integer scriptId;
+ @ApiModelProperty(value = "job name", dataType = "String")
+ @JsonProperty("datapipeName")
+ private String jobName;
@ApiModelProperty(value = "job status", dataType = "String")
private String jobStatus;
+ @ApiModelProperty(value = "job plan", dataType = "String")
+ private String jobPlan;
+ @ApiModelProperty(value = "job is publish", dataType = "Boolean")
+ private Boolean publish;
@ApiModelProperty(value = "job creator", dataType = "String")
private String creatorName;
@ApiModelProperty(value = "job mender", dataType = "String")
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
index b1c6af20..19f05221 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
@@ -19,15 +19,18 @@ package org.apache.seatunnel.app.domain.response.user;
import com.google.common.collect.Maps;
import io.swagger.annotations.ApiModel;
+import lombok.Data;
-import java.util.HashMap;
import java.util.Map;
@ApiModel(value = "userSimpleInfoRes", description = "user simple information")
+@Data
public class UserSimpleInfoRes extends BaseUserInfoRes {
+ private String token;
+
public Map<String, Object> toMap() {
- final HashMap<String, Object> userMap = Maps.newHashMap();
+ final Map<String, Object> userMap = Maps.newHashMap();
userMap.put("id", getId());
userMap.put("name", getName());
userMap.put("status", getStatus());
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
index c687c93d..3c87a8af 100644
---
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
@@ -17,17 +17,28 @@
package org.apache.seatunnel.app.service.impl;
+import static org.apache.seatunnel.app.common.ObjectTypeEnum.INSTANCE;
+import static org.apache.seatunnel.app.common.ObjectTypeEnum.JOB;
+import static org.apache.seatunnel.app.common.ObjectTypeEnum.SCRIPT;
import static org.apache.seatunnel.server.common.Constants.UNDERLINE;
+import static
org.apache.seatunnel.server.common.SeatunnelErrorEnum.NO_SUCH_ELEMENT;
+import static
org.apache.seatunnel.server.common.SeatunnelErrorEnum.NO_SUCH_JOB;
import static
org.apache.seatunnel.server.common.SeatunnelErrorEnum.NO_SUCH_SCRIPT;
import static
org.apache.seatunnel.server.common.SeatunnelErrorEnum.SCHEDULER_CONFIG_NOT_EXIST;
import static
org.apache.seatunnel.spi.scheduler.constants.SchedulerConstant.NEVER_TRIGGER_EXPRESSION;
import static
org.apache.seatunnel.spi.scheduler.constants.SchedulerConstant.RETRY_INTERVAL_DEFAULT;
import static
org.apache.seatunnel.spi.scheduler.constants.SchedulerConstant.RETRY_TIMES_DEFAULT;
+import static com.cronutils.model.CronType.QUARTZ;
+import static java.util.Objects.isNull;
+import static java.util.Objects.nonNull;
+import static java.util.Objects.requireNonNull;
+import org.apache.seatunnel.app.common.ObjectTypeEnum;
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.JobDefine;
import org.apache.seatunnel.app.dal.entity.SchedulerConfig;
import org.apache.seatunnel.app.dal.entity.Script;
import org.apache.seatunnel.app.dal.entity.ScriptJobApply;
@@ -57,18 +68,25 @@ import
org.apache.seatunnel.spi.scheduler.dto.JobSimpleInfoDto;
import org.apache.seatunnel.spi.scheduler.dto.SchedulerConfigDto;
import org.apache.seatunnel.spi.scheduler.enums.ExecuteTypeEnum;
+import com.cronutils.model.definition.CronDefinition;
+import com.cronutils.model.definition.CronDefinitionBuilder;
+import com.cronutils.model.time.ExecutionTime;
+import com.cronutils.parser.CronParser;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
+import javax.annotation.PostConstruct;
import javax.annotation.Resource;
+import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
+import java.util.Optional;
import java.util.concurrent.CompletableFuture;
+import java.util.function.Function;
import java.util.stream.Collectors;
@Component
@@ -93,6 +111,17 @@ public class TaskServiceImpl implements ITaskService {
@Resource
private IScriptJobApplyDao scriptJobApplyDaoImpl;
+ private Map<ObjectTypeEnum, Function<ExecuteReq, ExecuteDto>>
executeFuncMap =
Maps.newHashMapWithExpectedSize(ObjectTypeEnum.values().length);
+
+ private static final CronDefinition CRON_DEFINITION =
CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
+
+ @PostConstruct
+ public void initFuncMap(){
+ executeFuncMap.put(SCRIPT, this::getExecuteDtoByScriptId);
+ executeFuncMap.put(JOB, this::getExecuteDtoByJobId);
+ executeFuncMap.put(INSTANCE, null);
+ }
+
@Override
public Long pushScriptToScheduler(PushScriptDto pushScriptDto) {
final int scriptId = pushScriptDto.getScriptId();
@@ -100,7 +129,7 @@ public class TaskServiceImpl implements ITaskService {
// check scheduler param
SchedulerConfig config =
schedulerConfigDaoImpl.getSchedulerConfig(scriptId);
- if (Objects.isNull(config)) {
+ if (isNull(config)) {
throw new SeatunnelException(SCHEDULER_CONFIG_NOT_EXIST);
}
@@ -128,7 +157,7 @@ public class TaskServiceImpl implements ITaskService {
.build();
ScriptJobApply apply =
scriptJobApplyDaoImpl.getByScriptId(script.getId());
- if (Objects.nonNull(apply)) {
+ if (nonNull(apply)) {
jobDto.setJobId(apply.getJobId());
}
@@ -142,8 +171,9 @@ public class TaskServiceImpl implements ITaskService {
@Override
public void recycleScriptFromScheduler(RecycleScriptReq req) {
- final Script script = checkAndGetScript(req.getScriptId());
- ScriptJobApply apply =
scriptJobApplyDaoImpl.getByScriptId(script.getId());
+ ScriptJobApply apply =
requireNonNull(scriptJobApplyDaoImpl.getByJobId(req.getJobId()),
NO_SUCH_JOB::getTemplate);
+
+ final Script script =
requireNonNull(scriptDaoImpl.getScript(apply.getScriptId()),
NO_SUCH_JOB::getTemplate);
final JobDto jobDto = JobDto.builder()
.jobId(apply.getJobId())
@@ -166,11 +196,24 @@ public class TaskServiceImpl implements ITaskService {
.build();
final PageData<JobSimpleInfoDto> jobPageData = iJobService.list(dto);
final List<JobSimpleInfoRes> data =
jobPageData.getData().stream().map(this::translate).collect(Collectors.toList());
+
final PageInfo<JobSimpleInfoRes> pageInfo = new PageInfo<>();
- pageInfo.setData(data);
- pageInfo.setTotalCount(jobPageData.getTotalCount());
- pageInfo.setPageNo(req.getPageNo());
- pageInfo.setPageSize(req.getPageSize());
+
+ if (!CollectionUtils.isEmpty(data)) {
+ final List<JobDefine> jobDefines =
scriptJobApplyDaoImpl.selectJobDefineByJobIds(data.stream().map(JobSimpleInfoRes::getJobId).collect(Collectors.toList()));
+ final Map<Long, JobDefine> mapping =
jobDefines.stream().collect(Collectors.toMap(JobDefine::getJobId,
Function.identity()));
+
+ data.forEach(d -> {
+ final JobDefine jf = mapping.getOrDefault(d.getJobId(), new
JobDefine());
+ d.setJobPlan(jf.getTriggerExpression());
+ d.setScriptId(jf.getScriptId());
+ });
+
+ pageInfo.setData(data);
+ pageInfo.setTotalCount(jobPageData.getTotalCount());
+ pageInfo.setPageNo(req.getPageNo());
+ pageInfo.setPageSize(req.getPageSize());
+ }
return pageInfo;
}
@@ -185,6 +228,25 @@ public class TaskServiceImpl implements ITaskService {
.build();
final PageData<InstanceDto> instancePageData =
iInstanceService.list(dto);
final List<InstanceSimpleInfoRes> data =
instancePageData.getData().stream().map(this::translate).collect(Collectors.toList());
+
+ final List<JobDefine> jobDefines =
scriptJobApplyDaoImpl.selectJobDefineByJobIds(data.stream().map(InstanceSimpleInfoRes::getJobId).collect(Collectors.toList()));
+ final Map<Long, JobDefine> mapping =
jobDefines.stream().collect(Collectors.toMap(JobDefine::getJobId,
Function.identity()));
+
+ data.forEach(d -> {
+ final JobDefine jobDefine = mapping.get(d.getJobId());
+ CronParser parser = new CronParser(CRON_DEFINITION);
+
+ if (nonNull(jobDefine)) {
+ ExecutionTime executionTime =
ExecutionTime.forCron(parser.parse(jobDefine.getTriggerExpression()));
+ Optional<ZonedDateTime> nextExecution =
executionTime.nextExecution(ZonedDateTime.now());
+
+ if (nextExecution.isPresent()) {
+ final ZonedDateTime next = nextExecution.get();
+ d.setNextExecutionTime(Date.from(next.toInstant()));
+ }
+ }
+ });
+
final PageInfo<InstanceSimpleInfoRes> pageInfo = new PageInfo<>();
pageInfo.setData(data);
pageInfo.setTotalCount(instancePageData.getTotalCount());
@@ -196,7 +258,29 @@ public class TaskServiceImpl implements ITaskService {
@Override
public InstanceSimpleInfoRes tmpExecute(ExecuteReq req) {
- final Script script = checkAndGetScript(req.getScriptId());
+
+ final Integer objectType = req.getObjectType();
+
+ final ObjectTypeEnum parse = ObjectTypeEnum.parse(objectType);
+
+ final Function<ExecuteReq, ExecuteDto> executeFunc =
+ Optional.ofNullable(executeFuncMap.get(parse)).orElseThrow(()
-> new SeatunnelException(NO_SUCH_ELEMENT));
+
+ final ExecuteDto dto = executeFunc.apply(req);
+
+ return this.translate(iJobService.execute(dto));
+ }
+
+ private ExecuteDto getExecuteDtoByJobId(ExecuteReq req) {
+ return ExecuteDto.builder()
+ .jobDto(JobDto.builder()
+ .jobId(req.getObjectId())
+ .build())
+ .build();
+ }
+
+ private ExecuteDto getExecuteDtoByScriptId(ExecuteReq req) {
+ final Script script =
checkAndGetScript(Math.toIntExact(req.getObjectId()));
final SchedulerConfigDto schedulerConfigDto =
SchedulerConfigDto.builder()
.retryInterval(RETRY_INTERVAL_DEFAULT)
@@ -222,8 +306,7 @@ public class TaskServiceImpl implements ITaskService {
.executeTypeEnum(ExecuteTypeEnum.parse(req.getExecuteType()))
.complementDataDto(null)
.build();
-
- return this.translate(iJobService.execute(dto));
+ return dto;
}
@Override
@@ -244,7 +327,9 @@ public class TaskServiceImpl implements ITaskService {
private JobSimpleInfoRes translate(JobSimpleInfoDto dto) {
return JobSimpleInfoRes.builder()
.jobId(dto.getJobId())
+ .jobName(dto.getJobName())
.jobStatus(dto.getJobStatus())
+ .publish(dto.getPublish())
.creatorName(dto.getCreatorName())
.menderName(dto.getMenderName())
.createTime(dto.getCreateTime())
@@ -253,6 +338,9 @@ public class TaskServiceImpl implements ITaskService {
}
private InstanceSimpleInfoRes translate(InstanceDto dto) {
+ if (isNull(dto)) {
+ return null;
+ }
return InstanceSimpleInfoRes.builder()
.instanceId(dto.getInstanceId())
.jobId(dto.getJobId())
@@ -263,12 +351,13 @@ public class TaskServiceImpl implements ITaskService {
.status(dto.getStatus())
.executionDuration(dto.getExecutionDuration())
.retryTimes(dto.getRetryTimes())
+ .runFrequency(dto.getRunFrequency())
.build();
}
private Script checkAndGetScript(int scriptId) {
final Script script = scriptDaoImpl.getScript(scriptId);
- if (Objects.isNull(script)) {
+ if (isNull(script)) {
throw new SeatunnelException(NO_SUCH_SCRIPT);
}
return script;
@@ -285,7 +374,7 @@ public class TaskServiceImpl implements ITaskService {
.build();
scriptJobApplyDaoImpl.insertOrUpdate(dto);
}).whenComplete((_return, e) -> {
- if (Objects.nonNull(e)) {
+ if (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/utils/GlobalExceptionHandler.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/utils/GlobalExceptionHandler.java
index 307ea957..8fcd6a1d 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/utils/GlobalExceptionHandler.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/utils/GlobalExceptionHandler.java
@@ -21,6 +21,7 @@ import org.apache.seatunnel.app.common.Result;
import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
import org.apache.seatunnel.server.common.SeatunnelException;
+import io.jsonwebtoken.ExpiredJwtException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -44,11 +45,17 @@ public class GlobalExceptionHandler {
}
@ExceptionHandler(value = IllegalStateException.class)
- private Result<String> exceptionHandler(IllegalStateException e) {
+ private Result<String> illegalStateExceptionHandler(IllegalStateException
e) {
logError(e);
return Result.failure(SeatunnelErrorEnum.ILLEGAL_STATE,
e.getMessage());
}
+ @ExceptionHandler(value = ExpiredJwtException.class)
+ private Result<String> expiredJwtException(ExpiredJwtException e) {
+ logError(e);
+ return Result.failure(SeatunnelErrorEnum.TOKEN_ILLEGAL,
e.getMessage());
+ }
+
@ExceptionHandler(value = Exception.class)
private Result<String> exceptionHandler(Exception e) {
logError(e);
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
index c5e28ed6..31090156 100644
---
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
@@ -24,6 +24,19 @@
<result column="create_time" jdbcType="TIMESTAMP"
property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP"
property="updateTime"/>
</resultMap>
+ <resultMap id="JobDefineMap"
type="org.apache.seatunnel.app.dal.entity.JobDefine">
+ <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"/>
+ <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"/>
+ </resultMap>
<sql id="Base_Column_List">
id,
script_id,
@@ -33,6 +46,19 @@
create_time,
update_time
</sql>
+ <sql id="Job_Define_Column_List">
+ a.script_id,
+ a.scheduler_config_id,
+ a.job_id,
+ a.operator_id,
+ a.create_time,
+ a.update_time,
+ b.trigger_expression,
+ b.retry_times,
+ b.retry_interval,
+ b.active_start_time,
+ b.active_end_time
+ </sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
@@ -63,4 +89,27 @@
from script_job_apply
where script_id = #{scriptId,jdbcType=INTEGER}
</select>
+ <select id="selectJobDefineByJobIds" resultMap="JobDefineMap">
+ select
+ <include refid="Job_Define_Column_List"/>
+ from
+ (select
+ <include refid="Base_Column_List"/>
+ from script_job_apply
+ where job_id in
+ <foreach collection="jobIds" item="item" separator=","
open="(" close=")">
+ #{item,jdbcType=BIGINT}
+ </foreach>
+ ) a
+ left join
+ scheduler_config b on
+ a.script_id = b.script_id
+ </select>
+
+ <select id="selectByJobId" resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List"/>
+ from script_job_apply
+ where job_id = #{jobId,jdbcType=BIGINT}
+ </select>
</mapper>
diff --git
a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/UserMapper.xml
b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/UserMapper.xml
index 1c22238b..dea9f6ae 100644
---
a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/UserMapper.xml
+++
b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/UserMapper.xml
@@ -63,7 +63,7 @@
from `user`
where id = #{id,jdbcType=INTEGER}
</select>
- <select id="selectBySelectiveAndPage"
resultType="org.apache.seatunnel.app.dal.entity.User">
+ <select id="selectBySelectiveAndPage" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from `user`
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
index 58be7eb0..68504d43 100644
---
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
@@ -38,7 +38,7 @@ public class ProcessDefinitionDto {
private Date createTime;
@JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
private Date updateTime;
- private String username;
+ private String userName;
private String projectName;
private String locations;
private String scheduleReleaseState;
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/ReleaseStateEnum.java
similarity index 52%
copy from
seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
copy to
seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/ReleaseStateEnum.java
index b1c6af20..03e53c28 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/UserSimpleInfoRes.java
+++
b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/ReleaseStateEnum.java
@@ -15,23 +15,32 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.domain.response.user;
+package org.apache.seatunnel.scheduler.dolphinscheduler.enums;
-import com.google.common.collect.Maps;
-import io.swagger.annotations.ApiModel;
+import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
+import org.apache.seatunnel.server.common.SeatunnelException;
-import java.util.HashMap;
-import java.util.Map;
+public enum ReleaseStateEnum {
+ ONLINE(true),
+ OFFLINE(false),
+ ;
-@ApiModel(value = "userSimpleInfoRes", description = "user simple information")
-public class UserSimpleInfoRes extends BaseUserInfoRes {
+ private final boolean publish;
- public Map<String, Object> toMap() {
- final HashMap<String, Object> userMap = Maps.newHashMap();
- userMap.put("id", getId());
- userMap.put("name", getName());
- userMap.put("status", getStatus());
- userMap.put("type", getType());
- return userMap;
+ ReleaseStateEnum(boolean publish) {
+ this.publish = publish;
+ }
+
+ public static ReleaseStateEnum parse(String name) {
+ for (ReleaseStateEnum value : values()) {
+ if (value.name().equalsIgnoreCase(name)){
+ return value;
+ }
+ }
+ throw new SeatunnelException(SeatunnelErrorEnum.NO_SUCH_ELEMENT);
+ }
+
+ public boolean isPublish() {
+ return publish;
}
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/RunFrequencyEnum.java
similarity index 69%
copy from
seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
copy to
seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/RunFrequencyEnum.java
index 0efdae26..f0bf5822 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptJobApplyDao.java
+++
b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/RunFrequencyEnum.java
@@ -15,13 +15,19 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.scheduler.dolphinscheduler.enums;
-import org.apache.seatunnel.app.dal.entity.ScriptJobApply;
-import org.apache.seatunnel.app.domain.dto.job.ScriptJobApplyDto;
+public enum RunFrequencyEnum {
+ SCHEDULER,
+ ONCE,
+ ;
-public interface IScriptJobApplyDao {
- void insertOrUpdate(ScriptJobApplyDto dto);
+ public static final String SCHEDULER_TYPE = "SCHEDULER";
- ScriptJobApply getByScriptId(Integer id);
+ public static RunFrequencyEnum parse(String name) {
+ if (SCHEDULER_TYPE.equalsIgnoreCase(name)) {
+ return SCHEDULER;
+ }
+ return ONCE;
+ }
}
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
index 3cca66fe..52c99b38 100644
---
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
@@ -153,6 +153,7 @@ 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.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -190,6 +191,10 @@ public class DolphinschedulerServiceImpl implements
IDolphinschedulerService, In
private static final ObjectMapper MAPPER = new ObjectMapper();
+ static {
+ MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+ }
+
@Override
public void afterPropertiesSet() throws Exception {
final ProjectDto projectDto =
queryProjectCodeByName(defaultProjectName);
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
index 42a27efb..d4ce1a72 100644
---
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
@@ -20,6 +20,7 @@ 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.ProcessInstanceDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.enums.RunFrequencyEnum;
import org.apache.seatunnel.server.common.PageData;
import org.apache.seatunnel.spi.scheduler.IInstanceService;
import org.apache.seatunnel.spi.scheduler.dto.InstanceDto;
@@ -62,6 +63,7 @@ public class InstanceServiceImpl implements IInstanceService {
.submitTime(t.getScheduleTime())
.executionDuration(t.getDuration())
.retryTimes(t.getRunTimes())
+
.runFrequency(RunFrequencyEnum.parse(t.getCommandType()).name())
.build()).collect(Collectors.toList());
return new PageData<>(instancePageData.getTotalCount(), data);
}
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
index 5cdab9b0..22cc91d5 100644
---
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
@@ -43,6 +43,7 @@ import
org.apache.seatunnel.scheduler.dolphinscheduler.dto.SchedulerDto;
import
org.apache.seatunnel.scheduler.dolphinscheduler.dto.StartProcessDefinitionDto;
import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskDescriptionDto;
import
org.apache.seatunnel.scheduler.dolphinscheduler.dto.UpdateProcessDefinitionDto;
+import org.apache.seatunnel.scheduler.dolphinscheduler.enums.ReleaseStateEnum;
import org.apache.seatunnel.server.common.DateUtils;
import org.apache.seatunnel.server.common.PageData;
import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
@@ -113,11 +114,13 @@ public class JobServiceImpl implements IJobService {
final PageData<ProcessDefinitionDto> processPageData =
iDolphinschedulerService.listProcessDefinition(listDto);
final List<JobSimpleInfoDto> data =
processPageData.getData().stream().map(p -> JobSimpleInfoDto.builder()
.jobId(p.getCode())
+ .jobName(p.getName())
.jobStatus(p.getReleaseState())
+
.publish(ReleaseStateEnum.parse(p.getReleaseState()).isPublish())
.createTime(p.getCreateTime())
.updateTime(p.getUpdateTime())
- .creatorName(p.getUsername())
- .menderName(p.getUsername())
+ .creatorName(p.getUserName())
+ .menderName(p.getModifyBy())
.build())
.collect(Collectors.toList());
return new PageData<>(processPageData.getTotalCount(), data);
@@ -199,7 +202,7 @@ public class JobServiceImpl implements IJobService {
}
CompletableFuture.runAsync(() -> {
- // clear temporary process definition
+ // offline temporary process definition
iDolphinschedulerService.updateProcessDefinitionState(code,
name, RELEASE_STATE_OFFLINE);
}).whenComplete((_return, e) -> {
if (Objects.nonNull(e)) {
diff --git
a/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
index 9e9f494e..e8973764 100644
---
a/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
+++
b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
@@ -29,6 +29,7 @@ public enum SeatunnelErrorEnum {
USERNAME_PASSWORD_NO_MATCHED(10007, "username and password no matched",
"The user name and password do not match, please check your input"),
TOKEN_ILLEGAL(10008, "token illegal", "The token is expired or invalid,
please login again."),
+ NO_SUCH_JOB(10009, "no such job", "No such job. Maybe deleted by others."),
/**
* request dolphinscheduler failed
diff --git
a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceDto.java
b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceDto.java
index 2b71dcf7..56deb9de 100644
---
a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceDto.java
+++
b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/InstanceDto.java
@@ -34,4 +34,5 @@ public class InstanceDto {
private String status;
private String executionDuration;
private long retryTimes;
+ private String runFrequency;
}
diff --git
a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
index 28e88e9c..85e0bccd 100644
---
a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
+++
b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/dto/JobSimpleInfoDto.java
@@ -26,7 +26,9 @@ import java.util.Date;
@Data
public class JobSimpleInfoDto {
private long jobId;
+ private String jobName;
private String jobStatus;
+ private Boolean publish;
private String creatorName;
private String menderName;
private Date createTime;