提交 cfa40587 编写于 作者: Y youyong205

Merge pull request #426 from leonindy/master

use ftl as alert template, add argument to receiver method
......@@ -132,19 +132,19 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(DataChecker.class, DefaultDataChecker.class));
all.add(C(RemoteMetricReportService.class).req(ServerConfigManager.class));
all.add(C(Contactor.class, BusinessContactor.ID, BusinessContactor.class).req(ProjectDao.class,
all.add(C(Contactor.class, BusinessContactor.ID, BusinessContactor.class).req(ProductLineConfigManager.class,
AlertConfigManager.class));
all.add(C(Contactor.class, NetworkContactor.ID, NetworkContactor.class).req(ProjectDao.class,
all.add(C(Contactor.class, NetworkContactor.ID, NetworkContactor.class).req(ProductLineConfigManager.class,
AlertConfigManager.class));
all.add(C(Contactor.class, SystemContactor.ID, SystemContactor.class).req(ProjectDao.class,
all.add(C(Contactor.class, SystemContactor.ID, SystemContactor.class).req(ProductLineConfigManager.class,
AlertConfigManager.class));
all.add(C(Contactor.class, ExceptionContactor.ID, ExceptionContactor.class).req(ProductLineConfigManager.class,
all.add(C(Contactor.class, ExceptionContactor.ID, ExceptionContactor.class).req(ProjectDao.class,
AlertConfigManager.class));
all.add(C(Contactor.class, ThirdpartyContactor.ID, ThirdpartyContactor.class).req(ProductLineConfigManager.class,
all.add(C(Contactor.class, ThirdpartyContactor.ID, ThirdpartyContactor.class).req(ProjectDao.class,
AlertConfigManager.class));
all.add(C(ContactorManager.class).req(Contactor.class, BusinessContactor.ID, "businessContactor")
......
package com.dianping.cat.report.task.alert.sender.decorator;
import java.io.StringWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
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 com.dianping.cat.Cat;
import com.dianping.cat.report.task.alert.AlertConstants;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.system.notify.ReportRenderImpl;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class ExceptionDecorator extends DefaultDecorator implements Initializable {
public class ExceptionDecorator extends DefaultDecorator {
public Configuration m_configuration;
public static final String ID = AlertConstants.EXCEPTION;
private DateFormat m_dateFormat = new SimpleDateFormat("yyyyMMddHH");
@Override
public String getId() {
return ID;
......@@ -22,21 +39,39 @@ public class ExceptionDecorator extends DefaultDecorator {
@Override
public String generateContent(AlertEntity alert) {
Map<Object, Object> dataMap = generateExceptionMap(alert);
StringWriter sw = new StringWriter(5000);
try {
Template t = m_configuration.getTemplate("exceptionAlert.ftl");
t.process(dataMap, sw);
} catch (Exception e) {
Cat.logError("build exception content error:" + alert.toString(), e);
}
return sw.toString();
}
private Map<Object, Object> generateExceptionMap(AlertEntity alert) {
String domain = alert.getGroup();
String contactInfo = buildContactInfo(domain);
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("domain", domain);
map.put("content", alert.getContent());
map.put("date", m_dateFormat.format(alert.getDate()));
map.put("contactInfo", contactInfo);
return map;
}
@Override
public void initialize() throws InitializationException {
m_configuration = new Configuration();
m_configuration.setDefaultEncoding("UTF-8");
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("'>点击此处查看详情[联系人修改请联系黄永,修改CMDB]</a>").append("<br/>");
sb.append(buildContactInfo(domain));
return sb.toString();
} catch (Exception ex) {
Cat.logError("build exception content error:" + alert.toString(), ex);
return null;
m_configuration.setClassForTemplateLoading(ReportRenderImpl.class, "/freemaker");
} catch (Exception e) {
Cat.logError(e);
}
}
......
package com.dianping.cat.report.task.alert.sender.decorator;
import java.util.Date;
import java.io.StringWriter;
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 com.dianping.cat.Cat;
import com.dianping.cat.report.task.alert.AlertConstants;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.system.notify.ReportRenderImpl;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class ThirdpartyDecorator extends DefaultDecorator {
public class ThirdpartyDecorator extends DefaultDecorator implements Initializable {
public Configuration m_configuration;
public static final String ID = AlertConstants.THIRDPARTY;
......@@ -24,19 +35,39 @@ public class ThirdpartyDecorator extends DefaultDecorator {
@Override
public String generateContent(AlertEntity alert) {
Map<Object, Object> dataMap = generateExceptionMap(alert);
StringWriter sw = new StringWriter(5000);
try {
Template t = m_configuration.getTemplate("exceptionAlert.ftl");
t.process(dataMap, sw);
} catch (Exception e) {
Cat.logError("build third party content error:" + alert.toString(), e);
}
return sw.toString();
}
private Map<Object, Object> generateExceptionMap(AlertEntity alert) {
String domain = alert.getGroup();
String contactInfo = buildContactInfo(domain);
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("domain", domain);
map.put("content", alert.getContent());
map.put("date", m_format.format(alert.getDate()));
map.put("contactInfo", contactInfo);
return map;
}
@Override
public void initialize() throws InitializationException {
m_configuration = new Configuration();
m_configuration.setDefaultEncoding("UTF-8");
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;
m_configuration.setClassForTemplateLoading(ReportRenderImpl.class, "/freemaker");
} catch (Exception e) {
Cat.logError(e);
}
}
......
......@@ -6,11 +6,9 @@ public interface Contactor {
public String getId();
public List<String> queryEmailContactors();
public List<String> queryEmailContactors(String id);
public List<String> queryWeiXinContactors();
public List<String> queryWeiXinContactors(String id);
public List<String> querySmsContactors();
public void setModule(String id);
public List<String> querySmsContactors(String id);
}
......@@ -32,14 +32,13 @@ public class ContactorManager implements Initializable {
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();
return contactor.queryEmailContactors(group);
} else if (AlertConstants.SMS.equals(channel)) {
return contactor.querySmsContactors();
return contactor.querySmsContactors(group);
} else if (AlertConstants.WEIXIN.equals(channel)) {
return contactor.queryWeiXinContactors();
return contactor.queryWeiXinContactors(group);
} else {
return new ArrayList<String>();
}
......
......@@ -3,28 +3,25 @@ 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.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 ProductlineContactor extends DefaultContactor implements Contactor {
@Inject
protected ProjectDao m_projectDao;
protected ProductLineConfigManager m_productLineConfigManager;
@Inject
protected AlertConfigManager m_configManager;
protected Project m_project = new Project();
@Override
public List<String> queryEmailContactors() {
public List<String> queryEmailContactors(String id) {
ProductLine productline = queryProductline(id);
List<String> mailReceivers = new ArrayList<String>();
Receiver receiver = m_configManager.queryReceiverById(getId());
......@@ -32,14 +29,15 @@ public abstract class ProductlineContactor extends DefaultContactor implements C
return mailReceivers;
} else {
mailReceivers.addAll(buildDefaultMailReceivers(receiver));
mailReceivers.addAll(split(m_project.getEmail()));
mailReceivers.addAll(split(productline.getEmail()));
return mailReceivers;
}
}
@Override
public List<String> querySmsContactors() {
public List<String> querySmsContactors(String id) {
ProductLine productline = queryProductline(id);
List<String> smsReceivers = new ArrayList<String>();
Receiver receiver = m_configManager.queryReceiverById(getId());
......@@ -47,14 +45,15 @@ public abstract class ProductlineContactor extends DefaultContactor implements C
return smsReceivers;
} else {
smsReceivers.addAll(buildDefaultSMSReceivers(receiver));
smsReceivers.addAll(split(m_project.getPhone()));
smsReceivers.addAll(split(productline.getPhone()));
return smsReceivers;
}
}
@Override
public List<String> queryWeiXinContactors() {
public List<String> queryWeiXinContactors(String id) {
ProductLine productline = queryProductline(id);
List<String> weixinReceivers = new ArrayList<String>();
Receiver receiver = m_configManager.queryReceiverById(getId());
......@@ -62,18 +61,19 @@ public abstract class ProductlineContactor extends DefaultContactor implements C
return weixinReceivers;
} else {
weixinReceivers.addAll(buildDefaultWeixinReceivers(receiver));
weixinReceivers.addAll(split(m_project.getEmail()));
weixinReceivers.addAll(split(productline.getEmail()));
return weixinReceivers;
}
}
public void setModule(String domainName) {
private ProductLine queryProductline(String productlineName) {
try {
m_project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL);
} catch (DalException e) {
Cat.logError("query project error:" + domainName, e);
ProductLine productline = m_productLineConfigManager.queryProductLine(productlineName);
return productline;
} catch (Exception e) {
Cat.logError("query productline error:" + productlineName, e);
return new ProductLine();
}
}
}
......@@ -3,26 +3,27 @@ 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.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.system.config.AlertConfigManager;
public abstract class ProjectContactor extends DefaultContactor implements Contactor {
@Inject
protected ProductLineConfigManager m_productLineConfigManager;
protected ProjectDao m_projectDao;
@Inject
protected AlertConfigManager m_configManager;
protected ProductLine m_productline = new ProductLine();
@Override
public List<String> queryEmailContactors() {
public List<String> queryEmailContactors(String id) {
Project project = queryProject(id);
List<String> mailReceivers = new ArrayList<String>();
Receiver receiver = m_configManager.queryReceiverById(getId());
......@@ -30,14 +31,15 @@ public abstract class ProjectContactor extends DefaultContactor implements Conta
return mailReceivers;
} else {
mailReceivers.addAll(buildDefaultMailReceivers(receiver));
mailReceivers.addAll(split(m_productline.getEmail()));
mailReceivers.addAll(split(project.getEmail()));
return mailReceivers;
}
}
@Override
public List<String> querySmsContactors() {
public List<String> querySmsContactors(String id) {
Project project = queryProject(id);
List<String> smsReceivers = new ArrayList<String>();
Receiver receiver = m_configManager.queryReceiverById(getId());
......@@ -45,14 +47,15 @@ public abstract class ProjectContactor extends DefaultContactor implements Conta
return smsReceivers;
} else {
smsReceivers.addAll(buildDefaultSMSReceivers(receiver));
smsReceivers.addAll(split(m_productline.getPhone()));
smsReceivers.addAll(split(project.getPhone()));
return smsReceivers;
}
}
@Override
public List<String> queryWeiXinContactors() {
public List<String> queryWeiXinContactors(String id) {
Project project = queryProject(id);
List<String> weixinReceivers = new ArrayList<String>();
Receiver receiver = m_configManager.queryReceiverById(getId());
......@@ -60,17 +63,19 @@ public abstract class ProjectContactor extends DefaultContactor implements Conta
return weixinReceivers;
} else {
weixinReceivers.addAll(buildDefaultWeixinReceivers(receiver));
weixinReceivers.addAll(split(m_productline.getEmail()));
weixinReceivers.addAll(split(project.getEmail()));
return weixinReceivers;
}
}
public void setModule(String productlineName) {
private Project queryProject(String domainName) {
try {
m_productline = m_productLineConfigManager.queryProductLine(productlineName);
} catch (Exception e) {
Cat.logError("query productline error:" + productlineName, e);
Project project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL);
return project;
} catch (DalException e) {
Cat.logError("query project error:" + domainName, e);
return new Project();
}
}
......
......@@ -569,7 +569,7 @@
<implementation>com.dianping.cat.report.task.alert.sender.receiver.BusinessContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
......@@ -582,7 +582,7 @@
<implementation>com.dianping.cat.report.task.alert.sender.receiver.NetworkContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
......@@ -595,7 +595,7 @@
<implementation>com.dianping.cat.report.task.alert.sender.receiver.SystemContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
......@@ -608,7 +608,7 @@
<implementation>com.dianping.cat.report.task.alert.sender.receiver.ExceptionContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
......@@ -621,7 +621,7 @@
<implementation>com.dianping.cat.report.task.alert.sender.receiver.ThirdpartyContactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
......
[CAT异常告警] [项目: ${domain}] : ${content}[时间: ${date}]
<a href='http://cat.dianpingoa.com/cat/r/p?domain=${domain}&date=${date}'>点击此处查看详情</a> <br/>
[联系人修改请联系黄永,修改CMDB] <br/> ${contactInfo}
\ No newline at end of file
[CAT第三方告警] [项目: ${domain}] : ${content}[时间: ${date}] <br/> [联系人修改请联系黄永,修改CMDB] <br/> ${contactInfo}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册