diff --git a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java index fec89cac6f94a93e38db5fecec56b135cc31ea14..0cc7363b2c957a1e451b1f3c5c6a70fb022a2b1e 100755 --- a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java @@ -67,17 +67,30 @@ import com.dianping.cat.report.task.alert.exception.ExceptionAlert; import com.dianping.cat.report.task.alert.manager.AlertEntityService; import com.dianping.cat.report.task.alert.network.NetworkAlert; import com.dianping.cat.report.task.alert.sender.AlertManager; +import com.dianping.cat.report.task.alert.sender.decorator.BusinessDecorator; import com.dianping.cat.report.task.alert.sender.decorator.Decorator; import com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager; -import com.dianping.cat.report.task.alert.sender.decorator.MailDecorator; -import com.dianping.cat.report.task.alert.sender.decorator.SmsDecorator; -import com.dianping.cat.report.task.alert.sender.decorator.WeixinDecorator; +import com.dianping.cat.report.task.alert.sender.decorator.ExceptionDecorator; +import com.dianping.cat.report.task.alert.sender.decorator.NetworkDecorator; +import com.dianping.cat.report.task.alert.sender.decorator.SystemDecorator; +import com.dianping.cat.report.task.alert.sender.decorator.ThirdpartyDecorator; +import com.dianping.cat.report.task.alert.sender.receiver.BusinessContactor; import com.dianping.cat.report.task.alert.sender.receiver.Contactor; +import com.dianping.cat.report.task.alert.sender.receiver.ContactorManager; +import com.dianping.cat.report.task.alert.sender.receiver.ExceptionContactor; +import com.dianping.cat.report.task.alert.sender.receiver.NetworkContactor; +import com.dianping.cat.report.task.alert.sender.receiver.SystemContactor; +import com.dianping.cat.report.task.alert.sender.receiver.ThirdpartyContactor; import com.dianping.cat.report.task.alert.sender.sender.MailSender; import com.dianping.cat.report.task.alert.sender.sender.Sender; import com.dianping.cat.report.task.alert.sender.sender.SenderManager; import com.dianping.cat.report.task.alert.sender.sender.SmsSender; import com.dianping.cat.report.task.alert.sender.sender.WeixinSender; +import com.dianping.cat.report.task.alert.sender.spliter.MailSpliter; +import com.dianping.cat.report.task.alert.sender.spliter.SmsSpliter; +import com.dianping.cat.report.task.alert.sender.spliter.Spliter; +import com.dianping.cat.report.task.alert.sender.spliter.SpliterManager; +import com.dianping.cat.report.task.alert.sender.spliter.WeixinSpliter; import com.dianping.cat.report.task.alert.summary.AlertSummaryDecorator; import com.dianping.cat.report.task.alert.summary.AlertSummaryExecutor; import com.dianping.cat.report.task.alert.summary.AlertSummaryFTLDecorator; @@ -119,31 +132,65 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(DataChecker.class, DefaultDataChecker.class)); all.add(C(RemoteMetricReportService.class).req(ServerConfigManager.class)); - all.add(C(Sender.class, MailSender.ID, MailSender.class)); + all.add(C(Contactor.class, BusinessContactor.ID, BusinessContactor.class).req(ProjectDao.class, + AlertConfigManager.class)); - all.add(C(Sender.class, SmsSender.ID, SmsSender.class)); + all.add(C(Contactor.class, NetworkContactor.ID, NetworkContactor.class).req(ProjectDao.class, + AlertConfigManager.class)); - all.add(C(Sender.class, WeixinSender.ID, WeixinSender.class)); + all.add(C(Contactor.class, SystemContactor.ID, SystemContactor.class).req(ProjectDao.class, + AlertConfigManager.class)); + + all.add(C(Contactor.class, ExceptionContactor.ID, ExceptionContactor.class).req(ProductLineConfigManager.class, + AlertConfigManager.class)); + + all.add(C(Contactor.class, ThirdpartyContactor.ID, ThirdpartyContactor.class).req(ProductLineConfigManager.class, + AlertConfigManager.class)); + + all.add(C(ContactorManager.class).req(Contactor.class, BusinessContactor.ID, "businessContactor") + .req(Contactor.class, NetworkContactor.ID, "networkContactor") + .req(Contactor.class, SystemContactor.ID, "exceptionContactor") + .req(Contactor.class, ExceptionContactor.ID, "systemContactor") + .req(Contactor.class, ThirdpartyContactor.ID, "thirdpartyContactor")); + + all.add(C(Decorator.class, BusinessDecorator.ID, BusinessDecorator.class).req(ProjectDao.class)); + + all.add(C(Decorator.class, NetworkDecorator.ID, NetworkDecorator.class).req(ProjectDao.class)); + + all.add(C(Decorator.class, ExceptionDecorator.ID, ExceptionDecorator.class).req(ProjectDao.class)); - all.add(C(Decorator.class, MailDecorator.ID, MailDecorator.class).req(ProjectDao.class)); + all.add(C(Decorator.class, SystemDecorator.ID, SystemDecorator.class).req(ProjectDao.class)); - all.add(C(Decorator.class, SmsDecorator.ID, SmsDecorator.class).req(ProjectDao.class)); + all.add(C(Decorator.class, ThirdpartyDecorator.ID, ThirdpartyDecorator.class).req(ProjectDao.class)); - all.add(C(Decorator.class, WeixinDecorator.ID, WeixinDecorator.class).req(ProjectDao.class)); + all.add(C(DecoratorManager.class).req(Decorator.class, BusinessDecorator.ID, "businessDecorator") + .req(Decorator.class, NetworkDecorator.ID, "networkDecorator") + .req(Decorator.class, ExceptionDecorator.ID, "exceptionDecorator") + .req(Decorator.class, SystemDecorator.ID, "systemDecorator") + .req(Decorator.class, ThirdpartyDecorator.ID, "thirdpartyDecorator")); all.add(C(AlertPolicyManager.class).req(ConfigDao.class)); - all.add(C(DecoratorManager.class).req(Decorator.class, MailDecorator.ID, "mailDecorator") - .req(Decorator.class, SmsDecorator.ID, "smsDecorator") - .req(Decorator.class, WeixinDecorator.ID, "weixinDecorator")); + all.add(C(Spliter.class, MailSpliter.ID, MailSpliter.class)); - all.add(C(Contactor.class).req(ProjectDao.class, ProductLineConfigManager.class, AlertConfigManager.class)); + all.add(C(Spliter.class, SmsSpliter.ID, SmsSpliter.class)); + + all.add(C(Spliter.class, WeixinSpliter.ID, WeixinSpliter.class)); + + all.add(C(SpliterManager.class).req(Spliter.class, MailSpliter.ID, "mailSpliter") + .req(Spliter.class, SmsSpliter.ID, "smsSpliter").req(Spliter.class, WeixinSpliter.ID, "weixinSpliter")); + + all.add(C(Sender.class, MailSender.ID, MailSender.class).req(ServerConfigManager.class)); + + all.add(C(Sender.class, SmsSender.ID, SmsSender.class)); + + all.add(C(Sender.class, WeixinSender.ID, WeixinSender.class)); all.add(C(SenderManager.class).req(Sender.class, MailSender.ID, "mailSender") .req(Sender.class, WeixinSender.ID, "weixinSender").req(Sender.class, SmsSender.ID, "smsSender")); - all.add(C(AlertManager.class).req(AlertPolicyManager.class, DecoratorManager.class, Contactor.class, - AlertEntityService.class, SenderManager.class)); + all.add(C(AlertManager.class).req(AlertPolicyManager.class, DecoratorManager.class, ContactorManager.class, + AlertEntityService.class, SpliterManager.class, SenderManager.class)); all.add(C(BusinessAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class, BaselineService.class, AlertInfo.class).req(RemoteMetricReportService.class, @@ -157,8 +204,9 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(AlertExceptionBuilder.class).req(ExceptionConfigManager.class)); - all.add(C(ExceptionAlert.class).req(ExceptionConfigManager.class, AlertExceptionBuilder.class, AlertManager.class) - .req(ModelService.class, TopAnalyzer.ID)); + all.add(C(ExceptionAlert.class) + .req(ExceptionConfigManager.class, AlertExceptionBuilder.class, AlertManager.class).req(ModelService.class, + TopAnalyzer.ID)); all.add(C(ThirdPartyAlert.class).req(AlertManager.class)); diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java index e8a82fa54a87591a4ed3d639408b528d7c820b42..a464559173a540e41c77631c0b11e81dc1ba7720 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java @@ -18,12 +18,13 @@ import com.dianping.cat.message.Transaction; import com.dianping.cat.report.task.alert.AlertResultEntity; import com.dianping.cat.report.task.alert.BaseAlert; import com.dianping.cat.report.task.alert.MetricType; +import com.dianping.cat.report.task.alert.sender.AlertConstants; import com.dianping.cat.report.task.alert.sender.AlertEntity; import com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder; public class BusinessAlert extends BaseAlert implements Task, LogEnabled { - public static String ID = "business"; + public static String ID = AlertConstants.BUSINESS; @Inject protected MetricConfigManager m_metricConfigManager; diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java index 7fa97843b8297ba255c6f2daae17f22458ebba4d..9f3429b1fb3a2e8d7d3429bb9baa54263e4f58e0 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java @@ -21,6 +21,7 @@ import com.dianping.cat.report.page.model.spi.ModelService; import com.dianping.cat.report.page.top.TopMetric; import com.dianping.cat.report.page.top.TopMetric.Item; import com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder.AlertException; +import com.dianping.cat.report.task.alert.sender.AlertConstants; import com.dianping.cat.report.task.alert.sender.AlertEntity; import com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder; import com.dianping.cat.report.task.alert.sender.AlertManager; @@ -56,7 +57,7 @@ public class ExceptionAlert implements Task { } public String getName() { - return "exception"; + return AlertConstants.EXCEPTION; } private TopReport queryTopReport(Date start) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/network/NetworkAlert.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/network/NetworkAlert.java index 4bd73b6e370218128c47a47e0b51184b4eaa432e..73e47dda293ada37f7ba3067cac32095146d0f6b 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/network/NetworkAlert.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/network/NetworkAlert.java @@ -11,6 +11,7 @@ import com.dianping.cat.Cat; import com.dianping.cat.consumer.company.model.entity.ProductLine; import com.dianping.cat.message.Transaction; import com.dianping.cat.report.task.alert.BaseAlert; +import com.dianping.cat.report.task.alert.sender.AlertConstants; public class NetworkAlert extends BaseAlert implements Task, LogEnabled { @@ -21,7 +22,7 @@ public class NetworkAlert extends BaseAlert implements Task, LogEnabled { @Override public String getName() { - return "network"; + return AlertConstants.NETWORK; } @Override diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertChannel.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertChannel.java index c6521ed498f14a333f493029891181d85295a0e9..0c56f0f0188b58df24c64b72341fa27d5ded02be 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertChannel.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertChannel.java @@ -2,17 +2,17 @@ package com.dianping.cat.report.task.alert.sender; public enum AlertChannel { - MAIL("mail"), + MAIL(AlertConstants.MAIL), - SMS("sms"), + SMS(AlertConstants.SMS), - WEIXIN("weixin"); + WEIXIN(AlertConstants.WEIXIN); private String m_name; public static AlertChannel findByName(String name) { for (AlertChannel channel : values()) { - if(channel.getName().equals(name)){ + if (channel.getName().equals(name)) { return channel; } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertConstants.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..612f44ca8c34660a28fa4f146b705ce4f3cf36bd --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertConstants.java @@ -0,0 +1,21 @@ +package com.dianping.cat.report.task.alert.sender; + +public class AlertConstants { + + public static final String BUSINESS = "business"; + + public static final String EXCEPTION = "exception"; + + public static final String NETWORK = "network"; + + public static final String SYSTEM = "system"; + + public static final String THIRDPARTY = "thirdParty"; + + public static final String MAIL = "mail"; + + public static final String SMS = "sms"; + + public static final String WEIXIN = "weixin"; + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertManager.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertManager.java index 102b246d02d9ed796947e62f5acc39306b830a77..0a3df7263bf7b9d6c15edabfa64e6c50ded28bd2 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertManager.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/AlertManager.java @@ -15,8 +15,9 @@ import org.unidal.tuple.Pair; import com.dianping.cat.Cat; import com.dianping.cat.report.task.alert.manager.AlertEntityService; import com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager; -import com.dianping.cat.report.task.alert.sender.receiver.Contactor; +import com.dianping.cat.report.task.alert.sender.receiver.ContactorManager; import com.dianping.cat.report.task.alert.sender.sender.SenderManager; +import com.dianping.cat.report.task.alert.sender.spliter.SpliterManager; import com.dianping.cat.system.config.AlertPolicyManager; public class AlertManager implements Initializable { @@ -28,15 +29,18 @@ public class AlertManager implements Initializable { private DecoratorManager m_decoratorManager; @Inject - private Contactor m_contactor; + private ContactorManager m_contactorManager; @Inject protected AlertEntityService m_alertEntityService; + @Inject + protected SpliterManager m_splitterManager; + @Inject protected SenderManager m_senderManager; - private BlockingQueue m_alerts = new LinkedBlockingDeque(); + private BlockingQueue m_alerts = new LinkedBlockingDeque(10000); private boolean send(AlertEntity alert) { boolean result = false; @@ -47,10 +51,11 @@ public class AlertManager implements Initializable { for (AlertChannel channel : channels) { String channelName = channel.getName(); - Pair pair = m_decoratorManager.generateTitleAndContent(alert, channelName); - List receivers = m_contactor.queryReceivers(group, channel, type); - String content = pair.getValue(); - AlertMessageEntity message = new AlertMessageEntity(group, pair.getKey(), content, receivers); + Pair pair = m_decoratorManager.generateTitleAndContent(alert); + String title = pair.getKey(); + String content = m_splitterManager.process(pair.getValue(), channelName); + List receivers = m_contactorManager.queryReceivers(group, channelName, type); + AlertMessageEntity message = new AlertMessageEntity(group, title, content, receivers); m_alertEntityService.storeAlert(alert, message); diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/BusinessDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/BusinessDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..2e52bb7c9b8e23f98b04e3796678bbdb30117e59 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/BusinessDecorator.java @@ -0,0 +1,23 @@ +package com.dianping.cat.report.task.alert.sender.decorator; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; +import com.dianping.cat.report.task.alert.sender.AlertEntity; + +public class BusinessDecorator extends DefaultDecorator { + + public static final String ID = AlertConstants.BUSINESS; + + @Override + public String getId() { + return ID; + } + + @Override + public String generateTitle(AlertEntity alert) { + StringBuilder sb = new StringBuilder(); + sb.append("[业务告警] [产品线 ").append(alert.getGroup()).append("]"); + sb.append("[业务指标 ").append(alert.getMetric()).append("]"); + return sb.toString(); + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/Decorator2.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/Decorator2.java deleted file mode 100644 index 6fb7f09e32d32c1988b8db9c790c6a09a3170989..0000000000000000000000000000000000000000 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/Decorator2.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.dianping.cat.report.task.alert.sender.decorator; - -import com.dianping.cat.report.task.alert.sender.AlertEntity; - -public interface Decorator2 { - - //return exeption,network,system... - public String getId(); - - public String generateTitle(AlertEntity alert); - - public String generateContent(AlertEntity alert); - -} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DecoratorManager.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DecoratorManager.java index dcfab054c692940b370fcfc49c80c40af5c55579..e0ef394b1d75963e7df8930de1f6cf9dd8c16e38 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DecoratorManager.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DecoratorManager.java @@ -12,41 +12,58 @@ import com.dianping.cat.report.task.alert.sender.AlertEntity; public class DecoratorManager implements Initializable { - @Inject(type = Decorator.class, value = MailDecorator.ID) - private Decorator m_mailDecorator; + @Inject(type = Decorator.class, value = BusinessDecorator.ID) + private Decorator m_businessDecorator; - @Inject(type = Decorator.class, value = WeixinDecorator.ID) - private Decorator m_weixinDecorator; + @Inject(type = Decorator.class, value = NetworkDecorator.ID) + private Decorator m_networkDecorator; - @Inject(type = Decorator.class, value = SmsDecorator.ID) - private Decorator m_smsDecorator; + @Inject(type = Decorator.class, value = ExceptionDecorator.ID) + private Decorator m_exceptionDecorator; + + @Inject(type = Decorator.class, value = SystemDecorator.ID) + private Decorator m_systemDecorator; + + @Inject(type = Decorator.class, value = ThirdpartyDecorator.ID) + private Decorator m_thirdpartyDecorator; private Map m_decorators = new HashMap(); - public Pair generateTitleAndContent(AlertEntity alert, String channelName) { - Decorator decorator = m_decorators.get(channelName); + public Pair generateTitleAndContent(AlertEntity alert) { + Decorator decorator = m_decorators.get(alert.getType()); String title = decorator.generateTitle(alert); String content = decorator.generateContent(alert); - + return new Pair(title, content); } @Override public void initialize() throws InitializationException { - m_decorators.put(m_mailDecorator.getId(), m_mailDecorator); - m_decorators.put(m_weixinDecorator.getId(), m_weixinDecorator); - m_decorators.put(m_smsDecorator.getId(), m_smsDecorator); + m_decorators.put(m_businessDecorator.getId(), m_businessDecorator); + m_decorators.put(m_networkDecorator.getId(), m_networkDecorator); + m_decorators.put(m_exceptionDecorator.getId(), m_exceptionDecorator); + m_decorators.put(m_systemDecorator.getId(), m_systemDecorator); + m_decorators.put(m_thirdpartyDecorator.getId(), m_thirdpartyDecorator); + } + + public void setBusinessDecorator(Decorator decorator) { + m_businessDecorator = decorator; + } + + public void setNetworkDecorator(Decorator decorator) { + m_networkDecorator = decorator; } - public void setMailDecorator(Decorator decorator) { - m_mailDecorator = decorator; + public void setExceptionDecorator(Decorator decorator) { + m_exceptionDecorator = decorator; } - public void setSmsDecorator(Decorator decorator) { - m_smsDecorator = decorator; + public void setSystemDecorator(Decorator decorator) { + m_systemDecorator = decorator; } - public void setWeixinDecorator(Decorator decorator) { - m_weixinDecorator = decorator; + public void setThirdpartyDecorator(Decorator decorator) { + m_thirdpartyDecorator = decorator; } + } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DefaultDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DefaultDecorator.java index 4de59aee96329d170d58482362e7d676cacdc05f..af822d70654f39ddd959f499d3f980a733c2c904 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DefaultDecorator.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/DefaultDecorator.java @@ -2,7 +2,6 @@ package com.dianping.cat.report.task.alert.sender.decorator; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.Date; import org.unidal.lookup.annotation.Inject; @@ -18,7 +17,7 @@ public abstract class DefaultDecorator implements Decorator { @Inject protected ProjectDao m_projectDao; - private DateFormat m_fromat = new SimpleDateFormat("yyyyMMdd"); + protected DateFormat m_format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); protected String buildContactInfo(String domainName) { try { @@ -48,79 +47,8 @@ public abstract class DefaultDecorator implements Decorator { return ""; } - protected String buildExceptionContent(AlertEntity alert) { - try { - StringBuilder sb = new StringBuilder(); - String domain = alert.getGroup(); - String date = m_fromat.format(alert.getDate()); - - sb.append("[CAT异常告警] [项目: ").append(domain).append("] : "); - sb.append(alert.getContent()).append("[时间: ").append(date).append("]"); - sb.append(" 点击此处查看详情").append("
"); - - return sb.toString(); - } catch (Exception ex) { - Cat.logError("build exception content error:" + alert.toString(), ex); - return null; - } - } - - protected String buildThirdPartyContent(AlertEntity alert) { - try { - StringBuilder sb = new StringBuilder(); - String time = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()); - - sb.append("[CAT第三方告警] [项目: ").append(alert.getGroup()).append("] : "); - sb.append(alert.getContent()).append("[时间: ").append(time).append("]"); - - return sb.toString(); - } catch (Exception ex) { - Cat.logError("build third party content error:" + alert.toString(), ex); - return null; - } - } - - public String generateTitle(AlertEntity alert) { - String type = alert.getType(); - String group = alert.getGroup(); - - if ("business".equals(type)) { - StringBuilder sb = new StringBuilder(); - sb.append("[业务告警] [产品线 ").append(group).append("]"); - sb.append("[业务指标 ").append(alert.getMetric()).append("]"); - return sb.toString(); - } - - if ("network".equals(type)) { - StringBuilder sb = new StringBuilder(); - sb.append("[网络告警] [产品线 ").append(group).append("]"); - sb.append("[网络指标 ").append(alert.getMetric()).append("]"); - return sb.toString(); - } - - if ("system".equals(type)) { - StringBuilder sb = new StringBuilder(); - sb.append("[系统告警] [产品线 ").append(group).append("]"); - sb.append("[系统指标 ").append(alert.getMetric()).append("]"); - return sb.toString(); - } - - if ("exception".equals(type)) { - StringBuilder sb = new StringBuilder(); - sb.append("[CAT异常告警] [项目: ").append(group).append("]"); - return sb.toString(); - } - - if ("thidparty".equals(type)) { - StringBuilder sb = new StringBuilder(); - sb.append("[CAT第三方告警] [项目: ").append(group).append("]"); - return sb.toString(); - } - - return ""; + public String generateContent(AlertEntity alert) { + return alert.getContent() + buildContactInfo(alert.getGroup()); } - public abstract String generateContent(AlertEntity alert); - } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/ExceptionDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/ExceptionDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..b44fb311860384bdfbf2025dc3e1e5daa1a9c82c --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/ExceptionDecorator.java @@ -0,0 +1,43 @@ +package com.dianping.cat.report.task.alert.sender.decorator; + +import com.dianping.cat.Cat; +import com.dianping.cat.report.task.alert.sender.AlertConstants; +import com.dianping.cat.report.task.alert.sender.AlertEntity; + +public class ExceptionDecorator extends DefaultDecorator { + + public static final String ID = AlertConstants.EXCEPTION; + + @Override + public String getId() { + return ID; + } + + @Override + public String generateTitle(AlertEntity alert) { + StringBuilder sb = new StringBuilder(); + sb.append("[CAT异常告警] [项目: ").append(alert.getGroup()).append("]"); + return sb.toString(); + } + + @Override + public String generateContent(AlertEntity alert) { + try { + StringBuilder sb = new StringBuilder(); + String domain = alert.getGroup(); + String date = m_format.format(alert.getDate()); + + sb.append("[CAT异常告警] [项目: ").append(domain).append("] : "); + sb.append(alert.getContent()).append("[时间: ").append(date).append("]"); + sb.append(" 点击此处查看详情").append("
"); + sb.append(buildContactInfo(domain)); + + return sb.toString(); + } catch (Exception ex) { + Cat.logError("build exception content error:" + alert.toString(), ex); + return null; + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/MailDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/MailDecorator.java deleted file mode 100644 index f6d41523c1d83836b5c9da87dfc998175710257e..0000000000000000000000000000000000000000 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/MailDecorator.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.dianping.cat.report.task.alert.sender.decorator; - -import com.dianping.cat.report.task.alert.sender.AlertEntity; - -public class MailDecorator extends DefaultDecorator { - - public static final String ID = "mail"; - - @Override - public String generateContent(AlertEntity alert) { - String content; - - if ("exception".equals(alert.getType())) { - content = buildExceptionContent(alert); - } else if ("thirdparty".equals(alert.getType())) { - content = buildThirdPartyContent(alert); - } else { - content = alert.getContent(); - } - - return content + buildContactInfo(alert.getGroup()); - } - - @Override - public String getId() { - return ID; - } - -} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/NetworkDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/NetworkDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..c38864b81f5e959ce5a499d3cafbf4042d24e5ee --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/NetworkDecorator.java @@ -0,0 +1,23 @@ +package com.dianping.cat.report.task.alert.sender.decorator; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; +import com.dianping.cat.report.task.alert.sender.AlertEntity; + +public class NetworkDecorator extends DefaultDecorator { + + public static final String ID = AlertConstants.NETWORK; + + @Override + public String getId() { + return ID; + } + + @Override + public String generateTitle(AlertEntity alert) { + StringBuilder sb = new StringBuilder(); + sb.append("[网络告警] [产品线 ").append(alert.getGroup()).append("]"); + sb.append("[网络指标 ").append(alert.getMetric()).append("]"); + return sb.toString(); + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SmsDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SmsDecorator.java deleted file mode 100644 index 277717b5ce6e4a1c48e7943980af8b8e92e77dd9..0000000000000000000000000000000000000000 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SmsDecorator.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.dianping.cat.report.task.alert.sender.decorator; - -import com.dianping.cat.report.task.alert.sender.AlertEntity; - -public class SmsDecorator extends DefaultDecorator { - - public static final String ID = "sms"; - - @Override - public String generateContent(AlertEntity alert) { - String content; - - if ("exception".equals(alert.getType())) { - content = buildExceptionContent(alert); - } else if ("thirdparty".equals(alert.getType())) { - content = buildThirdPartyContent(alert); - } else { - content = alert.getContent(); - } - - content = content + buildContactInfo(alert.getGroup()); - - return content.replaceAll("
", " "); - } - - @Override - public String getId() { - return ID; - } - -} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SplitProcessor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SplitProcessor.java deleted file mode 100644 index 7e13b8ac8933c51b59c26d1354547fc2ec4f7a8d..0000000000000000000000000000000000000000 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SplitProcessor.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.dianping.cat.report.task.alert.sender.decorator; - -import com.dianping.cat.report.task.alert.sender.AlertChannel; - -public interface SplitProcessor { - - public String process(String content, AlertChannel channel); - -} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SystemDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SystemDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..b2b29db8a25dee935762aaf2d65c80d3e4f74107 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/SystemDecorator.java @@ -0,0 +1,23 @@ +package com.dianping.cat.report.task.alert.sender.decorator; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; +import com.dianping.cat.report.task.alert.sender.AlertEntity; + +public class SystemDecorator extends DefaultDecorator { + + public static final String ID = AlertConstants.SYSTEM; + + @Override + public String getId() { + return ID; + } + + @Override + public String generateTitle(AlertEntity alert) { + StringBuilder sb = new StringBuilder(); + sb.append("[系统告警] [产品线 ").append(alert.getGroup()).append("]"); + sb.append("[系统指标 ").append(alert.getMetric()).append("]"); + return sb.toString(); + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/ThirdpartyDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/ThirdpartyDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..4c3f3cbc07f1583d100b03b25b05d028e5e6f9f2 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/ThirdpartyDecorator.java @@ -0,0 +1,43 @@ +package com.dianping.cat.report.task.alert.sender.decorator; + +import java.util.Date; + +import com.dianping.cat.Cat; +import com.dianping.cat.report.task.alert.sender.AlertConstants; +import com.dianping.cat.report.task.alert.sender.AlertEntity; + +public class ThirdpartyDecorator extends DefaultDecorator { + + public static final String ID = AlertConstants.THIRDPARTY; + + @Override + public String getId() { + return ID; + } + + @Override + public String generateTitle(AlertEntity alert) { + StringBuilder sb = new StringBuilder(); + sb.append("[CAT第三方告警] [项目: ").append(alert.getGroup()).append("]"); + return sb.toString(); + } + + @Override + public String generateContent(AlertEntity alert) { + try { + StringBuilder sb = new StringBuilder(); + String time = m_format.format(new Date()); + String group = alert.getGroup(); + + sb.append("[CAT第三方告警] [项目: ").append(group).append("] : "); + sb.append(alert.getContent()).append("[时间: ").append(time).append("]"); + sb.append("
").append(buildContactInfo(group)); + + return sb.toString(); + } catch (Exception ex) { + Cat.logError("build third party content error:" + alert.toString(), ex); + return null; + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/WeixinDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/WeixinDecorator.java deleted file mode 100644 index 2e8617c48cd6d9c484e652e6d1ee0211c7d3cb16..0000000000000000000000000000000000000000 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/decorator/WeixinDecorator.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.dianping.cat.report.task.alert.sender.decorator; - -import com.dianping.cat.report.task.alert.sender.AlertEntity; - -public class WeixinDecorator extends DefaultDecorator { - - public static final String ID = "weixin"; - - @Override - public String generateContent(AlertEntity alert) { - String content; - - if ("exception".equals(alert.getType())) { - content = buildExceptionContent(alert); - } else if ("thirdparty".equals(alert.getType())) { - content = buildThirdPartyContent(alert); - } else { - content = alert.getContent(); - } - - content = content + buildContactInfo(alert.getGroup()); - - return content.replaceAll("
", "\n"); - } - - @Override - public String getId() { - return ID; - } -} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/BusinessContactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/BusinessContactor.java new file mode 100644 index 0000000000000000000000000000000000000000..4eafa8838c3e5c188074fc2fd0ee05d1b250a910 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/BusinessContactor.java @@ -0,0 +1,14 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class BusinessContactor extends ProductlineContactor { + + public static final String ID = AlertConstants.BUSINESS; + + @Override + public String getId() { + return ID; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/Contactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/Contactor.java index ce8160c293bcca15904571b1e642ee9a17bb7a39..a3cced23e104bd8a030eae71dd61e0152193e34f 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/Contactor.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/Contactor.java @@ -1,222 +1,16 @@ package com.dianping.cat.report.task.alert.sender.receiver; -import java.util.ArrayList; import java.util.List; -import org.unidal.dal.jdbc.DalException; -import org.unidal.lookup.annotation.Inject; +public interface Contactor { -import com.dianping.cat.Cat; -import com.dianping.cat.consumer.company.model.entity.ProductLine; -import com.dianping.cat.consumer.metric.ProductLineConfigManager; -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.config.entity.Receiver; -import com.dianping.cat.report.task.alert.sender.AlertChannel; -import com.dianping.cat.system.config.AlertConfigManager; -import com.site.helper.Splitters; + public String getId(); -public class Contactor { + public List queryEmailContactors(); - @Inject - protected ProjectDao m_projectDao; + public List queryWeiXinContactors(); - @Inject - protected ProductLineConfigManager m_productLineConfigManager; - - @Inject - protected AlertConfigManager m_configManager; - - public List queryReceivers(String productlineName, AlertChannel channel, String alertType) { - if ("exception".equals(alertType) || "thirdparty".equals(alertType)) { - return queryReceiversByDomain(productlineName, channel, alertType); - } else { - return queryReceiversByProductline(productlineName, channel, alertType); - } - } - - public List queryReceiversByProductline(String productlineName, AlertChannel channel, String type) { - ProductLine productline = m_productLineConfigManager.queryProductLine(productlineName); - - if (channel == AlertChannel.MAIL) { - return buildMailReceivers(productline, type); - } - - if (channel == AlertChannel.WEIXIN) { - return buildWeixinReceivers(productline, type); - } - - if (channel == AlertChannel.SMS) { - return buildSMSReceivers(productline, type); - } - - return new ArrayList(); - } - - public List queryReceiversByDomain(String domainName, AlertChannel channel, String type) { - try { - Project project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL); - - if (channel == AlertChannel.MAIL) { - return buildMailReceivers(project, type); - } - - if (channel == AlertChannel.WEIXIN) { - return buildWeixinReceivers(project, type); - } - - if (channel == AlertChannel.SMS) { - return buildSMSReceivers(project, type); - } - - } catch (DalException e) { - Cat.logError("query receivers error:" + domainName + " " + channel + " " + type, e); - } - - return new ArrayList(); - - } - - private List buildMailReceivers(ProductLine productLine, String type) { - List mailReceivers = new ArrayList(); - Receiver receiver = m_configManager.queryReceiverById(type); - - if (receiver != null && !receiver.isEnable()) { - return mailReceivers; - } else { - mailReceivers.addAll(buildDefaultMailReceivers(receiver)); - mailReceivers.addAll(buildProductlineMailReceivers(productLine)); - - return mailReceivers; - } - } - - private List buildMailReceivers(Project project, String type) { - List mailReceivers = new ArrayList(); - Receiver receiver = m_configManager.queryReceiverById(type); - - if (receiver != null && !receiver.isEnable()) { - return mailReceivers; - } else { - mailReceivers.addAll(buildDefaultMailReceivers(receiver)); - mailReceivers.addAll(buildProjectMailReceivers(project)); - - return mailReceivers; - } - } - - private List buildDefaultMailReceivers(Receiver receiver) { - List mailReceivers = new ArrayList(); - - if (receiver != null) { - mailReceivers.addAll(receiver.getEmails()); - } - return mailReceivers; - } - - private List buildProductlineMailReceivers(ProductLine productLine) { - return split(productLine.getEmail()); - } - - private List buildProjectMailReceivers(Project project) { - return split(project.getEmail()); - } - - private List buildSMSReceivers(ProductLine productLine, String type) { - List smsReceivers = new ArrayList(); - Receiver receiver = m_configManager.queryReceiverById(type); - - if (receiver != null && !receiver.isEnable()) { - return smsReceivers; - } else { - smsReceivers.addAll(buildDefaultSMSReceivers(receiver)); - smsReceivers.addAll(buildProductlineSMSReceivers(productLine)); - - return smsReceivers; - } - } - - private List buildSMSReceivers(Project project, String type) { - List smsReceivers = new ArrayList(); - Receiver receiver = m_configManager.queryReceiverById(type); - - if (receiver != null && !receiver.isEnable()) { - return smsReceivers; - } else { - smsReceivers.addAll(buildDefaultSMSReceivers(receiver)); - smsReceivers.addAll(buildProjectSMSReceivers(project)); - - return smsReceivers; - } - } - - private List buildDefaultSMSReceivers(Receiver receiver) { - List smsReceivers = new ArrayList(); - - if (receiver != null) { - smsReceivers.addAll(receiver.getPhones()); - } - return smsReceivers; - } - - private List buildProductlineSMSReceivers(ProductLine productLine) { - return split(productLine.getPhone()); - } - - private List buildProjectSMSReceivers(Project project) { - return split(project.getPhone()); - } - - private List buildWeixinReceivers(Project project, String type) { - List weixinReceivers = new ArrayList(); - Receiver receiver = m_configManager.queryReceiverById(type); - - if (receiver != null && !receiver.isEnable()) { - return weixinReceivers; - } else { - weixinReceivers.addAll(buildDefaultWeixinReceivers(receiver)); - weixinReceivers.addAll(buildProjectMailReceivers(project)); - - return weixinReceivers; - } - } - - private List buildWeixinReceivers(ProductLine productLine, String type) { - List weixinReceivers = new ArrayList(); - Receiver receiver = m_configManager.queryReceiverById(type); - - if (receiver != null && !receiver.isEnable()) { - return weixinReceivers; - } else { - weixinReceivers.addAll(buildDefaultWeixinReceivers(receiver)); - weixinReceivers.addAll(buildProductlineWeixinReceivers(productLine)); - - return weixinReceivers; - } - } - - private List buildDefaultWeixinReceivers(Receiver receiver) { - List weixinReceivers = new ArrayList(); - - if (receiver != null) { - weixinReceivers.addAll(receiver.getWeixins()); - } - return weixinReceivers; - } - - private List buildProductlineWeixinReceivers(ProductLine productLine) { - return split(productLine.getEmail()); - } - - private List split(String str) { - List result = new ArrayList(); - - if (str != null) { - result.addAll(Splitters.by(",").noEmptyItem().split(str)); - } - - return result; - } + public List querySmsContactors(); + public void setModule(String id); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/Contactor2.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/Contactor2.java deleted file mode 100644 index 5c4d28dc17bf74ffc0e5bc031d9bf43b5fda3390..0000000000000000000000000000000000000000 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/Contactor2.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.dianping.cat.report.task.alert.sender.receiver; - -import java.util.List; - -public interface Contactor2 { - - public String getId(); - - public List queryEmailContactors(String id); - - public List queryWeiXinContactors(String id); - - public List querySmsContactors(String id); -} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ContactorManager.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ContactorManager.java new file mode 100644 index 0000000000000000000000000000000000000000..4778fdee92c3f623373c390794832753f6cb1e1e --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ContactorManager.java @@ -0,0 +1,77 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class ContactorManager implements Initializable { + + @Inject(type = Contactor.class, value = BusinessContactor.ID) + private Contactor m_businessContactor; + + @Inject(type = Contactor.class, value = NetworkContactor.ID) + private Contactor m_networkContactor; + + @Inject(type = Contactor.class, value = ExceptionContactor.ID) + private Contactor m_exceptionContactor; + + @Inject(type = Contactor.class, value = SystemContactor.ID) + private Contactor m_systemContactor; + + @Inject(type = Contactor.class, value = ThirdpartyContactor.ID) + private Contactor m_thirdpartyContactor; + + private Map m_contactors = new HashMap(); + + public List queryReceivers(String group, String channel, String type) { + Contactor contactor = m_contactors.get(type); + contactor.setModule(group); + + if (AlertConstants.MAIL.equals(channel)) { + return contactor.queryEmailContactors(); + } else if (AlertConstants.SMS.equals(channel)) { + return contactor.querySmsContactors(); + } else if (AlertConstants.WEIXIN.equals(channel)) { + return contactor.queryWeiXinContactors(); + } + + return new ArrayList(); + } + + @Override + public void initialize() throws InitializationException { + m_contactors.put(m_businessContactor.getId(), m_businessContactor); + m_contactors.put(m_networkContactor.getId(), m_networkContactor); + m_contactors.put(m_exceptionContactor.getId(), m_exceptionContactor); + m_contactors.put(m_systemContactor.getId(), m_systemContactor); + m_contactors.put(m_thirdpartyContactor.getId(), m_thirdpartyContactor); + } + + public void setBusinessContactor(Contactor contactor) { + m_businessContactor = contactor; + } + + public void setNetworkContactor(Contactor networkContactor) { + m_networkContactor = networkContactor; + } + + public void setExceptionContactor(Contactor exceptionContactor) { + m_exceptionContactor = exceptionContactor; + } + + public void setSystemContactor(Contactor systemContactor) { + m_systemContactor = systemContactor; + } + + public void setThirdpartyContactor(Contactor thirdpartyContactor) { + m_thirdpartyContactor = thirdpartyContactor; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/DefaultContactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/DefaultContactor.java new file mode 100644 index 0000000000000000000000000000000000000000..0bc62614fdcae978f7db67b86c43b18ba111ca4b --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/DefaultContactor.java @@ -0,0 +1,47 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import java.util.ArrayList; +import java.util.List; + +import com.dianping.cat.home.alert.config.entity.Receiver; +import com.site.helper.Splitters; + +public abstract class DefaultContactor { + + protected List buildDefaultMailReceivers(Receiver receiver) { + List mailReceivers = new ArrayList(); + + if (receiver != null) { + mailReceivers.addAll(receiver.getEmails()); + } + return mailReceivers; + } + + protected List buildDefaultSMSReceivers(Receiver receiver) { + List smsReceivers = new ArrayList(); + + if (receiver != null) { + smsReceivers.addAll(receiver.getPhones()); + } + return smsReceivers; + } + + protected List buildDefaultWeixinReceivers(Receiver receiver) { + List weixinReceivers = new ArrayList(); + + if (receiver != null) { + weixinReceivers.addAll(receiver.getWeixins()); + } + return weixinReceivers; + } + + protected List split(String str) { + List result = new ArrayList(); + + if (str != null) { + result.addAll(Splitters.by(",").noEmptyItem().split(str)); + } + + return result; + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ExceptionContactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ExceptionContactor.java new file mode 100644 index 0000000000000000000000000000000000000000..65ad8eabfbf2fd91d87a5749d9599738d1b3e72b --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ExceptionContactor.java @@ -0,0 +1,14 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class ExceptionContactor extends ProjectContactor { + + public static final String ID = AlertConstants.EXCEPTION; + + @Override + public String getId() { + return ID; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/NetworkContactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/NetworkContactor.java new file mode 100644 index 0000000000000000000000000000000000000000..305a22ab5d1951dbc6a54a8b922e596728ce4795 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/NetworkContactor.java @@ -0,0 +1,14 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class NetworkContactor extends ProductlineContactor { + + public static final String ID = AlertConstants.NETWORK; + + @Override + public String getId() { + return ID; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ProductlineContactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ProductlineContactor.java new file mode 100644 index 0000000000000000000000000000000000000000..78b550157c02c8aeab80f9e44afd22f915c69909 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ProductlineContactor.java @@ -0,0 +1,79 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import java.util.ArrayList; +import java.util.List; + +import org.unidal.dal.jdbc.DalException; +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.Cat; +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.config.entity.Receiver; +import com.dianping.cat.system.config.AlertConfigManager; + +public abstract class ProductlineContactor extends DefaultContactor implements Contactor { + + @Inject + protected ProjectDao m_projectDao; + + @Inject + protected AlertConfigManager m_configManager; + + protected Project m_project = new Project(); + + @Override + public List queryEmailContactors() { + List mailReceivers = new ArrayList(); + Receiver receiver = m_configManager.queryReceiverById(getId()); + + if (receiver != null && !receiver.isEnable()) { + return mailReceivers; + } else { + mailReceivers.addAll(buildDefaultMailReceivers(receiver)); + mailReceivers.addAll(split(m_project.getEmail())); + + return mailReceivers; + } + } + + @Override + public List querySmsContactors() { + List smsReceivers = new ArrayList(); + Receiver receiver = m_configManager.queryReceiverById(getId()); + + if (receiver != null && !receiver.isEnable()) { + return smsReceivers; + } else { + smsReceivers.addAll(buildDefaultSMSReceivers(receiver)); + smsReceivers.addAll(split(m_project.getPhone())); + + return smsReceivers; + } + } + + @Override + public List queryWeiXinContactors() { + List weixinReceivers = new ArrayList(); + Receiver receiver = m_configManager.queryReceiverById(getId()); + + if (receiver != null && !receiver.isEnable()) { + return weixinReceivers; + } else { + weixinReceivers.addAll(buildDefaultWeixinReceivers(receiver)); + weixinReceivers.addAll(split(m_project.getEmail())); + + return weixinReceivers; + } + } + + public void setModule(String domainName) { + try { + m_project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL); + } catch (DalException e) { + Cat.logError("query project error:" + domainName, e); + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ProjectContactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ProjectContactor.java new file mode 100644 index 0000000000000000000000000000000000000000..a28fe6a50bbb659a5fc0d27d64ca6dd0b91ed585 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ProjectContactor.java @@ -0,0 +1,77 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import java.util.ArrayList; +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.consumer.metric.ProductLineConfigManager; +import com.dianping.cat.home.alert.config.entity.Receiver; +import com.dianping.cat.system.config.AlertConfigManager; + +public abstract class ProjectContactor extends DefaultContactor implements Contactor { + + @Inject + protected ProductLineConfigManager m_productLineConfigManager; + + @Inject + protected AlertConfigManager m_configManager; + + protected ProductLine m_productline = new ProductLine(); + + @Override + public List queryEmailContactors() { + List mailReceivers = new ArrayList(); + Receiver receiver = m_configManager.queryReceiverById(getId()); + + if (receiver != null && !receiver.isEnable()) { + return mailReceivers; + } else { + mailReceivers.addAll(buildDefaultMailReceivers(receiver)); + mailReceivers.addAll(split(m_productline.getEmail())); + + return mailReceivers; + } + } + + @Override + public List querySmsContactors() { + List smsReceivers = new ArrayList(); + Receiver receiver = m_configManager.queryReceiverById(getId()); + + if (receiver != null && !receiver.isEnable()) { + return smsReceivers; + } else { + smsReceivers.addAll(buildDefaultSMSReceivers(receiver)); + smsReceivers.addAll(split(m_productline.getPhone())); + + return smsReceivers; + } + } + + @Override + public List queryWeiXinContactors() { + List weixinReceivers = new ArrayList(); + Receiver receiver = m_configManager.queryReceiverById(getId()); + + if (receiver != null && !receiver.isEnable()) { + return weixinReceivers; + } else { + weixinReceivers.addAll(buildDefaultWeixinReceivers(receiver)); + weixinReceivers.addAll(split(m_productline.getEmail())); + + return weixinReceivers; + } + } + + public void setModule(String productlineName) { + try { + m_productline = m_productLineConfigManager.queryProductLine(productlineName); + } catch (Exception e) { + Cat.logError("query productline error:" + productlineName, e); + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/SystemContactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/SystemContactor.java new file mode 100644 index 0000000000000000000000000000000000000000..3f957980d1e9915833b1d10f273de547e3c81d87 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/SystemContactor.java @@ -0,0 +1,14 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class SystemContactor extends ProductlineContactor { + + public static final String ID = AlertConstants.SYSTEM; + + @Override + public String getId() { + return ID; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ThirdpartyContactor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ThirdpartyContactor.java new file mode 100644 index 0000000000000000000000000000000000000000..56f8b9118b937c7b50afb0c640bb01e66096a26c --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/receiver/ThirdpartyContactor.java @@ -0,0 +1,14 @@ +package com.dianping.cat.report.task.alert.sender.receiver; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class ThirdpartyContactor extends ProjectContactor { + + public static final String ID = AlertConstants.THIRDPARTY; + + @Override + public String getId() { + return ID; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/MailSender.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/MailSender.java index 3677f052ae4923c4ba149a872b86e382116f643b..5db3a878ee314f210ed49c65e459491ce205ef5f 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/MailSender.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/MailSender.java @@ -7,29 +7,83 @@ import java.net.URL; import java.net.URLConnection; import java.util.List; +import javax.mail.Authenticator; + +import org.apache.commons.mail.DefaultAuthenticator; +import org.apache.commons.mail.EmailException; +import org.apache.commons.mail.HtmlEmail; import org.codehaus.plexus.logging.LogEnabled; import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.unidal.helper.Files; +import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; +import com.dianping.cat.ServerConfigManager; import com.dianping.cat.message.Event; +import com.dianping.cat.report.task.alert.sender.AlertConstants; import com.dianping.cat.report.task.alert.sender.AlertMessageEntity; -public class MailSender implements Sender, LogEnabled { +public class MailSender implements Initializable, Sender, LogEnabled { + + @Inject + private ServerConfigManager m_manager; + + public static final String ID = AlertConstants.MAIL; + + private String m_name; + + private String m_password; - public static final String ID = "mail"; + private Authenticator m_authenticator; private Logger m_logger; + private HtmlEmail createHtmlEmail() throws EmailException { + HtmlEmail email = new HtmlEmail(); + + email.setHostName("smtp.gmail.com"); + email.setSmtpPort(465); + email.setAuthenticator(m_authenticator); + email.setSSL(true); + email.setFrom(m_name); + email.setCharset("utf-8"); + return email; + } + + @Override + public void enableLogging(Logger logger) { + m_logger = logger; + } + + @Override + public String getId() { + return ID; + } + + @Override + public void initialize() { + m_name = m_manager.getEmailAccount(); + m_password = m_manager.getEmailPassword(); + m_authenticator = new DefaultAuthenticator(m_name, m_password); + } + @Override public boolean send(AlertMessageEntity message, String type) { try { String messageStr = message.toString(); - if (!sendEmail(message)) { - Cat.logEvent("AlertMailError", type, Event.SUCCESS, messageStr); - m_logger.info("AlertMailError " + messageStr); - return false; + boolean result = sendEmail(message); + + if (!result) { + Cat.logEvent("InternalEmailSendError", type, Event.SUCCESS, messageStr); + boolean gmail = sendEmailByGmail(message); + + if (gmail == false) { + Cat.logEvent("AlertMailError", type, Event.SUCCESS, messageStr); + m_logger.info("AlertMailError " + messageStr); + return false; + } } Cat.logEvent("AlertMail", type, Event.SUCCESS, messageStr); @@ -91,14 +145,30 @@ public class MailSender implements Sender, LogEnabled { } } - @Override - public String getId() { - return ID; - } + private boolean sendEmailByGmail(AlertMessageEntity message) { + try { + String title = message.getTitle(); + String content = message.getContent(); + List emails = message.getReceivers(); + HtmlEmail email = createHtmlEmail(); - @Override - public void enableLogging(Logger logger) { - m_logger = logger; + email.setSubject(title); + email.setFrom("CAT@dianping.com"); + + if (content != null) { + email.setHtmlMsg(content); + } + if (emails != null && emails.size() > 0) { + for (String to : emails) { + email.addTo(to); + } + email.send(); + } + return true; + } catch (Exception e) { + Cat.logError(e); + } + return false; } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/SmsSender.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/SmsSender.java index d32cc75856c6eae17864e9ecc0babee1f1d52795..db98718b2bccf20002ccb1ef7a44352dd6e0ec56 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/SmsSender.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/SmsSender.java @@ -13,11 +13,12 @@ import org.unidal.helper.Files; import com.dianping.cat.Cat; import com.dianping.cat.message.Event; +import com.dianping.cat.report.task.alert.sender.AlertConstants; import com.dianping.cat.report.task.alert.sender.AlertMessageEntity; public class SmsSender implements Sender, LogEnabled { - public static final String ID = "sms"; + public static final String ID = AlertConstants.SMS; private Logger m_logger; diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/WeixinSender.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/WeixinSender.java index ac0faba9971dd95804f4c81fe5659392358e759d..9ff8dd7bb6fb5c635230e123bc441dde9dbcb227 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/WeixinSender.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/sender/WeixinSender.java @@ -13,6 +13,7 @@ import org.codehaus.plexus.logging.Logger; import com.dianping.cat.Cat; import com.dianping.cat.message.Event; +import com.dianping.cat.report.task.alert.sender.AlertConstants; import com.dianping.cat.report.task.alert.sender.AlertMessageEntity; public class WeixinSender implements Sender, LogEnabled { @@ -21,7 +22,7 @@ public class WeixinSender implements Sender, LogEnabled { private static final String SUCCESS_TEXT = "{\"success\":\"1\"}"; - public static final String ID = "weixin"; + public static final String ID = AlertConstants.WEIXIN; private Logger m_logger; @@ -50,6 +51,7 @@ public class WeixinSender implements Sender, LogEnabled { String title = message.getTitle(); String content = message.getContent(); String weixins = message.getReceiverString(); + StringBuilder paraBuilder = new StringBuilder(300); String urlDomain = null; String urlTitle = null; @@ -68,8 +70,12 @@ public class WeixinSender implements Sender, LogEnabled { return false; } - String urlParameters = "domain=" + urlDomain + "&email=" + urlWeixins + "&title=" + urlTitle + "&content=" - + urlContent + "&type=" + urlType; + paraBuilder.append("domain=").append(urlDomain); + paraBuilder.append("&email=").append(urlWeixins); + paraBuilder.append("&title=").append(urlTitle); + paraBuilder.append("&content=").append(urlContent); + paraBuilder.append("&type=").append(urlType); + String urlParameters = paraBuilder.toString(); try { HttpURLConnection connection = (HttpURLConnection) new URL(WEIXIN_URL).openConnection(); diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/MailSpliter.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/MailSpliter.java new file mode 100644 index 0000000000000000000000000000000000000000..0ee1506c1e6afd4e967d4514b9b5d929af5ab26e --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/MailSpliter.java @@ -0,0 +1,19 @@ +package com.dianping.cat.report.task.alert.sender.spliter; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class MailSpliter implements Spliter { + + public static final String ID = AlertConstants.MAIL; + + @Override + public String process(String content) { + return content; + } + + @Override + public String getID() { + return ID; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/SmsSpliter.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/SmsSpliter.java new file mode 100644 index 0000000000000000000000000000000000000000..6f119f4828594ad7a480a2d094055688df112d04 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/SmsSpliter.java @@ -0,0 +1,19 @@ +package com.dianping.cat.report.task.alert.sender.spliter; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class SmsSpliter implements Spliter { + + public static final String ID = AlertConstants.SMS; + + @Override + public String process(String content) { + return content.replaceAll("
", " "); + } + + @Override + public String getID() { + return ID; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/Spliter.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/Spliter.java new file mode 100644 index 0000000000000000000000000000000000000000..d439e82e2adaf965061e4e5080e2a85b355bd208 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/Spliter.java @@ -0,0 +1,9 @@ +package com.dianping.cat.report.task.alert.sender.spliter; + +public interface Spliter { + + public String process(String content); + + public String getID(); + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/SpliterManager.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/SpliterManager.java new file mode 100644 index 0000000000000000000000000000000000000000..8389798698c9ea826e9dc6b4c9925a6cd8bbbf13 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/SpliterManager.java @@ -0,0 +1,47 @@ +package com.dianping.cat.report.task.alert.sender.spliter; + +import java.util.HashMap; +import java.util.Map; + +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; +import org.unidal.lookup.annotation.Inject; + +public class SpliterManager implements Initializable { + + @Inject(type = Spliter.class, value = MailSpliter.ID) + private Spliter m_mailSpliter; + + @Inject(type = Spliter.class, value = SmsSpliter.ID) + private Spliter m_smsSpliter; + + @Inject(type = Spliter.class, value = WeixinSpliter.ID) + private Spliter m_weixinSpliter; + + private Map m_spliters = new HashMap(); + + @Override + public void initialize() throws InitializationException { + m_spliters.put(m_mailSpliter.getID(), m_mailSpliter); + m_spliters.put(m_smsSpliter.getID(), m_smsSpliter); + m_spliters.put(m_weixinSpliter.getID(), m_weixinSpliter); + } + + public String process(String content, String channelName) { + Spliter splitter = m_spliters.get(channelName); + return splitter.process(content); + } + + public void setMailSpliter(Spliter mailSpliter) { + m_mailSpliter = mailSpliter; + } + + public void setSmsSpliter(Spliter smsSpliter) { + m_smsSpliter = smsSpliter; + } + + public void setWeixinSpliter(Spliter weixinSpliter) { + m_weixinSpliter = weixinSpliter; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/WeixinSpliter.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/WeixinSpliter.java new file mode 100644 index 0000000000000000000000000000000000000000..e5e9f4be7553094264b5e0203a4b611fdf3855bb --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/sender/spliter/WeixinSpliter.java @@ -0,0 +1,19 @@ +package com.dianping.cat.report.task.alert.sender.spliter; + +import com.dianping.cat.report.task.alert.sender.AlertConstants; + +public class WeixinSpliter implements Spliter { + + public static final String ID = AlertConstants.WEIXIN; + + @Override + public String process(String content) { + return content.replaceAll("
", "\n"); + } + + @Override + public String getID() { + return ID; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/system/SystemAlert.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/system/SystemAlert.java index c86b32fc004d7daeeb091d8de2bd562f9832395b..39bd0eae411b49b2643aabcaf3fc83ca9a507847 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/system/SystemAlert.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/system/SystemAlert.java @@ -11,6 +11,7 @@ import com.dianping.cat.Cat; import com.dianping.cat.consumer.company.model.entity.ProductLine; import com.dianping.cat.message.Transaction; import com.dianping.cat.report.task.alert.BaseAlert; +import com.dianping.cat.report.task.alert.sender.AlertConstants; public class SystemAlert extends BaseAlert implements Task, LogEnabled { @@ -21,7 +22,7 @@ public class SystemAlert extends BaseAlert implements Task, LogEnabled { @Override public String getName() { - return "system"; + return AlertConstants.SYSTEM; } @Override diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/thirdParty/ThirdPartyAlert.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/thirdParty/ThirdPartyAlert.java index 6c7324fe7ee2fc399b59480b772f7e39ee6bb220..cc19ef0fa9348b8a453eb5f1d54ecd808431e58a 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/thirdParty/ThirdPartyAlert.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/thirdParty/ThirdPartyAlert.java @@ -17,6 +17,7 @@ import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; import com.dianping.cat.helper.TimeUtil; import com.dianping.cat.message.Transaction; +import com.dianping.cat.report.task.alert.sender.AlertConstants; import com.dianping.cat.report.task.alert.sender.AlertEntity; import com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder; import com.dianping.cat.report.task.alert.sender.AlertManager; @@ -123,7 +124,7 @@ public class ThirdPartyAlert implements Task { @Override public String getName() { - return "thirdParty"; + return AlertConstants.THIRDPARTY; } @Override diff --git a/cat-home/src/main/java/com/dianping/cat/system/config/AlertPolicyManager.java b/cat-home/src/main/java/com/dianping/cat/system/config/AlertPolicyManager.java index 554e9ec3dfe069d815f0292f837113931fc50478..2f123160dd232ba2b2c7e2719bc3d8d67928b8be 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/config/AlertPolicyManager.java +++ b/cat-home/src/main/java/com/dianping/cat/system/config/AlertPolicyManager.java @@ -31,7 +31,7 @@ public class AlertPolicyManager implements Initializable { private static final String CONFIG_NAME = "alertPolicy"; - private static final String DEFAULT_TYPE = "default"; + private static final String DEFAULT_GROUP = "default"; public AlertPolicy getAlertPolicy() { return m_config; @@ -43,7 +43,7 @@ public class AlertPolicyManager implements Initializable { Group group = type.findGroup(groupName); if (group == null) { - group = type.findGroup(DEFAULT_TYPE); + group = type.findGroup(DEFAULT_GROUP); } Level level = group.findLevel(levelName); diff --git a/cat-home/src/main/resources/META-INF/plexus/components.xml b/cat-home/src/main/resources/META-INF/plexus/components.xml index 44b72684a5ebe22b76f1993c3f74c99ab2ce3565..627ce3c295982efcb7e07f6062e3bfcf26668f85 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -564,24 +564,105 @@ - com.dianping.cat.report.task.alert.sender.sender.Sender - mail - com.dianping.cat.report.task.alert.sender.sender.MailSender + com.dianping.cat.report.task.alert.sender.receiver.Contactor + business + com.dianping.cat.report.task.alert.sender.receiver.BusinessContactor + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.system.config.AlertConfigManager + + - com.dianping.cat.report.task.alert.sender.sender.Sender - sms - com.dianping.cat.report.task.alert.sender.sender.SmsSender + com.dianping.cat.report.task.alert.sender.receiver.Contactor + network + com.dianping.cat.report.task.alert.sender.receiver.NetworkContactor + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.system.config.AlertConfigManager + + - com.dianping.cat.report.task.alert.sender.sender.Sender - weixin - com.dianping.cat.report.task.alert.sender.sender.WeixinSender + com.dianping.cat.report.task.alert.sender.receiver.Contactor + system + com.dianping.cat.report.task.alert.sender.receiver.SystemContactor + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.system.config.AlertConfigManager + + + + + com.dianping.cat.report.task.alert.sender.receiver.Contactor + exception + com.dianping.cat.report.task.alert.sender.receiver.ExceptionContactor + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.AlertConfigManager + + + + + com.dianping.cat.report.task.alert.sender.receiver.Contactor + thirdParty + com.dianping.cat.report.task.alert.sender.receiver.ThirdpartyContactor + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.AlertConfigManager + + + + + com.dianping.cat.report.task.alert.sender.receiver.ContactorManager + com.dianping.cat.report.task.alert.sender.receiver.ContactorManager + + + com.dianping.cat.report.task.alert.sender.receiver.Contactor + business + businessContactor + + + com.dianping.cat.report.task.alert.sender.receiver.Contactor + network + networkContactor + + + com.dianping.cat.report.task.alert.sender.receiver.Contactor + system + exceptionContactor + + + com.dianping.cat.report.task.alert.sender.receiver.Contactor + exception + systemContactor + + + com.dianping.cat.report.task.alert.sender.receiver.Contactor + thirdParty + thirdpartyContactor + + com.dianping.cat.report.task.alert.sender.decorator.Decorator - mail - com.dianping.cat.report.task.alert.sender.decorator.MailDecorator + business + com.dianping.cat.report.task.alert.sender.decorator.BusinessDecorator com.dianping.cat.core.dal.ProjectDao @@ -590,8 +671,8 @@ com.dianping.cat.report.task.alert.sender.decorator.Decorator - sms - com.dianping.cat.report.task.alert.sender.decorator.SmsDecorator + network + com.dianping.cat.report.task.alert.sender.decorator.NetworkDecorator com.dianping.cat.core.dal.ProjectDao @@ -600,8 +681,8 @@ com.dianping.cat.report.task.alert.sender.decorator.Decorator - weixin - com.dianping.cat.report.task.alert.sender.decorator.WeixinDecorator + exception + com.dianping.cat.report.task.alert.sender.decorator.ExceptionDecorator com.dianping.cat.core.dal.ProjectDao @@ -609,11 +690,22 @@ - com.dianping.cat.system.config.AlertPolicyManager - com.dianping.cat.system.config.AlertPolicyManager + com.dianping.cat.report.task.alert.sender.decorator.Decorator + system + com.dianping.cat.report.task.alert.sender.decorator.SystemDecorator - com.dianping.cat.core.config.ConfigDao + com.dianping.cat.core.dal.ProjectDao + + + + + com.dianping.cat.report.task.alert.sender.decorator.Decorator + thirdParty + com.dianping.cat.report.task.alert.sender.decorator.ThirdpartyDecorator + + + com.dianping.cat.core.dal.ProjectDao @@ -623,36 +715,96 @@ com.dianping.cat.report.task.alert.sender.decorator.Decorator - mail - mailDecorator + business + businessDecorator com.dianping.cat.report.task.alert.sender.decorator.Decorator - sms - smsDecorator + network + networkDecorator com.dianping.cat.report.task.alert.sender.decorator.Decorator - weixin - weixinDecorator + exception + exceptionDecorator + + + com.dianping.cat.report.task.alert.sender.decorator.Decorator + system + systemDecorator + + + com.dianping.cat.report.task.alert.sender.decorator.Decorator + thirdParty + thirdpartyDecorator - com.dianping.cat.report.task.alert.sender.receiver.Contactor - com.dianping.cat.report.task.alert.sender.receiver.Contactor + com.dianping.cat.system.config.AlertPolicyManager + com.dianping.cat.system.config.AlertPolicyManager - com.dianping.cat.core.dal.ProjectDao + com.dianping.cat.core.config.ConfigDao + + + + com.dianping.cat.report.task.alert.sender.spliter.Spliter + mail + com.dianping.cat.report.task.alert.sender.spliter.MailSpliter + + + com.dianping.cat.report.task.alert.sender.spliter.Spliter + sms + com.dianping.cat.report.task.alert.sender.spliter.SmsSpliter + + + com.dianping.cat.report.task.alert.sender.spliter.Spliter + weixin + com.dianping.cat.report.task.alert.sender.spliter.WeixinSpliter + + + com.dianping.cat.report.task.alert.sender.spliter.SpliterManager + com.dianping.cat.report.task.alert.sender.spliter.SpliterManager + - com.dianping.cat.consumer.metric.ProductLineConfigManager + com.dianping.cat.report.task.alert.sender.spliter.Spliter + mail + mailSpliter - com.dianping.cat.system.config.AlertConfigManager + com.dianping.cat.report.task.alert.sender.spliter.Spliter + sms + smsSpliter + + + com.dianping.cat.report.task.alert.sender.spliter.Spliter + weixin + weixinSpliter + + com.dianping.cat.report.task.alert.sender.sender.Sender + mail + com.dianping.cat.report.task.alert.sender.sender.MailSender + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.report.task.alert.sender.sender.Sender + sms + com.dianping.cat.report.task.alert.sender.sender.SmsSender + + + com.dianping.cat.report.task.alert.sender.sender.Sender + weixin + com.dianping.cat.report.task.alert.sender.sender.WeixinSender + com.dianping.cat.report.task.alert.sender.sender.SenderManager com.dianping.cat.report.task.alert.sender.sender.SenderManager @@ -685,11 +837,14 @@ com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager - com.dianping.cat.report.task.alert.sender.receiver.Contactor + com.dianping.cat.report.task.alert.sender.receiver.ContactorManager com.dianping.cat.report.task.alert.manager.AlertEntityService + + com.dianping.cat.report.task.alert.sender.spliter.SpliterManager + com.dianping.cat.report.task.alert.sender.sender.SenderManager