Browse Source

feat: powerjob client support export job

tjq 2 years ago
parent
commit
fcca0c0c94

+ 79 - 0
powerjob-client/src/main/java/tech/powerjob/client/IPowerJobClient.java

@@ -0,0 +1,79 @@
+package tech.powerjob.client;
+
+import tech.powerjob.common.request.http.SaveJobInfoRequest;
+import tech.powerjob.common.request.http.SaveWorkflowNodeRequest;
+import tech.powerjob.common.request.http.SaveWorkflowRequest;
+import tech.powerjob.common.request.query.JobInfoQuery;
+import tech.powerjob.common.response.*;
+
+import java.util.List;
+
+/**
+ * PowerJobClient, the client for OpenAPI.
+ *
+ * @author tjq
+ * @since 2023/3/5
+ */
+public interface IPowerJobClient {
+
+    /* ************* Job 区 ************* */
+
+    ResultDTO<SaveJobInfoRequest> exportJob(Long jobId);
+
+    ResultDTO<Long> saveJob(SaveJobInfoRequest request);
+
+    ResultDTO<Long> copyJob(Long jobId);
+
+    ResultDTO<JobInfoDTO> fetchJob(Long jobId);
+
+    ResultDTO<List<JobInfoDTO>> fetchAllJob();
+
+    ResultDTO<List<JobInfoDTO>> queryJob(JobInfoQuery powerQuery);
+
+    ResultDTO<Void> disableJob(Long jobId);
+
+    ResultDTO<Void> enableJob(Long jobId);
+
+    ResultDTO<Void> deleteJob(Long jobId);
+
+    ResultDTO<Long> runJob(Long jobId, String instanceParams, long delayMS);
+
+    /* ************* Instance API list ************* */
+
+    ResultDTO<Void> stopInstance(Long instanceId);
+
+    ResultDTO<Void> cancelInstance(Long instanceId);
+
+    ResultDTO<Void> retryInstance(Long instanceId);
+
+    ResultDTO<Integer> fetchInstanceStatus(Long instanceId);
+
+    ResultDTO<InstanceInfoDTO> fetchInstanceInfo(Long instanceId);
+
+    /* ************* Workflow API list ************* */
+    ResultDTO<Long> saveWorkflow(SaveWorkflowRequest request);
+
+    ResultDTO<Long> copyWorkflow(Long workflowId);
+
+    ResultDTO<List<WorkflowNodeInfoDTO>> saveWorkflowNode(List<SaveWorkflowNodeRequest> requestList);
+
+    ResultDTO<WorkflowInfoDTO> fetchWorkflow(Long workflowId);
+
+    ResultDTO<Void> disableWorkflow(Long workflowId);
+
+    ResultDTO<Void> enableWorkflow(Long workflowId);
+
+    ResultDTO<Void> deleteWorkflow(Long workflowId);
+
+    ResultDTO<Long> runWorkflow(Long workflowId, String initParams, long delayMS);
+
+    /* ************* Workflow Instance API list ************* */
+
+    ResultDTO<Void> stopWorkflowInstance(Long wfInstanceId);
+
+    ResultDTO<Void> retryWorkflowInstance(Long wfInstanceId);
+
+    ResultDTO<Void> markWorkflowNodeAsSuccess(Long wfInstanceId, Long nodeId);
+
+    ResultDTO<WorkflowInstanceInfoDTO> fetchWorkflowInstanceInfo(Long wfInstanceId);
+}

+ 37 - 1
powerjob-client/src/main/java/tech/powerjob/client/PowerJobClient.java

@@ -33,7 +33,7 @@ import static tech.powerjob.client.TypeStore.*;
  * @since 2020/4/15
  */
 @Slf4j
