package com.hqyg.disjob.rpc.action;
import com.hqyg.disjob.common.Constants;
import com.hqyg.disjob.common.exception.TransportException;
import com.hqyg.disjob.common.util.DateUtil;
import com.hqyg.disjob.common.util.LoggerUtil;
import com.hqyg.disjob.monitor.db.service.DBJobBasicInfoService;
import com.hqyg.disjob.monitor.pojo.MessagePiple;
import com.hqyg.disjob.monitor.service.JobService;
import com.hqyg.disjob.monitor.util.MonitorSpringWorkFactory;
import com.hqyg.disjob.quence.Action;
import com.hqyg.disjob.quence.TaskExecuteException;
import com.hqyg.disjob.rpc.client.proxy.RpcClient;
import com.hqyg.disjob.rpc.codec.Response;
import com.hqyg.disjob.rpc.codec.RpcRequest;
import com.hqyg.disjob.rpc.utils.ScheduleResponse;
import com.hqyg.disjob.monitor.alarm.pojo.AlarmType;
import com.hqyg.disjob.monitor.alarm.service.MsgPushService;
import com.hqyg.disjob.monitor.db.domain.DBJobBasicInfo;
public class SchedulerJobAction extends Action {
private ScheduleResponse response ;
private RpcClient rpcClient ;
private RpcRequest request ;
private DBJobBasicInfoService dbJobService ;
private MsgPushService msgPushService ;
private DBJobBasicInfo info ;
public SchedulerJobAction(ScheduleResponse response,RpcClient rpcClient,RpcRequest request) {
this.response = response ;
this.rpcClient = rpcClient ;
this.request = request ;
this.dbJobService = MonitorSpringWorkFactory.getDBJobBasicInfoService() ;
info = new DBJobBasicInfo();
}
@Override
public void execute() throws TaskExecuteException {
String groupName = response.getGroupName();
String jobName = response.getJobName();
info.setUuid(response.getRequestId());
info.setGroupName(groupName);
info.setJobName(jobName);
if (response.getScheduleStartTime() != null) {
info.setScheduleStart(DateUtil.local2Utc(response.getScheduleStartTime()));
}
if (response.getScheduleEndTime() != null) {
info.setScheduleEnd(DateUtil.local2Utc(response.getScheduleEndTime()));
}
info.setScheduleSip(response.getScheduleServerIp());
info.setBusinessSip(response.getExecuteServerIp());
info.setErrorReason(response.getException());
//1、
JobService jobService = MonitorSpringWorkFactory.getJobService();
jobService.setJobSchedulerTime(response.getRequestId());
jobService.newJobTracker(response.getRequestId(),groupName,jobName).notifyCreateDBBasicInfoEvent(info);
MonitorSpringWorkFactory.getMessagePipleService().putMessagePiple(new MessagePiple(response.getRequestId(),response.getGroupName(),response.getJobName(),response.getTimeout()));
LoggerUtil.debug(response.getRequestId() + " save: " + info.toString());
//2、
if(Constants.isCanConnPool){
try {
Response re = rpcClient.request(request);
info.setErrorLocation(re.getException());
} catch (TransportException e) {
e.printStackTrace();
}
}else{
info.setErrorLocation(rpcClient.writerAndFlush(request).getException());
}
}
@Override
public void execeptionCaught(Exception e) {
info.setCurrentStatus('0');
info.setErrorType(String.valueOf(AlarmType.EXECEPTION));
LoggerUtil.error("rpc data error,groupName=" + info.getGroupName() + ",jobName=" + info.getJobName() + ",requestId=" + request.getData().getRequestId() + " error:" + response.getException());
msgPushService.notify(info.getGroupName(),"group:" + info.getGroupName() + ",job:" + info.getJobName(), info.getErrorType(), "requestId:" + request.getData().getRequestId());
info.setErrorReason(e.getMessage());
// 因为先保存后发送,发送过程中如果存在失败则更新基本信息表
dbJobService.update(info);
}
}