From 3f9bf1c71f1d9e2941960f5f8ce42fa289cbb5c1 Mon Sep 17 00:00:00 2001 From: gaoyan Date: Thu, 23 Nov 2023 20:54:30 +0800 Subject: [PATCH] Add console log when run debug (#2566) * Optimize the process * add debug console log * formate code --- .../java/org/dinky/aop/ProcessAspect.java | 29 +++++++++++++++++-- .../org/dinky/controller/TaskController.java | 3 +- .../java/org/dinky/data/dto/DebugDTO.java | 3 ++ .../main/java/org/dinky/data/dto/TaskDTO.java | 8 +++-- .../org/dinky/data/annotations/ProcessId.java | 2 +- 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/dinky-admin/src/main/java/org/dinky/aop/ProcessAspect.java b/dinky-admin/src/main/java/org/dinky/aop/ProcessAspect.java index 677cabeb38..f52fe9804a 100644 --- a/dinky-admin/src/main/java/org/dinky/aop/ProcessAspect.java +++ b/dinky-admin/src/main/java/org/dinky/aop/ProcessAspect.java @@ -26,11 +26,13 @@ import org.dinky.data.enums.ProcessStatus; import org.dinky.data.enums.ProcessStepType; import org.dinky.data.enums.ProcessType; +import org.dinky.data.exception.DinkyException; import org.dinky.data.model.ProcessStepEntity; import org.apache.http.util.TextUtils; import java.lang.annotation.Annotation; +import java.lang.reflect.Field; import java.lang.reflect.Method; import org.aspectj.lang.ProceedingJoinPoint; @@ -41,6 +43,7 @@ import org.springframework.stereotype.Component; import cn.hutool.core.text.StrFormatter; +import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; @Aspect @@ -116,12 +119,13 @@ public Object processStepAround(ProceedingJoinPoint joinPoint, ProcessStep proce return result; } - private Object getProcessId(ProceedingJoinPoint joinPoint) { + private Object getProcessId(ProceedingJoinPoint joinPoint) throws IllegalAccessException { Object[] params = joinPoint.getArgs(); if (params.length == 0) { throw new IllegalArgumentException("Must have ProcessId params"); } + Object processIdObj = null; // Get the method, here you can convert the signature strong to MethodSignature MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); @@ -129,13 +133,32 @@ private Object getProcessId(ProceedingJoinPoint joinPoint) { Annotation[][] annotations = method.getParameterAnnotations(); for (int i = 0; i < annotations.length; i++) { Object param = params[i]; + if (param == null) continue; + // Check whether the parameters on the method have the Process Id annotation Annotation[] paramAnn = annotations[i]; for (Annotation annotation : paramAnn) { if (annotation instanceof ProcessId) { - return String.valueOf(param.hashCode()); + processIdObj = param; + break; } } + // If there is no Process Id annotation on the parameter, + // continue to find out whether there is a variable in the object with the Process Id annotation + if (processIdObj == null) { + Field[] fields = param.getClass().getDeclaredFields(); + for (Field field : fields) { + if (field.isAnnotationPresent(ProcessId.class)) { + field.setAccessible(true); + processIdObj = field.get(param); + } + } + } + } + if (ObjectUtil.isBasicType(processIdObj)) { + return processIdObj; + } else { + throw new DinkyException( + "The type of the parameter annotated with @ProcessId must be a basic type and not null"); } - throw new IllegalArgumentException("Must have ProcessId annoation params"); } } diff --git a/dinky-admin/src/main/java/org/dinky/controller/TaskController.java b/dinky-admin/src/main/java/org/dinky/controller/TaskController.java index 5824667700..540b452499 100644 --- a/dinky-admin/src/main/java/org/dinky/controller/TaskController.java +++ b/dinky-admin/src/main/java/org/dinky/controller/TaskController.java @@ -95,6 +95,7 @@ public Result submitTask(@ProcessId @RequestParam Integer id) throws required = true, dataType = "DebugDTO", paramType = "body") + @ExecuteProcess(type = ProcessType.FLINK_SUBMIT) public Result debugTask(@RequestBody DebugDTO debugDTO) throws Exception { JobResult result = taskService.debugTask(debugDTO); if (result.isSuccess()) { @@ -159,7 +160,7 @@ public Result> explainSql(@RequestBody TaskDTO taskDTO) t @PostMapping("/getJobPlan") @ApiOperation("Get Job Plan") @ExecuteProcess(type = ProcessType.FLINK_JOB_PLAN) - public Result getJobPlan(@ProcessId @RequestBody TaskDTO taskDTO) { + public Result getJobPlan(@RequestBody TaskDTO taskDTO) { ObjectNode jobPlan = null; jobPlan = taskService.getJobPlan(taskDTO); return Result.succeed(jobPlan, Status.EXECUTE_SUCCESS); diff --git a/dinky-admin/src/main/java/org/dinky/data/dto/DebugDTO.java b/dinky-admin/src/main/java/org/dinky/data/dto/DebugDTO.java index 0ae55d8e2f..a38d8cca52 100644 --- a/dinky-admin/src/main/java/org/dinky/data/dto/DebugDTO.java +++ b/dinky-admin/src/main/java/org/dinky/data/dto/DebugDTO.java @@ -19,6 +19,8 @@ package org.dinky.data.dto; +import org.dinky.data.annotations.ProcessId; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -37,6 +39,7 @@ public class DebugDTO { dataType = "Integer", example = "1", notes = "The ID of Task which is debugged") + @ProcessId private Integer id; @ApiModelProperty( diff --git a/dinky-admin/src/main/java/org/dinky/data/dto/TaskDTO.java b/dinky-admin/src/main/java/org/dinky/data/dto/TaskDTO.java index f6cb0569c4..bc95aebdd0 100644 --- a/dinky-admin/src/main/java/org/dinky/data/dto/TaskDTO.java +++ b/dinky-admin/src/main/java/org/dinky/data/dto/TaskDTO.java @@ -19,6 +19,7 @@ package org.dinky.data.dto; +import org.dinky.data.annotations.ProcessId; import org.dinky.data.model.Task; import org.dinky.data.model.ext.TaskExtConfig; import org.dinky.job.JobConfig; @@ -43,6 +44,10 @@ @ApiModel(value = "StudioExecuteDTO", description = "DTO for executing SQL queries") public class TaskDTO extends AbstractStatementDTO { + @ApiModelProperty(value = "ID", dataType = "Integer", example = "6", notes = "The identifier of the execution") + @ProcessId + private Integer id; + @ApiModelProperty(value = "Name", required = true, dataType = "String", example = "Name") private String name; @@ -209,9 +214,6 @@ public class TaskDTO extends AbstractStatementDTO { @ApiModelProperty(value = "Job Name", dataType = "String", example = "MyJob", notes = "The name of the job") private String jobName; - @ApiModelProperty(value = "ID", dataType = "Integer", example = "6", notes = "The identifier of the execution") - private Integer id; - @ApiModelProperty( value = "Max Row Number", dataType = "Integer", diff --git a/dinky-common/src/main/java/org/dinky/data/annotations/ProcessId.java b/dinky-common/src/main/java/org/dinky/data/annotations/ProcessId.java index a7d67eaf53..faa68e721e 100644 --- a/dinky-common/src/main/java/org/dinky/data/annotations/ProcessId.java +++ b/dinky-common/src/main/java/org/dinky/data/annotations/ProcessId.java @@ -25,7 +25,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target(ElementType.PARAMETER) +@Target({ElementType.PARAMETER, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface ProcessId {}