mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
[dev] redesign Alarmable interface which is more oo
This commit is contained in:
parent
986aa712a0
commit
671df61390
@ -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();
|
@ -12,17 +12,6 @@ import java.util.List;
|
||||
*/
|
||||
public interface Alarmable {
|
||||
|
||||
/**
|
||||
* 任务执行失败报警
|
||||
* @param content 任务实例相关信息
|
||||
* @param targetUserList 目标用户列表
|
||||
*/
|
||||
void onJobInstanceFailed(JobInstanceAlarmContent content, List<UserInfoDO> targetUserList);
|
||||
void onFailed(Alarm alarm, List<UserInfoDO> targetUserList);
|
||||
|
||||
/**
|
||||
* 工作流执行失败报警
|
||||
* @param content 工作流实例相关信息
|
||||
* @param targetUserList 目标用户列表
|
||||
*/
|
||||
void onWorkflowInstanceFailed(WorkflowInstanceAlarmContent content, List<UserInfoDO> targetUserList);
|
||||
}
|
||||
|
@ -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<UserInfoDO> targetUserList) {
|
||||
String msg = String.format(JOB_INSTANCE_FAILED_CONTENT_PATTERN, content.fetchContent());
|
||||
sendMail(msg, targetUserList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkflowInstanceFailed(WorkflowInstanceAlarmContent content, List<UserInfoDO> targetUserList) {
|
||||
String msg = String.format(WF_INSTANCE_FAILED_CONTENT_PATTERN, content.fetchContent());
|
||||
sendMail(msg, targetUserList);
|
||||
}
|
||||
|
||||
private void sendMail(String msg, List<UserInfoDO> targetUserList) {
|
||||
|
||||
public void onFailed(Alarm alarm, List<UserInfoDO> 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) {
|
||||
|
@ -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";
|
||||
}
|
||||
}
|
@ -29,29 +29,14 @@ public class OmsCenterAlarmService implements Alarmable {
|
||||
private List<Alarmable> alarmableList;
|
||||
private volatile boolean initialized = false;
|
||||
|
||||
public OmsCenterAlarmService() {
|
||||
}
|
||||
|
||||
@Async("omsCommonPool")
|
||||
@Override
|
||||
public void onJobInstanceFailed(JobInstanceAlarmContent content, List<UserInfoDO> targetUserList) {
|
||||
public void onFailed(Alarm alarm, List<UserInfoDO> 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<UserInfoDO> 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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";
|
||||
}
|
||||
}
|
@ -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<UserInfoDO> userList = SpringUtils.getBean(UserService.class).fetchNotifyUserList(jobInfo.getNotifyUserIds());
|
||||
omsCenterAlarmService.onJobInstanceFailed(content, userList);
|
||||
omsCenterAlarmService.onFailed(content, userList);
|
||||
}
|
||||
|
||||
// 主动移除缓存,减小内存占用
|
||||
|
@ -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<UserInfoDO> userList = userService.fetchNotifyUserList(wfInfo.getNotifyUserIds());
|
||||
omsCenterAlarmService.onWorkflowInstanceFailed(content, userList);
|
||||
omsCenterAlarmService.onFailed(content, userList);
|
||||
});
|
||||
}catch (Exception ignore) {
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user