Commit 970ae981 authored by 赵建伟's avatar 赵建伟

update monitor codes

parent aa9a80a6
...@@ -41,5 +41,7 @@ public class Constants { ...@@ -41,5 +41,7 @@ public class Constants {
public static final String REFER = "refer"; public static final String REFER = "refer";
public static final String VOLATILITY = "volatility"; public static final String VOLATILITY = "volatility";
public static final String SPECIAL = "special"; public static final String SPECIAL = "special";
// 日环比监控类型
public static final String MONITOR_TYPE = "day_chain";
} }
...@@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory; ...@@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.gmei.data.dqmp.common.Constants;
import com.gmei.data.dqmp.domain.TblMonitorVolatilityRule; import com.gmei.data.dqmp.domain.TblMonitorVolatilityRule;
import com.gmei.data.dqmp.domain.TblMonitorVolatilityRuleCriteria; import com.gmei.data.dqmp.domain.TblMonitorVolatilityRuleCriteria;
import com.gmei.data.dqmp.domain.TblResultMonitorVolatility; import com.gmei.data.dqmp.domain.TblResultMonitorVolatility;
...@@ -16,6 +17,7 @@ import com.gmei.data.dqmp.domain.TblResultMonitorVolatilityCriteria.Criteria; ...@@ -16,6 +17,7 @@ import com.gmei.data.dqmp.domain.TblResultMonitorVolatilityCriteria.Criteria;
import com.gmei.data.dqmp.mapper.TblMonitorVolatilityRuleMapper; import com.gmei.data.dqmp.mapper.TblMonitorVolatilityRuleMapper;
import com.gmei.data.dqmp.mapper.TblResultMonitorVolatilityMapper; import com.gmei.data.dqmp.mapper.TblResultMonitorVolatilityMapper;
import com.gmei.data.dqmp.service.DingdingService; import com.gmei.data.dqmp.service.DingdingService;
import com.gmei.data.dqmp.service.MailService;
import com.gmei.data.dqmp.service.WarningService; import com.gmei.data.dqmp.service.WarningService;
import com.gmei.data.dqmp.utils.CrontabUtils; import com.gmei.data.dqmp.utils.CrontabUtils;
import com.gmei.data.dqmp.utils.DateUtils; import com.gmei.data.dqmp.utils.DateUtils;
...@@ -26,53 +28,62 @@ public class WarningServiceImpl implements WarningService { ...@@ -26,53 +28,62 @@ public class WarningServiceImpl implements WarningService {
@Autowired @Autowired
private DingdingService dingdingService; private DingdingService dingdingService;
@Autowired @Autowired
private MailService mailService;
@Autowired
private TblMonitorVolatilityRuleMapper tblMonitorVolatilityRuleMapper; private TblMonitorVolatilityRuleMapper tblMonitorVolatilityRuleMapper;
@Autowired @Autowired
private TblResultMonitorVolatilityMapper tblResultMonitorVolatilityMapper; private TblResultMonitorVolatilityMapper tblResultMonitorVolatilityMapper;
private static final Logger logger = LoggerFactory.getLogger(WarningServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(WarningServiceImpl.class);
@Override @Override
public void checkAndWarning() { public void checkAndWarning() {
List<TblMonitorVolatilityRule> tblMonitorVolatilityRuleList = tblMonitorVolatilityRuleMapper.selectByExample(new TblMonitorVolatilityRuleCriteria()); List<TblMonitorVolatilityRule> tblMonitorVolatilityRuleList = tblMonitorVolatilityRuleMapper
.selectByExample(new TblMonitorVolatilityRuleCriteria());
Date currentDate = new Date(); Date currentDate = new Date();
String lastOneDayDateStr = DateUtils.getLastNumDaysDateStr(1); String lastOneDayDateStr = DateUtils.getLastNumDaysDateStr(1);
String lastTwoDayDateStr = DateUtils.getLastNumDaysDateStr(2); String lastTwoDayDateStr = DateUtils.getLastNumDaysDateStr(2);
for(TblMonitorVolatilityRule tblMonitorVolatilityRule : tblMonitorVolatilityRuleList) { for (TblMonitorVolatilityRule tblMonitorVolatilityRule : tblMonitorVolatilityRuleList) {
String checkTime = tblMonitorVolatilityRule.getCheckTime(); if (Constants.MONITOR_TYPE.equals(tblMonitorVolatilityRule.getMonitorType())) {
String dbName = tblMonitorVolatilityRule.getDbName(); String checkTime = tblMonitorVolatilityRule.getCheckTime();
String tbName = tblMonitorVolatilityRule.getTbName(); String dbName = tblMonitorVolatilityRule.getDbName();
if(!CrontabUtils.isToRunByMinites(currentDate,checkTime)) { String tbName = tblMonitorVolatilityRule.getTbName();
continue; if (!CrontabUtils.isToRunByMinites(currentDate, checkTime)) {
}
TblResultMonitorVolatilityCriteria tblResultMonitorVolatilityCriteria = new TblResultMonitorVolatilityCriteria();
Criteria criteria = tblResultMonitorVolatilityCriteria.createCriteria();
criteria.andDbNameEqualTo(dbName)
.andTbNameEqualTo(tbName)
.andColNameEqualTo(tblMonitorVolatilityRule.getColName())
.andIndicatorTypeEqualTo(tblMonitorVolatilityRule.getIndicatorType())
.andPartitionDateBetween(lastTwoDayDateStr, lastOneDayDateStr);
tblResultMonitorVolatilityCriteria.setOrderByClause("partition_date");
List<TblResultMonitorVolatility> tblResultMonitorVolatilityList = tblResultMonitorVolatilityMapper.selectByExample(tblResultMonitorVolatilityCriteria );
Long lastOneDayIndicatorValue = null,lastTwoDayIndicatorValue = null;
for(TblResultMonitorVolatility tblResultMonitorVolatility : tblResultMonitorVolatilityList) {
String partitionDate = tblResultMonitorVolatility.getPartitionDate();
if(lastOneDayDateStr.equals(partitionDate)) {
lastOneDayIndicatorValue = tblResultMonitorVolatility.getIndicatorValue();
}else if(lastTwoDayDateStr.equals(partitionDate)){
lastTwoDayIndicatorValue = tblResultMonitorVolatility.getIndicatorValue();
}else {
logger.error("PartitionDate value is error: {}",partitionDate);
continue; continue;
} }
} TblResultMonitorVolatilityCriteria tblResultMonitorVolatilityCriteria = new TblResultMonitorVolatilityCriteria();
if(lastOneDayIndicatorValue == null || lastTwoDayIndicatorValue == null) { Criteria criteria = tblResultMonitorVolatilityCriteria.createCriteria();
logger.error("The indicatorValues of table {} is empty!",tblMonitorVolatilityRule.getTbName()); criteria.andDbNameEqualTo(dbName).andTbNameEqualTo(tbName)
return; .andColNameEqualTo(tblMonitorVolatilityRule.getColName())
} .andIndicatorTypeEqualTo(tblMonitorVolatilityRule.getIndicatorType())
Double rs = Math.abs((lastOneDayIndicatorValue - lastTwoDayIndicatorValue)/Double.valueOf(lastTwoDayIndicatorValue)) ; .andPartitionDateBetween(lastTwoDayDateStr, lastOneDayDateStr);
if(rs > tblMonitorVolatilityRule.getThreshold()) { tblResultMonitorVolatilityCriteria.setOrderByClause("partition_date");
dingdingService.sendMsgToDingding(String.format("表%s.%s中的数据量疑似异常,请核实",dbName,tbName)); List<TblResultMonitorVolatility> tblResultMonitorVolatilityList = tblResultMonitorVolatilityMapper
logger.error("表{}.{}中的数据量疑似异常,请核实",dbName,tbName); .selectByExample(tblResultMonitorVolatilityCriteria);
Long lastOneDayIndicatorValue = null, lastTwoDayIndicatorValue = null;
for (TblResultMonitorVolatility tblResultMonitorVolatility : tblResultMonitorVolatilityList) {
String partitionDate = tblResultMonitorVolatility.getPartitionDate();
if (lastOneDayDateStr.equals(partitionDate)) {
lastOneDayIndicatorValue = tblResultMonitorVolatility.getIndicatorValue();
} else if (lastTwoDayDateStr.equals(partitionDate)) {
lastTwoDayIndicatorValue = tblResultMonitorVolatility.getIndicatorValue();
} else {
logger.error("PartitionDate value is error: {}", partitionDate);
continue;
}
}
if (lastOneDayIndicatorValue == null || lastTwoDayIndicatorValue == null) {
logger.error("The lastOneDayIndicatorValue or lastTwoDayIndicatorValue or all values of table {} is empty!", tblMonitorVolatilityRule.getTbName());
return;
}
Double rs = Math.abs((lastOneDayIndicatorValue - lastTwoDayIndicatorValue)
/ Double.valueOf(lastTwoDayIndicatorValue));
Double threshold = tblMonitorVolatilityRule.getThreshold();
if (rs > threshold) {
String warningMsg = String.format("表%s.%s中数据量变化超过%s,疑似异常,请核实!", dbName, tbName,threshold * 100 + "%");
mailService.sendSimpleMail(warningMsg);
dingdingService.sendMsgToDingding(warningMsg);
logger.error("表{}.{}中数据量变化超过{},疑似异常,请核实!", dbName, tbName,threshold * 100+"%");
}
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment