diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/LogStorage.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/LogStorage.java new file mode 100644 index 00000000..68450b8d --- /dev/null +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/LogStorage.java @@ -0,0 +1,17 @@ +package com.aizuda.easy.retry.server.common; + +import com.aizuda.easy.retry.common.log.dto.LogContentDTO; +import com.aizuda.easy.retry.common.log.enums.LogTypeEnum; +import com.aizuda.easy.retry.server.common.dto.LogMetaDTO; + +/** + * @author: xiaowoniu + * @date : 2024-03-22 + * @since : 3.2.0 + */ +public interface LogStorage { + + LogTypeEnum logType(); + + void storage(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO); +} diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/appender/EasyRetryServerLogbackAppender.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/appender/EasyRetryServerLogbackAppender.java similarity index 77% rename from easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/appender/EasyRetryServerLogbackAppender.java rename to easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/appender/EasyRetryServerLogbackAppender.java index e1f6d814..5453eed4 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/appender/EasyRetryServerLogbackAppender.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/appender/EasyRetryServerLogbackAppender.java @@ -1,6 +1,5 @@ -package com.aizuda.easy.retry.server.retry.task.support.appender; +package com.aizuda.easy.retry.server.common.appender; -import akka.actor.ActorRef; import ch.qos.logback.classic.spi.IThrowableProxy; import ch.qos.logback.classic.spi.LoggingEvent; import ch.qos.logback.classic.spi.StackTraceElementProxy; @@ -12,24 +11,20 @@ import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.common.log.constant.LogFieldConstants; import com.aizuda.easy.retry.common.log.dto.LogContentDTO; -import com.aizuda.easy.retry.common.log.dto.TaskLogFieldDTO; -import com.aizuda.easy.retry.server.common.akka.ActorGenerator; -import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO; -import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO; -import com.google.common.collect.Lists; +import com.aizuda.easy.retry.server.common.LogStorage; +import com.aizuda.easy.retry.server.common.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.common.log.LogStorageFactory; import org.slf4j.MDC; -import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; /** - * @author xiaowoniu + * @author wodeyangzipingpingwuqi * @date 2023-12-27 - * @since 3.2.0 + * @since 2.6.0 */ public class EasyRetryServerLogbackAppender extends UnsynchronizedAppenderBase { @@ -90,18 +85,11 @@ public class EasyRetryServerLogbackAppender extends UnsynchronizedAppenderBas * @param logMetaDTO 日志元数据 */ private void saveLog(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO) { - RetryTaskLogDTO jobLogDTO = new RetryTaskLogDTO(); - Map messageMap = logContentDTO.getFieldList() - .stream() - .filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue())) - .collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue)); - jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap))); - jobLogDTO.setGroupName(logMetaDTO.getGroupName()); - jobLogDTO.setNamespaceId(logMetaDTO.getNamespaceId()); - jobLogDTO.setUniqueId(logMetaDTO.getUniqueId()); - jobLogDTO.setRealTime(logMetaDTO.getTimestamp()); - ActorRef actorRef = ActorGenerator.jobLogActor(); - actorRef.tell(jobLogDTO, actorRef); + + LogStorage logStorage = LogStorageFactory.get(logMetaDTO.getLogType()); + if (Objects.nonNull(logStorage)) { + logStorage.storage(logContentDTO, logMetaDTO); + } } private String getThrowableField(LoggingEvent event) { diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/LogMetaDTO.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/dto/LogMetaDTO.java similarity index 63% rename from easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/LogMetaDTO.java rename to easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/dto/LogMetaDTO.java index 55e5c982..327bcf8f 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/LogMetaDTO.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/dto/LogMetaDTO.java @@ -1,7 +1,7 @@ -package com.aizuda.easy.retry.server.retry.task.dto; +package com.aizuda.easy.retry.server.common.dto; import com.aizuda.easy.retry.common.core.util.JsonUtil; -import lombok.Builder; +import com.aizuda.easy.retry.common.log.enums.LogTypeEnum; import lombok.Data; /** @@ -10,7 +10,6 @@ import lombok.Data; * @since 3.2.0 */ @Data -@Builder public class LogMetaDTO { /** @@ -23,18 +22,13 @@ public class LogMetaDTO { */ private String groupName; - /** - * 组名称 - */ - private String uniqueId; - /** * 时间 */ private Long timestamp; - @Override - public String toString() { - return JsonUtil.toJsonString(this); - } + /** + * 日志类型 + */ + private LogTypeEnum logType; } diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/log/LogStorageFactory.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/log/LogStorageFactory.java new file mode 100644 index 00000000..c8b3496a --- /dev/null +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/log/LogStorageFactory.java @@ -0,0 +1,25 @@ +package com.aizuda.easy.retry.server.common.log; + +import com.aizuda.easy.retry.common.log.enums.LogTypeEnum; +import com.aizuda.easy.retry.server.common.LogStorage; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author: xiaowoniu + * @date : 2024-03-22 + * @since : 3.2.0 + */ +public final class LogStorageFactory { + + private static final Map LOG_STORAGE = new HashMap<>(); + + public static void register(LogTypeEnum logType, LogStorage logStorage) { + LOG_STORAGE.put(logType, logStorage); + } + + public static LogStorage get(LogTypeEnum logType) { + return LOG_STORAGE.get(logType); + } +} diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/dto/LogMetaDTO.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/dto/JobLogMetaDTO.java similarity index 62% rename from easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/dto/LogMetaDTO.java rename to easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/dto/JobLogMetaDTO.java index 815cf48d..c5ede984 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/dto/LogMetaDTO.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/dto/JobLogMetaDTO.java @@ -1,25 +1,23 @@ package com.aizuda.easy.retry.server.job.task.dto; import com.aizuda.easy.retry.common.core.util.JsonUtil; +import com.aizuda.easy.retry.common.log.enums.LogTypeEnum; +import com.aizuda.easy.retry.server.common.dto.LogMetaDTO; import lombok.Data; +import lombok.EqualsAndHashCode; /** * @author xiaowoniu * @date 2024-01-10 22:56:33 * @since 2.6.0 */ +@EqualsAndHashCode(callSuper = true) @Data -public class LogMetaDTO { +public class JobLogMetaDTO extends LogMetaDTO { - /** - * 命名空间 - */ - private String namespaceId; - - /** - * 组名称 - */ - private String groupName; + public JobLogMetaDTO () { + setLogType(LogTypeEnum.JOB); + } /** * 任务信息id @@ -36,10 +34,6 @@ public class LogMetaDTO { */ private Long taskId; - /** - * 时间 - */ - private Long timestamp; @Override public String toString() { diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/JobTaskConverter.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/JobTaskConverter.java index 56829d35..b2216d02 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/JobTaskConverter.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/JobTaskConverter.java @@ -2,6 +2,7 @@ package com.aizuda.easy.retry.server.job.task.support; import com.aizuda.easy.retry.client.model.request.DispatchJobRequest; import com.aizuda.easy.retry.client.model.request.DispatchJobResultRequest; +import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO; import com.aizuda.easy.retry.server.job.task.dto.*; import com.aizuda.easy.retry.server.job.task.support.block.job.BlockStrategyContext; import com.aizuda.easy.retry.server.job.task.support.executor.workflow.WorkflowExecutorContext; @@ -77,7 +78,7 @@ public interface JobTaskConverter { JobLogMessage toJobLogMessage(LogTaskDTO logTaskDTO); - LogMetaDTO toJobLogDTO(BaseDTO baseDTO); + JobLogMetaDTO toJobLogDTO(BaseDTO baseDTO); ClientCallbackContext toClientCallbackContext(DispatchJobResultRequest request); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/appender/EasyRetryServerLogbackAppender.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/appender/EasyRetryServerLogbackAppender.java deleted file mode 100644 index 3a2a7a21..00000000 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/appender/EasyRetryServerLogbackAppender.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.aizuda.easy.retry.server.job.task.support.appender; - -import akka.actor.ActorRef; -import ch.qos.logback.classic.spi.IThrowableProxy; -import ch.qos.logback.classic.spi.LoggingEvent; -import ch.qos.logback.classic.spi.StackTraceElementProxy; -import ch.qos.logback.classic.spi.ThrowableProxyUtil; -import ch.qos.logback.core.CoreConstants; -import ch.qos.logback.core.UnsynchronizedAppenderBase; -import cn.hutool.core.util.StrUtil; -import com.aizuda.easy.retry.common.log.constant.LogFieldConstants; -import com.aizuda.easy.retry.common.log.dto.LogContentDTO; -import com.aizuda.easy.retry.common.log.dto.TaskLogFieldDTO; -import com.aizuda.easy.retry.common.core.util.JsonUtil; -import com.aizuda.easy.retry.common.log.EasyRetryLog; -import com.aizuda.easy.retry.server.common.akka.ActorGenerator; -import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO; -import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; -import com.google.common.collect.Lists; -import org.slf4j.MDC; - -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -/** - * @author wodeyangzipingpingwuqi - * @date 2023-12-27 - * @since 2.6.0 - */ -public class EasyRetryServerLogbackAppender extends UnsynchronizedAppenderBase { - - @Override - protected void append(E eventObject) { - - // Not job context - if (!(eventObject instanceof LoggingEvent) || Objects.isNull( - MDC.getMDCAdapter().get(LogFieldConstants.MDC_REMOTE))) { - return; - } - - MDC.getMDCAdapter().remove(LogFieldConstants.MDC_REMOTE); - // Prepare processing - ((LoggingEvent) eventObject).prepareForDeferredProcessing(); - LoggingEvent event = (LoggingEvent) eventObject; - - LogContentDTO logContentDTO = new LogContentDTO(); - logContentDTO.addLevelField(event.getLevel().levelStr); - logContentDTO.addThreadField(event.getThreadName()); - logContentDTO.addLocationField(getLocationField(event)); - logContentDTO.addThrowableField(getThrowableField(event)); - - LogMetaDTO logMetaDTO = null; - try { - String patternString = "<\\|>(.*?)<\\|>"; - Pattern pattern = Pattern.compile(patternString); - Matcher matcher = pattern.matcher(event.getFormattedMessage()); - while (matcher.find()) { - String extractedData = matcher.group(1); - if (StrUtil.isBlank(extractedData)) { - continue; - } - - logMetaDTO = JsonUtil.parseObject(extractedData, LogMetaDTO.class); - String message = event.getFormattedMessage().replaceFirst(patternString, StrUtil.EMPTY); - logContentDTO.addMessageField(message); - logContentDTO.addTimeStamp(Optional.ofNullable(logMetaDTO.getTimestamp()).orElse(event.getTimeStamp())); - break; - } - - } catch (Exception e) { - EasyRetryLog.LOCAL.error("日志解析失败. msg:[{}]", event.getFormattedMessage(), e); - } - - if (Objects.isNull(logMetaDTO)) { - return; - } - - // 保存执行的日志 - saveLog(logContentDTO, logMetaDTO); - } - - /** - * 保存日志 - * - * @param logContentDTO 日志内容 - * @param logMetaDTO 日志元数据 - */ - private void saveLog(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO) { - JobLogDTO jobLogDTO = new JobLogDTO(); - Map messageMap = logContentDTO.getFieldList() - .stream() - .filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue())) - .collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue)); - jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap))); - jobLogDTO.setTaskId(logMetaDTO.getTaskId()); - jobLogDTO.setJobId(logMetaDTO.getJobId()); - jobLogDTO.setGroupName(logMetaDTO.getGroupName()); - jobLogDTO.setNamespaceId(logMetaDTO.getNamespaceId()); - jobLogDTO.setTaskBatchId(logMetaDTO.getTaskBatchId()); - jobLogDTO.setRealTime(logContentDTO.getTimeStamp()); - ActorRef actorRef = ActorGenerator.jobLogActor(); - actorRef.tell(jobLogDTO, actorRef); - } - - private String getThrowableField(LoggingEvent event) { - IThrowableProxy iThrowableProxy = event.getThrowableProxy(); - if (iThrowableProxy != null) { - String throwable = getExceptionInfo(iThrowableProxy); - throwable += formatThrowable(event.getThrowableProxy().getStackTraceElementProxyArray()); - return throwable; - } - return null; - } - - private String getLocationField(LoggingEvent event) { - StackTraceElement[] caller = event.getCallerData(); - if (caller != null && caller.length > 0) { - return caller[0].toString(); - } - return null; - } - - private String formatThrowable(StackTraceElementProxy[] stackTraceElementProxyArray) { - StringBuilder builder = new StringBuilder(); - for (StackTraceElementProxy step : stackTraceElementProxyArray) { - builder.append(CoreConstants.LINE_SEPARATOR); - String string = step.toString(); - builder.append(CoreConstants.TAB).append(string); - ThrowableProxyUtil.subjoinPackagingData(builder, step); - } - return builder.toString(); - } - - private String getExceptionInfo(IThrowableProxy iThrowableProxy) { - String s = iThrowableProxy.getClassName(); - String message = iThrowableProxy.getMessage(); - return (message != null) ? (s + ": " + message) : s; - } -} diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/AbstractClientCallbackHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/AbstractClientCallbackHandler.java index 6c94a60a..eb32ee39 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/AbstractClientCallbackHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/AbstractClientCallbackHandler.java @@ -3,10 +3,8 @@ package com.aizuda.easy.retry.server.job.task.support.callback; import akka.actor.ActorRef; import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum; -import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.util.ClientInfoUtils; -import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; import com.aizuda.easy.retry.server.job.task.dto.RealJobExecutorDTO; import com.aizuda.easy.retry.server.job.task.enums.JobRetrySceneEnum; import com.aizuda.easy.retry.server.job.task.support.ClientCallbackHandler; @@ -16,7 +14,6 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMappe import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ClusterClientCallbackHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ClusterClientCallbackHandler.java index 10f0cd2c..9713a95b 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ClusterClientCallbackHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ClusterClientCallbackHandler.java @@ -1,31 +1,18 @@ package com.aizuda.easy.retry.server.job.task.support.callback; import akka.actor.ActorRef; -import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum; import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum; -import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; -import com.aizuda.easy.retry.server.common.cache.CacheRegisterTable; import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo; import com.aizuda.easy.retry.server.common.handler.ClientNodeAllocateHandler; import com.aizuda.easy.retry.server.common.util.ClientInfoUtils; import com.aizuda.easy.retry.server.job.task.dto.JobExecutorResultDTO; -import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; -import com.aizuda.easy.retry.server.job.task.dto.RealJobExecutorDTO; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; -import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper; -import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; -import com.aizuda.easy.retry.template.datasource.persistence.po.Job; -import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Objects; -import java.util.Set; /** * @author www.byteblogs.com diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorResultActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorResultActor.java index 8e5fcb23..e99c76ff 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorResultActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorResultActor.java @@ -1,22 +1,16 @@ package com.aizuda.easy.retry.server.job.task.support.dispatch; import akka.actor.AbstractActor; -import akka.actor.ActorRef; import cn.hutool.core.lang.Assert; import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum; import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.common.core.util.JsonUtil; -import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; -import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.job.task.dto.CompleteJobBatchDTO; -import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; import com.aizuda.easy.retry.server.job.task.dto.JobExecutorResultDTO; -import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO; import com.aizuda.easy.retry.server.job.task.support.JobTaskStopHandler; -import com.aizuda.easy.retry.server.job.task.support.LockExecutor; import com.aizuda.easy.retry.server.job.task.support.handler.DistributedLockHandler; import com.aizuda.easy.retry.server.job.task.support.handler.JobTaskBatchHandler; import com.aizuda.easy.retry.server.job.task.support.stop.JobTaskStopFactory; @@ -29,13 +23,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.TransactionCallbackWithoutResult; -import org.springframework.transaction.support.TransactionTemplate; import java.text.MessageFormat; import java.time.Duration; -import java.time.LocalDateTime; import java.util.Objects; /** diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/job/RequestClientActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/job/RequestClientActor.java index fd4c77c9..cf530c73 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/job/RequestClientActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/job/RequestClientActor.java @@ -4,12 +4,10 @@ import akka.actor.AbstractActor; import akka.actor.ActorRef; import com.aizuda.easy.retry.client.model.ExecuteResult; import com.aizuda.easy.retry.client.model.request.DispatchJobRequest; -import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum; import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.common.core.model.Result; -import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.cache.CacheRegisterTable; import com.aizuda.easy.retry.server.common.client.RequestBuilder; @@ -17,8 +15,7 @@ import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo; import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.job.task.client.JobRpcClient; import com.aizuda.easy.retry.server.job.task.dto.JobExecutorResultDTO; -import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO; -import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO; import com.aizuda.easy.retry.server.job.task.dto.RealJobExecutorDTO; import com.aizuda.easy.retry.server.job.task.support.ClientCallbackHandler; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; @@ -65,13 +62,14 @@ public class RequestClientActor extends AbstractActor { realJobExecutorDTO.getClientId()); if (Objects.isNull(registerNodeInfo)) { taskExecuteFailure(realJobExecutorDTO, "客户端不存在"); - LogMetaDTO logMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO); - logMetaDTO.setTimestamp(nowMilli); + JobLogMetaDTO jobLogMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO); + jobLogMetaDTO.setTimestamp(nowMilli); if (realJobExecutorDTO.isRetry()) { EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败执行重试. 失败原因: 无可执行的客户端. 重试次数:[{}]. <|>{}<|>", - realJobExecutorDTO.getTaskId(), realJobExecutorDTO.getRetryCount(), logMetaDTO); + realJobExecutorDTO.getTaskId(), realJobExecutorDTO.getRetryCount(), jobLogMetaDTO); } else { - EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败. 失败原因: 无可执行的客户端 <|>{}<|>", realJobExecutorDTO.getTaskId(), logMetaDTO); + EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败. 失败原因: 无可执行的客户端 <|>{}<|>", realJobExecutorDTO.getTaskId(), + jobLogMetaDTO); } return; } @@ -105,13 +103,14 @@ public class RequestClientActor extends AbstractActor { throwable = re.getUndeclaredThrowable(); } - LogMetaDTO logMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO); - logMetaDTO.setTimestamp(nowMilli); + JobLogMetaDTO jobLogMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO); + jobLogMetaDTO.setTimestamp(nowMilli); if (realJobExecutorDTO.isRetry()) { - EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败执行重试 重试次数:[{}]. <|>{}<|>", logMetaDTO.getTaskId(), - realJobExecutorDTO.getRetryCount(), logMetaDTO, throwable); + EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败执行重试 重试次数:[{}]. <|>{}<|>", jobLogMetaDTO.getTaskId(), + realJobExecutorDTO.getRetryCount(), jobLogMetaDTO, throwable); } else { - EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败. <|>{}<|>", logMetaDTO.getTaskId(), logMetaDTO, throwable); + EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败. <|>{}<|>", jobLogMetaDTO.getTaskId(), + jobLogMetaDTO, throwable); } taskExecuteFailure(realJobExecutorDTO, throwable.getMessage()); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/CallbackWorkflowExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/CallbackWorkflowExecutor.java index a29be1f8..0f01222b 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/CallbackWorkflowExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/CallbackWorkflowExecutor.java @@ -12,10 +12,8 @@ import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.server.common.client.RequestInterceptor; import com.aizuda.easy.retry.server.common.dto.CallbackConfig; import com.aizuda.easy.retry.server.common.enums.ContentTypeEnum; -import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO; import com.aizuda.easy.retry.server.job.task.support.WorkflowTaskConverter; -import com.aizuda.easy.retry.server.job.task.support.generator.batch.JobTaskBatchGenerator; -import com.aizuda.easy.retry.server.job.task.support.generator.batch.JobTaskBatchGeneratorContext; import com.aizuda.easy.retry.server.model.dto.CallbackParamsDTO; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; @@ -166,22 +164,22 @@ public class CallbackWorkflowExecutor extends AbstractWorkflowExecutor { JobTask jobTask = generateJobTask(context, jobTaskBatch); - LogMetaDTO logMetaDTO = new LogMetaDTO(); - logMetaDTO.setNamespaceId(context.getNamespaceId()); - logMetaDTO.setGroupName(context.getGroupName()); - logMetaDTO.setTaskBatchId(jobTaskBatch.getId()); - logMetaDTO.setJobId(SystemConstants.CALLBACK_JOB_ID); - logMetaDTO.setTaskId(jobTask.getId()); + JobLogMetaDTO jobLogMetaDTO = new JobLogMetaDTO(); + jobLogMetaDTO.setNamespaceId(context.getNamespaceId()); + jobLogMetaDTO.setGroupName(context.getGroupName()); + jobLogMetaDTO.setTaskBatchId(jobTaskBatch.getId()); + jobLogMetaDTO.setJobId(SystemConstants.CALLBACK_JOB_ID); + jobLogMetaDTO.setTaskId(jobTask.getId()); if (jobTaskBatch.getTaskBatchStatus() == JobTaskStatusEnum.SUCCESS.getStatus()) { EasyRetryLog.REMOTE.info("节点[{}]回调成功.\n回调参数:{} \n回调结果:[{}] <|>{}<|>", - context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), logMetaDTO); + context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), jobLogMetaDTO); } else if (jobTaskBatch.getTaskBatchStatus() == JobTaskStatusEnum.CANCEL.getStatus()) { EasyRetryLog.REMOTE.warn("节点[{}]取消回调. 取消原因: 任务状态已关闭 <|>{}<|>", - context.getWorkflowNodeId(), logMetaDTO); + context.getWorkflowNodeId(), jobLogMetaDTO); } else { EasyRetryLog.REMOTE.error("节点[{}]回调失败.\n失败原因:{} <|>{}<|>", context.getWorkflowNodeId(), - context.getLogMessage(), logMetaDTO); + context.getLogMessage(), jobLogMetaDTO); } } } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/DecisionWorkflowExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/DecisionWorkflowExecutor.java index d81549a3..f085150a 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/DecisionWorkflowExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/DecisionWorkflowExecutor.java @@ -12,7 +12,7 @@ import com.aizuda.easy.retry.server.common.dto.DecisionConfig; import com.aizuda.easy.retry.server.common.enums.ExpressionTypeEnum; import com.aizuda.easy.retry.server.common.enums.LogicalConditionEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; -import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO; import com.aizuda.easy.retry.server.job.task.support.expression.ExpressionInvocationHandler; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; @@ -143,19 +143,19 @@ public class DecisionWorkflowExecutor extends AbstractWorkflowExecutor { JobTask jobTask = generateJobTask(context, jobTaskBatch); - LogMetaDTO logMetaDTO = new LogMetaDTO(); - logMetaDTO.setNamespaceId(context.getNamespaceId()); - logMetaDTO.setGroupName(context.getGroupName()); - logMetaDTO.setTaskBatchId(jobTaskBatch.getId()); - logMetaDTO.setJobId(SystemConstants.DECISION_JOB_ID); - logMetaDTO.setTaskId(jobTask.getId()); + JobLogMetaDTO jobLogMetaDTO = new JobLogMetaDTO(); + jobLogMetaDTO.setNamespaceId(context.getNamespaceId()); + jobLogMetaDTO.setGroupName(context.getGroupName()); + jobLogMetaDTO.setTaskBatchId(jobTaskBatch.getId()); + jobLogMetaDTO.setJobId(SystemConstants.DECISION_JOB_ID); + jobLogMetaDTO.setTaskId(jobTask.getId()); if (jobTaskBatch.getTaskBatchStatus() == JobTaskStatusEnum.SUCCESS.getStatus() || JobOperationReasonEnum.WORKFLOW_NODE_NO_REQUIRED.getReason() == context.getOperationReason()) { EasyRetryLog.REMOTE.info("节点Id:[{}] 决策完成. 上下文:[{}] 决策结果:[{}] <|>{}<|>", - context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), logMetaDTO); + context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), jobLogMetaDTO); } else { EasyRetryLog.REMOTE.error("节点Id:[{}] 决策失败. 上下文:[{}] 失败原因:[{}] <|>{}<|>", - context.getWorkflowNodeId(), context.getTaskResult(), context.getLogMessage(), logMetaDTO); + context.getWorkflowNodeId(), context.getTaskResult(), context.getLogMessage(), jobLogMetaDTO); } } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/JobTaskWorkflowExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/JobTaskWorkflowExecutor.java index c4ddca6e..3a41bd51 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/JobTaskWorkflowExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/JobTaskWorkflowExecutor.java @@ -1,7 +1,6 @@ package com.aizuda.easy.retry.server.job.task.support.executor.workflow; import akka.actor.ActorRef; -import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.enums.JobOperationReasonEnum; import com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum; @@ -9,14 +8,10 @@ import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.common.core.enums.WorkflowNodeTypeEnum; import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; -import com.aizuda.easy.retry.server.common.enums.JobTaskExecutorSceneEnum; import com.aizuda.easy.retry.server.common.util.DateUtils; +import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO; import com.aizuda.easy.retry.server.job.task.dto.JobTaskPrepareDTO; -import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; -import com.aizuda.easy.retry.server.job.task.support.WorkflowTaskConverter; -import com.aizuda.easy.retry.server.job.task.support.generator.batch.JobTaskBatchGenerator; -import com.aizuda.easy.retry.server.job.task.support.generator.batch.JobTaskBatchGeneratorContext; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTaskBatch; import lombok.RequiredArgsConstructor; @@ -52,15 +47,15 @@ public class JobTaskWorkflowExecutor extends AbstractWorkflowExecutor { JobTaskBatch jobTaskBatch = generateJobTaskBatch(context); JobTask jobTask = generateJobTask(context, jobTaskBatch); - LogMetaDTO logMetaDTO = new LogMetaDTO(); - logMetaDTO.setNamespaceId(context.getNamespaceId()); - logMetaDTO.setGroupName(context.getGroupName()); - logMetaDTO.setTaskBatchId(jobTaskBatch.getId()); - logMetaDTO.setJobId(context.getJobId()); - logMetaDTO.setTaskId(jobTask.getId()); + JobLogMetaDTO jobLogMetaDTO = new JobLogMetaDTO(); + jobLogMetaDTO.setNamespaceId(context.getNamespaceId()); + jobLogMetaDTO.setGroupName(context.getGroupName()); + jobLogMetaDTO.setTaskBatchId(jobTaskBatch.getId()); + jobLogMetaDTO.setJobId(context.getJobId()); + jobLogMetaDTO.setTaskId(jobTask.getId()); EasyRetryLog.REMOTE.warn("节点[{}]已取消任务执行. 取消原因: 任务已关闭. <|>{}<|>", - context.getWorkflowNodeId(), logMetaDTO); + context.getWorkflowNodeId(), jobLogMetaDTO); } @Override diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/log/JobLogStorage.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/log/JobLogStorage.java new file mode 100644 index 00000000..de602dcc --- /dev/null +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/log/JobLogStorage.java @@ -0,0 +1,59 @@ +package com.aizuda.easy.retry.server.job.task.support.log; + +import akka.actor.ActorRef; +import com.aizuda.easy.retry.common.core.util.JsonUtil; +import com.aizuda.easy.retry.common.log.dto.LogContentDTO; +import com.aizuda.easy.retry.common.log.dto.TaskLogFieldDTO; +import com.aizuda.easy.retry.common.log.enums.LogTypeEnum; +import com.aizuda.easy.retry.server.common.LogStorage; +import com.aizuda.easy.retry.server.common.akka.ActorGenerator; +import com.aizuda.easy.retry.server.common.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.common.log.LogStorageFactory; +import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO; +import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO; +import com.google.common.collect.Lists; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author: xiaowoniu + * @date : 2024-03-22 + * @since : 3.2.0 + */ +@Component +public class JobLogStorage implements LogStorage, InitializingBean { + + @Override + public LogTypeEnum logType() { + return LogTypeEnum.JOB; + } + + @Override + public void storage(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO) { + + JobLogMetaDTO jobLogMetaDTO = (JobLogMetaDTO) logMetaDTO; + JobLogDTO jobLogDTO = new JobLogDTO(); + Map messageMap = logContentDTO.getFieldList() + .stream() + .filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue())) + .collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue)); + jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap))); + jobLogDTO.setTaskId(jobLogMetaDTO.getTaskId()); + jobLogDTO.setJobId(jobLogMetaDTO.getJobId()); + jobLogDTO.setGroupName(logMetaDTO.getGroupName()); + jobLogDTO.setNamespaceId(logMetaDTO.getNamespaceId()); + jobLogDTO.setTaskBatchId(jobLogMetaDTO.getTaskBatchId()); + jobLogDTO.setRealTime(logContentDTO.getTimeStamp()); + ActorRef actorRef = ActorGenerator.jobLogActor(); + actorRef.tell(jobLogDTO, actorRef); + } + + @Override + public void afterPropertiesSet() throws Exception { + LogStorageFactory.register(logType(), this); + } +} diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/RetryLogMetaDTO.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/RetryLogMetaDTO.java new file mode 100644 index 00000000..673f4e66 --- /dev/null +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/RetryLogMetaDTO.java @@ -0,0 +1,33 @@ +package com.aizuda.easy.retry.server.retry.task.dto; + +import com.aizuda.easy.retry.common.core.util.JsonUtil; +import com.aizuda.easy.retry.common.log.enums.LogTypeEnum; +import com.aizuda.easy.retry.server.common.dto.LogMetaDTO; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author xiaowoniu + * @date 2024-01-10 22:56:33 + * @since 3.2.0 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Builder +public class RetryLogMetaDTO extends LogMetaDTO { + + public RetryLogMetaDTO () { + setLogType(LogTypeEnum.RETRY); + } + + /** + * 组名称 + */ + private String uniqueId; + + @Override + public String toString() { + return JsonUtil.toJsonString(this); + } +} diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryTaskConverter.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryTaskConverter.java index 8db40e77..f0534157 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryTaskConverter.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryTaskConverter.java @@ -2,7 +2,7 @@ package com.aizuda.easy.retry.server.retry.task.support; import com.aizuda.easy.retry.server.model.dto.RetryLogTaskDTO; import com.aizuda.easy.retry.server.model.dto.RetryTaskDTO; -import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO; import com.aizuda.easy.retry.server.retry.task.dto.NotifyConfigPartitionTask; import com.aizuda.easy.retry.server.retry.task.dto.RetryPartitionTask; import com.aizuda.easy.retry.server.retry.task.generator.task.TaskContext; @@ -51,6 +51,6 @@ public interface RetryTaskConverter { RetryTaskLogMessage toRetryTaskLogMessage(RetryLogTaskDTO retryLogTaskDTO); - LogMetaDTO toLogMetaDTO(RetryTask retryTask); + RetryLogMetaDTO toLogMetaDTO(RetryTask retryTask); } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java index 2b2be05d..a7645ee9 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java @@ -1,26 +1,21 @@ package com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.exec; import akka.actor.AbstractActor; -import akka.actor.ActorRef; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.client.model.RetryCallbackDTO; import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.common.core.model.Result; -import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.client.RequestBuilder; import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; -import com.aizuda.easy.retry.server.common.util.ClientInfoUtils; import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.retry.task.client.RetryRpcClient; -import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO; import com.aizuda.easy.retry.server.retry.task.support.RetryTaskConverter; -import com.aizuda.easy.retry.server.retry.task.support.RetryTaskLogConverter; import com.aizuda.easy.retry.server.retry.task.support.context.CallbackRetryContext; -import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO; import com.aizuda.easy.retry.server.retry.task.support.handler.CallbackRetryTaskHandler; import com.aizuda.easy.retry.server.retry.task.support.retry.RetryExecutor; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; @@ -28,14 +23,12 @@ import com.aizuda.easy.retry.template.datasource.access.TaskAccess; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import java.time.LocalDateTime; import java.util.Objects; import java.util.concurrent.Callable; @@ -94,9 +87,9 @@ public class ExecCallbackUnitActor extends AbstractActor { } } catch (Exception e) { - LogMetaDTO logMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask); - logMetaDTO.setTimestamp(DateUtils.toNowMilli()); - EasyRetryLog.REMOTE.error("请求客户端异常. <|>{}<|>", retryTask.getUniqueId(), logMetaDTO, e);// retryTaskLog.setMessage(StringUtils.isBlank(e.getMessage()) ? StrUtil.EMPTY : e.getMessage()); + RetryLogMetaDTO retryLogMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask); + retryLogMetaDTO.setTimestamp(DateUtils.toNowMilli()); + EasyRetryLog.REMOTE.error("请求客户端异常. <|>{}<|>", retryTask.getUniqueId(), retryLogMetaDTO, e);// retryTaskLog.setMessage(StringUtils.isBlank(e.getMessage()) ? StrUtil.EMPTY : e.getMessage()); } finally { // ActorRef actorRef = ActorGenerator.logActor(); diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecUnitActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecUnitActor.java index d3058a91..4cd01950 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecUnitActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecUnitActor.java @@ -1,7 +1,6 @@ package com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.exec; import akka.actor.AbstractActor; -import akka.actor.ActorRef; import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.client.model.DispatchRetryDTO; import com.aizuda.easy.retry.client.model.DispatchRetryResultDTO; @@ -14,14 +13,11 @@ import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.client.RequestBuilder; import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo; -import com.aizuda.easy.retry.server.common.util.ClientInfoUtils; import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.retry.task.client.RetryRpcClient; -import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO; import com.aizuda.easy.retry.server.retry.task.support.RetryTaskConverter; -import com.aizuda.easy.retry.server.retry.task.support.RetryTaskLogConverter; import com.aizuda.easy.retry.server.retry.task.support.context.MaxAttemptsPersistenceRetryContext; -import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO; import com.aizuda.easy.retry.server.retry.task.support.retry.RetryExecutor; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; @@ -30,7 +26,6 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import java.time.LocalDateTime; import java.util.Objects; import java.util.concurrent.Callable; @@ -105,9 +100,9 @@ public class ExecUnitActor extends AbstractActor { } } catch (Exception e) { - LogMetaDTO logMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask); - logMetaDTO.setTimestamp(DateUtils.toNowMilli()); - EasyRetryLog.REMOTE.error("请求客户端异常. <|>{}<|>", retryTask.getUniqueId(), logMetaDTO, e); + RetryLogMetaDTO retryLogMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask); + retryLogMetaDTO.setTimestamp(DateUtils.toNowMilli()); + EasyRetryLog.REMOTE.error("请求客户端异常. <|>{}<|>", retryTask.getUniqueId(), retryLogMetaDTO, e); } finally { // ActorRef actorRef = ActorGenerator.logActor(); diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FailureActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FailureActor.java index 4b2faf17..1a08ec1b 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FailureActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FailureActor.java @@ -1,7 +1,6 @@ package com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.result; import akka.actor.AbstractActor; -import akka.actor.ActorRef; import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Pair; import com.aizuda.easy.retry.common.core.enums.RetryStatusEnum; @@ -11,9 +10,6 @@ import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.config.SystemProperties; import com.aizuda.easy.retry.server.common.enums.SyetemTaskTypeEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; -import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO; -import com.aizuda.easy.retry.server.retry.task.support.RetryTaskLogConverter; -import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO; import com.aizuda.easy.retry.server.retry.task.support.event.RetryTaskFailMoreThresholdAlarmEvent; import com.aizuda.easy.retry.server.retry.task.support.handler.CallbackRetryTaskHandler; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/AbstractTaskExecutor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/AbstractTaskExecutor.java index d311a383..4f208f39 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/AbstractTaskExecutor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/AbstractTaskExecutor.java @@ -3,15 +3,13 @@ package com.aizuda.easy.retry.server.retry.task.support.dispatch.task; import akka.actor.ActorRef; import cn.hutool.core.lang.Pair; import com.aizuda.easy.retry.common.log.EasyRetryLog; -import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.config.SystemProperties; import com.aizuda.easy.retry.server.common.handler.ClientNodeAllocateHandler; import com.aizuda.easy.retry.server.common.IdempotentStrategy; import com.aizuda.easy.retry.server.common.util.DateUtils; -import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO; import com.aizuda.easy.retry.server.retry.task.support.RetryContext; import com.aizuda.easy.retry.server.retry.task.support.RetryTaskConverter; -import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO; import com.aizuda.easy.retry.server.retry.task.support.retry.RetryExecutor; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; @@ -21,8 +19,6 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import java.time.LocalDateTime; - /** * * @@ -78,9 +74,9 @@ public abstract class AbstractTaskExecutor implements TaskExecutor, Initializing // retryTaskLog.setTriggerTime(LocalDateTime.now()); // ActorRef actorRef = ActorGenerator.logActor(); - LogMetaDTO logMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask); - logMetaDTO.setTimestamp(DateUtils.toNowMilli()); - EasyRetryLog.REMOTE.error("触发条件不满足 原因: [{}] <|>{}<|>", pair.getValue().toString(), logMetaDTO); + RetryLogMetaDTO retryLogMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask); + retryLogMetaDTO.setTimestamp(DateUtils.toNowMilli()); + EasyRetryLog.REMOTE.error("触发条件不满足 原因: [{}] <|>{}<|>", pair.getValue().toString(), retryLogMetaDTO); return false; diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/log/RetryLogStorage.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/log/RetryLogStorage.java new file mode 100644 index 00000000..130c114f --- /dev/null +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/log/RetryLogStorage.java @@ -0,0 +1,56 @@ +package com.aizuda.easy.retry.server.retry.task.support.log; + +import akka.actor.ActorRef; +import com.aizuda.easy.retry.common.core.util.JsonUtil; +import com.aizuda.easy.retry.common.log.dto.LogContentDTO; +import com.aizuda.easy.retry.common.log.dto.TaskLogFieldDTO; +import com.aizuda.easy.retry.common.log.enums.LogTypeEnum; +import com.aizuda.easy.retry.server.common.LogStorage; +import com.aizuda.easy.retry.server.common.akka.ActorGenerator; +import com.aizuda.easy.retry.server.common.dto.LogMetaDTO; +import com.aizuda.easy.retry.server.common.log.LogStorageFactory; +import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO; +import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO; +import com.google.common.collect.Lists; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author: xiaowoniu + * @date : 2024-03-22 + * @since : 3.2.0 + */ +@Component +public class RetryLogStorage implements LogStorage, InitializingBean { + + @Override + public LogTypeEnum logType() { + return LogTypeEnum.JOB; + } + + @Override + public void storage(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO) { + RetryLogMetaDTO retryLogMetaDTO = (RetryLogMetaDTO) logMetaDTO; + RetryTaskLogDTO jobLogDTO = new RetryTaskLogDTO(); + Map messageMap = logContentDTO.getFieldList() + .stream() + .filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue())) + .collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue)); + jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap))); + jobLogDTO.setGroupName(retryLogMetaDTO.getGroupName()); + jobLogDTO.setNamespaceId(retryLogMetaDTO.getNamespaceId()); + jobLogDTO.setUniqueId(retryLogMetaDTO.getUniqueId()); + jobLogDTO.setRealTime(retryLogMetaDTO.getTimestamp()); + ActorRef actorRef = ActorGenerator.jobLogActor(); + actorRef.tell(jobLogDTO, actorRef); + } + + @Override + public void afterPropertiesSet() throws Exception { + LogStorageFactory.register(logType(), this); + } +} diff --git a/easy-retry-server/easy-retry-server-starter/src/main/resources/logback-boot.xml b/easy-retry-server/easy-retry-server-starter/src/main/resources/logback-boot.xml index 58d30e7e..8e2ca00a 100644 --- a/easy-retry-server/easy-retry-server-starter/src/main/resources/logback-boot.xml +++ b/easy-retry-server/easy-retry-server-starter/src/main/resources/logback-boot.xml @@ -79,9 +79,7 @@ - - - + @@ -91,6 +89,5 @@ -