提交 4df3cdb3 编写于 作者: Y youyong205

modify the broker-service

......@@ -156,13 +156,13 @@ public class Handler implements PageHandler<Context>, LogEnabled {
try {
appData.setTimestamp(Long.parseLong(items[0]));
Integer command = m_appConfigManager.getCommands().get(URLDecoder.decode(items[1], "utf-8"));
Integer command = m_appConfigManager.getCommands().get(URLDecoder.decode(items[4], "utf-8"));
if (command != null) {
appData.setCommand(command);
appData.setNetwork(Integer.parseInt(items[2]));
appData.setVersion(Integer.parseInt(items[3]));
appData.setConnectType(Integer.parseInt(items[4]));
appData.setNetwork(Integer.parseInt(items[1]));
appData.setVersion(Integer.parseInt(items[2]));
appData.setConnectType(Integer.parseInt(items[3]));
appData.setCode(Integer.parseInt(items[5]));
appData.setPlatform(Integer.parseInt(items[6]));
appData.setRequestByte(Integer.parseInt(items[7]));
......@@ -175,7 +175,7 @@ public class Handler implements PageHandler<Context>, LogEnabled {
m_appDataConsumer.enqueue(appData);
Cat.logEvent("Command", String.valueOf(command), Event.SUCCESS, null);
} else {
Cat.logEvent("CommandNotFound", items[1], Event.SUCCESS, items[1]);
Cat.logEvent("CommandNotFound", items[4], Event.SUCCESS, items[4]);
}
} catch (Exception e) {
m_logger.error(e.getMessage(), e);
......
......@@ -166,7 +166,7 @@
${basedir}/src/main/resources/META-INF/dal/model/monitor-rules-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/alertconfig-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/alertsummary-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/alert-type-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/alert-policy-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/thirdParty-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/router-manifest.xml,
</manifest>
......
......@@ -62,24 +62,27 @@ import com.dianping.cat.report.task.alert.DataChecker;
import com.dianping.cat.report.task.alert.DefaultDataChecker;
import com.dianping.cat.report.task.alert.RemoteMetricReportService;
import com.dianping.cat.report.task.alert.business.BusinessAlert;
import com.dianping.cat.report.task.alert.business.BusinessAlertConfig;
import com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder;
import com.dianping.cat.report.task.alert.exception.ExceptionAlert;
import com.dianping.cat.report.task.alert.exception.ExceptionAlertConfig;
import com.dianping.cat.report.task.alert.manager.AlertManager;
import com.dianping.cat.report.task.alert.network.NetworkAlert;
import com.dianping.cat.report.task.alert.network.NetworkAlertConfig;
import com.dianping.cat.report.task.alert.sender.MailSender;
import com.dianping.cat.report.task.alert.sender.Postman;
import com.dianping.cat.report.task.alert.sender.SmsSender;
import com.dianping.cat.report.task.alert.sender.WeixinSender;
import com.dianping.cat.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.dispatcher.Dispatcher;
import com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager;
import com.dianping.cat.report.task.alert.sender.dispatcher.MailDispatcher;
import com.dianping.cat.report.task.alert.sender.dispatcher.SmsDispatcher;
import com.dianping.cat.report.task.alert.sender.dispatcher.WeixinDispatcher;
import com.dianping.cat.report.task.alert.sender.receiver.Seeker;
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;
import com.dianping.cat.report.task.alert.summary.AlertSummaryGenerator;
import com.dianping.cat.report.task.alert.summary.AlertSummaryManager;
import com.dianping.cat.report.task.alert.system.SystemAlert;
import com.dianping.cat.report.task.alert.system.SystemAlertConfig;
import com.dianping.cat.report.task.alert.thirdParty.HttpConnector;
import com.dianping.cat.report.task.alert.thirdParty.ThirdPartyAlert;
import com.dianping.cat.report.task.alert.thirdParty.ThirdPartyAlertBuilder;
......@@ -87,7 +90,7 @@ import com.dianping.cat.report.task.product.ProjectUpdateTask;
import com.dianping.cat.report.view.DomainNavManager;
import com.dianping.cat.service.IpService;
import com.dianping.cat.system.config.AlertConfigManager;
import com.dianping.cat.system.config.AlertTypeManager;
import com.dianping.cat.system.config.AlertPolicyManager;
import com.dianping.cat.system.config.BugConfigManager;
import com.dianping.cat.system.config.BusinessRuleConfigManager;
import com.dianping.cat.system.config.ConfigReloadTask;
......@@ -110,34 +113,54 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
private List<Component> defineAlertComponents() {
List<Component> all = new ArrayList<Component>();
all.add(C(BusinessAlertConfig.class).req(AlertConfigManager.class));
all.add(C(NetworkAlertConfig.class).req(AlertConfigManager.class));
all.add(C(SystemAlertConfig.class).req(AlertConfigManager.class));
all.add(C(ExceptionAlertConfig.class).req(AlertConfigManager.class));
all.add(C(AlertInfo.class));
all.add(C(DefaultMailImpl.class).req(ServerConfigManager.class));
all.add(C(DataChecker.class, DefaultDataChecker.class));
all.add(C(RemoteMetricReportService.class).req(ServerConfigManager.class));
all.add(C(Dispatcher.class, MailDispatcher.ID, MailDispatcher.class).req(MailSMS.class));
all.add(C(Dispatcher.class, SmsDispatcher.ID, SmsDispatcher.class).req(MailSMS.class));
all.add(C(Dispatcher.class, WeixinDispatcher.ID, WeixinDispatcher.class).req(MailSMS.class));
all.add(C(Decorator.class, MailDecorator.ID, MailDecorator.class).req(ProjectDao.class));
all.add(C(Decorator.class, SmsDecorator.ID, SmsDecorator.class).req(ProjectDao.class));
all.add(C(Decorator.class, WeixinDecorator.ID, WeixinDecorator.class).req(ProjectDao.class));
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(Seeker.class).req(ProjectDao.class, ProductLineConfigManager.class, AlertConfigManager.class));
all.add(C(DispatcherManager.class)
.req(AlertPolicyManager.class, DecoratorManager.class, Seeker.class, AlertManager.class)
.req(Dispatcher.class, MailDispatcher.ID, "mailDispatcher")
.req(Dispatcher.class, WeixinDispatcher.ID, "weixinDispatcher")
.req(Dispatcher.class, SmsDispatcher.ID, "smsDispatcher"));
all.add(C(BusinessAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class,
BaselineService.class, MailSMS.class, BusinessAlertConfig.class, AlertInfo.class, AlertDao.class)//
.req(RemoteMetricReportService.class, BusinessRuleConfigManager.class, DataChecker.class));
BaselineService.class, AlertInfo.class).req(RemoteMetricReportService.class,
BusinessRuleConfigManager.class, DataChecker.class, DispatcherManager.class));
all.add(C(NetworkAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class,
BaselineService.class, MailSMS.class, NetworkAlertConfig.class, AlertInfo.class, AlertDao.class)//
.req(RemoteMetricReportService.class, NetworkRuleConfigManager.class, DataChecker.class));
all.add(C(NetworkAlert.class).req(ProductLineConfigManager.class, BaselineService.class, AlertInfo.class)
.req(RemoteMetricReportService.class, NetworkRuleConfigManager.class, DataChecker.class,
DispatcherManager.class));
all.add(C(SystemAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class,
BaselineService.class, MailSMS.class, SystemAlertConfig.class, AlertInfo.class, AlertDao.class)//
.req(RemoteMetricReportService.class, SystemRuleConfigManager.class, DataChecker.class));
all.add(C(SystemAlert.class).req(ProductLineConfigManager.class, BaselineService.class, AlertInfo.class).req(
RemoteMetricReportService.class, SystemRuleConfigManager.class, DataChecker.class, DispatcherManager.class));
all.add(C(AlertExceptionBuilder.class).req(ExceptionConfigManager.class));
all.add(C(ExceptionAlert.class).req(ProjectDao.class, ExceptionAlertConfig.class, MailSMS.class,
ExceptionConfigManager.class, AlertExceptionBuilder.class, AlertDao.class).req(ModelService.class,
TopAnalyzer.ID));
all.add(C(ExceptionAlert.class).req(ExceptionConfigManager.class, AlertExceptionBuilder.class,
DispatcherManager.class).req(ModelService.class, TopAnalyzer.ID));
all.add(C(ThirdPartyAlert.class).req(ProjectDao.class, MailSender.class));
all.add(C(ThirdPartyAlert.class).req(DispatcherManager.class));
all.add(C(HttpConnector.class));
......@@ -271,17 +294,8 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(NetGraphManager.class).req(ServerConfigManager.class, RemoteMetricReportService.class).req(
ReportServiceManager.class, NetGraphBuilder.class, AlertInfo.class, NetGraphConfigManager.class));
all.add(C(MailSender.class).req(MailSMS.class));
all.add(C(SmsSender.class).req(MailSMS.class));
all.add(C(WeixinSender.class).req(MailSMS.class));
all.add(C(AlertManager.class).req(AlertDao.class));
all.add(C(Postman.class).req(ProjectDao.class, MailSMS.class, MailSender.class, WeixinSender.class,
SmsSender.class, AlertTypeManager.class));
all.add(C(AlertExceptionBuilder.class).req(ExceptionConfigManager.class));
all.add(C(AlertSummaryExecutor.class).req(AlertSummaryGenerator.class, AlertSummaryManager.class, MailSMS.class)
......
......@@ -7,14 +7,14 @@ public class AlertResultEntity {
private String m_content;
private String m_alertType;
private String m_alertLevel;
private Date m_alertTime;
public AlertResultEntity(boolean result, String content, String alertType) {
public AlertResultEntity(boolean result, String content, String alertLevel) {
this.m_isTriggered = result;
this.m_content = content;
this.m_alertType = alertType;
this.m_alertLevel = alertLevel;
this.m_alertTime = new Date();
}
......@@ -22,8 +22,8 @@ public class AlertResultEntity {
return m_alertTime;
}
public String getAlertType() {
return m_alertType;
public String getAlertLevel() {
return m_alertLevel;
}
public String getContent() {
......
......@@ -16,7 +16,6 @@ import com.dianping.cat.Cat;
import com.dianping.cat.advanced.metric.config.entity.MetricItemConfig;
import com.dianping.cat.consumer.company.model.entity.ProductLine;
import com.dianping.cat.consumer.metric.MetricAnalyzer;
import com.dianping.cat.consumer.metric.MetricConfigManager;
import com.dianping.cat.consumer.metric.ProductLineConfigManager;
import com.dianping.cat.consumer.metric.model.entity.MetricItem;
import com.dianping.cat.consumer.metric.model.entity.MetricReport;
......@@ -25,30 +24,24 @@ import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.home.rule.entity.Condition;
import com.dianping.cat.home.rule.entity.Config;
import com.dianping.cat.report.baseline.BaselineService;
import com.dianping.cat.report.task.alert.manager.AlertManager;
import com.dianping.cat.report.task.alert.sender.Postman;
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.dispatcher.DispatcherManager;
import com.dianping.cat.service.ModelPeriod;
import com.dianping.cat.service.ModelRequest;
import com.dianping.cat.system.config.BaseRuleConfigManager;
import com.dianping.cat.system.tool.MailSMS;
public abstract class BaseAlert {
@Inject
protected BaseRuleConfigManager m_ruleConfigManager;
@Inject
protected MailSMS m_mailSms;
@Inject
protected AlertInfo m_alertInfo;
@Inject
private DataChecker m_dataChecker;
@Inject
protected MetricConfigManager m_metricConfigManager;
@Inject
protected ProductLineConfigManager m_productLineConfigManager;
......@@ -59,10 +52,7 @@ public abstract class BaseAlert {
protected RemoteMetricReportService m_service;
@Inject
protected Postman m_postman;
@Inject
protected AlertManager m_alertManager;
protected DispatcherManager m_dispatcherManager;
protected static final int DATA_AREADY_MINUTE = 1;
......@@ -76,7 +66,7 @@ public abstract class BaseAlert {
protected Map<String, MetricReport> m_lastReports = new HashMap<String, MetricReport>();
private String buildMetricName(String metricKey) {
protected String buildMetricName(String metricKey) {
try {
return metricKey.split(":")[2];
} catch (Exception ex) {
......@@ -85,7 +75,7 @@ public abstract class BaseAlert {
}
}
private String extractDomain(String metricKey) {
protected String extractDomain(String metricKey) {
try {
return metricKey.split(":")[0];
} catch (Exception ex) {
......@@ -243,12 +233,20 @@ public abstract class BaseAlert {
m_alertInfo.addAlertInfo(productlineName, metricKey, new Date().getTime());
String metricName = buildMetricName(metricKey);
String mailTitle = getAlertConfig().buildMailTitle(productLine.getTitle(), metricName);
m_alertManager.storeAlert(getName(), productlineName, metricName, mailTitle, alertResult);
AlertEntityBuilder builder = new AlertEntity().new AlertEntityBuilder();
builder.buildDate(alertResult.getAlertTime()).buildContent(alertResult.getContent())
.buildLevel(alertResult.getAlertLevel());
builder.buildMetric(metricName).buildProductline(productlineName).buildType(getName());
if ("network".equals(getName())) {
builder.buildGroup(productlineName);
} else {
String domain = extractDomain(metricKey);
String configId = getAlertConfig().getId();
m_postman.sendAlert(getAlertConfig(), alertResult, productLine, domain, mailTitle, configId);
builder.buildGroup(domain);
}
AlertEntity alertEntity = builder.getAlertEntity();
m_dispatcherManager.send(alertEntity);
}
}
}
......@@ -326,6 +324,4 @@ public abstract class BaseAlert {
}
protected abstract String getName();
protected abstract BaseAlertConfig getAlertConfig();
}
package com.dianping.cat.report.task.alert;
import java.util.ArrayList;
import java.util.List;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.consumer.company.model.entity.ProductLine;
import com.dianping.cat.home.alert.config.entity.Receiver;
import com.dianping.cat.system.config.AlertConfigManager;
import com.site.helper.Splitters;
public abstract class BaseAlertConfig {
@Inject
protected AlertConfigManager m_manager;
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;
}
public List<String> buildMailReceivers(ProductLine productLine) {
List<String> mailReceivers = new ArrayList<String>();
Receiver receiver = m_manager.queryReceiverById(getId());
if (receiver != null && !receiver.isEnable()) {
return mailReceivers;
} else {
mailReceivers.addAll(buildDefaultMailReceivers(receiver));
mailReceivers.addAll(buildProductlineMailReceivers(productLine));
return mailReceivers;
}
}
private List<String> buildProductlineMailReceivers(ProductLine productLine) {
return split(productLine.getEmail());
}
private List<String> buildProductlineSMSReceivers(ProductLine productLine) {
return split(productLine.getPhone());
}
public List<String> buildSMSReceivers(ProductLine productLine, String configId) {
List<String> smsReceivers = new ArrayList<String>();
Receiver receiver = m_manager.queryReceiverById(configId);
if (receiver != null && !receiver.isEnable()) {
return smsReceivers;
} else {
smsReceivers.addAll(buildDefaultSMSReceivers(receiver));
smsReceivers.addAll(buildProductlineSMSReceivers(productLine));
return smsReceivers;
}
}
public List<String> buildSMSReceivers(ProductLine productLine) {
List<String> smsReceivers = new ArrayList<String>();
Receiver receiver = m_manager.queryReceiverById(getId());
if (receiver != null && !receiver.isEnable()) {
return smsReceivers;
} else {
smsReceivers.addAll(buildDefaultSMSReceivers(receiver));
smsReceivers.addAll(buildProductlineSMSReceivers(productLine));
return smsReceivers;
}
}
public abstract String buildMailTitle(String artifactName, String metricName);
public abstract String getId();
protected List<String> split(String str) {
List<String> result = new ArrayList<String>();
if (str != null) {
result.addAll(Splitters.by(",").noEmptyItem().split(str));
}
return result;
}
}
......@@ -13,16 +13,18 @@ import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.advanced.metric.config.entity.MetricItemConfig;
import com.dianping.cat.consumer.company.model.entity.ProductLine;
import com.dianping.cat.consumer.metric.MetricConfigManager;
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.BaseAlertConfig;
import com.dianping.cat.report.task.alert.MetricType;
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 {
@Inject
protected BusinessAlertConfig m_alertConfig;
protected MetricConfigManager m_metricConfigManager;
@Override
public void enableLogging(Logger logger) {
......@@ -31,12 +33,7 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
@Override
public String getName() {
return "business-alert";
}
@Override
public BaseAlertConfig getAlertConfig() {
return m_alertConfig;
return "business";
}
public boolean needAlert(MetricItemConfig config) {
......@@ -68,12 +65,17 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
for (AlertResultEntity alertResult : alertResults) {
m_alertInfo.addAlertInfo(product, metricKey, new Date().getTime());
String metricName = buildMetricName(metricKey);
AlertEntityBuilder builder = new AlertEntity().new AlertEntityBuilder();
builder.buildDate(alertResult.getAlertTime()).buildContent(alertResult.getContent())
.buildLevel(alertResult.getAlertLevel());
builder.buildMetric(metricName).buildProductline(product).buildType(getName());
String mailTitle = m_alertConfig.buildMailTitle(productLine.getTitle(), metric);
m_alertManager.storeAlert(getName(), product, metric, mailTitle, alertResult);
builder.buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
String configId = getAlertConfig().getId();
m_postman.sendAlert(getAlertConfig(), alertResult, productLine, domain, mailTitle, configId);
m_dispatcherManager.send(alertEntity);
}
}
}
......
package com.dianping.cat.report.task.alert.business;
import com.dianping.cat.report.task.alert.BaseAlertConfig;
public class BusinessAlertConfig extends BaseAlertConfig {
private String m_id = "business";
@Override
public String buildMailTitle(String productlineName, String metricName) {
StringBuilder sb = new StringBuilder();
sb.append("[业务告警] [产品线 ").append(productlineName).append("]");
sb.append("[业务指标 ").append(metricName).append("]");
return sb.toString();
}
public String getId() {
return m_id;
}
}
......@@ -227,7 +227,7 @@ public class AlertExceptionBuilder {
@Override
public String toString() {
return "{exception_name=" + m_name + ", exception_count=" + m_count + "}";
return "[ 异常名称: " + m_name + " 异常数量:" + m_count + " ]";
}
}
......
......@@ -20,19 +20,16 @@ import com.dianping.cat.message.Transaction;
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.AlertResultEntity;
import com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder.AlertException;
import com.dianping.cat.report.task.alert.manager.AlertManager;
import com.dianping.cat.report.task.alert.sender.ExceptionPostman;
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.dispatcher.DispatcherManager;
import com.dianping.cat.service.ModelRequest;
import com.dianping.cat.service.ModelResponse;
import com.dianping.cat.system.config.ExceptionConfigManager;
public class ExceptionAlert implements Task {
@Inject
private ExceptionAlertConfig m_alertConfig;
@Inject
private ExceptionConfigManager m_exceptionConfigManager;
......@@ -43,10 +40,7 @@ public class ExceptionAlert implements Task {
private ModelService<TopReport> m_topService;
@Inject
protected ExceptionPostman m_postman;
@Inject
protected AlertManager m_alertManager;
protected DispatcherManager m_dispatcherManager;
private static final long DURATION = TimeUtil.ONE_MINUTE;
......@@ -62,7 +56,7 @@ public class ExceptionAlert implements Task {
}
public String getName() {
return "exception-alert";
return "exception";
}
private TopReport queryTopReport(Date start) {
......@@ -113,14 +107,15 @@ public class ExceptionAlert implements Task {
String domain = entry.getKey();
List<AlertException> exceptions = entry.getValue();
m_postman.sendAlert(m_alertConfig, m_alertBuilder, domain, exceptions);
for (AlertException exception : exceptions) {
String metricName = exception.getName();
String mailTitle = m_alertConfig.buildMailTitle(domain, null);
String content = m_alertBuilder.buildDBContent(exceptions.toString(), domain);
AlertEntityBuilder builder = new AlertEntity().new AlertEntityBuilder();
builder.buildDate(new Date()).buildLevel(exception.getType()).buildContent(exception.toString());
builder.buildMetric(metricName).buildProductline(domain).buildType(getName()).buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
for (AlertException exception : exceptions) {
AlertResultEntity alertResult = new AlertResultEntity(true, content, exception.getType());
m_alertManager.storeAlert(getName(), domain, exception.getName(), mailTitle, alertResult);
m_dispatcherManager.send(alertEntity);
}
} catch (Exception e) {
Cat.logError(e);
......
package com.dianping.cat.report.task.alert.exception;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.dianping.cat.core.dal.Project;
import com.dianping.cat.home.alert.config.entity.Receiver;
import com.dianping.cat.report.task.alert.BaseAlertConfig;
public class ExceptionAlertConfig extends BaseAlertConfig {
private String m_id = "exception";
public List<String> buildMailReceivers(Project project) {
List<String> mailReceivers = new ArrayList<String>();
Receiver receiver = m_manager.queryReceiverById(getId());
if (receiver != null && !receiver.isEnable()) {
return mailReceivers;
} else {
mailReceivers.addAll(buildDefaultMailReceivers(receiver));
mailReceivers.addAll(buildProjectMailReceivers(project));
return mailReceivers;
}
}
public List<String> buildWeiXinReceivers(Project project) {
StringBuilder builder = new StringBuilder();
Receiver receiver = m_manager.queryReceiverById(getId());
if (receiver != null && !receiver.isEnable()) {
return null;
} else {
builder.append(buildDefaultWeixinReceivers(receiver));
builder.append(project.getEmail());
String result = builder.toString();
if (result.endsWith(",")) {
result = result.substring(0, result.length() - 1);
}
return Arrays.asList(result.split(","));
}
}
private String buildDefaultWeixinReceivers(Receiver receiver) {
StringBuilder builder = new StringBuilder();
if (receiver != null) {
for (String weixin : receiver.getWeixins()) {
builder.append(weixin + ",");
}
}
return builder.toString();
}
@Override
public String buildMailTitle(String domain, String metricName) {
StringBuilder sb = new StringBuilder();
sb.append("[CAT异常告警] [项目: ").append(domain).append("]");
return sb.toString();
}
private List<String> buildProjectMailReceivers(Project project) {
return split(project.getEmail());
}
public List<String> buildSMSReceivers(Project project) {
List<String> smsReceivers = new ArrayList<String>();
Receiver receiver = m_manager.queryReceiverById(getId());
if (receiver != null && !receiver.isEnable()) {
return smsReceivers;
} else {
smsReceivers.addAll(buildDefaultSMSReceivers(receiver));
smsReceivers.addAll(buildProjectSMSReceivers(project));
return smsReceivers;
}
}
private List<String> buildProjectSMSReceivers(Project project) {
return split(project.getPhone());
}
public String getId() {
return m_id;
}
}
......@@ -6,30 +6,29 @@ import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.home.dal.report.Alert;
import com.dianping.cat.home.dal.report.AlertDao;
import com.dianping.cat.report.task.alert.AlertResultEntity;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
public class AlertManager {
@Inject
private AlertDao m_alertDao;
private Alert buildAlert(String categoryName, String domainName, String metricName, String mailTitle,
AlertResultEntity alertResult) {
private Alert buildAlert(AlertEntity alertEntity, AlertMessageEntity message) {
Alert alert = new Alert();
alert.setDomain(domainName);
alert.setAlertTime(alertResult.getAlertTime());
alert.setCategory(categoryName);
alert.setType(alertResult.getAlertType());
alert.setContent(mailTitle + "<br/>" + alertResult.getContent());
alert.setMetric(metricName);
alert.setDomain(alertEntity.getGroup());
alert.setAlertTime(alertEntity.getAlertDate());
alert.setCategory(alertEntity.getType() + "-alert");
alert.setType(alertEntity.getLevel());
alert.setContent(message.getTitle() + "<br/>" + message.getContent());
alert.setMetric(alertEntity.getMetric());
return alert;
}
public void storeAlert(String categoryName, String domainName, String metricName, String mailTitle,
AlertResultEntity alertResult) {
Alert alert = buildAlert(categoryName, domainName, metricName, mailTitle, alertResult);
public void storeAlert(AlertEntity alertEntity, AlertMessageEntity message) {
Alert alert = buildAlert(alertEntity, message);
try {
int count = m_alertDao.insert(alert);
......
......@@ -6,19 +6,14 @@ import java.util.Map;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
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.BaseAlertConfig;
public class NetworkAlert extends BaseAlert implements Task, LogEnabled {
@Inject
private NetworkAlertConfig m_alertConfig;
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
......@@ -26,12 +21,7 @@ public class NetworkAlert extends BaseAlert implements Task, LogEnabled {
@Override
public String getName() {
return "network-alert";
}
@Override
public BaseAlertConfig getAlertConfig() {
return m_alertConfig;
return "network";
}
@Override
......
package com.dianping.cat.report.task.alert.network;
import com.dianping.cat.report.task.alert.BaseAlertConfig;
public class NetworkAlertConfig extends BaseAlertConfig {
private String m_id = "network";
@Override
public String buildMailTitle(String productlineName, String metricName) {
StringBuilder sb = new StringBuilder();
sb.append("[网络告警] [产品线 ").append(productlineName).append("]");
sb.append("[网络指标 ").append(metricName).append("]");
return sb.toString();
}
public String getId() {
return m_id;
}
}
package com.dianping.cat.report.task.alert.sender;
public enum AlertChannel {
MAIL("mail"),
SMS("sms"),
WEIXIN("weixin");
private String m_name;
private AlertChannel(String name) {
m_name = name;
}
public String getName() {
return m_name;
}
}
package com.dianping.cat.report.task.alert.sender;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class AlertEntity {
private String m_id;
private Date m_alertDate;
private String m_type;
private String m_group;
private String m_level;
private String m_productline;
private String m_metric;
private String m_content;
private Map<String, Object> m_paras = new HashMap<String, Object>();
public Date getAlertDate() {
return m_alertDate;
}
public String getContent() {
return m_content;
}
public String getGroup() {
return m_group;
}
public String getId() {
return m_id;
}
public String getLevel() {
return m_level;
}
public String getMetric() {
return m_metric;
}
public Map<String, Object> getParas() {
return m_paras;
}
public String getProductline() {
return m_productline;
}
public String getType() {
return m_type;
}
public void setAlertDate(Date alertDate) {
m_alertDate = alertDate;
}
public void setContent(String content) {
m_content = content;
}
public void setGroup(String group) {
m_group = group;
}
public void setId(String id) {
m_id = id;
}
public void setLevel(String level) {
m_level = level;
}
public void setMetric(String metricName) {
m_metric = metricName;
}
public void setParas(Map<String, Object> paras) {
m_paras = paras;
}
public void setProductline(String productline) {
m_productline = productline;
}
public void setType(String type) {
m_type = type;
}
public class AlertEntityBuilder {
private AlertEntity m_alertEntity = new AlertEntity();
public AlertEntityBuilder buildDate(Date date) {
m_alertEntity.setAlertDate(date);
return this;
}
public AlertEntityBuilder buildType(String type) {
m_alertEntity.setType(type);
return this;
}
public AlertEntityBuilder buildGroup(String group) {
m_alertEntity.setGroup(group);
return this;
}
public AlertEntityBuilder buildLevel(String level) {
m_alertEntity.setLevel(level);
return this;
}
public AlertEntityBuilder buildProductline(String productline) {
m_alertEntity.setProductline(productline);
return this;
}
public AlertEntityBuilder buildMetric(String metric) {
m_alertEntity.setMetric(metric);
return this;
}
public AlertEntityBuilder buildContent(String content) {
m_alertEntity.setContent(content);
return this;
}
public AlertEntity getAlertEntity(){
return m_alertEntity;
}
}
}
package com.dianping.cat.report.task.alert.sender;
import java.util.List;
public class AlertMessageEntity {
private String m_group;
private String m_title;
private String m_content;
private List<String> m_receivers;
public AlertMessageEntity(String group, String title, String content, List<String> receivers) {
m_group = group;
m_title = title;
m_content = content;
m_receivers = receivers;
}
public String getContent() {
return m_content;
}
public String getGroup() {
return m_group;
}
public List<String> getReceivers() {
return m_receivers;
}
public String getReceiverString() {
StringBuilder builder = new StringBuilder(100);
for (String receiver : m_receivers) {
builder.append(receiver).append(",");
}
String tmpResult = builder.toString();
if (tmpResult.endsWith(",")) {
return tmpResult.substring(0, tmpResult.length() - 1);
} else {
return tmpResult;
}
}
public String getTitle() {
return m_title;
}
@Override
public String toString() {
return "title: " + m_title + " content: " + m_content + " receiver: " + getReceiverString();
}
}
\ No newline at end of file
package com.dianping.cat.report.task.alert.sender;
import java.util.List;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.system.tool.MailSMS;
public abstract class BaseSender implements LogEnabled {
protected Logger m_logger;
@Inject
protected MailSMS m_mailSms;
protected abstract void sendLog(String title, String content, List<String> receivers);
public abstract boolean sendAlert(List<String> receivers, String domain, String title, String content);
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
}
package com.dianping.cat.report.task.alert.sender;
import java.util.List;
import com.dianping.cat.Cat;
import com.dianping.cat.core.dal.Project;
import com.dianping.cat.core.dal.ProjectEntity;
import com.dianping.cat.home.alert.type.entity.Type;
import com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder;
import com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder.AlertException;
import com.dianping.cat.report.task.alert.exception.ExceptionAlertConfig;
public class ExceptionPostman extends Postman {
private Project queryProjectByDomain(String projectName) {
Project project = null;
try {
project = m_projectDao.findByDomain(projectName, ProjectEntity.READSET_FULL);
} catch (Exception e) {
Cat.logError(e);
}
return project;
}
public boolean sendAlert(ExceptionAlertConfig alertConfig, AlertExceptionBuilder alertBuilder, String domain,
List<AlertException> exceptions) {
boolean sendResult = true;
Project project = queryProjectByDomain(domain);
String mailTitle = alertConfig.buildMailTitle(domain, null);
String contactInfo = buildContactInfo(domain);
Type type = new Type();
for (AlertException exception : exceptions) {
Type tmpType = m_alertTypeManager.getType(alertConfig.getId(), domain, exception.getType());
if (tmpType.isSendMail()) {
type.setSendMail(true);
}
if (tmpType.isSendWeixin()) {
type.setSendWeixin(true);
}
if (tmpType.isSendSms()) {
type.setSendSms(true);
}
}
if (type.isSendMail()) {
List<String> emails = alertConfig.buildMailReceivers(project);
String mailContent = alertBuilder.buildMailContent(exceptions.toString(), domain, contactInfo);
if (!m_mailSender.sendAlert(emails, domain, mailTitle, mailContent)) {
sendResult = false;
}
}
if (type.isSendWeixin()) {
List<String> weixins = alertConfig.buildWeiXinReceivers(project);
List<AlertException> errorExceptions = alertBuilder.buildErrorException(exceptions);
String weixinContent = alertBuilder.buildContent(errorExceptions.toString(), domain, contactInfo);
if (!m_weixinSender.sendAlert(weixins, domain, mailTitle, weixinContent)) {
sendResult = false;
}
}
if (type.isSendSms()) {
List<String> phones = alertConfig.buildSMSReceivers(project);
List<AlertException> errorAndTriggeredExceptions = alertBuilder.buildErrorAndTriggeredException(exceptions);
String smsContent = alertBuilder.buildContent(errorAndTriggeredExceptions.toString(), domain, contactInfo);
if (!m_smsSender.sendAlert(phones, domain, mailTitle, smsContent)) {
sendResult = false;
}
}
return sendResult;
}
}
package com.dianping.cat.report.task.alert.sender;
import java.util.List;
import com.dianping.cat.Cat;
public class MailSender extends BaseSender {
@Override
protected void sendLog(String title, String content, List<String> receivers) {
StringBuilder builder = new StringBuilder();
builder.append(title).append(",").append(content).append(",");
for (String receiver : receivers) {
builder.append(receiver).append(" ");
}
Cat.logEvent("SendMail", builder.toString());
m_logger.info("SendMail" + builder.toString());
}
@Override
public boolean sendAlert(List<String> receivers, String domain, String title, String content) {
try {
m_mailSms.sendEmail(title, content, receivers);
sendLog(title, content, receivers);
return true;
} catch (Exception ex) {
Cat.logError("send mail error" + " " + title + " " + content, ex);
return false;
}
}
}
package com.dianping.cat.report.task.alert.sender;
import java.util.List;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.consumer.company.model.entity.ProductLine;
import com.dianping.cat.core.dal.Project;
import com.dianping.cat.core.dal.ProjectDao;
import com.dianping.cat.core.dal.ProjectEntity;
import com.dianping.cat.home.alert.type.entity.Type;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.AlertResultEntity;
import com.dianping.cat.report.task.alert.BaseAlertConfig;
import com.dianping.cat.system.config.AlertTypeManager;
import com.site.lookup.util.StringUtils;
public class Postman {
@Inject
protected ProjectDao m_projectDao;
@Inject
protected MailSender m_mailSender;
@Inject
protected SmsSender m_smsSender;
@Inject
protected WeixinSender m_weixinSender;
@Inject
protected AlertTypeManager m_alertTypeManager;
protected String buildContactInfo(String domainName) {
try {
Project project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL);
String owners = project.getOwner();
String phones = project.getPhone();
StringBuilder builder = new StringBuilder();
if (!StringUtils.isEmpty(owners)) {
builder.append("[业务负责人: ").append(owners).append(" ]");
}
if (!StringUtils.isEmpty(phones)) {
builder.append("[负责人手机号码: ").append(phones).append(" ]");
}
return builder.toString();
} catch (Exception ex) {
Cat.logError("build contact info error for doamin: " + domainName, ex);
}
return null;
}
protected List<String> queryReceivers() {
return null;
}
public boolean sendAlert(BaseAlertConfig alertConfig, AlertResultEntity alertResult, ProductLine productline,
String domain, String mailTitle, String configId) {
String content = alertResult.getContent();
String contactInfo = buildContactInfo(domain);
Type type = m_alertTypeManager.getType(configId, domain, alertResult.getAlertType());
boolean sendResult = true;
if (type.isSendMail()) {
String mailContent = content + "<br/>" + contactInfo;
List<String> receivers = alertConfig.buildMailReceivers(productline);
if (!m_mailSender.sendAlert(receivers, domain, mailTitle, mailContent)) {
sendResult = false;
}
}
if (type.isSendWeixin()) {
String weixinContent = content + "\n" + contactInfo;
List<String> receivers = alertConfig.buildMailReceivers(productline);
if (!m_weixinSender.sendAlert(receivers, domain, mailTitle, weixinContent)) {
sendResult = false;
}
}
if (type.isSendSms()) {
String smsContent = content + contactInfo;
List<String> receivers = alertConfig.buildSMSReceivers(productline);
if (!m_smsSender.sendAlert(receivers, domain, mailTitle, smsContent)) {
sendResult = false;
}
}
Cat.logEvent(configId, productline.getId(), Event.SUCCESS, mailTitle + " " + content);
return sendResult;
}
}
package com.dianping.cat.report.task.alert.sender;
import java.util.List;
import com.dianping.cat.Cat;
public class SmsSender extends BaseSender {
@Override
protected void sendLog(String title, String content, List<String> receivers) {
StringBuilder builder = new StringBuilder();
builder.append(title).append(" ").append(content).append(" ");
for (String receiver : receivers) {
builder.append(receiver).append(" ");
}
Cat.logEvent("SendSms", builder.toString());
m_logger.info("SendSms" + builder.toString());
}
@Override
public boolean sendAlert(List<String> receivers, String domain, String title, String content) {
try {
m_mailSms.sendSms(title, content, receivers);
sendLog(title, content, receivers);
return true;
} catch (Exception ex) {
Cat.logError("send sms error" + " " + title + " " + content, ex);
return false;
}
}
}
package com.dianping.cat.report.task.alert.sender;
import java.util.List;
import com.dianping.cat.Cat;
public class WeixinSender extends BaseSender {
@Override
protected void sendLog(String title, String content, List<String> receivers) {
StringBuilder builder = new StringBuilder();
builder.append(title).append(" ").append(content).append(" ");
for (String receiver : receivers) {
builder.append(receiver).append(" ");
}
Cat.logEvent("SendWeixin", builder.toString());
m_logger.info("SendWeixin" + builder.toString());
}
@Override
public boolean sendAlert(List<String> receivers, String domain, String title, String content) {
try {
content = content.replaceAll("<br/>", "\n");
m_mailSms.sendWeiXin(title, content, domain, mergeList(receivers));
sendLog(title, content, receivers);
return true;
} catch (Exception ex) {
Cat.logError("send weixin error" + " " + title + " " + content, ex);
return false;
}
}
private String mergeList(List<String> receivers) {
StringBuilder builder = new StringBuilder();
for (String receiver : receivers) {
builder.append(receiver).append(",");
}
String tmpResult = builder.toString();
if (tmpResult.endsWith(",")) {
return tmpResult.substring(0, tmpResult.length() - 1);
} else {
return tmpResult;
}
}
}
package com.dianping.cat.report.task.alert.sender.decorator;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
public interface Decorator {
String getId();
String generateTitle(AlertEntity alert);
String generateContent(AlertEntity alert);
}
package com.dianping.cat.report.task.alert.sender.decorator;
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;
import org.unidal.tuple.Pair;
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 = WeixinDecorator.ID)
private Decorator m_weixinDecorator;
@Inject(type = Decorator.class, value = SmsDecorator.ID)
private Decorator m_smsDecorator;
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);
return new Pair<String, String>(decorator.generateTitle(alert), decorator.generateContent(alert));
}
@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);
}
public void setMailDecorator(Decorator decorator) {
m_mailDecorator = decorator;
}
public void setSmsDecorator(Decorator decorator) {
m_smsDecorator = decorator;
}
public void setWeixinDecorator(Decorator decorator) {
m_weixinDecorator = decorator;
}
}
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;
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.report.task.alert.sender.AlertEntity;
import com.site.lookup.util.StringUtils;
public abstract class DefaultDecorator implements Decorator {
@Inject
protected ProjectDao m_projectDao;
private DateFormat m_fromat = new SimpleDateFormat("yyyyMMdd");
protected String buildContactInfo(String domainName) {
try {
Project project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL);
String owners = project.getOwner();
String phones = project.getPhone();
StringBuilder builder = new StringBuilder();
if (!StringUtils.isEmpty(owners)) {
builder.append("[业务负责人: ").append(owners).append(" ]");
}
if (!StringUtils.isEmpty(phones)) {
builder.append("[负责人手机号码: ").append(phones).append(" ]");
}
return builder.toString();
} catch (Exception ex) {
Cat.logError("build contact info error for doamin: " + domainName, ex);
}
return "";
}
protected String buildExceptionContent(AlertEntity alert) {
try {
StringBuilder sb = new StringBuilder();
String domain = alert.getGroup();
String date = m_fromat.format(alert.getAlertDate());
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();
if ("business".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[业务告警] [产品线 ").append(alert.getProductline()).append("]");
sb.append("[业务指标 ").append(alert.getMetric()).append("]");
return sb.toString();
}
if ("network".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[网络告警] [产品线 ").append(alert.getProductline()).append("]");
sb.append("[网络指标 ").append(alert.getMetric()).append("]");
return sb.toString();
}
if ("system".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[系统告警] [产品线 ").append(alert.getProductline()).append("]");
sb.append("[系统指标 ").append(alert.getMetric()).append("]");
return sb.toString();
}
if ("exception".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[CAT异常告警] [项目: ").append(alert.getGroup()).append("]");
return sb.toString();
}
if ("thidparty".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[CAT第三方告警] [项目: ").append(alert.getGroup()).append("]");
return sb.toString();
}
return "";
}
public abstract String generateContent(AlertEntity alert);
}
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;
}
}
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.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.dispatcher;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
public interface Dispatcher {
String getId();
boolean send(AlertMessageEntity message, String type);
}
package com.dianping.cat.report.task.alert.sender.dispatcher;
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 org.unidal.tuple.Pair;
import com.dianping.cat.report.task.alert.manager.AlertManager;
import com.dianping.cat.report.task.alert.sender.AlertChannel;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager;
import com.dianping.cat.report.task.alert.sender.receiver.Seeker;
import com.dianping.cat.system.config.AlertPolicyManager;
public class DispatcherManager implements Initializable {
@Inject
private AlertPolicyManager m_policyManager;
@Inject
private DecoratorManager m_decoratorManager;
@Inject
private Seeker m_seeker;
@Inject
protected AlertManager m_alertManager;
@Inject(type = Dispatcher.class, value = MailDispatcher.ID)
protected Dispatcher m_mailDispatcher;
@Inject(type = Dispatcher.class, value = WeixinDispatcher.ID)
protected Dispatcher m_weixinDispatcher;
@Inject(type = Dispatcher.class, value = SmsDispatcher.ID)
protected Dispatcher m_smsDispatcher;
private Map<String, Dispatcher> m_dispatchers = new HashMap<String, Dispatcher>();
@Override
public void initialize() throws InitializationException {
m_dispatchers.put(m_mailDispatcher.getId(), m_mailDispatcher);
m_dispatchers.put(m_weixinDispatcher.getId(), m_weixinDispatcher);
m_dispatchers.put(m_smsDispatcher.getId(), m_smsDispatcher);
}
public boolean send(AlertEntity alert) {
String type = alert.getType();
String group = alert.getGroup();
String level = alert.getLevel();
String channels = m_policyManager.queryChannels(type, group, level);
for (AlertChannel channel : AlertChannel.values()) {
String channelName = channel.getName();
if (channels.contains(channelName)) {
Pair<String, String> pair = m_decoratorManager.generateTitleAndContent(alert, channelName);
List<String> receivers = m_seeker.queryReceivers(alert.getProductline(), channel, type);
AlertMessageEntity message = new AlertMessageEntity(group, pair.getKey(), pair.getValue(), receivers);
m_alertManager.storeAlert(alert, message);
Dispatcher dispatcher = m_dispatchers.get(channelName);
dispatcher.send(message, type);
}
}
return false;
}
public void setMailDispatcher(Dispatcher dispatcher) {
m_mailDispatcher = dispatcher;
}
public void setSmsDispatcher(Dispatcher dispatcher) {
m_smsDispatcher = dispatcher;
}
public void setWeixinDispatcher(Dispatcher dispatcher) {
m_weixinDispatcher = dispatcher;
}
}
package com.dianping.cat.report.task.alert.sender.dispatcher;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.system.tool.MailSMS;
public class MailDispatcher implements Dispatcher, LogEnabled {
@Inject
private MailSMS m_mailSms;
public static final String ID = "mail";
private Logger m_logger;
@Override
public boolean send(AlertMessageEntity message, String type) {
try {
m_mailSms.sendEmail(message.getTitle(), message.getContent(), message.getReceivers());
String messageStr = message.toString();
Cat.logEvent("AlertMail", type, Event.SUCCESS, messageStr);
m_logger.info("AlertMail " + messageStr);
return true;
} catch (Exception ex) {
Cat.logError("send mail error " + message.toString(), ex);
return false;
}
}
@Override
public String getId() {
return ID;
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
}
package com.dianping.cat.report.task.alert.sender.dispatcher;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.system.tool.MailSMS;
public class SmsDispatcher implements Dispatcher, LogEnabled {
@Inject
private MailSMS m_mailSms;
public static final String ID = "sms";
private Logger m_logger;
@Override
public boolean send(AlertMessageEntity message, String type) {
try {
m_mailSms.sendSms(message.getTitle() + message.getContent(), null, message.getReceivers());
String messageStr = message.toString();
Cat.logEvent("AlertSms", type, Event.SUCCESS, messageStr);
m_logger.info("AlertSms " + messageStr);
return true;
} catch (Exception ex) {
Cat.logError("send sms error " + message.toString(), ex);
return false;
}
}
@Override
public String getId() {
return ID;
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
}
package com.dianping.cat.report.task.alert.sender.dispatcher;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.system.tool.MailSMS;
public class WeixinDispatcher implements Dispatcher, LogEnabled {
@Inject
private MailSMS m_mailSms;
public static final String ID = "weixin";
private Logger m_logger;
@Override
public boolean send(AlertMessageEntity message, String type) {
try {
m_mailSms
.sendWeiXin(message.getTitle(), message.getContent(), message.getGroup(), message.getReceiverString());
String messageStr = message.toString();
Cat.logEvent("AlertWeiixin", type, Event.SUCCESS, messageStr);
m_logger.info("AlertWeiixin " + messageStr);
return true;
} catch (Exception ex) {
Cat.logError("send weixin error " + message.toString(), ex);
return false;
}
}
@Override
public String getId() {
return ID;
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
}
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.report.task.alert.sender.AlertChannel;
import com.dianping.cat.system.config.AlertConfigManager;
import com.site.helper.Splitters;
public class Seeker {
@Inject
protected ProjectDao m_projectDao;
@Inject
protected ProductLineConfigManager m_productLineConfigManager;
@Inject
protected AlertConfigManager m_configManager;
public List<String> queryReceivers(String productlineName, AlertChannel channel, String type) {
if ("exception".equals(type) || "thirdparty".equals(type)) {
return queryReceiversByDomain(productlineName, channel, type);
} else {
return queryReceiversByProductline(productlineName, channel, type);
}
}
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;
}
}
......@@ -6,19 +6,14 @@ import java.util.Map;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
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.BaseAlertConfig;
public class SystemAlert extends BaseAlert implements Task, LogEnabled {
@Inject
private SystemAlertConfig m_alertConfig;
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
......@@ -26,12 +21,7 @@ public class SystemAlert extends BaseAlert implements Task, LogEnabled {
@Override
public String getName() {
return "system-alert";
}
@Override
public BaseAlertConfig getAlertConfig() {
return m_alertConfig;
return "system";
}
@Override
......
package com.dianping.cat.report.task.alert.system;
import com.dianping.cat.report.task.alert.BaseAlertConfig;
public class SystemAlertConfig extends BaseAlertConfig {
private String m_id = "system";
@Override
public String buildMailTitle(String productlineName, String metricName) {
StringBuilder sb = new StringBuilder();
sb.append("[系统告警] [产品线 ").append(productlineName).append("]");
sb.append("[系统指标 ").append(metricName).append("]");
return sb.toString();
}
public String getId() {
return m_id;
}
}
package com.dianping.cat.report.task.alert.thirdParty;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
......@@ -12,30 +11,20 @@ import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.helper.Threads.Task;
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.helper.TimeUtil;
import com.dianping.cat.message.Event;
import com.dianping.cat.message.Transaction;
import com.dianping.cat.report.task.alert.sender.MailSender;
import com.site.helper.Splitters;
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.dispatcher.DispatcherManager;
public class ThirdPartyAlert implements Task, LogEnabled {
public class ThirdPartyAlert implements Task {
@Inject
private ProjectDao m_projectDao;
@Inject
protected MailSender m_mailSender;
private Logger m_logger;
private DispatcherManager m_dispatcherManager;
private static final long DURATION = TimeUtil.ONE_MINUTE;
......@@ -86,7 +75,15 @@ public class ThirdPartyAlert implements Task, LogEnabled {
Map<String, List<ThirdPartyAlertEntity>> domain2AlertMap = buildDomain2AlertMap(alertEntities);
for (Entry<String, List<ThirdPartyAlertEntity>> entry : domain2AlertMap.entrySet()) {
sendAlert(entry.getKey(), entry.getValue());
String domain = entry.getKey();
List<ThirdPartyAlertEntity> thirdPartyAlerts = entry.getValue();
AlertEntityBuilder builder = new AlertEntity().new AlertEntityBuilder();
builder.buildDate(new Date()).buildLevel("warning").buildContent(thirdPartyAlerts.toString());
builder.buildMetric(getName()).buildProductline(domain).buildType(getName()).buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
m_dispatcherManager.send(alertEntity);
}
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
......@@ -124,70 +121,9 @@ public class ThirdPartyAlert implements Task, LogEnabled {
return domain2AlertMap;
}
private Project queryProjectByDomain(String projectName) {
Project project = null;
try {
project = m_projectDao.findByDomain(projectName, ProjectEntity.READSET_FULL);
} catch (Exception e) {
Cat.logError(e);
}
return project;
}
public String buildMailContent(String exceptions, String domain) {
StringBuilder sb = new StringBuilder();
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date());
sb.append("[CAT第三方告警] [项目: ").append(domain).append("] : ");
sb.append(exceptions).append("[时间: ").append(time).append("]");
return sb.toString();
}
private void sendAlert(String domain, List<ThirdPartyAlertEntity> entities) {
Project project = queryProjectByDomain(domain);
List<String> emails = buildMailReceivers(project);
String mailTitle = buildMailTitle(domain);
String mailContent = buildMailContent(entities.toString(), domain);
m_mailSender.sendAlert(emails, domain, mailTitle, mailContent);
m_logger.info(mailTitle + " " + mailContent + " " + emails);
Cat.logEvent("ExceptionAlert", domain, Event.SUCCESS, "[邮件告警] " + mailTitle + " " + mailContent);
}
private String buildMailTitle(String domain) {
StringBuilder sb = new StringBuilder();
sb.append("[CAT第三方告警] [项目: ").append(domain).append("]");
return sb.toString();
}
private List<String> buildMailReceivers(Project project) {
List<String> mailReceivers = new ArrayList<String>();
mailReceivers.addAll(split(project.getEmail()));
return mailReceivers;
}
private List<String> split(String str) {
List<String> result = new ArrayList<String>();
if (str != null) {
result.addAll(Splitters.by(",").noEmptyItem().split(str));
}
return result;
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
@Override
public String getName() {
return "thirdParty-alert";
return "thirdParty";
}
@Override
......
......@@ -10,58 +10,48 @@ import com.dianping.cat.Cat;
import com.dianping.cat.core.config.Config;
import com.dianping.cat.core.config.ConfigDao;
import com.dianping.cat.core.config.ConfigEntity;
import com.dianping.cat.home.alert.type.entity.AlertType;
import com.dianping.cat.home.alert.type.entity.Category;
import com.dianping.cat.home.alert.type.entity.Domain;
import com.dianping.cat.home.alert.type.entity.Type;
import com.dianping.cat.home.alert.type.transform.DefaultSaxParser;
import com.dianping.cat.home.alert.policy.entity.AlertPolicy;
import com.dianping.cat.home.alert.policy.entity.Group;
import com.dianping.cat.home.alert.policy.entity.Level;
import com.dianping.cat.home.alert.policy.entity.Type;
import com.dianping.cat.home.alert.policy.transform.DefaultSaxParser;
public class AlertTypeManager implements Initializable {
public class AlertPolicyManager implements Initializable {
@Inject
private ConfigDao m_configDao;
private int m_configId;
private AlertType m_config;
private AlertPolicy m_config;
private static final String CONFIG_NAME = "alertType";
private static final String CONFIG_NAME = "alertPolicy";
private static final String DEFAULT_TYPE = "default";
public AlertType getAlertType() {
public AlertPolicy getAlertPolicy() {
return m_config;
}
public Type getType(String categoryName, String domainName, String typeName) {
public String queryChannels(String typeName, String groupName, String levelName) {
try {
Category category = m_config.findCategory(categoryName);
Domain domain = category.findDomain(domainName);
if (domain == null) {
domain = category.findDomain(DEFAULT_TYPE);
Type type = m_config.findType(typeName);
Group group = type.findGroup(groupName);
if (group == null) {
group = type.findGroup(DEFAULT_TYPE);
}
Type type = domain.findType(typeName);
if (type == null) {
type = generateDefaultType();
Level level = group.findLevel(levelName);
if (level == null) {
return "";
}
return type;
return level.getSend();
} catch (Exception ex) {
return generateDefaultType();
return "";
}
}
private Type generateDefaultType() {
Type type = new Type();
type.setSendMail(true);
type.setSendWeixin(true);
type.setSendSms(false);
return type;
}
@Override
public void initialize() throws InitializationException {
try {
......@@ -73,7 +63,7 @@ public class AlertTypeManager implements Initializable {
} catch (DalNotFoundException e) {
try {
String content = Files.forIO().readFrom(
this.getClass().getResourceAsStream("/config/default-alert-type.xml"), "utf-8");
this.getClass().getResourceAsStream("/config/default-alert-policy.xml"), "utf-8");
Config config = m_configDao.createLocal();
config.setName(CONFIG_NAME);
......@@ -89,7 +79,7 @@ public class AlertTypeManager implements Initializable {
Cat.logError(e);
}
if (m_config == null) {
m_config = new AlertType();
m_config = new AlertPolicy();
}
}
......
......@@ -69,7 +69,7 @@ public enum Action implements org.unidal.web.mvc.Action {
ALERT_DEFAULT_RECEIVERS("alertDefaultReceivers"),
ALERT_TYPE("alertTypes"),
ALERT_POLICY("alertPolicy"),
EXCEPTION("exception"),
......
......@@ -47,7 +47,7 @@ import com.dianping.cat.report.service.ReportServiceManager;
import com.dianping.cat.report.view.DomainNavManager;
import com.dianping.cat.system.SystemPage;
import com.dianping.cat.system.config.AlertConfigManager;
import com.dianping.cat.system.config.AlertTypeManager;
import com.dianping.cat.system.config.AlertPolicyManager;
import com.dianping.cat.system.config.BugConfigManager;
import com.dianping.cat.system.config.BusinessRuleConfigManager;
import com.dianping.cat.system.config.DomainGroupConfigManager;
......@@ -118,7 +118,7 @@ public class Handler implements PageHandler<Context> {
private NetGraphConfigManager m_netGraphConfigManager;
@Inject
private AlertTypeManager m_alertTypeManager;
private AlertPolicyManager m_alertPolicyManager;
@Inject
private ThirdPartyConfigManager m_thirdPartyConfigManager;
......@@ -399,15 +399,15 @@ public class Handler implements PageHandler<Context> {
}
model.setContent(m_alertConfigManager.getAlertConfig().toString());
break;
case ALERT_TYPE:
String alertTypes = payload.getContent();
case ALERT_POLICY:
String alertPolicy = payload.getContent();
if (!StringUtils.isEmpty(alertTypes)) {
model.setOpState(m_alertTypeManager.insert(alertTypes));
if (!StringUtils.isEmpty(alertPolicy)) {
model.setOpState(m_alertPolicyManager.insert(alertPolicy));
} else {
model.setOpState(true);
}
model.setContent(m_alertTypeManager.getAlertType().toString());
model.setContent(m_alertPolicyManager.getAlertPolicy().toString());
break;
case EXCEPTION:
loadExceptionConfig(model);
......
......@@ -43,7 +43,7 @@ public enum JspFile {
ALERT_DEFAULT_RECEIVERS("/jsp/system/defaultReceiver/alertDefaultReceivers.jsp"),
ALERT_TYPE("/jsp/system/alert/types.jsp"),
ALERT_POLICY("/jsp/system/alert/policy.jsp"),
EXCEPTION_THRESHOLD("/jsp/system/exception/exceptionThreshold.jsp"),
......
......@@ -82,8 +82,8 @@ public class JspViewer extends BaseJspViewer<SystemPage, Action, Context, Model>
return JspFile.SYSTEM_RULE_CONFIG_UPDATE.getPath();
case ALERT_DEFAULT_RECEIVERS:
return JspFile.ALERT_DEFAULT_RECEIVERS.getPath();
case ALERT_TYPE:
return JspFile.ALERT_TYPE.getPath();
case ALERT_POLICY:
return JspFile.ALERT_POLICY.getPath();
// Excepton Config
case EXCEPTION:
case EXCEPTION_THRESHOLD_UPDATE_SUBMIT:
......
package com.dianping.cat.system.page.router;
public enum Action implements org.unidal.web.mvc.Action {
VIEW("view");
API("api"),
MODEL("model");
private String m_name;
......
......@@ -4,7 +4,10 @@ import java.io.IOException;
import javax.servlet.ServletException;
import com.dianping.cat.report.service.ReportServiceManager;
import com.dianping.cat.system.SystemPage;
import com.dianping.cat.system.config.RouterConfigManager;
import org.unidal.lookup.annotation.Inject;
import org.unidal.web.mvc.PageHandler;
import org.unidal.web.mvc.annotation.InboundActionMeta;
......@@ -15,6 +18,12 @@ public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
@Inject
private ReportServiceManager m_reportService;
@Inject
private RouterConfigManager m_configManager;
@Override
@PayloadMeta(Payload.class)
@InboundActionMeta(name = "router")
......@@ -26,10 +35,19 @@ public class Handler implements PageHandler<Context> {
@OutboundActionMeta(name = "router")
public void handleOutbound(Context ctx) throws ServletException, IOException {
Model model = new Model(ctx);
model.setAction(Action.VIEW);
Payload payload = ctx.getPayload();
Action action = payload.getAction();
switch(action){
case API:
break;
case MODEL:
break;
}
model.setAction(Action.API);
model.setPage(SystemPage.ROUTER);
if (!ctx.isProcessStopped()) {
m_jspViewer.view(ctx, model);
}
......
package com.dianping.cat.system.page.router;
public enum JspFile {
VIEW("/jsp/system/router.jsp"),
API("/jsp/system/router.jsp"),
;
......
......@@ -9,8 +9,10 @@ public class JspViewer extends BaseJspViewer<SystemPage, Action, Context, Model>
Action action = model.getAction();
switch (action) {
case VIEW:
return JspFile.VIEW.getPath();
case API:
return JspFile.API.getPath();
case MODEL:
return JspFile.API.getPath();
}
throw new RuntimeException("Unknown action: " + action);
......
......@@ -10,6 +10,6 @@ public class Model extends ViewModel<SystemPage, Action, Context> {
@Override
public Action getDefaultAction() {
return Action.VIEW;
return Action.API;
}
}
......@@ -11,8 +11,30 @@ public class Payload implements ActionPayload<SystemPage, Action> {
@FieldMeta("op")
private Action m_action;
@FieldMeta("domain")
private String m_domain;
@FieldMeta("date")
private String m_date;
public String getDomain() {
return m_domain;
}
public void setDomain(String domain) {
m_domain = domain;
}
public String getDate() {
return m_date;
}
public void setDate(String date) {
m_date = date;
}
public void setAction(String action) {
m_action = Action.getByName(action, Action.VIEW);
m_action = Action.getByName(action, Action.API);
}
@Override
......@@ -33,7 +55,7 @@ public class Payload implements ActionPayload<SystemPage, Action> {
@Override
public void validate(ActionContext<?> ctx) {
if (m_action == null) {
m_action = Action.VIEW;
m_action = Action.API;
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity name="alert-type" root="true">
<entity-ref name="category" type="list" names="categories" />
<entity name="alert-policy" root="true">
<entity-ref name="type" type="list" names="types" />
</entity>
<entity name="category">
<entity name="type">
<attribute name="id" value-type="String" />
<entity-ref name="domain" type="list" names="domains" />
<entity-ref name="group" type="list" names="groups" />
</entity>
<entity name="domain">
<entity name="group">
<attribute name="id" value-type="String" />
<entity-ref name="type" type="list" names="types" />
<entity-ref name="level" type="list" names="levels" />
</entity>
<entity name="type">
<entity name="level">
<attribute name="id" value-type="String" />
<attribute name="sendSms" value-type="boolean" />
<attribute name="sendMail" value-type="boolean" />
<attribute name="sendWeixin" value-type="boolean" />
<attribute name="send" value-type="String" />
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="alert-type-codegen.xml" />
<file path="alert-type-model.xml" />
<file path="alert-policy-codegen.xml" />
<file path="alert-policy-model.xml" />
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<model model-package="com.dianping.cat.home.alert.type"
<model model-package="com.dianping.cat.home.alert.policy"
enable-sax-parser="true" enable-xml-parser="true" enable-xml-builder="true">
<entity name="alert-type" root="true">
<entity-ref name="category" type="map" names="categories"
<entity name="alert-policy" root="true">
<entity-ref name="type" type="map" names="types"
method-find-or-create='true' />
</entity>
<entity name="category">
<entity name="type">
<attribute name="id" value-type="String" key="true" />
<entity-ref name="domain" type="map" names="domains"
<entity-ref name="group" type="map" names="groups"
method-find-or-create='true' />
</entity>
<entity name="domain">
<entity name="group">
<attribute name="id" value-type="String" key="true" />
<entity-ref name="type" type="map" names="types"
<entity-ref name="level" type="map" names="levels"
method-find-or-create='true' />
</entity>
<entity name="type">
<entity name="level">
<attribute name="id" value-type="String" key="true" />
<attribute name="sendSms" value-type="boolean" />
<attribute name="sendMail" value-type="boolean" />
<attribute name="sendWeixin" value-type="boolean" />
<attribute name="send" value-type="String" />
</entity>
</model>
\ No newline at end of file
......@@ -470,33 +470,6 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.MailSender</role>
<implementation>com.dianping.cat.report.task.alert.sender.MailSender</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.SmsSender</role>
<implementation>com.dianping.cat.report.task.alert.sender.SmsSender</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.WeixinSender</role>
<implementation>com.dianping.cat.report.task.alert.sender.WeixinSender</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.manager.AlertManager</role>
<implementation>com.dianping.cat.report.task.alert.manager.AlertManager</implementation>
......@@ -506,30 +479,6 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.Postman</role>
<implementation>com.dianping.cat.report.task.alert.sender.Postman</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.MailSender</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.WeixinSender</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.SmsSender</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertTypeManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder</role>
<implementation>com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder</implementation>
......@@ -589,106 +538,172 @@
<implementation>com.dianping.cat.report.page.network.nettopology.NetGraphBuilder</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.business.BusinessAlertConfig</role>
<implementation>com.dianping.cat.report.task.alert.business.BusinessAlertConfig</implementation>
<role>com.dianping.cat.report.task.alert.AlertInfo</role>
<implementation>com.dianping.cat.report.task.alert.AlertInfo</implementation>
</component>
<component>
<role>com.dianping.cat.system.tool.DefaultMailImpl</role>
<implementation>com.dianping.cat.system.tool.DefaultMailImpl</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.network.NetworkAlertConfig</role>
<implementation>com.dianping.cat.report.task.alert.network.NetworkAlertConfig</implementation>
<role>com.dianping.cat.report.task.alert.DataChecker</role>
<implementation>com.dianping.cat.report.task.alert.DefaultDataChecker</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.RemoteMetricReportService</role>
<implementation>com.dianping.cat.report.task.alert.RemoteMetricReportService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.system.SystemAlertConfig</role>
<implementation>com.dianping.cat.report.task.alert.system.SystemAlertConfig</implementation>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>mail</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.dispatcher.MailDispatcher</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.exception.ExceptionAlertConfig</role>
<implementation>com.dianping.cat.report.task.alert.exception.ExceptionAlertConfig</implementation>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>sms</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.dispatcher.SmsDispatcher</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.AlertInfo</role>
<implementation>com.dianping.cat.report.task.alert.AlertInfo</implementation>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>weixin</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.dispatcher.WeixinDispatcher</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.tool.DefaultMailImpl</role>
<implementation>com.dianping.cat.system.tool.DefaultMailImpl</implementation>
<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>
<requirements>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.DataChecker</role>
<implementation>com.dianping.cat.report.task.alert.DefaultDataChecker</implementation>
<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>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.RemoteMetricReportService</role>
<implementation>com.dianping.cat.report.task.alert.RemoteMetricReportService</implementation>
<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>
<requirements>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.business.BusinessAlert</role>
<implementation>com.dianping.cat.report.task.alert.business.BusinessAlert</implementation>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
<implementation>com.dianping.cat.system.config.AlertPolicyManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.MetricConfigManager</role>
<role>com.dianping.cat.core.config.ConfigDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>mail</role-hint>
<field-name>mailDecorator</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>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
<role-hint>weixin</role-hint>
<field-name>weixinDecorator</field-name>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.receiver.Seeker</role>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.Seeker</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.baseline.BaselineService</role>
<role>com.dianping.cat.system.config.AlertConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.business.BusinessAlertConfig</role>
<role>com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.AlertInfo</role>
<role>com.dianping.cat.report.task.alert.sender.receiver.Seeker</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertDao</role>
<role>com.dianping.cat.report.task.alert.manager.AlertManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.RemoteMetricReportService</role>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>mail</role-hint>
<field-name>mailDispatcher</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.BusinessRuleConfigManager</role>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>weixin</role-hint>
<field-name>weixinDispatcher</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.DataChecker</role>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>sms</role-hint>
<field-name>smsDispatcher</field-name>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.network.NetworkAlert</role>
<implementation>com.dianping.cat.report.task.alert.network.NetworkAlert</implementation>
<role>com.dianping.cat.report.task.alert.business.BusinessAlert</role>
<implementation>com.dianping.cat.report.task.alert.business.BusinessAlert</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.MetricConfigManager</role>
......@@ -700,16 +715,34 @@
<role>com.dianping.cat.report.baseline.BaselineService</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
<role>com.dianping.cat.report.task.alert.AlertInfo</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.network.NetworkAlertConfig</role>
<role>com.dianping.cat.report.task.alert.RemoteMetricReportService</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.AlertInfo</role>
<role>com.dianping.cat.system.config.BusinessRuleConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertDao</role>
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.network.NetworkAlert</role>
<implementation>com.dianping.cat.report.task.alert.network.NetworkAlert</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.baseline.BaselineService</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.AlertInfo</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.RemoteMetricReportService</role>
......@@ -720,33 +753,24 @@
<requirement>
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.system.SystemAlert</role>
<implementation>com.dianping.cat.report.task.alert.system.SystemAlert</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.consumer.metric.MetricConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.consumer.metric.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.baseline.BaselineService</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.system.SystemAlertConfig</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.AlertInfo</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.RemoteMetricReportService</role>
</requirement>
......@@ -756,6 +780,9 @@
<requirement>
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
</requirement>
</requirements>
</component>
<component>
......@@ -771,15 +798,6 @@
<role>com.dianping.cat.report.task.alert.exception.ExceptionAlert</role>
<implementation>com.dianping.cat.report.task.alert.exception.ExceptionAlert</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.exception.ExceptionAlertConfig</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.ExceptionConfigManager</role>
</requirement>
......@@ -787,7 +805,7 @@
<role>com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertDao</role>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
......@@ -800,10 +818,7 @@
<implementation>com.dianping.cat.report.task.alert.thirdParty.ThirdPartyAlert</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.MailSender</role>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
</requirement>
</requirements>
</component>
......@@ -4175,7 +4190,7 @@
<role>com.dianping.cat.system.config.NetGraphConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.AlertTypeManager</role>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.ThirdPartyConfigManager</role>
......@@ -4252,8 +4267,8 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.system.config.AlertTypeManager</role>
<implementation>com.dianping.cat.system.config.AlertTypeManager</implementation>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
<implementation>com.dianping.cat.system.config.AlertPolicyManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.config.ConfigDao</role>
......@@ -4296,6 +4311,24 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.router.Handler</role>
<implementation>com.dianping.cat.system.page.router.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.page.router.JspViewer</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.router.JspViewer</role>
<implementation>com.dianping.cat.system.page.router.JspViewer</implementation>
<requirements>
<requirement>
<role>org.unidal.web.mvc.view.model.ModelHandler</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.tool.MailSMS</role>
<implementation>com.dianping.cat.system.tool.DefaultMailImpl</implementation>
......
......@@ -54,8 +54,8 @@
<model package="com.dianping.cat.home.alertsummary" name="alertsummary">
<sample-model>/Users/leon/Desktop/AlertSummary.xml</sample-model>
</model>
<model package="com.dianping.cat.home.alert.type" name="alert-type">
<sample-model>src/test/resources/config/alert-type.xml</sample-model>
<model package="com.dianping.cat.home.alert.policy" name="alert-policy">
<sample-model>src/test/resources/config/alert-policy.xml</sample-model>
</model>
<model package="com.dianping.cat.home.alert.thirdParty" name="thirdParty">
<sample-model>src/test/resources/config/thirdParty-config.xml</sample-model>
......
<alert-policy>
<type id="network">
<group id="default">
<level id="error" send="mail,weixin,sms" />
<level id="warning" send="mail,weixin" />
</group>
</type>
<type id="exception">
<group id="default">
<level id="error" send="mail,weixin,sms" />
<level id="warning" send="mail,weixin" />
</group>
</type>
<type id="business">
<group id="default">
<level id="error" send="mail,weixin,sms" />
<level id="warning" send="mail,weixin" />
</group>
</type>
<type id="system">
<group id="default">
<level id="error" send="mail,weixin,sms" />
<level id="warning" send="mail,weixin" />
</group>
</type>
<type id="thirdparty">
<group id="default">
<level id="warning" send="mail" />
</group>
</type>
</alert-policy>
\ No newline at end of file
<alert-type>
<category id="network">
<domain id="default">
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="warning" sendSms="false" sendMail="true" sendWeixin="true" />
</domain>
</category>
<category id="exception">
<domain id="default">
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="warning" sendSms="false" sendMail="true" sendWeixin="true" />
</domain>
</category>
<category id="business">
<domain id="default">
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="warning" sendSms="false" sendMail="true" sendWeixin="true" />
</domain>
</category>
<category id="system">
<domain id="default">
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="warning" sendSms="false" sendMail="true" sendWeixin="true" />
</domain>
</category>
</alert-type>
\ No newline at end of file
......@@ -18,8 +18,8 @@
<%@include file="../configTree.jsp"%>
</div>
<div class="span10">
<form name="alertTypes" id="form" method="post"
action="${model.pageUri}?op=alertTypes"
<form name="alertPolicy" id="form" method="post"
action="${model.pageUri}?op=alertPolicy"
onsubmit="return validate_form(this)">
<h4 class="text-center text-error" id="state">&nbsp;</h4>
<h4 class="text-center text-error">告警类型</h4>
......@@ -40,7 +40,7 @@
</a:body>
<script type="text/javascript">
$(document).ready(function() {
$('#types').addClass('active');
$('#policy').addClass('active');
var state = '${model.opState}';
if (state == 'Success') {
$('#state').html('操作成功');
......
......@@ -22,7 +22,7 @@
<li class='nav-header'><h4>监控告警配置</h4></li>
<li class="text-right" id="systemRuleConfigUpdate"><a href="?op=systemRuleConfigUpdate"><strong>系统告警配置</strong></a></li>
<li class="text-right" id="alertDefaultReceivers"><a href="?op=alertDefaultReceivers"><strong>默认告警配置</strong></a></li>
<li class="text-right" id="types"><a href="?op=alertTypes"><strong>告警类型设置</strong></a></li>
<li class="text-right" id="policy"><a href="?op=alertPolicy"><strong>告警类型设置</strong></a></li>
<li class="text-right" id="bugConfigUpdate"><a href="?op=bugConfigUpdate"><strong>异常类型配置</strong></a></li>
<li class='nav-header'><h4>其他监控配置</h4></li>
<li class="text-right" id="domainGroupConfigUpdate"><a href="?op=domainGroupConfigUpdate"><strong>机器分组配置</strong></a></li>
......
......@@ -115,7 +115,7 @@ public class RuleConfigTest {
}
for (AlertResultEntity alertResult : alertResults) {
if (alertResult.getAlertType().equals("error")) {
if (alertResult.getAlertLevel().equals("error")) {
return alertResult;
}
}
......
......@@ -222,7 +222,7 @@ public class AlertConfigTest {
}
for (AlertResultEntity alertResult : alertResults) {
if (alertResult.getAlertType().equals("error")) {
if (alertResult.getAlertLevel().equals("error")) {
return alertResult;
}
}
......
<alert-policy>
<type id="network">
<group id="cat">
<level id="error" send="mail,weixin,sms" />
<level id="warning" send="mail,weixin,sms" />
<level id="error" send="mail,weixin,sms" />
</group>
<group id="unipay">
<level id="error" send="mail,weixin,sms" />
<level id="warning" send="mail,weixin,sms" />
<level id="error" send="mail,weixin,sms" />
</group>
<group id="cat">
<level id="error" send="mail,weixin,sms" />
<level id="warning" send="mail,weixin,sms" />
<level id="error" send="mail,weixin,sms" />
</group>
</type>
<type id="exception">
<group id="cat">
<level id="error" send="mail,weixin,sms" />
<level id="warning" send="mail,weixin,sms" />
<level id="error" send="mail,weixin,sms" />
</group>
</type>
</alert-policy>
\ No newline at end of file
<alert-type>
<category id="network">
<domain id="cat">
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="warning" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
</domain>
<domain id="cat">
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
</domain>
<domain id="cat">
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
</domain>
</category>
<category id="exception">
<domain id="cat">
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
<type id="error" sendSms="true" sendMail="true" sendWeixin="true" />
</domain>
</category>
</alert-type>
\ No newline at end of file
......@@ -5,6 +5,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.Pattern;
......@@ -54,9 +55,12 @@ public class InstallMojo extends AbstractMojo {
private boolean m_verbose = false;
private void createDatabase(Statement stmt) throws SQLException {
ResultSet result = null;
try {
result = stmt.executeQuery("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'cat'");
if (!result.next()) {
stmt.executeUpdate("create database cat");
}
} catch (SQLException e) {
if (e.getErrorCode() == 1007) {
getLog().info("Database 'cat' already exists, drop it first...");
......@@ -67,6 +71,8 @@ public class InstallMojo extends AbstractMojo {
} else {
throw e;
}
} finally {
result.close();
}
}
......@@ -217,7 +223,6 @@ public class InstallMojo extends AbstractMojo {
}
});
m_user = PropertyProviders.fromConsole().forString("jdbc.user", "Please input username:", null, null, null);
m_password = PropertyProviders.fromConsole().forString("jdbc.password", "Please input password:", null, "",
null);
m_password = PropertyProviders.fromConsole().forString("jdbc.password", "Please input password:", null, "", null);
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册