From e93d41ee551f7c65634f140b6461d10bb13a9df5 Mon Sep 17 00:00:00 2001 From: "leon.li" Date: Wed, 23 Jul 2014 11:36:22 +0800 Subject: [PATCH] add postman, alertmanater --- .../cat/report/task/alert/AlertManager.java | 43 ++++++ .../cat/report/task/alert/BaseAlert.java | 123 +----------------- .../report/task/alert/BaseAlertConfig.java | 2 +- .../alert/business/BusinessAlertConfig.java | 4 +- .../alert/exception/ExceptionAlertConfig.java | 2 +- .../alert/network/NetworkAlertConfig.java | 4 +- .../cat/report/task/alert/sender/Postman.java | 82 ++++++++++-- .../task/alert/system/SystemAlertConfig.java | 4 +- 8 files changed, 132 insertions(+), 132 deletions(-) create mode 100644 cat-home/src/main/java/com/dianping/cat/report/task/alert/AlertManager.java diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/AlertManager.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/AlertManager.java new file mode 100644 index 000000000..b634025d3 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/AlertManager.java @@ -0,0 +1,43 @@ +package com.dianping.cat.report.task.alert; + +import org.unidal.dal.jdbc.DalException; +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.Cat; +import com.dianping.cat.home.dal.report.Alert; +import com.dianping.cat.home.dal.report.AlertDao; + +public class AlertManager { + + @Inject + protected AlertDao m_alertDao; + + private Alert buildAlert(String categoryName, String domainName, String metricName, String mailTitle, + AlertResultEntity alertResult) { + Alert alert = new Alert(); + + alert.setDomain(domainName); + alert.setAlertTime(alertResult.getAlertTime()); + alert.setCategory(categoryName); + alert.setType(alertResult.getAlertType()); + alert.setContent(mailTitle + "
" + alertResult.getContent()); + alert.setMetric(metricName); + + return alert; + } + + protected void storeAlert(String categoryName, String domainName, String metricName, String mailTitle, + AlertResultEntity alertResult) { + Alert alert = buildAlert(categoryName, domainName, metricName, mailTitle, alertResult); + + try { + int count = m_alertDao.insert(alert); + + if (count != 1) { + Cat.logError("insert alert error: " + alert.toString(), new RuntimeException()); + } + } catch (DalException e) { + Cat.logError(e); + } + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlert.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlert.java index 43748b777..2d727d33f 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlert.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlert.java @@ -9,7 +9,6 @@ import java.util.Map; import java.util.Map.Entry; import org.codehaus.plexus.logging.Logger; -import org.unidal.dal.jdbc.DalException; import org.unidal.lookup.annotation.Inject; import org.unidal.tuple.Pair; @@ -22,27 +21,15 @@ import com.dianping.cat.consumer.metric.ProductLineConfigManager; import com.dianping.cat.consumer.metric.model.entity.MetricItem; import com.dianping.cat.consumer.metric.model.entity.MetricReport; import com.dianping.cat.consumer.metric.model.entity.Segment; -import com.dianping.cat.core.dal.Project; -import com.dianping.cat.core.dal.ProjectDao; -import com.dianping.cat.core.dal.ProjectEntity; import com.dianping.cat.helper.TimeUtil; -import com.dianping.cat.home.alert.type.entity.Type; -import com.dianping.cat.home.dal.report.Alert; -import com.dianping.cat.home.dal.report.AlertDao; import com.dianping.cat.home.rule.entity.Condition; import com.dianping.cat.home.rule.entity.Config; -import com.dianping.cat.message.Event; import com.dianping.cat.report.baseline.BaselineService; -import com.dianping.cat.report.task.alert.sender.MailSender; import com.dianping.cat.report.task.alert.sender.Postman; -import com.dianping.cat.report.task.alert.sender.SmsSender; -import com.dianping.cat.report.task.alert.sender.WeixinSender; import com.dianping.cat.service.ModelPeriod; import com.dianping.cat.service.ModelRequest; -import com.dianping.cat.system.config.AlertTypeManager; import com.dianping.cat.system.config.BaseRuleConfigManager; import com.dianping.cat.system.tool.MailSMS; -import com.site.lookup.util.StringUtils; public abstract class BaseAlert { @@ -52,9 +39,6 @@ public abstract class BaseAlert { @Inject protected MailSMS m_mailSms; - @Inject - protected AlertDao m_alertDao; - @Inject protected AlertInfo m_alertInfo; @@ -74,22 +58,10 @@ public abstract class BaseAlert { protected RemoteMetricReportService m_service; @Inject - private ProjectDao m_projectDao; - - @Inject - protected MailSender m_mailSender; - - @Inject - protected SmsSender m_smsSender; - - @Inject - protected WeixinSender m_weixinSender; - - @Inject - protected AlertTypeManager m_alertTypeManager; + protected Postman m_postman; @Inject - protected Postman m_postman; + protected AlertManager m_alertManager; protected static final int DATA_AREADY_MINUTE = 1; @@ -103,19 +75,6 @@ public abstract class BaseAlert { protected Map m_lastReports = new HashMap(); - private Alert buildAlert(String domainName, String metricTitle, String mailTitle, AlertResultEntity alertResult) { - Alert alert = new Alert(); - - alert.setDomain(domainName); - alert.setAlertTime(alertResult.getAlertTime()); - alert.setCategory(getName()); - alert.setType(alertResult.getAlertType()); - alert.setContent(mailTitle + "
" + alertResult.getContent()); - alert.setMetric(metricTitle); - - return alert; - } - private String buildMetricName(String metricKey) { try { return metricKey.split(":")[2]; @@ -134,28 +93,6 @@ public abstract class BaseAlert { } } - protected String buildContactInfo(String domainName) { - try { - Project project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL); - String owners = project.getOwner(); - String phones = project.getPhone(); - StringBuilder builder = new StringBuilder(); - - if (!StringUtils.isEmpty(owners)) { - builder.append("[业务负责人: ").append(owners).append(" ]"); - } - if (!StringUtils.isEmpty(phones)) { - builder.append("[负责人手机号码: ").append(phones).append(" ]"); - } - - return builder.toString(); - } catch (Exception ex) { - Cat.logError("build contact info error for doamin: " + domainName, ex); - } - - return null; - } - private Long buildMillsByString(String time) throws Exception { String[] times = time.split(":"); int hour = Integer.parseInt(times[0]); @@ -302,18 +239,15 @@ public abstract class BaseAlert { List alertResults = computeAlertInfo(minute, productlineName, metricKey, type); for (AlertResultEntity alertResult : alertResults) { + m_alertInfo.addAlertInfo(productlineName, metricKey, new Date().getTime()); + String metricName = buildMetricName(metricKey); String mailTitle = getAlertConfig().buildMailTitle(productLine.getTitle(), metricName); - String domain = extractDomain(metricKey); - String contactInfo = buildContactInfo(domain); - alertResult.setContent(alertResult.getContent() + contactInfo); - String content = alertResult.getContent(); - m_alertInfo.addAlertInfo(productlineName, metricKey, new Date().getTime()); + m_alertManager.storeAlert(getName(), productlineName, metricName, mailTitle, alertResult); - storeAlert(productlineName, metricName, mailTitle, alertResult); + String domain = extractDomain(metricKey); String configId = getAlertConfig().getId(); - sendAllAlert(productLine, domain, mailTitle, content, alertResult.getAlertType(), configId); - Cat.logEvent(configId, productlineName, Event.SUCCESS, mailTitle + " " + content); + m_postman.sendAlert(getAlertConfig(), alertResult, productLine, domain, mailTitle, configId); } } } @@ -333,35 +267,6 @@ public abstract class BaseAlert { } } - protected boolean sendAllAlert(ProductLine productLine, String domain, String title, String content, - String alertType, String configId) { - Type type = m_alertTypeManager.getType(configId, domain, alertType); - boolean sendResult = true; - - if (type.isSendMail()) { - List receivers = getAlertConfig().buildMailReceivers(productLine); - if (!m_mailSender.sendAlert(receivers, domain, title, content)) { - sendResult = false; - } - } - - if (type.isSendWeixin()) { - List receivers = getAlertConfig().buildMailReceivers(productLine); - if (!m_weixinSender.sendAlert(receivers, domain, title, content)) { - sendResult = false; - } - } - - if (type.isSendSms()) { - List receivers = getAlertConfig().buildSMSReceivers(productLine); - if (!m_smsSender.sendAlert(receivers, domain, title, content)) { - sendResult = false; - } - } - - return sendResult; - } - private double[] queryBaseLine(int start, int end, String baseLineKey, Date date, MetricType type) { double[] baseline = m_baselineService.queryHourlyBaseline(MetricAnalyzer.ID, baseLineKey + ":" + type, date); int length = end - start + 1; @@ -419,20 +324,6 @@ public abstract class BaseAlert { return result; } - protected void storeAlert(String domainName, String metricTitle, String mailTitle, AlertResultEntity alertResult) { - Alert alert = buildAlert(domainName, metricTitle, mailTitle, alertResult); - - try { - int count = m_alertDao.insert(alert); - - if (count != 1) { - Cat.logError("insert alert error: " + alert.toString(), new RuntimeException()); - } - } catch (DalException e) { - Cat.logError(e); - } - } - protected abstract String getName(); protected abstract BaseAlertConfig getAlertConfig(); diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlertConfig.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlertConfig.java index cbe95e1f5..e09b937db 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlertConfig.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/BaseAlertConfig.java @@ -83,7 +83,7 @@ public abstract class BaseAlertConfig { } } - protected abstract String buildMailTitle(String artifactName, String configTitle); + public abstract String buildMailTitle(String artifactName, String metricName); public abstract String getId(); diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlertConfig.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlertConfig.java index dcd9487f2..58c11ca35 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlertConfig.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlertConfig.java @@ -7,11 +7,11 @@ public class BusinessAlertConfig extends BaseAlertConfig { private String m_id = "business"; @Override - public String buildMailTitle(String productlineName, String configTitle) { + public String buildMailTitle(String productlineName, String metricName) { StringBuilder sb = new StringBuilder(); sb.append("[业务告警] [产品线 ").append(productlineName).append("]"); - sb.append("[业务指标 ").append(configTitle).append("]"); + sb.append("[业务指标 ").append(metricName).append("]"); return sb.toString(); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlertConfig.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlertConfig.java index dce392e62..f449e335c 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlertConfig.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlertConfig.java @@ -58,7 +58,7 @@ public class ExceptionAlertConfig extends BaseAlertConfig { } @Override - public String buildMailTitle(String domain, String configTitle) { + public String buildMailTitle(String domain, String metricName) { StringBuilder sb = new StringBuilder(); sb.append("[CAT异常告警] [项目: ").append(domain).append("]"); diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/network/NetworkAlertConfig.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/network/NetworkAlertConfig.java index 0e8f35b84..680d32fb2 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/network/NetworkAlertConfig.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/network/NetworkAlertConfig.java @@ -7,11 +7,11 @@ public class NetworkAlertConfig extends BaseAlertConfig { private String m_id = "network"; @Override - public String buildMailTitle(String productlineName, String configTitle) { + public String buildMailTitle(String productlineName, String metricName) { StringBuilder sb = new StringBuilder(); sb.append("[网络告警] [产品线 ").append(productlineName).append("]"); - sb.append("[网络指标 ").append(configTitle).append("]"); + sb.append("[网络指标 ").append(metricName).append("]"); return sb.toString(); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/Postman.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/Postman.java index 45a5fe7a6..7b764f005 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/Postman.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/Postman.java @@ -2,17 +2,55 @@ package com.dianping.cat.report.task.alert.sender; import java.util.List; +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.Cat; import com.dianping.cat.consumer.company.model.entity.ProductLine; +import com.dianping.cat.core.dal.Project; +import com.dianping.cat.core.dal.ProjectDao; +import com.dianping.cat.core.dal.ProjectEntity; +import com.dianping.cat.home.alert.type.entity.Type; +import com.dianping.cat.message.Event; +import com.dianping.cat.report.task.alert.AlertResultEntity; import com.dianping.cat.report.task.alert.BaseAlertConfig; +import com.dianping.cat.system.config.AlertTypeManager; +import com.site.lookup.util.StringUtils; public class Postman { - protected String generateMailTitle() { + @Inject + private ProjectDao m_projectDao; - return null; - } + @Inject + protected MailSender m_mailSender; + + @Inject + protected SmsSender m_smsSender; + + @Inject + protected WeixinSender m_weixinSender; + + @Inject + protected AlertTypeManager m_alertTypeManager; - protected String generateMailContent() { + protected String buildContactInfo(String domainName) { + try { + Project project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL); + String owners = project.getOwner(); + String phones = project.getPhone(); + StringBuilder builder = new StringBuilder(); + + if (!StringUtils.isEmpty(owners)) { + builder.append("[业务负责人: ").append(owners).append(" ]"); + } + if (!StringUtils.isEmpty(phones)) { + builder.append("[负责人手机号码: ").append(phones).append(" ]"); + } + + return builder.toString(); + } catch (Exception ex) { + Cat.logError("build contact info error for doamin: " + domainName, ex); + } return null; } @@ -22,11 +60,39 @@ public class Postman { return null; } - public boolean storeAndSendAlert(BaseAlertConfig alertConfig, ProductLine productline, String domain) { + public boolean sendAlert(BaseAlertConfig alertConfig, AlertResultEntity alertResult, ProductLine productline, + String domain, String mailTitle, String configId) { + String content = alertResult.getContent(); + String contactInfo = buildContactInfo(domain); + Type type = m_alertTypeManager.getType(configId, domain, alertResult.getAlertType()); + boolean sendResult = true; + + if (type.isSendMail()) { + String mailContent = content + "
" + contactInfo; + List receivers = alertConfig.buildMailReceivers(productline); + if (!m_mailSender.sendAlert(receivers, domain, mailTitle, mailContent)) { + sendResult = false; + } + } + + if (type.isSendWeixin()) { + String weixinContent = content + "\n" + contactInfo; + List receivers = alertConfig.buildMailReceivers(productline); + if (!m_weixinSender.sendAlert(receivers, domain, mailTitle, weixinContent)) { + sendResult = false; + } + } + + if (type.isSendSms()) { + String smsContent = content + contactInfo; + List receivers = alertConfig.buildSMSReceivers(productline); + if (!m_smsSender.sendAlert(receivers, domain, mailTitle, smsContent)) { + sendResult = false; + } + } - - - return false; + Cat.logEvent(configId, productline.getId(), Event.SUCCESS, mailTitle + " " + content); + return sendResult; } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/system/SystemAlertConfig.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/system/SystemAlertConfig.java index b114b0611..1c70138b8 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/system/SystemAlertConfig.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/system/SystemAlertConfig.java @@ -7,11 +7,11 @@ public class SystemAlertConfig extends BaseAlertConfig { private String m_id = "system"; @Override - public String buildMailTitle(String productlineName, String configTitle) { + public String buildMailTitle(String productlineName, String metricName) { StringBuilder sb = new StringBuilder(); sb.append("[系统告警] [产品线 ").append(productlineName).append("]"); - sb.append("[系统指标 ").append(configTitle).append("]"); + sb.append("[系统指标 ").append(metricName).append("]"); return sb.toString(); } -- GitLab