diff --git a/cat-home/pom.xml b/cat-home/pom.xml index 382b26f3ccc685d896ad1fe43720de2e8e9aea93..9ef7684d303d4bef2773fd85cc0c2f005afc38fc 100755 --- a/cat-home/pom.xml +++ b/cat-home/pom.xml @@ -165,6 +165,7 @@ ${basedir}/src/main/resources/META-INF/dal/model/alert-report-manifest.xml, ${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, diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java index e7fd4efd49a3610701d6c35a97aafdd758c643e5..c0463acb326560181c81dd5a38ae3c4f53a141dd 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/business/BusinessAlert.java @@ -34,7 +34,7 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled { @Override public String getName() { - return "metric-alert"; + return "business-alert"; } @Override diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java index 517f8fdf17b903244c9a55e0e997156543ef1bed..b2e8def57f5d47d06c2ccbcbcd2bb01dba0191ce 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/exception/ExceptionAlert.java @@ -66,16 +66,16 @@ public class ExceptionAlert implements Task, LogEnabled { private Alert buildAlert(String domainName, AlertException exception, String mailContent) { Alert alert = new Alert(); - + alert.setDomain(domainName); alert.setAlertTime(new Date()); alert.setCategory(getName()); alert.setType(exception.getType()); alert.setContent(mailContent); alert.setMetric(exception.getName()); - - return alert; - } + + return alert; + } private TopMetric buildTopMetric(Date date) { TopReport topReport = queryTopReport(date); @@ -91,7 +91,6 @@ public class ExceptionAlert implements Task, LogEnabled { m_logger = logger; } - @Override public String getName() { return "exception-alert"; } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryDecorator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryDecorator.java new file mode 100644 index 0000000000000000000000000000000000000000..ae1d06c5b94909b6fdf151c587b2f08b444c7ee0 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryDecorator.java @@ -0,0 +1,11 @@ +package com.dianping.cat.report.task.alert.summary; + +import com.dianping.cat.home.alert.summary.entity.AlertSummary; + +public class AlertSummaryDecorator { + + public String generateHtml(AlertSummary alertSummary) { + return null; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryExecutor.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..3bce21475388fae6e9a2ae6db80978db360fef92 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryExecutor.java @@ -0,0 +1,39 @@ +package com.dianping.cat.report.task.alert.summary; + +import java.util.Date; +import java.util.List; + +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.Cat; +import com.dianping.cat.home.alert.summary.entity.AlertSummary; + +public class AlertSummaryExecutor { + + @Inject + AlertSummaryGenerator m_alertSummaryGenerator; + + @Inject + AlertSummaryManager m_alertSummaryManager; + + @Inject + AlertSummaryDecorator m_alertSummaryDecorator; + + @Inject + AlertSummarySender m_alertSummarySender; + + public String execute(String domain, Date date, List receivers) { + try { + AlertSummary alertSummary = m_alertSummaryGenerator.generateAlertSummary(domain, date); + m_alertSummaryManager.insert(alertSummary); + String content = m_alertSummaryDecorator.generateHtml(alertSummary); + m_alertSummarySender.send(content, receivers); + + return content; + } catch (Exception e) { + Cat.logError("generate alert summary fail:" + domain + " " + date, e); + return null; + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryGenerator.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..c21dc93f0fb817cf8601c77e930b74902ec2f758 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryGenerator.java @@ -0,0 +1,147 @@ +package com.dianping.cat.report.task.alert.summary; + +import java.util.ArrayList; +import java.util.Date; +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.home.alert.summary.entity.AlertSummary; +import com.dianping.cat.home.alert.summary.entity.Category; +import com.dianping.cat.home.dal.report.Alert; +import com.dianping.cat.home.dal.report.AlertDao; +import com.dianping.cat.home.dal.report.AlertEntity; +import com.dianping.cat.home.dependency.graph.entity.TopologyGraph; +import com.dianping.cat.report.page.dependency.graph.TopologyGraphManager; + +public class AlertSummaryGenerator { + + @Inject + private AlertDao m_alertDao; + + @Inject + private TopologyGraphManager m_topologyManager; + + // fetch alerts during this period, time unit is ms, default value is 1 hour + private final long DURATION = 60 * 60 * 1000L; + + private com.dianping.cat.home.alert.summary.entity.Alert convertToAlert(Alert dbAlert) { + com.dianping.cat.home.alert.summary.entity.Alert alert = new com.dianping.cat.home.alert.summary.entity.Alert(); + + alert.setAlertTime(dbAlert.getAlertTime()); + alert.setContext(dbAlert.getContent()); + alert.setMetric(dbAlert.getMetric()); + alert.setType(dbAlert.getType()); + + return alert; + } + + private com.dianping.cat.home.alert.summary.entity.Alert convertToDependAlert(String domain, Alert dbAlert) { + com.dianping.cat.home.alert.summary.entity.Alert alert = new com.dianping.cat.home.alert.summary.entity.Alert(); + + alert.setAlertTime(dbAlert.getAlertTime()); + alert.setContext(dbAlert.getContent()); + alert.setMetric(domain + ":" + dbAlert.getMetric()); + alert.setType(dbAlert.getType()); + + return alert; + } + + public AlertSummary generateAlertSummary(String domain, Date date) { + AlertSummary alertSummary = new AlertSummary(); + + alertSummary.setDomain(domain); + alertSummary.setAlertDate(date); + + alertSummary.addCategory(generateCategoryByTimeCategory(date, "network")); + alertSummary.addCategory(generateCategoryByTimeCateDomain(date, "business", domain)); + alertSummary.addCategory(generateCategoryByTimeCateDomain(date, "exception", domain)); + alertSummary.addCategory(generateCategoryByTimeCateDomain(date, "system", domain)); + + List dependencyDomains = queryDependencyDomains(date, domain); + alertSummary.addCategory(generateDependCategoryByTimeCateDomain(date, "business", dependencyDomains)); + alertSummary.addCategory(generateDependCategoryByTimeCateDomain(date, "exception", dependencyDomains)); + + return alertSummary; + } + + private Category generateCategoryByTimeCateDomain(Date date, String cate, String domain) { + Category category = new Category(cate); + String dbCategoryName = cate + "-alert"; + Date startTime = new Date(date.getTime() - DURATION / 2); + Date endTime = new Date(date.getTime() + DURATION / 2); + + try { + List dbAlerts = m_alertDao.queryAlertsByTimeCategoryDomain(startTime, endTime, dbCategoryName, domain, + AlertEntity.READSET_FULL); + setDBAlertsToCategory(category, dbAlerts); + } catch (DalException e) { + Cat.logError("find alerts error for category:" + cate + " domain:" + domain + " date:" + date, e); + } + + return category; + } + + private Category generateCategoryByTimeCategory(Date date, String cate) { + Category category = new Category(cate); + String dbCategoryName = cate + "-alert"; + Date startTime = new Date(date.getTime() - DURATION / 2); + Date endTime = new Date(date.getTime() + DURATION / 2); + + try { + List dbAlerts = m_alertDao.queryAlertsByTimeCategory(startTime, endTime, dbCategoryName, + AlertEntity.READSET_FULL); + setDBAlertsToCategory(category, dbAlerts); + } catch (DalException e) { + Cat.logError("find alerts error for category:" + cate + " date:" + date, e); + } + + return category; + } + + private Category generateDependCategoryByTimeCateDomain(Date date, String cate, List dependencyDomains) { + String categoryName = "dependency-" + cate; + String dbCategoryName = cate + "-alert"; + Category category = new Category(categoryName); + Date startTime = new Date(date.getTime() - DURATION / 2); + Date endTime = new Date(date.getTime() + DURATION / 2); + + for (String domain : dependencyDomains) { + try { + List dbAlerts = m_alertDao.queryAlertsByTimeCategoryDomain(startTime, endTime, dbCategoryName, + domain, AlertEntity.READSET_FULL); + setDBAlertsToDependCategory(category, domain, dbAlerts); + } catch (DalException e) { + Cat.logError("find dependency alerts error for category:" + cate + " domain:" + domain + " date:" + date, e); + } + } + + return category; + } + + private List queryDependencyDomains(Date date, String domain) { + List domains = new ArrayList(); + TopologyGraph topology = m_topologyManager.buildTopologyGraph(domain, date.getTime()); + + for (String dependencyDomain : topology.getNodes().keySet()) { + domains.add(dependencyDomain); + } + + return domains; + } + + private void setDBAlertsToCategory(Category category, List dbAlerts) { + for (Alert dbAlert : dbAlerts) { + category.addAlert(convertToAlert(dbAlert)); + } + } + + private void setDBAlertsToDependCategory(Category category, String domain, List dbAlerts) { + for (Alert dbAlert : dbAlerts) { + category.addAlert(convertToDependAlert(domain, dbAlert)); + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryManager.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryManager.java new file mode 100644 index 0000000000000000000000000000000000000000..cca6edace37a96bd03fba196783bcfa0e88bd2a9 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryManager.java @@ -0,0 +1,11 @@ +package com.dianping.cat.report.task.alert.summary; + +import com.dianping.cat.home.alert.summary.entity.AlertSummary; + +public class AlertSummaryManager { + + public void insert(AlertSummary alertSummary) { + + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummarySender.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummarySender.java new file mode 100644 index 0000000000000000000000000000000000000000..82c170365c39015d4abb563770540086afb4773b --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummarySender.java @@ -0,0 +1,11 @@ +package com.dianping.cat.report.task.alert.summary; + +import java.util.List; + +public class AlertSummarySender { + + public void send(String content, List receivers) { + + } + +} diff --git a/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml b/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml index a1526a63f3f48bd39c35eb561f4e64014ea3d557..7d0fa89631ed2fd3e5bbe9767ec8afe578594430 100644 --- a/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml +++ b/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml @@ -2,6 +2,47 @@ + + + + + + + + + + + FROM + WHERE >= ${start-time} + AND <= ${end-time} + + AND = ${category} + + + AND = ${domain} + + ORDER BY asc + ]]> + + + + + + + FROM
+ WHERE >= ${start-time} + AND <= ${end-time} + + AND = ${category} + + ORDER BY asc + ]]> + + diff --git a/cat-home/src/main/resources/META-INF/dal/model/alertsummary-codegen.xml b/cat-home/src/main/resources/META-INF/dal/model/alertsummary-codegen.xml new file mode 100644 index 0000000000000000000000000000000000000000..70491e244af1f49897ae0f399f535f4f0440ab30 --- /dev/null +++ b/cat-home/src/main/resources/META-INF/dal/model/alertsummary-codegen.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/cat-home/src/main/resources/META-INF/dal/model/alertsummary-manifest.xml b/cat-home/src/main/resources/META-INF/dal/model/alertsummary-manifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..b29de30c9ebf02f294788f11692c6a3d654c607c --- /dev/null +++ b/cat-home/src/main/resources/META-INF/dal/model/alertsummary-manifest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/cat-home/src/main/resources/META-INF/dal/model/alertsummary-model.xml b/cat-home/src/main/resources/META-INF/dal/model/alertsummary-model.xml new file mode 100644 index 0000000000000000000000000000000000000000..05371dbebad8b862c47482f6fac131b483836489 --- /dev/null +++ b/cat-home/src/main/resources/META-INF/dal/model/alertsummary-model.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/cat-home/src/main/resources/META-INF/wizard/model/wizard.xml b/cat-home/src/main/resources/META-INF/wizard/model/wizard.xml index ab8fed5489b7be0858fee6a9f9295d273a7e892c..e618f72e3124976183cff0d9b78cbab7267d32d2 100644 --- a/cat-home/src/main/resources/META-INF/wizard/model/wizard.xml +++ b/cat-home/src/main/resources/META-INF/wizard/model/wizard.xml @@ -51,4 +51,7 @@ /Users/leon/Documents/GitRepo/cat/cat-home/src/test/resources/config/alert-config.xml + + /Users/leon/Desktop/AlertSummary.xml + diff --git a/cat-home/src/main/resources/config/default-network-metric-rule-config-unit.xml b/cat-home/src/main/resources/config/default-network-metric-rule-config-unit.xml index 11991ec2cd14d82923229d4b4c50d4fbe7a8f95e..ba60cf79241311590b175b265c69be2bad57f937 100644 --- a/cat-home/src/main/resources/config/default-network-metric-rule-config-unit.xml +++ b/cat-home/src/main/resources/config/default-network-metric-rule-config-unit.xml @@ -1,362 +1,362 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/cat-home/src/main/resources/config/default-system-rule-config.xml b/cat-home/src/main/resources/config/default-system-rule-config.xml index db9dbcdf11f28b6b833f3b4a5d6df51807f1630d..55d8c4129830675f0b3a157e93ec5814055095bd 100644 --- a/cat-home/src/main/resources/config/default-system-rule-config.xml +++ b/cat-home/src/main/resources/config/default-system-rule-config.xml @@ -1,7 +1,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -52,7 +52,7 @@ - + @@ -60,7 +60,7 @@ - +