一个告警的算法
来源:互联网 发布:手机ar制作软件 编辑:程序博客网 时间:2024/05/17 03:07
一个告警的算法。我自己也晕。
public void doJob(MonitorAlarmThreadLock monitorAlarm) {
String status = ConfigUtil.getReadonlyValue(PREWARNING_STATUS);
if ("off".equals(status)) {
return;
}
// 超过告警阀值的信息
Set<PrewarningInfo> prewarningMap = new HashSet<PrewarningInfo>();
// 根据appname取到所有需要告警的信息
List<PrewarningInfo> prewarningInfos = this
.getPrewarningInfo(monitorAlarm.getClientAppName());
try {
for (PrewarningInfo prewarningInfo : prewarningInfos) {
prewarningInfo = prewarningInteface
.initPrewarningInfo(prewarningInfo);// 初始化预警参数
// 取出预警规则
List<PrewarningRule> prewarningRuleList = prewarningInfo
.getPrewarningRuleList();
if (prewarningRuleList.size() != 0) {
boolean hasPrewarning = false;
for (PrewarningRule prewarningRule : prewarningRuleList) {
Date pStartTime = prewarningRule.getpStartTime();
if (pStartTime == null) {
// 取时间最早的一条初始化开始时间
com.jd.mc.model.LogModel lm = new com.jd.mc.model.LogModel();
lm.setAppName(monitorAlarm.getClientAppName());
lm.setServiceName(prewarningInfo.getService_name());
lm.setMethodName(prewarningInfo.getMethod_name());
lm.setTpValue(prewarningRule.getTpvalue());
com.jd.mc.model.LogModel logModel = logModelDao
.getFirstLogModel(lm);
if (logModel != null) {
prewarningRule.setpStartTime(logModel
.getStartTime());
// 结束时间为开始时间+间隔时间
Calendar cal = Calendar.getInstance();
cal.setTime(logModel.getStartTime());
cal.add(Calendar.MINUTE, prewarningRule
.getIntervalmins());
prewarningRule.setpEndTime(cal.getTime());
prewarningDao
.updatePrewarningRule(prewarningRule);
}
}
// 取到需要告警的方法列表
List<com.jd.mc.model.LogModel> logModelExtrList = prewarningInteface
.getListLogModelExtr(prewarningInfo,
prewarningRule);
// 判断是否超过告警阀值
List<com.jd.mc.model.LogModel> logModelExtrListP = prewarningInteface
.prewarningJudge(logModelExtrList,
prewarningRule);
if (logModelExtrListP.size() >= prewarningRule
.getFrequency()
&& prewarningRule.getIsperwarning() != 1) {
hasPrewarning = true;
prewarningRule.setPerwarning(true);
prewarningRule
.setLogModelExtrList(logModelExtrListP);
}
}
if (hasPrewarning) {
prewarningMap.add(prewarningInfo);
}
for (PrewarningRule prewarningRule : prewarningRuleList) {
// 取最晚的开始时间跟规则结束时间比,如果大于结束时间则更新规则的pStartTime,pEndTime
com.jd.mc.model.LogModel lm = new com.jd.mc.model.LogModel();
lm.setAppName(monitorAlarm.getClientAppName());
lm.setServiceName(prewarningInfo.getService_name());
lm.setMethodName(prewarningInfo.getMethod_name());
lm.setTpValue(prewarningRule.getTpvalue());
com.jd.mc.model.LogModel lastLogModel = logModelDao
.getLastLogModel(lm);
if (lastLogModel!=null&&lastLogModel.getStartTime().getTime() > prewarningRule
.getpEndTime().getTime()) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(prewarningRule.getpStartTime());
cal1.add(Calendar.MINUTE, prewarningRule
.getIntervalmins());
Calendar cal2 = Calendar.getInstance();
cal2.setTime(prewarningRule.getpEndTime());
cal2.add(Calendar.MINUTE, prewarningRule
.getIntervalmins());
prewarningRule.setpStartTime(cal1.getTime());
prewarningRule.setpEndTime(cal2.getTime());
prewarningRule.setIsperwarning(0);
prewarningDao.updatePrewarningRule(prewarningRule);
}
}
}
}
} catch (Exception e) {
logger.error(this.getClass().getName() + " error", e);
}
try{
prewarningInteface.sendPerwarningMessage(prewarningMap,
monitorAlarm.getBussGrp());// 发送预警消息
} catch (Exception e) {
logger.error(this.getClass().getName() + " error", e);
}
}
- 一个告警的算法
- 智能导航短信告警的一个逻辑处理
- 一个简单好用的zabbix告警信息发送工具
- 告警的处理
- 提示告警功能的思考
- 提示告警功能的解决方案
- 消除-Weffc++提示的告警
- 检查硬盘告警的脚本
- 程序的健壮性和告警系统
- 发布数据库磁盘空间告警的解决办法
- C++中屏蔽offsetof告警的方法
- "CWinApp::Enable3dControls”引起的C4996告警
- 消除maven构建时的各种告警
- 消除maven构建时的各种告警
- 消除maven的编码字符集告警
- 处理AFNetworking的SystemConfiguration与MobileCoreServices告警
- 消除maven构建时的各种告警
- 消除maven的编码字符集告警
- 怎样判断一个数能否被7整除
- python学习笔记——这个人的学习习惯真好
- MFC经验
- Android全局变量的定义与使用
- Linux内存泄漏分析方法二使用Valgrind
- 一个告警的算法
- linux下安装的apache的log文件在什么地方
- 网页上的点击弹出层代码,居中显示
- 截屏取图 图片颜色改变
- Lisp的诞生
- c++ string 类基本用法样例
- RGB32转RGB565
- 一些基本的概念(慢慢更新)
- synchronized to 218.75.4.130, stratum 2什么意思