-public class PowerJobClient {
+public class PowerJobClient implements IPowerJobClient {
 
     private Long appId;
     private String currentAddress;
@@ -114,6 +114,7 @@ public class PowerJobClient {
      * @param request Job meta info
      * @return jobId
      */
+    @Override
     public ResultDTO<Long> saveJob(SaveJobInfoRequest request) {
 
         request.setAppId(appId);
@@ -130,6 +131,7 @@ public class PowerJobClient {
      * @param jobId Job id
      * @return Id of job copy
      */
+    @Override
     public ResultDTO<Long> copyJob(Long jobId) {
         RequestBody body = new FormBody.Builder()
                 .add("jobId", jobId.toString())
@@ -139,12 +141,23 @@ public class PowerJobClient {
         return JSON.parseObject(post, LONG_RESULT_TYPE);
     }
 
+    @Override
+    public ResultDTO<SaveJobInfoRequest> exportJob(Long jobId) {
+        RequestBody body = new FormBody.Builder()
+                .add("jobId", jobId.toString())
+                .add("appId", appId.toString())
+                .build();
+        String post = postHA(OpenAPIConstant.EXPORT_JOB, body);
+        return JSON.parseObject(post, SAVE_JOB_INFO_REQUEST_RESULT_TYPE);
+    }
+
     /**
      * Query JobInfo by jobId
      *
      * @param jobId jobId
      * @return Job meta info
      */
+    @Override
     public ResultDTO<JobInfoDTO> fetchJob(Long jobId) {
         RequestBody body = new FormBody.Builder()
                 .add("jobId", jobId.toString())
@@ -159,6 +172,7 @@ public class PowerJobClient {
      *
      * @return All JobInfo
      */
+    @Override
     public ResultDTO<List<JobInfoDTO>> fetchAllJob() {
         RequestBody body = new FormBody.Builder()
                 .add("appId", appId.toString())
@@ -173,6 +187,7 @@ public class PowerJobClient {
      * @param powerQuery JobQuery
      * @return JobInfo
      */
+    @Override
     public ResultDTO<List<JobInfoDTO>> queryJob(JobInfoQuery powerQuery) {
         powerQuery.setAppIdEq(appId);
         MediaType jsonType = MediaType.parse(OmsConstant.JSON_MEDIA_TYPE);
@@ -187,6 +202,7 @@ public class PowerJobClient {
      * @param jobId jobId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> disableJob(Long jobId) {
         RequestBody body = new FormBody.Builder()
                 .add("jobId", jobId.toString())
@@ -202,6 +218,7 @@ public class PowerJobClient {
      * @param jobId jobId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> enableJob(Long jobId) {
         RequestBody body = new FormBody.Builder()
                 .add("jobId", jobId.toString())
@@ -217,6 +234,7 @@ public class PowerJobClient {
      * @param jobId jobId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> deleteJob(Long jobId) {
         RequestBody body = new FormBody.Builder()
                 .add("jobId", jobId.toString())
@@ -234,6 +252,7 @@ public class PowerJobClient {
      * @param delayMS        Delay time(Milliseconds)
      * @return instanceId
      */
+    @Override
     public ResultDTO<Long> runJob(Long jobId, String instanceParams, long delayMS) {
         FormBody.Builder builder = new FormBody.Builder()
                 .add("jobId", jobId.toString())
@@ -259,6 +278,7 @@ public class PowerJobClient {
      * @param instanceId instanceId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> stopInstance(Long instanceId) {
         RequestBody body = new FormBody.Builder()
                 .add("instanceId", instanceId.toString())
@@ -275,6 +295,7 @@ public class PowerJobClient {
      * @param instanceId instanceId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> cancelInstance(Long instanceId) {
         RequestBody body = new FormBody.Builder()
                 .add("instanceId", instanceId.toString())
@@ -291,6 +312,7 @@ public class PowerJobClient {
      * @param instanceId instanceId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> retryInstance(Long instanceId) {
         RequestBody body = new FormBody.Builder()
                 .add("instanceId", instanceId.toString())
@@ -306,6 +328,7 @@ public class PowerJobClient {
      * @param instanceId instanceId
      * @return {@link InstanceStatus}
      */
+    @Override
     public ResultDTO<Integer> fetchInstanceStatus(Long instanceId) {
         RequestBody body = new FormBody.Builder()
                 .add("instanceId", instanceId.toString())
@@ -320,6 +343,7 @@ public class PowerJobClient {
      * @param instanceId instanceId
      * @return instance detail
      */
+    @Override
     public ResultDTO<InstanceInfoDTO> fetchInstanceInfo(Long instanceId) {
         RequestBody body = new FormBody.Builder()
                 .add("instanceId", instanceId.toString())
@@ -337,6 +361,7 @@ public class PowerJobClient {
      * @param request Workflow meta info
      * @return workflowId
      */
+    @Override
     public ResultDTO<Long> saveWorkflow(SaveWorkflowRequest request) {
         request.setAppId(appId);
         MediaType jsonType = MediaType.parse(OmsConstant.JSON_MEDIA_TYPE);
@@ -352,6 +377,7 @@ public class PowerJobClient {
      * @param workflowId Workflow id
      * @return Id of workflow copy
      */
+    @Override
     public ResultDTO<Long> copyWorkflow(Long workflowId) {
         RequestBody body = new FormBody.Builder()
                 .add("workflowId", workflowId.toString())
@@ -368,6 +394,7 @@ public class PowerJobClient {
      * @param requestList Node info list of Workflow
      * @return Standard return object
      */
+    @Override
     public ResultDTO<List<WorkflowNodeInfoDTO>> saveWorkflowNode(List<SaveWorkflowNodeRequest> requestList) {
         for (SaveWorkflowNodeRequest saveWorkflowNodeRequest : requestList) {
             saveWorkflowNodeRequest.setAppId(appId);
@@ -386,6 +413,7 @@ public class PowerJobClient {
      * @param workflowId workflowId
      * @return Workflow meta info
      */
+    @Override
     public ResultDTO<WorkflowInfoDTO> fetchWorkflow(Long workflowId) {
         RequestBody body = new FormBody.Builder()
                 .add("workflowId", workflowId.toString())
@@ -401,6 +429,7 @@ public class PowerJobClient {
      * @param workflowId workflowId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> disableWorkflow(Long workflowId) {
         RequestBody body = new FormBody.Builder()
                 .add("workflowId", workflowId.toString())
@@ -416,6 +445,7 @@ public class PowerJobClient {
      * @param workflowId workflowId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> enableWorkflow(Long workflowId) {
         RequestBody body = new FormBody.Builder()
                 .add("workflowId", workflowId.toString())
@@ -431,6 +461,7 @@ public class PowerJobClient {
      * @param workflowId workflowId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> deleteWorkflow(Long workflowId) {
         RequestBody body = new FormBody.Builder()
                 .add("workflowId", workflowId.toString())
@@ -448,6 +479,7 @@ public class PowerJobClient {
      * @param delayMS    Delay time(Milliseconds)
      * @return workflow instanceId
      */
+    @Override
     public ResultDTO<Long> runWorkflow(Long workflowId, String initParams, long delayMS) {
         FormBody.Builder builder = new FormBody.Builder()
                 .add("workflowId", workflowId.toString())
@@ -472,6 +504,7 @@ public class PowerJobClient {
      * @param wfInstanceId workflow instanceId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> stopWorkflowInstance(Long wfInstanceId) {
         RequestBody body = new FormBody.Builder()
                 .add("wfInstanceId", wfInstanceId.toString())
@@ -487,6 +520,7 @@ public class PowerJobClient {
      * @param wfInstanceId workflow instanceId
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> retryWorkflowInstance(Long wfInstanceId) {
         RequestBody body = new FormBody.Builder()
                 .add("wfInstanceId", wfInstanceId.toString())
@@ -503,6 +537,7 @@ public class PowerJobClient {
      * @param nodeId       node id
      * @return Standard return object
      */
+    @Override
     public ResultDTO<Void> markWorkflowNodeAsSuccess(Long wfInstanceId, Long nodeId) {
         RequestBody body = new FormBody.Builder()
                 .add("wfInstanceId", wfInstanceId.toString())
@@ -519,6 +554,7 @@ public class PowerJobClient {
      * @param wfInstanceId workflow instanceId
      * @return detail about a workflow
      */
+    @Override
     public ResultDTO<WorkflowInstanceInfoDTO> fetchWorkflowInstanceInfo(Long wfInstanceId) {
         RequestBody body = new FormBody.Builder()
                 .add("wfInstanceId", wfInstanceId.toString())

+ 3 - 0
powerjob-client/src/main/java/tech/powerjob/client/TypeStore.java

@@ -1,6 +1,7 @@
 package tech.powerjob.client;
 
 import com.alibaba.fastjson.TypeReference;
+import tech.powerjob.common.request.http.SaveJobInfoRequest;
 import tech.powerjob.common.response.*;
 
 import java.util.List;
@@ -21,6 +22,8 @@ public class TypeStore {
 
     public static final TypeReference<ResultDTO<JobInfoDTO>> JOB_RESULT_TYPE = new TypeReference<ResultDTO<JobInfoDTO>>(){};
 
+    public static final TypeReference<ResultDTO<SaveJobInfoRequest>> SAVE_JOB_INFO_REQUEST_RESULT_TYPE = new TypeReference<ResultDTO<SaveJobInfoRequest>>(){};
+
     public static final TypeReference<ResultDTO<List<JobInfoDTO>>> LIST_JOB_RESULT_TYPE = new TypeReference<ResultDTO<List<JobInfoDTO>>>(){};
 
     public static final TypeReference<ResultDTO<InstanceInfoDTO>> INSTANCE_RESULT_TYPE = new TypeReference<ResultDTO<InstanceInfoDTO>>() {};

+ 4 - 3
powerjob-client/src/test/java/tech/powerjob/client/test/ClientInitializer.java

@@ -1,7 +1,8 @@
 package tech.powerjob.client.test;
 
-import tech.powerjob.client.PowerJobClient;
 import org.junit.jupiter.api.BeforeAll;
+import tech.powerjob.client.IPowerJobClient;
+import tech.powerjob.client.PowerJobClient;
 
 /**
  * Initialize OhMyClient
@@ -11,10 +12,10 @@ import org.junit.jupiter.api.BeforeAll;
  */
 public class ClientInitializer {
 
-    protected static PowerJobClient powerJobClient;
+    protected static IPowerJobClient powerJobClient;
 
     @BeforeAll
     public static void initClient() throws Exception {
-        powerJobClient = new PowerJobClient("127.0.0.1:7700", "powerjob-agent-test", "123");
+        powerJobClient = new PowerJobClient("127.0.0.1:7700", "powerjob-worker-samples", "powerjob123");
     }
 }

+ 7 - 1
powerjob-client/src/test/java/tech/powerjob/client/test/TestClient.java

@@ -57,6 +57,12 @@ class TestClient extends ClientInitializer {
         Assertions.assertNotNull(copyJobRes);
     }
 
+    @Test
+    void testExportJob() {
+        ResultDTO<SaveJobInfoRequest> exportJobRes = powerJobClient.exportJob(JOB_ID);
+        System.out.println(JSONObject.toJSONString(exportJobRes));
+    }
+
     @Test
     void testFetchJob() {
         ResultDTO<JobInfoDTO> fetchJob = powerJobClient.fetchJob(JOB_ID);
@@ -87,7 +93,7 @@ class TestClient extends ClientInitializer {
 
     @Test
     void testRun() {
-        ResultDTO<Long> res = powerJobClient.runJob(JOB_ID);
+        ResultDTO<Long> res = powerJobClient.runJob(JOB_ID, null, 0);
         System.out.println(res);
         Assertions.assertNotNull(res);
     }

+ 1 - 1
powerjob-client/src/test/java/tech/powerjob/client/test/TestWorkflow.java

@@ -149,7 +149,7 @@ class TestWorkflow extends ClientInitializer {
 
     @Test
     void testRunWorkflow() {
-        ResultDTO<Long> res = powerJobClient.runWorkflow(WF_ID);
+        ResultDTO<Long> res = powerJobClient.runWorkflow(WF_ID, null, 0);
         System.out.println(res);
         Assertions.assertNotNull(res);
     }

+ 2 - 0
powerjob-common/src/main/java/tech/powerjob/common/OpenAPIConstant.java

@@ -20,6 +20,8 @@ public class OpenAPIConstant {
 
     public static final String SAVE_JOB = "/saveJob";
     public static final String COPY_JOB = "/copyJob";
+
+    public static final String EXPORT_JOB = "/exportJob";
     public static final String FETCH_JOB = "/fetchJob";
     public static final String FETCH_ALL_JOB = "/fetchAllJob";
     public static final String QUERY_JOB = "/queryJob";

+ 6 - 0
powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/OpenAPIController.java

@@ -69,6 +69,12 @@ public class OpenAPIController {
         return ResultDTO.success(jobService.copyJob(jobId).getId());
     }
 
+    @PostMapping(OpenAPIConstant.EXPORT_JOB)
+    public ResultDTO<SaveJobInfoRequest> exportJob(Long jobId, Long appId) {
+        checkJobIdValid(jobId, appId);
+        return ResultDTO.success(jobService.exportJob(jobId));
+    }
+
     @PostMapping(OpenAPIConstant.FETCH_JOB)
     public ResultDTO<JobInfoDTO> fetchJob(Long jobId, Long appId) {
         checkJobIdValid(jobId, appId);