From 671df61390c23b9a3d1e9e91498a57aed702fdd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=85=AB?= Date: Sun, 2 Aug 2020 00:38:26 +0800 Subject: [PATCH] [dev] redesign Alarmable interface which is more oo --- .../alarm/{AlarmContent.java => Alarm.java} | 4 +++- .../server/service/alarm/Alarmable.java | 13 +---------- .../alarm/DefaultMailAlarmService.java | 23 +++---------------- ...larmContent.java => JobInstanceAlarm.java} | 7 +++++- .../service/alarm/OmsCenterAlarmService.java | 20 +++------------- ...ontent.java => WorkflowInstanceAlarm.java} | 7 +++++- .../service/instance/InstanceManager.java | 6 ++--- .../workflow/WorkflowInstanceManager.java | 6 ++--- 8 files changed, 28 insertions(+), 58 deletions(-) rename powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/{AlarmContent.java => Alarm.java} (93%) rename powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/{JobInstanceAlarmContent.java => JobInstanceAlarm.java} (87%) rename powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/{WorkflowInstanceAlarmContent.java => WorkflowInstanceAlarm.java} (84%) diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/AlarmContent.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/Alarm.java similarity index 93% rename from powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/AlarmContent.java rename to powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/Alarm.java index 9c1c583e..1187d41e 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/AlarmContent.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/Alarm.java @@ -11,7 +11,9 @@ import org.apache.commons.lang3.StringUtils; * @author tjq * @since 2020/8/1 */ -public interface AlarmContent extends OmsSerializable { +public interface Alarm extends OmsSerializable { + + String fetchTitle(); default String fetchContent() { StringBuilder sb = new StringBuilder(); diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/Alarmable.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/Alarmable.java index 2349a018..d7fa2f43 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/Alarmable.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/Alarmable.java @@ -12,17 +12,6 @@ import java.util.List; */ public interface Alarmable { - /** - * 任务执行失败报警 - * @param content 任务实例相关信息 - * @param targetUserList 目标用户列表 - */ - void onJobInstanceFailed(JobInstanceAlarmContent content, List targetUserList); + void onFailed(Alarm alarm, List targetUserList); - /** - * 工作流执行失败报警 - * @param content 工作流实例相关信息 - * @param targetUserList 目标用户列表 - */ - void onWorkflowInstanceFailed(WorkflowInstanceAlarmContent content, List targetUserList); } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java index 6b5df320..c643ddc0 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java @@ -31,26 +31,9 @@ public class DefaultMailAlarmService implements Alarmable { private String from; private static final String FROM_KEY = "spring.mail.username"; - private static final String MAIL_TITLE = "PowerJob AlarmService"; - private static final String JOB_INSTANCE_FAILED_CONTENT_PATTERN = "Job run failed, detail is: %s"; - private static final String WF_INSTANCE_FAILED_CONTENT_PATTERN = "Workflow run failed, detail is: %s"; - @Override - public void onJobInstanceFailed(JobInstanceAlarmContent content, List targetUserList) { - String msg = String.format(JOB_INSTANCE_FAILED_CONTENT_PATTERN, content.fetchContent()); - sendMail(msg, targetUserList); - } - - @Override - public void onWorkflowInstanceFailed(WorkflowInstanceAlarmContent content, List targetUserList) { - String msg = String.format(WF_INSTANCE_FAILED_CONTENT_PATTERN, content.fetchContent()); - sendMail(msg, targetUserList); - } - - private void sendMail(String msg, List targetUserList) { - + public void onFailed(Alarm alarm, List targetUserList) { initFrom(); - log.debug("[OmsMailAlarmService] msg: {}, to: {}", msg, targetUserList); if (CollectionUtils.isEmpty(targetUserList) || javaMailSender == null || StringUtils.isEmpty(from)) { return; } @@ -59,8 +42,8 @@ public class DefaultMailAlarmService implements Alarmable { try { sm.setFrom(from); sm.setTo(targetUserList.stream().map(UserInfoDO::getEmail).toArray(String[]::new)); - sm.setSubject(MAIL_TITLE); - sm.setText(msg); + sm.setSubject(alarm.fetchTitle()); + sm.setText(alarm.fetchContent()); javaMailSender.send(sm); }catch (Exception e) { diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/JobInstanceAlarmContent.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/JobInstanceAlarm.java similarity index 87% rename from powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/JobInstanceAlarmContent.java rename to powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/JobInstanceAlarm.java index c13e339d..fc6524ed 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/JobInstanceAlarmContent.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/JobInstanceAlarm.java @@ -9,7 +9,7 @@ import lombok.Data; * @since 2020/4/30 */ @Data -public class JobInstanceAlarmContent implements AlarmContent { +public class JobInstanceAlarm implements Alarm { // 应用ID private long appId; // 任务ID @@ -43,4 +43,9 @@ public class JobInstanceAlarmContent implements AlarmContent { private Long finishedTime; // TaskTracker地址 private String taskTrackerAddress; + + @Override + public String fetchTitle() { + return "PowerJob AlarmService: Job Running Failed"; + } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/OmsCenterAlarmService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/OmsCenterAlarmService.java index 8b18203e..ab4775c5 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/OmsCenterAlarmService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/OmsCenterAlarmService.java @@ -29,29 +29,14 @@ public class OmsCenterAlarmService implements Alarmable { private List alarmableList; private volatile boolean initialized = false; - public OmsCenterAlarmService() { - } @Async("omsCommonPool") @Override - public void onJobInstanceFailed(JobInstanceAlarmContent content, List targetUserList) { + public void onFailed(Alarm alarm, List targetUserList) { init(); alarmableList.forEach(alarmable -> { try { - alarmable.onJobInstanceFailed(content, targetUserList); - }catch (Exception e) { - log.warn("[OmsCenterAlarmService] alarm failed.", e); - } - }); - } - - @Async("omsCommonPool") - @Override - public void onWorkflowInstanceFailed(WorkflowInstanceAlarmContent content, List targetUserList) { - init(); - alarmableList.forEach(alarmable -> { - try { - alarmable.onWorkflowInstanceFailed(content, targetUserList); + alarmable.onFailed(alarm, targetUserList); }catch (Exception e) { log.warn("[OmsCenterAlarmService] alarm failed.", e); } @@ -86,4 +71,5 @@ public class OmsCenterAlarmService implements Alarmable { initialized = true; } } + } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/WorkflowInstanceAlarmContent.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/WorkflowInstanceAlarm.java similarity index 84% rename from powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/WorkflowInstanceAlarmContent.java rename to powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/WorkflowInstanceAlarm.java index f12a962e..0237c5dc 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/WorkflowInstanceAlarmContent.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/WorkflowInstanceAlarm.java @@ -10,7 +10,7 @@ import lombok.Data; * @since 2020/6/12 */ @Data -public class WorkflowInstanceAlarmContent implements AlarmContent { +public class WorkflowInstanceAlarm implements Alarm { private String workflowName; @@ -34,4 +34,9 @@ public class WorkflowInstanceAlarmContent implements AlarmContent { private Integer timeExpressionType; // 时间表达式,CRON/NULL/LONG/LONG private String timeExpression; + + @Override + public String fetchTitle() { + return "PowerJob AlarmService: Workflow Running Failed"; + } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java index ceda11e4..6f752a3d 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java @@ -12,7 +12,7 @@ import com.github.kfcfans.powerjob.server.service.DispatchService; import com.github.kfcfans.powerjob.server.service.InstanceLogService; import com.github.kfcfans.powerjob.server.service.UserService; import com.github.kfcfans.powerjob.server.service.alarm.Alarmable; -import com.github.kfcfans.powerjob.server.service.alarm.JobInstanceAlarmContent; +import com.github.kfcfans.powerjob.server.service.alarm.JobInstanceAlarm; import com.github.kfcfans.powerjob.server.service.timing.schedule.HashedWheelTimerHolder; import com.github.kfcfans.powerjob.server.service.workflow.WorkflowInstanceManager; import lombok.extern.slf4j.Slf4j; @@ -162,12 +162,12 @@ public class InstanceManager { } InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId); - JobInstanceAlarmContent content = new JobInstanceAlarmContent(); + JobInstanceAlarm content = new JobInstanceAlarm(); BeanUtils.copyProperties(jobInfo, content); BeanUtils.copyProperties(instanceInfo, content); List userList = SpringUtils.getBean(UserService.class).fetchNotifyUserList(jobInfo.getNotifyUserIds()); - omsCenterAlarmService.onJobInstanceFailed(content, userList); + omsCenterAlarmService.onFailed(content, userList); } // 主动移除缓存,减小内存占用 diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/workflow/WorkflowInstanceManager.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/workflow/WorkflowInstanceManager.java index 955c831b..1f11b1f2 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/workflow/WorkflowInstanceManager.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/workflow/WorkflowInstanceManager.java @@ -20,7 +20,7 @@ import com.github.kfcfans.powerjob.server.persistence.core.repository.WorkflowIn import com.github.kfcfans.powerjob.server.service.DispatchService; import com.github.kfcfans.powerjob.server.service.UserService; import com.github.kfcfans.powerjob.server.service.alarm.Alarmable; -import com.github.kfcfans.powerjob.server.service.alarm.WorkflowInstanceAlarmContent; +import com.github.kfcfans.powerjob.server.service.alarm.WorkflowInstanceAlarm; import com.github.kfcfans.powerjob.server.service.id.IdGenerateService; import com.github.kfcfans.powerjob.server.service.instance.InstanceService; import com.google.common.collect.LinkedListMultimap; @@ -332,14 +332,14 @@ public class WorkflowInstanceManager { // 报警 try { workflowInfoRepository.findById(wfInstance.getWorkflowId()).ifPresent(wfInfo -> { - WorkflowInstanceAlarmContent content = new WorkflowInstanceAlarmContent(); + WorkflowInstanceAlarm content = new WorkflowInstanceAlarm(); BeanUtils.copyProperties(wfInfo, content); BeanUtils.copyProperties(wfInstance, content); content.setResult(result); List userList = userService.fetchNotifyUserList(wfInfo.getNotifyUserIds()); - omsCenterAlarmService.onWorkflowInstanceFailed(content, userList); + omsCenterAlarmService.onFailed(content, userList); }); }catch (Exception ignore) { }