You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by ty...@apache.org on 2023/03/07 06:25:31 UTC
[incubator-seatunnel-web] branch main updated: [Hotfix] Bugfix 2 (#42)
This is an automated email from the ASF dual-hosted git repository.
tyrantlucifer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel-web.git
The following commit(s) were added to refs/heads/main by this push:
new 6896be4d [Hotfix] Bugfix 2 (#42)
6896be4d is described below
commit 6896be4d10bf4c1bc9cac416a1082f334804a761
Author: dijie <nj...@gmail.com>
AuthorDate: Tue Mar 7 14:25:25 2023 +0800
[Hotfix] Bugfix 2 (#42)
* [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
* [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 <di...@clickzetta.com>
* [Improve][seatunnel-server] Bugfix
* [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
* [Improve][seatunnel-server] Bugfix
* [Improve][seatunnel-server] merge conflicts
* [Improve][seatunnel-server] bug fix
* [Improve][seatunnel-server] bug fix
* [Improve][seatunnel-server] bug fix
---------
Co-authored-by: dijie <di...@clickzetta.com>
---
seatunnel-server/pom.xml | 1 +
seatunnel-server/seatunnel-app/pom.xml | 7 ++
.../{ScriptStatusEnum.java => ObjectTypeEnum.java} | 34 +++---
.../seatunnel/app/common/ScriptStatusEnum.java | 12 ++
.../seatunnel/app/controller/ScriptController.java | 30 +++--
.../seatunnel/app/controller/TaskController.java | 16 +--
.../seatunnel/app/controller/UserController.java | 2 +-
.../apache/seatunnel/app/dal/dao/IScriptDao.java | 6 +-
.../seatunnel/app/dal/dao/IScriptJobApplyDao.java | 7 ++
.../seatunnel/app/dal/dao/impl/ScriptDaoImpl.java | 11 +-
.../app/dal/dao/impl/ScriptJobApplyDaoImpl.java | 12 ++
.../seatunnel/app/dal/entity/JobDefine.java} | 29 +++--
.../app/dal/mapper/ScriptJobApplyMapper.java | 7 ++
...AddEmptyScriptDto.java => CreateScriptDto.java} | 3 +-
...AddEmptyScriptReq.java => CreateScriptReq.java} | 4 +-
.../app/domain/request/script/ScriptListReq.java | 2 -
.../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 +-
.../domain/response/script/BaseScriptInfoRes.java | 4 +-
...AddEmptyScriptRes.java => CreateScriptRes.java} | 2 +-
...dEmptyScriptRes.java => ScriptFullInfoRes.java} | 8 +-
.../response/task/InstanceSimpleInfoRes.java | 4 +
.../app/domain/response/task/JobSimpleInfoRes.java | 12 +-
.../domain/response/user/UserSimpleInfoRes.java | 7 +-
.../seatunnel/app/service/IScriptService.java | 9 +-
.../app/service/impl/ScriptServiceImpl.java | 55 ++++++---
.../app/service/impl/TaskServiceImpl.java | 126 +++++++++++++++++++--
.../app/utils/GlobalExceptionHandler.java | 9 +-
.../app/dal/mapper/ScriptJobApplyMapper.xml | 49 ++++++++
.../seatunnel/app/dal/mapper/ScriptMapper.xml | 13 +--
.../apache/seatunnel/app/dal/mapper/UserMapper.xml | 2 +-
.../dolphinscheduler/IDolphinschedulerService.java | 2 +
.../constants/DolphinschedulerConstants.java | 1 +
.../dolphinscheduler/dto/ProcessDefinitionDto.java | 2 +-
.../dolphinscheduler/enums/ReleaseStateEnum.java} | 33 +++---
.../dolphinscheduler/enums/RunFrequencyEnum.java} | 18 ++-
.../impl/DolphinschedulerServiceImpl.java | 8 +-
.../dolphinscheduler/impl/InstanceServiceImpl.java | 5 +-
.../dolphinscheduler/impl/JobServiceImpl.java | 16 ++-
.../dolphinscheduler/utils/StatusUtils.java} | 36 +++---
.../server/common/SeatunnelErrorEnum.java | 1 +
.../seatunnel/spi/scheduler/dto/InstanceDto.java | 1 +
.../spi/scheduler/dto/JobSimpleInfoDto.java | 2 +
.../spi/scheduler/enums/InstanceStatusEnum.java} | 14 ++-
tools/dependencies/known-dependencies.txt | 3 +
47 files changed, 480 insertions(+), 158 deletions(-)
diff --git a/seatunnel-server/pom.xml b/seatunnel-server/pom.xml
index 6e3b7022..79ef3a31 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 3a5acfe6..8b1dddf1 100644
--- a/seatunnel-server/seatunnel-app/pom.xml
+++ b/seatunnel-server/seatunnel-app/pom.xml
@@ -167,6 +167,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/common/ScriptStatusEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ObjectTypeEnum.java
similarity index 60%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ScriptStatusEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ObjectTypeEnum.java
index 17704a21..9bfdf720 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ScriptStatusEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ObjectTypeEnum.java
@@ -17,25 +17,25 @@
package org.apache.seatunnel.app.common;
-public enum ScriptStatusEnum {
- UNPUBLISHED(0, "unpublished"),
- PUBLISHED(1, "published"),
- DELETED(2, "deleted"),
- ;
-
- private final int code;
- private final String description;
+import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
+import org.apache.seatunnel.server.common.SeatunnelException;
- ScriptStatusEnum(int code, String description) {
- this.code = code;
- this.description = description;
- }
+import java.util.Objects;
- public int getCode() {
- return code;
- }
+public enum ObjectTypeEnum {
+ SCRIPT,
+ JOB,
+ INSTANCE,
+ ;
- public String getDescription() {
- return description;
+ 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/common/ScriptStatusEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ScriptStatusEnum.java
index 17704a21..0a4144e0 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ScriptStatusEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ScriptStatusEnum.java
@@ -31,6 +31,18 @@ public enum ScriptStatusEnum {
this.description = description;
}
+ public static String parse(Byte status) {
+ if (status == null) {
+ throw new IllegalArgumentException("status is null");
+ }
+ for (ScriptStatusEnum scriptStatusEnum : ScriptStatusEnum.values()) {
+ if (scriptStatusEnum.getCode() == status) {
+ return scriptStatusEnum.getDescription();
+ }
+ }
+ throw new IllegalArgumentException("status is illegal");
+ }
+
public int getCode() {
return code;
}
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 62367953..ff094d43 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,19 +19,18 @@ package org.apache.seatunnel.app.controller;
import org.apache.seatunnel.app.aspect.UserId;
import org.apache.seatunnel.app.common.Result;
-import org.apache.seatunnel.app.domain.request.script.AddEmptyScriptReq;
+import org.apache.seatunnel.app.domain.request.script.CreateScriptReq;
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;
import org.apache.seatunnel.app.domain.response.PageInfo;
-import org.apache.seatunnel.app.domain.response.script.AddEmptyScriptRes;
+import org.apache.seatunnel.app.domain.response.script.CreateScriptRes;
+import org.apache.seatunnel.app.domain.response.script.ScriptFullInfoRes;
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;
@@ -58,21 +57,19 @@ public class ScriptController {
private IScriptService iScriptService;
@PostMapping
- @ApiOperation(value = "add an empty script", httpMethod = "POST")
- public Result<AddEmptyScriptRes> addEmptyScript(@RequestBody @NotNull AddEmptyScriptReq addEmptyScriptReq,
- @ApiIgnore @UserId Integer operatorId) {
- addEmptyScriptReq.setCreatorId(operatorId);
- return Result.success(iScriptService.addEmptyScript(addEmptyScriptReq));
+ @ApiOperation(value = "add an script with content", httpMethod = "POST")
+ public Result<CreateScriptRes> createScript(@RequestBody @NotNull CreateScriptReq createScriptReq,
+ @ApiIgnore @UserId Integer operatorId) {
+ createScriptReq.setCreatorId(operatorId);
+ return Result.success(iScriptService.createScript(createScriptReq));
}
@PutMapping("/{scriptId}/content")
@ApiOperation(value = "update script", httpMethod = "PUT")
public Result<Void> updateScriptContent(@ApiParam(value = "script id", required = true) @PathVariable(value = "scriptId") Integer scriptId,
- @RequestBody @NotNull String content,
+ @RequestBody @NotNull UpdateScriptContentReq req,
@ApiIgnore @UserId Integer operatorId) {
- final UpdateScriptContentReq req = new UpdateScriptContentReq();
req.setScriptId(scriptId);
- req.setContent(content);
req.setMenderId(operatorId);
iScriptService.updateScriptContent(req);
@@ -95,7 +92,6 @@ public class ScriptController {
final ScriptListReq req = new ScriptListReq();
req.setName(name);
- req.setStatus(status);
req.setPageNo(pageNo);
req.setPageSize(pageSize);
@@ -108,6 +104,11 @@ public class ScriptController {
return Result.success(iScriptService.fetchScriptContent(scriptId));
}
+ @GetMapping("/{scriptId}")
+ public Result<ScriptFullInfoRes> detail(@ApiParam(value = "script id", required = true) @PathVariable(value = "scriptId") Integer scriptId) {
+ return Result.success(iScriptService.detail(scriptId));
+ }
+
@PutMapping("/{scriptId}/param")
@ApiOperation(value = "update script param", httpMethod = "PUT")
public Result<Void> updateScriptParam(@ApiParam(value = "script id", required = true) @PathVariable(value = "scriptId") Integer scriptId,
@@ -119,9 +120,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..43f141d7 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);
@@ -78,7 +78,7 @@ public class TaskController {
@GetMapping("/instance")
@ApiOperation(value = "list instance", httpMethod = "GET")
- Result<PageInfo<InstanceSimpleInfoRes>> listInstance(@ApiParam(value = "job name") @RequestParam(required = false) String name,
+ Result<PageInfo<InstanceSimpleInfoRes>> listInstance(@ApiParam(value = "job name", required = false) @RequestParam(required = false) String name,
@ApiParam(value = "page num", required = true) @RequestParam Integer pageNo,
@ApiParam(value = "page size", required = true) @RequestParam Integer pageSize) {
final InstanceListReq req = new InstanceListReq();
@@ -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/IScriptDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptDao.java
index 0178b58b..d01114f8 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptDao.java
@@ -18,8 +18,8 @@
package org.apache.seatunnel.app.dal.dao;
import org.apache.seatunnel.app.dal.entity.Script;
-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.CreateScriptDto;
import org.apache.seatunnel.app.domain.dto.script.ListScriptsDto;
import org.apache.seatunnel.app.domain.dto.script.UpdateScriptContentDto;
import org.apache.seatunnel.server.common.PageData;
@@ -27,7 +27,7 @@ import org.apache.seatunnel.server.common.PageData;
public interface IScriptDao {
void checkScriptDuplicate(CheckScriptDuplicateDto dto);
- int addEmptyScript(AddEmptyScriptDto dto);
+ int createScript(CreateScriptDto dto);
Script getScript(Integer id);
@@ -36,4 +36,6 @@ public interface IScriptDao {
void deleteScript(int id);
PageData<Script> list(ListScriptsDto dto, Integer pageNo, Integer pageSize);
+
+ void updateStatus(Script script);
}
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/ScriptDaoImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java
index 0f2c7357..7f18048d 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
@@ -24,8 +24,8 @@ import org.apache.seatunnel.app.common.ScriptStatusEnum;
import org.apache.seatunnel.app.dal.dao.IScriptDao;
import org.apache.seatunnel.app.dal.entity.Script;
import org.apache.seatunnel.app.dal.mapper.ScriptMapper;
-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.CreateScriptDto;
import org.apache.seatunnel.app.domain.dto.script.ListScriptsDto;
import org.apache.seatunnel.app.domain.dto.script.UpdateScriptContentDto;
import org.apache.seatunnel.server.common.PageData;
@@ -50,13 +50,14 @@ public class ScriptDaoImpl implements IScriptDao {
}
@Override
- public int addEmptyScript(AddEmptyScriptDto dto) {
+ public int createScript(CreateScriptDto dto) {
final Script script = new Script();
script.setName(dto.getName());
script.setType(dto.getType());
script.setStatus(dto.getStatus());
script.setCreatorId(dto.getCreatorId());
script.setMenderId(dto.getMenderId());
+ script.setContent(dto.getContent());
scriptMapper.insert(script);
return script.getId();
}
@@ -80,11 +81,15 @@ public class ScriptDaoImpl implements IScriptDao {
public PageData<Script> list(ListScriptsDto dto, Integer pageNo, Integer pageSize) {
final Script script = new Script();
script.setName(dto.getName());
- script.setStatus(dto.getStatus());
final List<Script> scripts = scriptMapper.selectBySelectiveAndPage(script, pageNo * pageSize, pageSize);
int count = scriptMapper.countBySelectiveAndPage(script);
return new PageData<Script>(count, scripts);
}
+
+ @Override
+ public void updateStatus(Script script) {
+ scriptMapper.updateStatus(script.getId(), script.getStatus());
+ }
}
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/dto/script/AddEmptyScriptDto.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/script/CreateScriptDto.java
similarity index 94%
rename from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/script/AddEmptyScriptDto.java
rename to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/script/CreateScriptDto.java
index f2245c4a..35121c5b 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/script/AddEmptyScriptDto.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/dto/script/CreateScriptDto.java
@@ -22,10 +22,11 @@ import lombok.Data;
@Builder
@Data
-public class AddEmptyScriptDto {
+public class CreateScriptDto {
private String name;
private byte type;
private int creatorId;
private int menderId;
private byte status;
+ private String content;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/AddEmptyScriptReq.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/CreateScriptReq.java
similarity index 91%
rename from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/AddEmptyScriptReq.java
rename to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/CreateScriptReq.java
index 4bd650d6..a5511321 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/AddEmptyScriptReq.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/CreateScriptReq.java
@@ -25,7 +25,7 @@ import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "addEmptyScriptReq", description = "add a new empty script")
-public class AddEmptyScriptReq {
+public class CreateScriptReq {
@ApiModelProperty(value = "script name", required = true, dataType = "String")
private String name;
@ApiModelProperty(value = "script type", required = true, dataType = "Byte")
@@ -34,4 +34,6 @@ public class AddEmptyScriptReq {
@ApiModelProperty(value = "script creator id", required = true, dataType = "Integer", hidden = true)
@NotNull
private Integer creatorId;
+ @ApiModelProperty(value = "script content", required = true, dataType = "String")
+ private String content;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/ScriptListReq.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/ScriptListReq.java
index 3ac64ba1..30cf4eb7 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/ScriptListReq.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/ScriptListReq.java
@@ -28,6 +28,4 @@ import lombok.Data;
public class ScriptListReq extends BasePageReq {
@ApiModelProperty(value = "script name", required = false, dataType = "String")
private String name;
- @ApiModelProperty(value = "script status", required = false, dataType = "Integer")
- private Byte status;
}
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/script/BaseScriptInfoRes.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/BaseScriptInfoRes.java
index 43580582..d8c5032a 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/BaseScriptInfoRes.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/BaseScriptInfoRes.java
@@ -28,8 +28,8 @@ public class BaseScriptInfoRes {
private int id;
@ApiModelProperty(value = "script name", dataType = "String")
private String name;
- @ApiModelProperty(value = "script status", dataType = "type")
- private byte status;
+ @ApiModelProperty(value = "script status", dataType = "String")
+ private String status;
@ApiModelProperty(value = "script type", dataType = "type")
private byte type;
@ApiModelProperty(value = "script creator id", required = true, dataType = "Integer")
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/CreateScriptRes.java
similarity index 96%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/CreateScriptRes.java
index 1037f9f8..9874abfd 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/CreateScriptRes.java
@@ -20,6 +20,6 @@ package org.apache.seatunnel.app.domain.response.script;
import lombok.Data;
@Data
-public class AddEmptyScriptRes {
+public class CreateScriptRes {
private int id;
}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/ScriptFullInfoRes.java
similarity index 73%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/ScriptFullInfoRes.java
index 1037f9f8..5253da02 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/ScriptFullInfoRes.java
@@ -17,9 +17,13 @@
package org.apache.seatunnel.app.domain.response.script;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
-public class AddEmptyScriptRes {
- private int id;
+@ApiModel(value = "scriptFullInfoRes", description = "script full info")
+public class ScriptFullInfoRes extends BaseScriptInfoRes{
+ @ApiModelProperty(value = "script content", dataType = "String")
+ private String content;
}
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/IScriptService.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java
index 4e9a9ebb..ad061cbe 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
@@ -17,20 +17,21 @@
package org.apache.seatunnel.app.service;
-import org.apache.seatunnel.app.domain.request.script.AddEmptyScriptReq;
+import org.apache.seatunnel.app.domain.request.script.CreateScriptReq;
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;
import org.apache.seatunnel.app.domain.response.PageInfo;
-import org.apache.seatunnel.app.domain.response.script.AddEmptyScriptRes;
+import org.apache.seatunnel.app.domain.response.script.CreateScriptRes;
+import org.apache.seatunnel.app.domain.response.script.ScriptFullInfoRes;
import org.apache.seatunnel.app.domain.response.script.ScriptParamRes;
import org.apache.seatunnel.app.domain.response.script.ScriptSimpleInfoRes;
import java.util.List;
public interface IScriptService {
- AddEmptyScriptRes addEmptyScript(AddEmptyScriptReq addEmptyScriptReq);
+ CreateScriptRes createScript(CreateScriptReq createScriptReq);
void updateScriptContent(UpdateScriptContentReq updateScriptContentReq);
@@ -45,4 +46,6 @@ public interface IScriptService {
void updateScriptParam(UpdateScriptParamReq updateScriptParamReq);
void publishScript(PublishScriptReq req);
+
+ ScriptFullInfoRes detail(Integer scriptId);
}
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 6d654c97..e0c274ad 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
@@ -28,18 +28,19 @@ 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.CreateScriptDto;
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.CreateScriptReq;
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;
import org.apache.seatunnel.app.domain.response.PageInfo;
-import org.apache.seatunnel.app.domain.response.script.AddEmptyScriptRes;
+import org.apache.seatunnel.app.domain.response.script.CreateScriptRes;
+import org.apache.seatunnel.app.domain.response.script.ScriptFullInfoRes;
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;
@@ -79,26 +80,27 @@ public class ScriptServiceImpl implements IScriptService {
private ITaskService iTaskService;
@Override
- public AddEmptyScriptRes addEmptyScript(AddEmptyScriptReq addEmptyScriptReq) {
+ public CreateScriptRes createScript(CreateScriptReq createScriptReq) {
// 1. check script name.
- checkDuplicate(addEmptyScriptReq.getName(), addEmptyScriptReq.getCreatorId());
- // 2. create an empty script
- int scriptId = addEmptyScript(addEmptyScriptReq.getName(), addEmptyScriptReq.getCreatorId(), addEmptyScriptReq.getCreatorId(), addEmptyScriptReq.getType());
+ checkDuplicate(createScriptReq.getName(), createScriptReq.getCreatorId());
+ // 2. create script
+ int scriptId = translate(createScriptReq.getName(), createScriptReq.getCreatorId(), createScriptReq.getCreatorId(), createScriptReq.getType(), createScriptReq.getContent());
- final AddEmptyScriptRes res = new AddEmptyScriptRes();
+ final CreateScriptRes res = new CreateScriptRes();
res.setId(scriptId);
return res;
}
- private int addEmptyScript(String name, Integer creatorId, Integer menderId, Byte type) {
- final AddEmptyScriptDto dto = AddEmptyScriptDto.builder()
+ private int translate(String name, Integer creatorId, Integer menderId, Byte type, String content) {
+ final CreateScriptDto dto = CreateScriptDto.builder()
.name(name)
.menderId(creatorId)
.creatorId(menderId)
.type(type)
.status((byte) ScriptStatusEnum.UNPUBLISHED.getCode())
+ .content(content)
.build();
- return scriptDaoImpl.addEmptyScript(dto);
+ return scriptDaoImpl.createScript(dto);
}
private void checkDuplicate(String name, Integer creatorId) {
@@ -118,7 +120,7 @@ public class ScriptServiceImpl implements IScriptService {
final boolean needSave = checkIfNeedSave(updateScriptContentReq.getScriptId(), contentMd5);
- if (needSave){
+ if (needSave) {
final UpdateScriptContentDto dto = UpdateScriptContentDto.builder()
.id(updateScriptContentReq.getScriptId())
.content(content)
@@ -149,7 +151,6 @@ public class ScriptServiceImpl implements IScriptService {
final ListScriptsDto dto = ListScriptsDto.builder()
.name(scriptListReq.getName())
- .status(scriptListReq.getStatus())
.build();
PageData<Script> scriptPageData = scriptDaoImpl.list(dto, scriptListReq.getRealPageNo(), scriptListReq.getPageSize());
@@ -173,7 +174,7 @@ public class ScriptServiceImpl implements IScriptService {
@Override
public List<ScriptParamRes> fetchScriptParam(Integer id) {
List<ScriptParam> scriptParamRes = scriptParamDaoImpl.getParamsByScriptId(id);
- if (CollectionUtils.isEmpty(scriptParamRes)){
+ if (CollectionUtils.isEmpty(scriptParamRes)) {
return Collections.emptyList();
}
return scriptParamRes.stream().map(this::translate).collect(Collectors.toList());
@@ -195,7 +196,7 @@ public class ScriptServiceImpl implements IScriptService {
}
@Override
- public void publishScript(PublishScriptReq req){
+ public void publishScript(PublishScriptReq req) {
final PushScriptDto dto = PushScriptDto.builder()
.scriptId(req.getScriptId())
.userId(req.getOperatorId())
@@ -203,6 +204,14 @@ public class ScriptServiceImpl implements IScriptService {
iTaskService.pushScriptToScheduler(dto);
}
+ @Override
+ public ScriptFullInfoRes detail(Integer scriptId) {
+ final Script script = scriptDaoImpl.getScript(scriptId);
+
+ checkState(Objects.nonNull(script), NO_SUCH_SCRIPT.getTemplate());
+ return translateToFull(script);
+ }
+
private ScriptParamRes translate(ScriptParam scriptParam) {
final ScriptParamRes res = new ScriptParamRes();
res.setId(scriptParam.getId());
@@ -215,12 +224,26 @@ public class ScriptServiceImpl implements IScriptService {
final ScriptSimpleInfoRes res = new ScriptSimpleInfoRes();
res.setId(script.getId());
res.setName(script.getName());
- res.setStatus(script.getStatus());
+ res.setStatus(ScriptStatusEnum.parse(script.getStatus()));
+ res.setType(script.getType());
+ res.setCreatorId(script.getCreatorId());
+ res.setMenderId(script.getMenderId());
+ res.setCreateTime(script.getCreateTime());
+ res.setUpdateTime(script.getUpdateTime());
+ return res;
+ }
+
+ private ScriptFullInfoRes translateToFull(Script script) {
+ final ScriptFullInfoRes res = new ScriptFullInfoRes();
+ res.setId(script.getId());
+ res.setName(script.getName());
+ res.setStatus(ScriptStatusEnum.parse(script.getStatus()));
res.setType(script.getType());
res.setCreatorId(script.getCreatorId());
res.setMenderId(script.getMenderId());
res.setCreateTime(script.getCreateTime());
res.setUpdateTime(script.getUpdateTime());
+ res.setContent(script.getContent());
return res;
}
}
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..04c88f41 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,27 @@
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.requireNonNull;
+import org.apache.seatunnel.app.common.ObjectTypeEnum;
+import org.apache.seatunnel.app.common.ScriptStatusEnum;
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 +67,26 @@ 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, this::getExecuteDtoByInstanceId);
+ }
+
@Override
public Long pushScriptToScheduler(PushScriptDto pushScriptDto) {
final int scriptId = pushScriptDto.getScriptId();
@@ -137,13 +166,18 @@ public class TaskServiceImpl implements ITaskService {
// Use future to ensure that the page does not show exceptions due to database errors.
syncScriptJobMapping(scriptId, userId, config.getId(), jobId);
+
+ // Update script status
+ script.setStatus((byte) ScriptStatusEnum.PUBLISHED.getCode());
+ scriptDaoImpl.updateStatus(script);
return jobId;
}
@Override
public void recycleScriptFromScheduler(RecycleScriptReq req) {
- final Script script = checkAndGetScript(req.getScriptId());
- ScriptJobApply apply = scriptJobApplyDaoImpl.getByScriptId(script.getId());
+ final 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 +200,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.setPageNo(req.getPageNo());
+ pageInfo.setPageSize(req.getPageSize());
+ pageInfo.setTotalCount(jobPageData.getTotalCount());
+ }
return pageInfo;
}
@@ -185,18 +232,72 @@ 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());
+
+ if (!CollectionUtils.isEmpty(data)) {
+ 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 (Objects.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());
pageInfo.setPageNo(req.getPageNo());
pageInfo.setPageSize(req.getPageSize());
+ pageInfo.setTotalCount(instancePageData.getTotalCount());
return pageInfo;
}
@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 getExecuteDtoByInstanceId(ExecuteReq req) {
+ // objectId of instance is jobId
+ return ExecuteDto.builder()
+ .jobDto(JobDto.builder()
+ .jobId(req.getObjectId())
+ .build())
+ .executeTypeEnum(ExecuteTypeEnum.RERUN)
+ .build();
+ }
+
+ private ExecuteDto getExecuteDtoByJobId(ExecuteReq req) {
+ return ExecuteDto.builder()
+ .jobDto(JobDto.builder()
+ .jobId(req.getObjectId())
+ .build())
+ .executeTypeEnum(ExecuteTypeEnum.parse(req.getExecuteType()))
+ .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 +323,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 +344,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 +355,9 @@ public class TaskServiceImpl implements ITaskService {
}
private InstanceSimpleInfoRes translate(InstanceDto dto) {
+ if (Objects.isNull(dto)) {
+ return null;
+ }
return InstanceSimpleInfoRes.builder()
.instanceId(dto.getInstanceId())
.jobId(dto.getJobId())
@@ -263,6 +368,7 @@ public class TaskServiceImpl implements ITaskService {
.status(dto.getStatus())
.executionDuration(dto.getExecutionDuration())
.retryTimes(dto.getRetryTimes())
+ .runFrequency(dto.getRunFrequency())
.build();
}
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/ScriptMapper.xml b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptMapper.xml
index c74563b9..a481b3a8 100644
--- a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptMapper.xml
+++ b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptMapper.xml
@@ -41,10 +41,11 @@
</sql>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="org.apache.seatunnel.app.dal.entity.Script"
useGeneratedKeys="true">
- insert into `script` (name, type, status, creator_id, mender_id)
+ insert into `script` (name, type, status, creator_id, mender_id, content)
VALUES (#{name,jdbcType=VARCHAR}, #{type,jdbcType=TINYINT}, #{status,jdbcType=TINYINT},
#{creatorId,jdbcType=INTEGER},
- #{menderId,jdbcType=INTEGER})
+ #{menderId,jdbcType=INTEGER},
+ #{content,jdbcType=VARCHAR})
</insert>
<update id="updateContentByPrimaryKey">
update `script`
@@ -69,12 +70,10 @@
<include refid="Base_Column_List"/>
from script
<where>
+ `status` != 2
<if test="script.name != null and script.name != ''">
and `name` = #{script.name,jdbcType=VARCHAR}
</if>
- <if test="script.status != null">
- and `status` = #{script.status,jdbcType=TINYINT}
- </if>
</where>
limit #{start,jdbcType=INTEGER}, #{offset,jdbcType=INTEGER}
</select>
@@ -91,12 +90,10 @@
count(1)
from script
<where>
+ `status` != 2
<if test="script.name != null and script.name != ''">
and `name` = #{script.name,jdbcType=VARCHAR}
</if>
- <if test="script.status != null">
- and `status` = #{script.status,jdbcType=TINYINT}
- </if>
</where>
</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/IDolphinschedulerService.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/IDolphinschedulerService.java
index a460ec27..5454b6ba 100644
--- 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
@@ -66,4 +66,6 @@ public interface IDolphinschedulerService {
InstanceLogDto queryInstanceLog(long instanceId);
void killProcessInstance(long processInstanceId);
+
+ void execute(long processInstanceId, ExecuteTypeEnum executeType);
}
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
index e8f886f1..4a01e602 100644
--- 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
@@ -173,6 +173,7 @@ public class DolphinschedulerConstants {
public static final String EXECUTE_TYPE = "executeType";
public static final int LOG_SKIP_LINE_NUM_DEFAULT = 0;
public static final int LOG_LIMIT_NUM_DEFAULT = Integer.MAX_VALUE;
+ public static final String STATE_TYPE = "stateType";
/**
* response param
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/common/ScriptStatusEnum.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/ReleaseStateEnum.java
similarity index 54%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ScriptStatusEnum.java
copy to seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/ReleaseStateEnum.java
index 17704a21..03e53c28 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/ScriptStatusEnum.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/enums/ReleaseStateEnum.java
@@ -15,27 +15,32 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.scheduler.dolphinscheduler.enums;
-public enum ScriptStatusEnum {
- UNPUBLISHED(0, "unpublished"),
- PUBLISHED(1, "published"),
- DELETED(2, "deleted"),
+import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
+import org.apache.seatunnel.server.common.SeatunnelException;
+
+public enum ReleaseStateEnum {
+ ONLINE(true),
+ OFFLINE(false),
;
- private final int code;
- private final String description;
+ private final boolean publish;
- ScriptStatusEnum(int code, String description) {
- this.code = code;
- this.description = description;
+ ReleaseStateEnum(boolean publish) {
+ this.publish = publish;
}
- public int getCode() {
- return code;
+ 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 String getDescription() {
- return description;
+ 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..f658dc36 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);
@@ -513,7 +518,8 @@ public class DolphinschedulerServiceImpl implements IDolphinschedulerService, In
return projectDto;
}
- private void execute(long processInstanceId, ExecuteTypeEnum executeType) {
+ @Override
+ public void execute(long processInstanceId, ExecuteTypeEnum executeType) {
final Map result = HttpUtils.builder()
.withUrl(apiPrefix.concat(String.format(EXECUTE, defaultProjectCode)))
.withMethod(Connection.Method.POST)
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..d10fa4f0 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,8 @@ 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.scheduler.dolphinscheduler.utils.StatusUtils;
import org.apache.seatunnel.server.common.PageData;
import org.apache.seatunnel.spi.scheduler.IInstanceService;
import org.apache.seatunnel.spi.scheduler.dto.InstanceDto;
@@ -56,12 +58,13 @@ public class InstanceServiceImpl implements IInstanceService {
.instanceId(t.getId())
.jobId(t.getProcessDefinitionCode())
.instanceName(t.getName())
- .status(t.getState())
+ .status(StatusUtils.getDolphinSchedulerStatus(t.getState()).name())
.startTime(t.getStartTime())
.endTime(t.getEndTime())
.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..0a87db2d 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;
@@ -56,6 +57,7 @@ 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.enums.ExecuteTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -113,11 +115,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);
@@ -126,6 +130,12 @@ public class JobServiceImpl implements IJobService {
@Override
@SuppressWarnings("magicnumber")
public InstanceDto execute(ExecuteDto dto) {
+
+ if (dto.getExecuteTypeEnum() == ExecuteTypeEnum.RERUN) {
+ iDolphinschedulerService.execute(dto.getJobDto().getJobId(), org.apache.seatunnel.scheduler.dolphinscheduler.ExecuteTypeEnum.REPEAT_RUNNING);
+ return null;
+ }
+
ProcessDefinitionDto processDefinition = null;
final JobDto jobDto = dto.getJobDto();
if (Objects.isNull(jobDto.getJobId())) {
@@ -199,7 +209,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-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/utils/StatusUtils.java
similarity index 50%
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/utils/StatusUtils.java
index b1c6af20..fdfa32b3 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/utils/StatusUtils.java
@@ -15,23 +15,29 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.domain.response.user;
+package org.apache.seatunnel.scheduler.dolphinscheduler.utils;
-import com.google.common.collect.Maps;
-import io.swagger.annotations.ApiModel;
+import org.apache.seatunnel.spi.scheduler.enums.InstanceStatusEnum;
-import java.util.HashMap;
-import java.util.Map;
+public class StatusUtils {
-@ApiModel(value = "userSimpleInfoRes", description = "user simple information")
-public class UserSimpleInfoRes extends BaseUserInfoRes {
-
- 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 InstanceStatusEnum getDolphinSchedulerStatus(String status) {
+ switch (status) {
+ case "SUBMITTED_SUCCESS":
+ case "RUNNING_EXECUTION":
+ case "DISPATCH":
+ return InstanceStatusEnum.RUNNING;
+ case "STOP":
+ case "KILL":
+ return InstanceStatusEnum.STOPPED;
+ case "FAILURE":
+ return InstanceStatusEnum.FAILED;
+ case "FORCED_SUCCESS":
+ case "SUCCESS":
+ return InstanceStatusEnum.SUCCESS;
+ default:
+ return InstanceStatusEnum.UNKNOWN;
+ }
}
+
}
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;
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/enums/InstanceStatusEnum.java
similarity index 84%
rename from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java
rename to seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/enums/InstanceStatusEnum.java
index 1037f9f8..10fd24c5 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/script/AddEmptyScriptRes.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/enums/InstanceStatusEnum.java
@@ -15,11 +15,13 @@
* limitations under the License.
*/
-package org.apache.seatunnel.app.domain.response.script;
+package org.apache.seatunnel.spi.scheduler.enums;
-import lombok.Data;
-
-@Data
-public class AddEmptyScriptRes {
- private int id;
+public enum InstanceStatusEnum {
+ RUNNING,
+ STOPPED,
+ FAILED,
+ SUCCESS,
+ UNKNOWN,
+ ;
}
diff --git a/tools/dependencies/known-dependencies.txt b/tools/dependencies/known-dependencies.txt
index 861fe7f4..53d49110 100644
--- a/tools/dependencies/known-dependencies.txt
+++ b/tools/dependencies/known-dependencies.txt
@@ -5,6 +5,7 @@ commons-collections4-4.4.jar
commons-codec-1.13.jar
commons-lang3-3.4.jar
config-1.3.3.jar
+cron-utils-9.1.6.jar
guava-19.0.jar
hibernate-validator-6.2.2.Final.jar
jackson-annotations-2.12.7.jar
@@ -17,7 +18,9 @@ jakarta.annotation-api-1.3.5.jar
jakarta.servlet-api-4.0.4.jar
jakarta.validation-api-2.0.2.jar
jakarta.websocket-api-1.1.2.jar
+javassist-3.27.0-GA.jar
javax.annotation-api-1.3.2.jar
+javax.el-3.0.0.jar
jboss-logging-3.4.1.Final.jar
jetty-continuation-9.4.46.v20220331.jar
jetty-http-9.4.46.v20220331.jar