From 83a6392db6891742ae07ebc83ec16c58c35f3723 Mon Sep 17 00:00:00 2001 From: lqyan Date: Tue, 6 Feb 2024 17:02:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E9=9B=86=E6=88=90=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/JavaSceneConfigState.xml | 6 + .../sdk/openapi/api/JHApiExecution.java | 34 +- .../openapi/api/job/JHJobApiExecution.java | 308 +++++++++++++++++- .../sdk/openapi/api/job/JobActionEnum.java | 64 ++++ .../sdk/openapi/api/job/JobHistoryInfo.java | 24 ++ .../jhinno/sdk/openapi/api/job/JobInfo.java | 273 ++++++++++++++++ .../sdk/openapi/api/job/JobPathConstant.java | 69 ++++ .../sdk/openapi/api/job/JobsActionEnum.java | 51 +++ .../sdk/openapi/api/job/PageJobInfo.java | 26 ++ .../jhinno/sdk/openapi/api/job/StageInfo.java | 62 ++++ .../sdk/openapi/test/app/AppApiTest.java | 1 - .../sdk/openapi/test/auth/AuthApiTest.java | 5 +- .../sdk/openapi/test/data/DataApiTest.java | 18 +- .../sdk/openapi/test/file/FileApiTest.java | 9 +- .../sdk/openapi/test/job/JobApiTest.java | 99 ++++++ 15 files changed, 1035 insertions(+), 14 deletions(-) create mode 100644 .idea/JavaSceneConfigState.xml create mode 100644 src/main/java/com/jhinno/sdk/openapi/api/job/JobActionEnum.java create mode 100644 src/main/java/com/jhinno/sdk/openapi/api/job/JobHistoryInfo.java create mode 100644 src/main/java/com/jhinno/sdk/openapi/api/job/JobInfo.java create mode 100644 src/main/java/com/jhinno/sdk/openapi/api/job/JobsActionEnum.java create mode 100644 src/main/java/com/jhinno/sdk/openapi/api/job/PageJobInfo.java create mode 100644 src/main/java/com/jhinno/sdk/openapi/api/job/StageInfo.java diff --git a/.idea/JavaSceneConfigState.xml b/.idea/JavaSceneConfigState.xml new file mode 100644 index 0000000..911809b --- /dev/null +++ b/.idea/JavaSceneConfigState.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/jhinno/sdk/openapi/api/JHApiExecution.java b/src/main/java/com/jhinno/sdk/openapi/api/JHApiExecution.java index 2ea706e..e66cef6 100644 --- a/src/main/java/com/jhinno/sdk/openapi/api/JHApiExecution.java +++ b/src/main/java/com/jhinno/sdk/openapi/api/JHApiExecution.java @@ -204,6 +204,20 @@ public class JHApiExecution { } + /** + * 发起一个有返回值的POST请求 + * + * @param path 请求路径 + * @param username 用户名 + * @param type 强求提的数据类型 + * @param 返回的数据类型 + * @return 请求后的数据 + */ + public R post(String path, String username, TypeReference> type) { + return post(path, username, null, type); + } + + /** * 发起一个没有返回值的POST请求 * @@ -228,7 +242,8 @@ public class JHApiExecution { * @param username 用户名 */ public void post(String path, String username) { - post(path, username, null); + post(path, username, new TypeReference>() { + }); } @@ -251,6 +266,20 @@ public class JHApiExecution { return result.getData(); } + + /** + * 发起一个有返回值的PUT请求 + * + * @param path 请求路径 + * @param username 用户名 + * @param type 强求提的数据类型 + * @param 返回的数据类型 + * @return 请求后的数据 + */ + public R put(String path, String username, TypeReference> type) { + return put(path, username, null, type); + } + /** * 发一个没有返回值的PUT请求 * @@ -275,7 +304,8 @@ public class JHApiExecution { * @param username 用户名 */ public void put(String path, String username) { - put(path, username, null); + put(path, username, new TypeReference>() { + }); } diff --git a/src/main/java/com/jhinno/sdk/openapi/api/job/JHJobApiExecution.java b/src/main/java/com/jhinno/sdk/openapi/api/job/JHJobApiExecution.java index e6d6b74..e590066 100644 --- a/src/main/java/com/jhinno/sdk/openapi/api/job/JHJobApiExecution.java +++ b/src/main/java/com/jhinno/sdk/openapi/api/job/JHJobApiExecution.java @@ -4,9 +4,11 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONUtil; import com.fasterxml.jackson.core.type.TypeReference; import com.jhinno.sdk.openapi.ArgsException; +import com.jhinno.sdk.openapi.CommonConstant; import com.jhinno.sdk.openapi.ServiceException; import com.jhinno.sdk.openapi.api.JHApiExecution; import com.jhinno.sdk.openapi.api.ResponseResult; +import com.jhinno.sdk.openapi.api.file.FileInfo; import com.jhinno.sdk.openapi.client.JHApiClient; import org.apache.commons.lang3.StringUtils; @@ -48,7 +50,7 @@ public class JHJobApiExecution extends JHApiExecution { map.put("appId", appId); map.put("params", JSONUtil.toJsonStr(params)); String path = JHApiClient.getUrl(JobPathConstant.JOB_SUBMIT_PATH, map); - List> result = post(path, username, null, new TypeReference>>>() { + List> result = post(path, username, new TypeReference>>>() { }); if (CollectionUtil.isEmpty(result)) { throw new ServiceException(path, 500, "作业提交返回为空!"); @@ -56,5 +58,309 @@ public class JHJobApiExecution extends JHApiExecution { return result.get(0).get("jobid"); } + /** + * 使用作业id查询作业文件列表 + * + * @param username 用户名 + * @param jobId 作业id + * @return 作业文件列表 + */ + public List getJobFilesById(String username, String jobId) { + if (StringUtils.isBlank(jobId)) { + throw new ArgsException("jobId不能为空!"); + } + String path = JobPathConstant.JOB_FIND_JOB_FILES_PATH.replace("{jobId}", jobId); + return get(path, username, new TypeReference>>() { + }); + } + + /** + * 分页查询作业列表 + *

作业名、作业状态等为非必填自动,如果为空则没有添加该查询条件

condition) { + Map params = new HashMap<>(5); + if (page != null) { + params.put("page", page); + } + if (pageSize != null) { + params.put("pageSize", pageSize); + } + if (StringUtils.isNotBlank(name)) { + params.put("jobName", name); + } + if (StringUtils.isBlank(status)) { + params.put("status", status); + } + if (CollectionUtil.isNotEmpty(condition)) { + params.put("condition", JSONUtil.toJsonStr(params)); + } + String path = JHApiClient.getUrl(JobPathConstant.JOB_PAGE_PATH, params); + return get(path, username, new TypeReference>() { + }); + } + + + /** + * 查询作业详情 + * + * @param username 用户名 + * @param jobId 作业id + * @return 作业详情 + */ + public JobInfo getJobDetail(String username, String jobId) { + if (StringUtils.isBlank(jobId)) { + throw new ArgsException("jobId不能为空!"); + } + String path = JobPathConstant.JOB_DETAIL_INFO_PATH.replace("{jobId}", jobId); + return get(path, username, new TypeReference>() { + }); + } + + + /** + * 分页检索作业名称查询作业信息 + * + * @param username 用户名 + * @param name 作业名 (必填) + * @param page 页码 (非必填,默认:1) + * @param pageSize 页大小(非必填,默认:20) + * @return 作业列表 + */ + public List getJobsByName(String username, String name, Integer page, Integer pageSize) { + if (StringUtils.isBlank(name)) { + throw new ArgsException("name不能为空!"); + } + Map params = new HashMap<>(3); + params.put("name", name); + if (page != null) { + params.put("page", page); + } + if (pageSize != null) { + params.put("pageSize", pageSize); + } + + String path = JHApiClient.getUrl(JobPathConstant.JOB_LIST_BY_NAME_PATH, params); + return get(path, username, new TypeReference>>() { + }); + } + + + /** + * 分页检索作业状态 + *

+ * status(作业状态)的取值如下: + *

    + *
  1. RUN(运行)
  2. + *
  3. PEND(等待)
  4. + *
  5. PSUSP(等待中挂起)
  6. + *
  7. USUSP(用户挂起)
  8. + *
  9. SSUSP(系统挂起)
  10. + *
  11. ZOMBI(僵尸)
  12. + *
  13. DONE(完成)
  14. + *
  15. EXIT(退出)
  16. + *
  17. UNKNOWN#UNKWN(状态不明)
  18. + *
+ * + * @param username 用户名 + * @param status 作业状态 + * @param page 页码 + * @param pageSize 分页大小 + * @return 作业列表 + */ + public List getJobsByStatus(String username, String status, Integer page, Integer pageSize) { + if (StringUtils.isBlank(status)) { + throw new ArgsException("status不能为空!"); + } + Map params = new HashMap<>(3); + if (page != null) { + params.put("page", page); + } + if (pageSize != null) { + params.put("pageSize", pageSize); + } + String path = JHApiClient.getUrl(JobPathConstant.JOB_LIST_BY_STATUS_PATH.replace("{status}", status), params); + return get(path, username, new TypeReference>>() { + }); + } + + + /** + * 通过作业id列表查询作业列表 + * + * @param username 用户列表 + * @param jobIds 作业id列表 + * @return 作业列表 + */ + public List getJobsByIds(String username, List jobIds) { + if (CollectionUtil.isEmpty(jobIds)) { + throw new ArgsException("jobIds不能为空!"); + } + Map params = new HashMap<>(1); + params.put("jobIds", String.join(CommonConstant.NORMAL_CHARACTER_COMMA, jobIds)); + String path = JHApiClient.getUrl(JobPathConstant.JOB_LIST_BY_IDS_PATH, params); + return get(path, username, new TypeReference>>() { + }); + } + + /** + * 操作作业 + *

+ * {@link JobActionEnum} 中的 静态方法{@link JobActionEnum#getJobAction(String)}可以将前端的字符转换为{@link JobActionEnum}对象 + *

+ * 或者使用{@link #action(String, String, String)}直接操作,但最终还是调的这个方法,我们只不过是内部做了转换而已 + * + * @param username 用户名 + * @param action 作业操作类型(必填) + * @param jobId 作业id + * @see JobActionEnum + */ + public void action(String username, JobActionEnum action, String jobId) { + if (action == null) { + throw new ArgsException("action不能为空!"); + } + if (StringUtils.isBlank(jobId)) { + throw new ArgsException("jobId不能为空!"); + } + String path = JobPathConstant.JOB_ACTION_PATH.replace("{jobId}", jobId).replace("{action}", action.getAction()); + put(path, username); + } + + /** + * 操作作业 + * + * @param username 用户名 + * @param action 作业的操作类型(必填),取值见{@link JobActionEnum}中的中值 + * @param jobId 作业id + */ + public void action(String username, String action, String jobId) { + action(username, JobActionEnum.getJobAction(action), jobId); + } + + + /** + * 批量操作作业 + *

+ * {@link JobsActionEnum} 中的 静态方法{@link JobsActionEnum#getJobAction(String)}可以将前端的字符转换为{@link JobsActionEnum}对象 + *

+ * 或者使用{@link #actions(String, String, List)}直接操作,但最终还是调的这个方法,我们只不过是内部做了转换而已 + * + * @param username 用户名 + * @param action 操作类型 + * @param jobIds 作业id列表 + */ + public void actions(String username, JobsActionEnum action, List jobIds) { + if (action == null) { + throw new ArgsException("action不能为空!"); + } + if (CollectionUtil.isEmpty(jobIds)) { + throw new ArgsException("jobIds不能为空!"); + } + Map params = new HashMap<>(1); + params.put("jobIds", String.join(CommonConstant.NORMAL_CHARACTER_COMMA, jobIds)); + String path = JHApiClient.getUrl(JobPathConstant.JOB_ACTION_IDS_PATH.replace("{action}", action.getAction()), params); + put(path, username); + } + + /** + * 操作作业 + * + * @param username 用户名 + * @param action 作业的操作类型(必填),取值见{@link JobsActionEnum}中的中值 + * @param jobIds 作业id列表 + */ + public void actions(String username, String action, List jobIds) { + actions(username, JobsActionEnum.getJobAction(action), jobIds); + } + + + /** + * + + * 查询制定作业的作业历史 + * + * @param username 用户名 + * @param jobId 作业id + * @return 作业历史 + */ + public JobHistoryInfo getJobHistory(String username, String jobId) { + if (StringUtils.isBlank(jobId)) { + throw new ArgsException("jobId不能为空!"); + } + String path = JobPathConstant.JOB_HISTORY_PATH.replace("{jobId}", jobId); + List list = get(path, username, new TypeReference>>() { + }); + if (CollectionUtil.isEmpty(list)) { + throw new ServiceException(path, 500, "历史作业信息不存在!"); + } + return list.get(0); + } + + + /** + * 通过多个id查询作业历史列表 + * + * @param username 用户名 + * @param jobIds 作业id列表 + * @return 作业历史列表 + */ + public List getJobsHistory(String username, List jobIds) { + if (CollectionUtil.isEmpty(jobIds)) { + throw new ArgsException("jobIds不能为空!"); + } + Map params = new HashMap<>(1); + params.put("jobIds", String.join(CommonConstant.NORMAL_CHARACTER_COMMA, jobIds)); + String path = JHApiClient.getUrl(JobPathConstant.JOB_HISTORY_IDS_PATH, params); + return get(path, username, new TypeReference>>() { + }); + } + + /** + * 获取作业的动态输出 + * + * @param username 用户名 + * @param jobId 作业id + * @return 作业的动态输出 + */ + public String getJobPeek(String username, String jobId) { + if (StringUtils.isBlank(jobId)) { + throw new ArgsException("jobId不能为空!"); + } + String path = JobPathConstant.JOB_PEEK_PATH.replace("{jobId}", jobId); + ResponseResult result = jhApiClient.get(path, getHeaders(username), new TypeReference>() { + }); + if (StringUtils.equals(result.getResult(), CommonConstant.FAILED)) { + throw new ServiceException(path, result.getCode(), result.getMessage()); + } + // 产品BUG,这里作兼容性处理,保证SDK在BUG修复后能用 + if (StringUtils.isNotBlank(result.getData())) { + return result.getData(); + } + return result.getMessage(); + } + + + /** + * 连接作业会话 + * + * @param username 用户名 + * @param jobId 作业id + * @return 未知 + */ + public Object connectJobSession(String username, String jobId) { + if (StringUtils.isBlank(jobId)) { + throw new ArgsException("jobId不能为空!"); + } + String path = JobPathConstant.JOB_CONNECT_SESSION_PATH.replace("{jobId}", jobId); + return post(path, username, new TypeReference>() { + }); + } } diff --git a/src/main/java/com/jhinno/sdk/openapi/api/job/JobActionEnum.java b/src/main/java/com/jhinno/sdk/openapi/api/job/JobActionEnum.java new file mode 100644 index 0000000..8c32496 --- /dev/null +++ b/src/main/java/com/jhinno/sdk/openapi/api/job/JobActionEnum.java @@ -0,0 +1,64 @@ +package com.jhinno.sdk.openapi.api.job; + +import com.jhinno.sdk.openapi.ArgsException; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +/** + * 作业的操作类型 + * + * @author yanlongqi + * @date 2024/2/6 15:01 + */ + +@Getter +@AllArgsConstructor +public enum JobActionEnum { + + /** + * 杀死作业 + */ + KILL("kill"), + + /** + * 恢复作业 + */ + RESUME("resume"), + + /** + * 暂停作业 + */ + STOP("stop"), + + /** + * 置顶作业 + */ + TOP("top"), + + /** + * 置低作业 + */ + BOT("bot"), + ; + + private final String action; + + + /** + * 将作业的操作转换为JobActionEnum + * + * @param action 操作字符 + * @return 作业操作类型 + * @throws ArgsException action的类型不存在的异常 + */ + public static JobActionEnum getJobAction(String action) { + for (JobActionEnum value : values()) { + if (StringUtils.equals(action, value.getAction())) { + return value; + } + } + throw new ArgsException(action + "类型不存在!"); + } + +} diff --git a/src/main/java/com/jhinno/sdk/openapi/api/job/JobHistoryInfo.java b/src/main/java/com/jhinno/sdk/openapi/api/job/JobHistoryInfo.java new file mode 100644 index 0000000..26ea333 --- /dev/null +++ b/src/main/java/com/jhinno/sdk/openapi/api/job/JobHistoryInfo.java @@ -0,0 +1,24 @@ +package com.jhinno.sdk.openapi.api.job; + +import lombok.Data; + +/** + * 作业历史信息 + * + * @author yanlongqi + * @date 2024/2/6 16:00 + */ +@Data +public class JobHistoryInfo { + + /** + * 作业id + */ + private String jobId; + + + /** + * 作业历史 + */ + private String jobhistory; +} diff --git a/src/main/java/com/jhinno/sdk/openapi/api/job/JobInfo.java b/src/main/java/com/jhinno/sdk/openapi/api/job/JobInfo.java new file mode 100644 index 0000000..9791127 --- /dev/null +++ b/src/main/java/com/jhinno/sdk/openapi/api/job/JobInfo.java @@ -0,0 +1,273 @@ +package com.jhinno.sdk.openapi.api.job; + +import lombok.Data; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 作业详情 + * + * @author yanlongqi + * @date 2024/2/6 13:54 + */ +@Data +public class JobInfo { + /** + * 作业id + */ + private String id; + + /** + * 作业索引(类型待确认) + */ + private String index; + + /** + * 作业id + */ + private String jobId; + + /** + * 作业名称 + */ + private String name; + /** + * 作业状态 + *

+ * 可能的取值:
+ *

    + *
  1. RUN(运行)
  2. + *
  3. PEND(等待)
  4. + *
  5. PSUSP(等待中挂起)
  6. + *
  7. USUSP(用户挂起)
  8. + *
  9. SSUSP(系统挂起)
  10. + *
  11. ZOMBI(僵尸)
  12. + *
  13. DONE(完成)
  14. + *
  15. EXIT(退出)
  16. + *
  17. UNKNOWN#UNKWN(状态不明)
  18. + *
+ * + *

+ *

+ * 数组作业(及arrayJob="true")时status的类型是一个map
+ * 如:{"done":1,"run":12} + *

+ */ + private Object status; + + /** + * 主机 + */ + private String host; + + /** + * 队列 + */ + private String queue; + + /** + * 排队号 + */ + private Integer queueNumber; + + /** + * 属主 + */ + private String owner; + + /** + * 执行节列表 + */ + private List executionHost; + + /** + * 插槽 + */ + private String slots; + + /** + * 作业提交时间 + */ + private Date submitTime; + + /** + * 作业执行时间 + */ + private Date executionTime; + + /** + * 作业终止时间 + */ + private Date terminationTime; + + /** + * 工作目录 + */ + private String cwd; + + /** + * 作业提交工作目录 + */ + private String subCwd; + + /** + * 密级 + */ + private String confidential; + + /** + * 密级映射 + */ + private Integer confidential_map; + + /** + * 作业数据删除时间 + */ + private Date deleteTime; + + /** + * 项目 + */ + private String project; + + /** + * 索引id + */ + private String indexid; + + /** + * 是否数组作业,true是,false不是 + */ + private String arrayJob; + + /** + * 会话id + */ + private String desktopid; + + + private List reasons; + + /** + * 运行时间 + */ + private String runTime; + + /** + * 作业类型 + */ + private Boolean jobType; + + /** + * + */ + private Boolean jobDesktopExpires; + + /** + * + */ + private Boolean jobDataNotExists; + + /** + * + */ + private Boolean hasAlarmHost; + + /** + * + */ + private String alarmInfo; + + /** + * + */ + private Boolean hasJobException; + + /** + * + */ + private String exceptionInfo; + + /** + * 应用名称 + */ + private String appName; + + /** + * + */ + private Integer underRunThreshold; + + /** + * + */ + private Integer overRunThreshold; + + /** + * + */ + private Float idleThreshold; + + /** + * 用户中文名 + */ + private String userNameCn; + + /** + * + */ + private String jobIndexIds; + + /** + * 作业数据是否删除 + */ + private Boolean jobIsDeleted; + + /** + * 是否独占 + */ + private Boolean exclusive; + + /** + * 是否docker作业 + */ + private Boolean isDocker; + + /** + * 图形脚本名称 + */ + private String graphicScriptName; + + /** + * 绑定CPU列表 + */ + private List> cpuBinds; + + /** + * 绑定GPU列表 + */ + private List> gpuBinds; + + /** + * + */ + private List transferProgressIn; + + /** + * + */ + private List transferProgressOut; + + /** + * 组织树 + */ + private String organizationTree; + + /** + * 是否本地作业 + */ + private Boolean isLocalSpoolerJob; + +} diff --git a/src/main/java/com/jhinno/sdk/openapi/api/job/JobPathConstant.java b/src/main/java/com/jhinno/sdk/openapi/api/job/JobPathConstant.java index e41a5ad..35935de 100644 --- a/src/main/java/com/jhinno/sdk/openapi/api/job/JobPathConstant.java +++ b/src/main/java/com/jhinno/sdk/openapi/api/job/JobPathConstant.java @@ -13,4 +13,73 @@ public class JobPathConstant { * 提交作业 */ public static final String JOB_SUBMIT_PATH = "/ws/api/jobs/jsub"; + + + /** + * 使用作业id查询作业列表 + */ + public static final String JOB_FIND_JOB_FILES_PATH = "/ws/api/jobs/{jobId}/files"; + + /** + * 分页查询作业列表 + */ + public static final String JOB_PAGE_PATH = "/ws/api/jobs/page"; + + /** + * 查询作业详情 + */ + public static final String JOB_DETAIL_INFO_PATH = "/ws/api/jobs/{jobId}"; + + + /** + * 分页检索作业名 + */ + public static final String JOB_LIST_BY_NAME_PATH = "/ws/api/jobs/byName"; + + /** + * 作业号检索作业列表 + */ + public static final String JOB_LIST_BY_STATUS_PATH = "/ws/api/jobs/byStatus/{status}"; + + + /** + * 通过作业号查询作业列表 + */ + public static final String JOB_LIST_BY_IDS_PATH = "/ws/api/jobs/list"; + + + /** + * 作业操作 + */ + public static final String JOB_ACTION_PATH = "/ws/api/jobs/{jobId}/{action}"; + + + /** + * 批量操作作业 + */ + public static final String JOB_ACTION_IDS_PATH = "/ws/api/jobs/{action}"; + + + /** + * 获取作业历史 + */ + public static final String JOB_HISTORY_PATH = "/ws/api/jobs/{jobId}/hist"; + + + /** + * 通过多个作业号查询作业历史 + */ + public static final String JOB_HISTORY_IDS_PATH = "/ws/api/jobs/hist"; + + + /** + * 获取作业动态输出 + */ + public static final String JOB_PEEK_PATH = "/ws/api/jobs/{jobId}/peek"; + + + /** + * 连接作业会话 + */ + public static final String JOB_CONNECT_SESSION_PATH = "/ws/api/jobs/{jobId}/connect"; } diff --git a/src/main/java/com/jhinno/sdk/openapi/api/job/JobsActionEnum.java b/src/main/java/com/jhinno/sdk/openapi/api/job/JobsActionEnum.java new file mode 100644 index 0000000..ada179f --- /dev/null +++ b/src/main/java/com/jhinno/sdk/openapi/api/job/JobsActionEnum.java @@ -0,0 +1,51 @@ +package com.jhinno.sdk.openapi.api.job; + +import com.jhinno.sdk.openapi.ArgsException; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +/** + * @author yanlongqi + * @date 2024/2/6 15:42 + */ +@Getter +@AllArgsConstructor +public enum JobsActionEnum { + + /** + * 杀死作业 + */ + KILL("kill"), + + /** + * 恢复作业 + */ + RESUME("resume"), + + /** + * 暂停作业 + */ + STOP("stop"), + + ; + + private final String action; + + + /** + * 将作业的操作转换为JobsActionEnum + * + * @param action 操作字符 + * @return 作业操作类型 + * @exception ArgsException action的类型不存在的异常 + */ + public static JobsActionEnum getJobAction(String action) { + for (JobsActionEnum value : values()) { + if (StringUtils.equals(action, value.getAction())) { + return value; + } + } + throw new ArgsException(action + "类型不存在!"); + } +} diff --git a/src/main/java/com/jhinno/sdk/openapi/api/job/PageJobInfo.java b/src/main/java/com/jhinno/sdk/openapi/api/job/PageJobInfo.java new file mode 100644 index 0000000..f8e36f4 --- /dev/null +++ b/src/main/java/com/jhinno/sdk/openapi/api/job/PageJobInfo.java @@ -0,0 +1,26 @@ +package com.jhinno.sdk.openapi.api.job; + +import lombok.Data; + +import java.util.List; + +/** + * 查询分页作业数据 + * + * @author yanlongqi + * @date 2024/2/6 11:31 + */ +@Data +public class PageJobInfo { + + /** + * 作业总数 + */ + private Integer total; + + /** + * 作业列表 + */ + private List jobs; + +} diff --git a/src/main/java/com/jhinno/sdk/openapi/api/job/StageInfo.java b/src/main/java/com/jhinno/sdk/openapi/api/job/StageInfo.java new file mode 100644 index 0000000..886890a --- /dev/null +++ b/src/main/java/com/jhinno/sdk/openapi/api/job/StageInfo.java @@ -0,0 +1,62 @@ +package com.jhinno.sdk.openapi.api.job; + +import lombok.Data; + +/** + * 阶段信息(不明白) + * + * @author yanlongqi + * @date 2024/2/6 14:11 + */ +@Data +public class StageInfo { + + /** + * + */ + private Long op; + + /** + * + */ + private Long stageNo; + + /** + * + */ + private Integer transferStatus; + + /** + * + */ + private String stageType; + + /** + * -f 操作符号前面的机器,默认是提交节点 + */ + private String srcHost; + + /** + * -f 操作符号前面的文件 + */ + + private String srcData; + /** + * -f 操作符号后面的机器,默认是计算头节点 + */ + private String desHost; + /** + * -f 操作符号后面的文件 + */ + private String desData; + + /** + * + */ + private String progress; + + /** + * + */ + private Long exitCode; +} diff --git a/src/test/java/com/jhinno/sdk/openapi/test/app/AppApiTest.java b/src/test/java/com/jhinno/sdk/openapi/test/app/AppApiTest.java index fc74fb0..18b6ed9 100644 --- a/src/test/java/com/jhinno/sdk/openapi/test/app/AppApiTest.java +++ b/src/test/java/com/jhinno/sdk/openapi/test/app/AppApiTest.java @@ -2,7 +2,6 @@ package com.jhinno.sdk.openapi.test.app; import cn.hutool.core.lang.ConsoleTable; import com.jhinno.sdk.openapi.api.app.*; -import com.jhinno.sdk.openapi.api.file.FileInfo; import com.jhinno.sdk.openapi.test.JHClientConfig; import org.junit.Test; diff --git a/src/test/java/com/jhinno/sdk/openapi/test/auth/AuthApiTest.java b/src/test/java/com/jhinno/sdk/openapi/test/auth/AuthApiTest.java index 833055a..5d4f571 100644 --- a/src/test/java/com/jhinno/sdk/openapi/test/auth/AuthApiTest.java +++ b/src/test/java/com/jhinno/sdk/openapi/test/auth/AuthApiTest.java @@ -5,7 +5,7 @@ import com.jhinno.sdk.openapi.test.JHClientConfig; import org.junit.Test; /** - * 鉴权相关测试累 + * 鉴权相关测试累类 * * @author yanlongqi * @date 2024/2/1 18:06 @@ -23,6 +23,9 @@ public class AuthApiTest { System.out.println("token:" + token); } + /** + * 测试退出登录 + */ @Test public void testLogout(){ jhAppApiExecution.logout("lqyan"); diff --git a/src/test/java/com/jhinno/sdk/openapi/test/data/DataApiTest.java b/src/test/java/com/jhinno/sdk/openapi/test/data/DataApiTest.java index 584d60b..fcae946 100644 --- a/src/test/java/com/jhinno/sdk/openapi/test/data/DataApiTest.java +++ b/src/test/java/com/jhinno/sdk/openapi/test/data/DataApiTest.java @@ -5,10 +5,10 @@ import com.jhinno.sdk.openapi.test.JHClientConfig; import org.junit.Test; import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; /** + * 作业数据区相关单元测试类 + * * @author yanlongqi * @date 2024/2/4 17:10 */ @@ -16,26 +16,38 @@ public class DataApiTest { public static final JHDataApiExecution execution = new JHDataApiExecution(JHClientConfig.client); + /** + * 测试获取作业数据区目录列表 + */ @Test public void testGetSpoolers() { System.out.println(execution.getSpoolersData("jhadmin")); } + /** + * 测试根作业id获取作业数据区列表 + */ @Test public void testGetSpoolersDataById() { System.out.println(execution.getSpoolersDataById("jhadmin", "5909")); } + /** + * 测试根作业id列表获取作业数据区列表 + */ @Test public void testGetSpoolersDataByIds() { System.out.println(execution.getSpoolersDataByIds("jhadmin", Arrays.asList("6799", "6686"))); } + /** + * 测试通过作业数据区名称获作业数据列表 + */ @Test public void testGetSpoolersDataByName() { - System.out.println(execution.getSpoolersByName("jhadmin", "fluent__N_2d_t1_fluent-test_20220722172408")); + System.out.println(execution.getSpoolersByName("jhadmin", "common_sub__t1_aaa.sh_20240206103137")); } diff --git a/src/test/java/com/jhinno/sdk/openapi/test/file/FileApiTest.java b/src/test/java/com/jhinno/sdk/openapi/test/file/FileApiTest.java index e429685..754b082 100644 --- a/src/test/java/com/jhinno/sdk/openapi/test/file/FileApiTest.java +++ b/src/test/java/com/jhinno/sdk/openapi/test/file/FileApiTest.java @@ -79,10 +79,7 @@ public class FileApiTest { /** - * 测试新建文件 - *

- * 当前接口请求执行失败 - *

+ * 测试新建文件(接口执行失败) */ @Test public void testMkFile() { @@ -102,7 +99,7 @@ public class FileApiTest { /** - * 测试伤上传文件,不覆盖源文件 + * 测试伤上传文件,(不覆盖源文件,如果isCover是true,上传后的文件有数字下标) */ @Test public void testUploadFileNoCover() throws IOException { @@ -116,7 +113,7 @@ public class FileApiTest { */ @Test public void testGetFileDownloadUrl() { - System.out.println(execution.getFileDownloadUrl("jhadmin", "$HOME/temp/双色球.xls")); + System.out.println(execution.getFileDownloadUrl("jhadmin", "$HOME/aa2a.sh")); } diff --git a/src/test/java/com/jhinno/sdk/openapi/test/job/JobApiTest.java b/src/test/java/com/jhinno/sdk/openapi/test/job/JobApiTest.java index ddc0092..4784d82 100644 --- a/src/test/java/com/jhinno/sdk/openapi/test/job/JobApiTest.java +++ b/src/test/java/com/jhinno/sdk/openapi/test/job/JobApiTest.java @@ -1,13 +1,19 @@ package com.jhinno.sdk.openapi.test.job; import com.jhinno.sdk.openapi.api.job.JHJobApiExecution; +import com.jhinno.sdk.openapi.api.job.JobHistoryInfo; +import com.jhinno.sdk.openapi.api.job.PageJobInfo; import com.jhinno.sdk.openapi.test.JHClientConfig; import org.junit.Test; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; /** + * 作业相关测试类 + * * @author yanlongqi * @date 2024/2/5 18:56 */ @@ -25,4 +31,97 @@ public class JobApiTest { params.put("JH_NCPU", "1"); System.out.println(execution.submit("jhadmin", "common_sub", params)); } + + + /** + * 测试根据作业id查询作业文件列表 + */ + @Test + public void testGetJobFilesById() { + System.out.println(execution.getJobFilesById("jhadmin", "42")); + } + + + /** + * 测试分页查询作业列表 + */ + @Test + public void testGetJobPage() { + PageJobInfo jhadmin = execution.getJobPage("jhadmin", 1, 5, null, null, null); + System.out.println(jhadmin); + } + + /** + * 测试查看作业详情 + */ + @Test + public void tesGetJobDetail() { + System.out.println(execution.getJobDetail("jhadmin", "42")); + } + + + /** + * 测试使用作业名称检索 + */ + @Test + public void testGetJobsByName() { + System.out.println(execution.getJobsByName("jhadmin", "common", 1, 10)); + } + + /** + * 测根据作业状态检索作业(我的理解,作业列表为空应该返回一个空的列表不能报错) + */ + @Test + public void testGetJobsByStatus() { + System.out.println(execution.getJobsByStatus("jhadmin", "DONE", 1, 10)); + } + + + /** + * 测试使用作业拆id列表查询作业 + */ + @Test + public void testGetJobsByIds() { + System.out.println(execution.getJobsByIds("jhadmin", Arrays.asList("42", "41"))); + } + + + /** + * 测试查询作业历史 + */ + @Test + public void testGetJobHistory() { + JobHistoryInfo result = execution.getJobHistory("jhadmin", "42"); + System.out.println(result); + } + + + /** + * 测试通过多个子哦也好查询作业历史 + */ + @Test + public void testGetJobsHistory() { + List result = execution.getJobsHistory("jhadmin", Arrays.asList("41", "42")); + System.out.println(result); + } + + /** + * 测试获取作业动态输出(作业动态输出的数据写在了message,我做了处理,需要产品改进) + */ + @Test + public void testGetJobPeek() { + String peek = execution.getJobPeek("jhadmin", "45"); + System.out.println("peek = " + peek); + } + + + /** + * 测试会话连接(目前没有测试条件) + */ + @Test + public void testConnectJobSession() { + Object o = execution.connectJobSession("jhadmin", "45"); + System.out.println(o); + } + }