提交 853e72c5 编写于 作者: Y youyong205

Merge pull request #422 from leonindy/master

refactor receiver, decorator module
......@@ -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));
......
......@@ -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;
......
......@@ -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) {
......
......@@ -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
......
......@@ -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;
}
}
......
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";
}
......@@ -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<AlertEntity> m_alerts = new LinkedBlockingDeque<AlertEntity>();
private BlockingQueue<AlertEntity> m_alerts = new LinkedBlockingDeque<AlertEntity>(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<String, String> pair = m_decoratorManager.generateTitleAndContent(alert, channelName);
List<String> receivers = m_contactor.queryReceivers(group, channel, type);
String content = pair.getValue();
AlertMessageEntity message = new AlertMessageEntity(group, pair.getKey(), content, receivers);
Pair<String, String> pair = m_decoratorManager.generateTitleAndContent(alert);
String title = pair.getKey();
String content = m_splitterManager.process(pair.getValue(), channelName);
List<String> receivers = m_contactorManager.queryReceivers(group, channelName, type);
AlertMessageEntity message = new AlertMessageEntity(group, title, content, receivers);
m_alertEntityService.storeAlert(alert, message);
......
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 MailDecorator extends DefaultDecorator {
public class BusinessDecorator extends DefaultDecorator {
public static final String ID = "mail";
public static final String ID = AlertConstants.BUSINESS;
@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());
public String getId() {
return ID;
}
@Override
public String getId() {
return ID;
public String generateTitle(AlertEntity alert) {
StringBuilder sb = new StringBuilder();
sb.append("[业务告警] [产品线 ").append(alert.getGroup()).append("]");
sb.append("[业务指标 ").append(alert.getMetric()).append("]");
return sb.toString();
}
}
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);
}
......@@ -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<String, Decorator> m_decorators = new HashMap<String, Decorator>();
public Pair<String, String> generateTitleAndContent(AlertEntity alert, String channelName) {
Decorator decorator = m_decorators.get(channelName);
public Pair<String, String> generateTitleAndContent(AlertEntity alert) {
Decorator decorator = m_decorators.get(alert.getType());
String title = decorator.generateTitle(alert);
String content = decorator.generateContent(alert);
return new Pair<String, String>(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;
}
}
......@@ -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(" <a href='").append("http://cat.dianpingoa.com/cat/r/p?domain=").append(domain).append("&date=")
.append(date).append("'>点击此处查看详情</a>").append("<br/>");
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);
}
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(" <a href='").append("http://cat.dianpingoa.com/cat/r/p?domain=").append(domain).append("&date=")
.append(date).append("'>点击此处查看详情</a>").append("<br/>");
sb.append(buildContactInfo(domain));
return sb.toString();
} catch (Exception ex) {
Cat.logError("build exception content error:" + alert.toString(), ex);
return null;
}
}
}
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();
}
}
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("<br/>", " ");
}
@Override
public String getId() {
return ID;
}
}
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);
}
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();
}
}
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("<br/>").append(buildContactInfo(group));
return sb.toString();
} catch (Exception ex) {
Cat.logError("build third party content error:" + alert.toString(), ex);
return null;
}
}
}
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("<br/>", "\n");
}
@Override
public String getId() {
return ID;
}
}
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;
}
}
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<String> queryEmailContactors();
@Inject
protected ProjectDao m_projectDao;
public List<String> queryWeiXinContactors();
@Inject
protected ProductLineConfigManager m_productLineConfigManager;
@Inject
protected AlertConfigManager m_configManager;
public List<String> 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<String> 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<String>();
}
public List<String> 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<String>();
}
private List<String> buildMailReceivers(ProductLine productLine, String type) {
List<String> mailReceivers = new ArrayList<String>();
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<String> buildMailReceivers(Project project, String type) {
List<String> mailReceivers = new ArrayList<String>();
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<String> buildDefaultMailReceivers(Receiver receiver) {
List<String> mailReceivers = new ArrayList<String>();
if (receiver != null) {
mailReceivers.addAll(receiver.getEmails());
}
return mailReceivers;
}
private List<String> buildProductlineMailReceivers(ProductLine productLine) {
return split(productLine.getEmail());
}
private List<String> buildProjectMailReceivers(Project project) {
return split(project.getEmail());
}
private List<String> buildSMSReceivers(ProductLine productLine, String type) {
List<String> smsReceivers = new ArrayList<String>();
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<String> buildSMSReceivers(Project project, String type) {
List<String> smsReceivers = new ArrayList<String>();
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<String> buildDefaultSMSReceivers(Receiver receiver) {
List<String> smsReceivers = new ArrayList<String>();
if (receiver != null) {
smsReceivers.addAll(receiver.getPhones());
}
return smsReceivers;
}
private List<String> buildProductlineSMSReceivers(ProductLine productLine) {
return split(productLine.getPhone());
}
private List<String> buildProjectSMSReceivers(Project project) {
return split(project.getPhone());
}
private List<String> buildWeixinReceivers(Project project, String type) {
List<String> weixinReceivers = new ArrayList<String>();
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<String> buildWeixinReceivers(ProductLine productLine, String type) {
List<String> weixinReceivers = new ArrayList<String>();
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<String> buildDefaultWeixinReceivers(Receiver receiver) {
List<String> weixinReceivers = new ArrayList<String>();
if (receiver != null) {
weixinReceivers.addAll(receiver.getWeixins());
}
return weixinReceivers;
}
private List<String> buildProductlineWeixinReceivers(ProductLine productLine) {
return split(productLine.getEmail());
}
private List<String> split(String str) {
List<String> result = new ArrayList<String>();
if (str != null) {
result.addAll(Splitters.by(",").noEmptyItem().split(str));
}
return result;
}
public List<String> querySmsContactors();
public void setModule(String id);
}
package com.dianping.cat.report.task.alert.sender.receiver;
import java.util.List;
public interface Contactor2 {
public String getId();
public List<String> queryEmailContactors(String id);
public List<String> queryWeiXinContactors(String id);
public List<String> querySmsContactors(String id);
}
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<String, Contactor> m_contactors = new HashMap<String, Contactor>();
public List<String> 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<String>();
}
@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;
}
}
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<String> buildDefaultMailReceivers(Receiver receiver) {
List<String> mailReceivers = new ArrayList<String>();
if (receiver != null) {
mailReceivers.addAll(receiver.getEmails());
}
return mailReceivers;
}
protected List<String> buildDefaultSMSReceivers(Receiver receiver) {
List<String> smsReceivers = new ArrayList<String>();
if (receiver != null) {
smsReceivers.addAll(receiver.getPhones());
}
return smsReceivers;
}
protected List<String> buildDefaultWeixinReceivers(Receiver receiver) {
List<String> weixinReceivers = new ArrayList<String>();
if (receiver != null) {
weixinReceivers.addAll(receiver.getWeixins());
}
return weixinReceivers;
}
protected List<String> split(String str) {
List<String> result = new ArrayList<String>();
if (str != null) {
result.addAll(Splitters.by(",").noEmptyItem().split(str));
}
return result;
}
}
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;
}
}
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;
}
}
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<String> queryEmailContactors() {
List<String> mailReceivers = new ArrayList<String>();
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<String> querySmsContactors() {
List<String> smsReceivers = new ArrayList<String>();
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<String> queryWeiXinContactors() {
List<String> weixinReceivers = new ArrayList<String>();
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);
}
}
}
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<String> queryEmailContactors() {
List<String> mailReceivers = new ArrayList<String>();
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<String> querySmsContactors() {
List<String> smsReceivers = new ArrayList<String>();
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<String> queryWeiXinContactors() {
List<String> weixinReceivers = new ArrayList<String>();
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);
}
}
}
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;
}
}
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;
}
}
......@@ -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<String> 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;
}
}
......@@ -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;
......
......@@ -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();
......
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;
}
}
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("<br/>", " ");
}
@Override
public String getID() {
return ID;
}
}
package com.dianping.cat.report.task.alert.sender.spliter;
public interface Spliter {
public String process(String content);
public String getID();
}
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<String, Spliter> m_spliters = new HashMap<String, Spliter>();
@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;
}
}
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("<br/>", "\n");
}
@Override
public String getID() {
return ID;
}
}
......@@ -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
......
......@@ -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
......
......@@ -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);
......
......@@ -564,24 +564,105 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>mail</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.sender.MailSender</implementation>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>business</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.BusinessContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>sms</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.sender.SmsSender</implementation>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>network</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.NetworkContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>weixin</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.sender.WeixinSender</implementation>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>system</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.SystemContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>exception</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.ExceptionContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>thirdParty</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.ThirdpartyContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.receiver.ContactorManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.ContactorManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>business</role-hint>
<field-name>businessContactor</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>network</role-hint>
<field-name>networkContactor</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>system</role-hint>
<field-name>exceptionContactor</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>exception</role-hint>
<field-name>systemContactor</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role-hint>thirdParty</role-hint>
<field-name>thirdpartyContactor</field-name>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>mail</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.MailDecorator</implementation>
<role-hint>business</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.BusinessDecorator</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
......@@ -590,8 +671,8 @@
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>sms</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.SmsDecorator</implementation>
<role-hint>network</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.NetworkDecorator</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
......@@ -600,8 +681,8 @@
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>weixin</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.WeixinDecorator</implementation>
<role-hint>exception</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.ExceptionDecorator</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
......@@ -609,11 +690,22 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
<implementation>com.dianping.cat.system.config.AlertPolicyManager</implementation>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>system</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.SystemDecorator</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.config.ConfigDao</role>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>thirdParty</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.ThirdpartyDecorator</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
</requirements>
</component>
......@@ -623,36 +715,96 @@
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>mail</role-hint>
<field-name>mailDecorator</field-name>
<role-hint>business</role-hint>
<field-name>businessDecorator</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>sms</role-hint>
<field-name>smsDecorator</field-name>
<role-hint>network</role-hint>
<field-name>networkDecorator</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>weixin</role-hint>
<field-name>weixinDecorator</field-name>
<role-hint>exception</role-hint>
<field-name>exceptionDecorator</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>system</role-hint>
<field-name>systemDecorator</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>thirdParty</role-hint>
<field-name>thirdpartyDecorator</field-name>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.Contactor</implementation>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
<implementation>com.dianping.cat.system.config.AlertPolicyManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
<role>com.dianping.cat.core.config.ConfigDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.spliter.Spliter</role>
<role-hint>mail</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.spliter.MailSpliter</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.spliter.Spliter</role>
<role-hint>sms</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.spliter.SmsSpliter</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.spliter.Spliter</role>
<role-hint>weixin</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.spliter.WeixinSpliter</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.spliter.SpliterManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.spliter.SpliterManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
<role>com.dianping.cat.report.task.alert.sender.spliter.Spliter</role>
<role-hint>mail</role-hint>
<field-name>mailSpliter</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
<role>com.dianping.cat.report.task.alert.sender.spliter.Spliter</role>
<role-hint>sms</role-hint>
<field-name>smsSpliter</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.spliter.Spliter</role>
<role-hint>weixin</role-hint>
<field-name>weixinSpliter</field-name>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>mail</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.sender.MailSender</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>sms</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.sender.SmsSender</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>weixin</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.sender.WeixinSender</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.sender.SenderManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.sender.SenderManager</implementation>
......@@ -685,11 +837,14 @@
<role>com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<role>com.dianping.cat.report.task.alert.sender.receiver.ContactorManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.manager.AlertEntityService</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.spliter.SpliterManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.sender.SenderManager</role>
</requirement>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册