提交 8fc07647 编写于 作者: L leon.li

merge by domains for dependency business alerts

上级 7ced2a4b
package com.dianping.cat.report.task.alert.summary;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
......@@ -16,7 +19,7 @@ import freemarker.template.Template;
public class AlertSummaryFTLDecorator implements AlertSummaryDecorator, Initializable {
public Configuration m_configuration;
public static final String ID = "AlertSummaryFTLDecorator";
@Override
......@@ -24,7 +27,7 @@ public class AlertSummaryFTLDecorator implements AlertSummaryDecorator, Initiali
AlertSummaryVisitor visitor = new AlertSummaryVisitor();
visitor.visitAlertSummary(alertSummary);
Map<Object, Object> dataMap = visitor.getResult();
Map<Object, Object> dataMap = convertDataMap(visitor.getResult());
StringWriter sw = new StringWriter(5000);
try {
......@@ -36,6 +39,37 @@ public class AlertSummaryFTLDecorator implements AlertSummaryDecorator, Initiali
return sw.toString();
}
private Map<Object, Object> convertDataMap(Map<Object, Object> map) {
return gatherDomainsForDependBusiness(map);
}
@SuppressWarnings("unchecked")
private Map<Object, Object> gatherDomainsForDependBusiness(Map<Object, Object> map) {
try {
Map<Object, Object> categories = (Map<Object, Object>) map.get("categories");
List<Map<Object, Object>> alerts = (List<Map<Object, Object>>) categories.get("dependency_business");
Map<String, List<Map<Object, Object>>> dependBusiMap = new TreeMap<String, List<Map<Object, Object>>>();
for (Map<Object, Object> alert : alerts) {
String domain = (String) alert.get("domain");
List<Map<Object, Object>> tmpAlerts = dependBusiMap.get(domain);
if (tmpAlerts == null) {
tmpAlerts = new ArrayList<Map<Object, Object>>();
dependBusiMap.put(domain, tmpAlerts);
}
tmpAlerts.add(alert);
}
categories.put("dependency_business_length", alerts.size());
categories.put("dependency_business", dependBusiMap);
} catch (Exception ex) {
ex.printStackTrace();
}
return map;
}
@Override
public void initialize() throws InitializationException {
m_configuration = new Configuration();
......
......@@ -118,15 +118,15 @@ public class AlertSummaryGenerator {
}
private Category generateDependCategoryByTimeCateDomain(Date date, String cate, List<String> dependencyDomains) {
String categoryName = "dependency-" + cate;
String categoryName = "dependency_" + cate;
String dbCategoryName = cate + "-alert";
Category category = new Category(categoryName);
Date startTime = new Date(date.getTime() - DURATION);
for (String domain : dependencyDomains) {
try {
List<Alert> dbAlerts = m_alertDao.queryAlertsByTimeCategoryDomain(startTime, date, dbCategoryName,
domain, AlertEntity.READSET_FULL);
List<Alert> dbAlerts = m_alertDao.queryAlertsByTimeCategoryDomain(startTime, date, dbCategoryName, domain,
AlertEntity.READSET_FULL);
setDBAlertsToCategoryWithDomain(category, dbAlerts);
} catch (DalException e) {
Cat.logError("find dependency alerts error for category:" + cate + " domain:" + domain + " date:" + date, e);
......@@ -137,7 +137,7 @@ public class AlertSummaryGenerator {
}
private Category generateDependCategoryByTopology(Date date, String cate, TopologyGraph topology, int statusThreshold) {
String categoryName = "dependency-" + cate;
String categoryName = "dependency_" + cate;
Category category = new Category(categoryName);
for (TopologyEdge edge : topology.getEdges().values()) {
......
......@@ -19,7 +19,7 @@ public class AlertSummaryVisitor extends BaseVisitor {
private Map<Object, Object> m_categoryMap = new HashMap<Object, Object>();
private List<Map<Object, Object>> m_alertList = new ArrayList<Map<Object, Object>>();
private List<Map<Object, Object>> m_alertList;
private DateFormat m_fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
......@@ -54,10 +54,8 @@ public class AlertSummaryVisitor extends BaseVisitor {
@Override
public void visitCategory(Category category) {
if (m_alertList.size() > 0) {
m_alertList = new ArrayList<Map<Object, Object>>();
}
m_alertList = new ArrayList<Map<Object, Object>>();
for (Alert alert : category.getAlerts()) {
visitAlert(alert);
}
......
......@@ -17,107 +17,158 @@
</tr>
</thead>
<tbody>
<tr>
<td class="text-success" rowspan="${categories.network?size + 1}"><strong>网络告警</strong></td>
<th>告警设备</th>
<th>告警指标</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
<#list categories.network as item>
<tr>
<td>${item.domain}</td>
<td>${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
</tr>
</#list>
<#assign length = categories.network?size />
<#if length == 0>
<tr>
<td class="text-success"><strong>网络告警</strong></td>
<td class="text-success" colspan="5"><strong>网络状况正常</strong></td>
</tr>
<#else>
<tr>
<td class="text-success" rowspan="${length + 1}"><strong>网络告警</strong></td>
<th>告警设备</th>
<th>告警指标</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
<#list categories.network as item>
<tr>
<td>${item.domain}</td>
<td>${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
</tr>
</#list>
</#if>
<tr>
<td class="text-success" rowspan="${categories.business?size + 1}"><strong>业务告警</strong></td>
<th colspan="2">告警指标</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
<#list categories.business as item>
<#assign length = categories.business?size />
<#if length == 0>
<tr>
<td class="text-success"><strong>业务告警</strong></td>
<td class="text-success" colspan="5"><strong>业务状况正常</strong></td>
</tr>
<#else>
<tr>
<td colspan="2">${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
<td class="text-success" rowspan="${length + 1}"><strong>业务告警</strong></td>
<th colspan="2">告警指标</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
</#list>
<#list categories.business as item>
<tr>
<td colspan="2">${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
</tr>
</#list>
</#if>
<tr>
<td class="text-success" rowspan="${categories.exception?size + 1}"><strong>异常告警</strong></td>
<th colspan="2">异常名称</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
<#list categories.exception as item>
<#assign length = categories.exception?size />
<#if length == 0>
<tr>
<td class="text-success"><strong>异常告警</strong></td>
<td class="text-success" colspan="5"><strong>异常告警正常</strong></td>
</tr>
<#else>
<tr>
<td colspan="2">${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
<td class="text-success" rowspan="${length + 1}"><strong>异常告警</strong></td>
<th colspan="2">异常名称</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
</#list>
<#list categories.exception as item>
<tr>
<td colspan="2">${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
</tr>
</#list>
</#if>
<tr>
<td class="text-success" rowspan="${categories.dependency_business?size + 1}"><strong>超时依赖调用</strong></td>
<th>依赖项目</th>
<th>告警指标</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
<#list categories.dependency_business as item>
<#if categories.dependency_business_length == 0>
<tr>
<td class="text-success"><strong>超时依赖调用</strong></td>
<td class="text-success" colspan="5"><strong>无超时依赖调用</strong></td>
</tr>
<#else>
<tr>
<td>${item.domain}</td>
<td>${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
<td class="text-success" rowspan="${categories.dependency_business_length + 1}"><strong>超时依赖调用</strong></td>
<th>依赖项目</th>
<th>告警指标</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
</#list>
<#list categories.dependency_business?keys as key>
<#list categories.dependency_business[key] as value>
<tr>
<#if value_index == 0>
<td rowspan="${categories.dependency_business[key]?size}">${key}</td>
</#if>
<td>${value.metric}</td>
<td>${value.dateStr}</td>
<td>${value.type}</td>
<td class="alert-content">${value.context}</td>
</tr>
</#list>
</#list>
</#if>
<tr>
<td class="text-success" rowspan="${categories.dependency_exception?size + 1}"><strong>依赖异常告警</strong></td>
<th>依赖项目</th>
<th>异常名称</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
<#list categories.dependency_exception as item>
<#assign length = categories.dependency_exception?size />
<#if length == 0>
<tr>
<td class="text-success"><strong>依赖异常告警</strong></td>
<td class="text-success" colspan="5"><strong>依赖项目正常</strong></td>
</tr>
<#else>
<tr>
<td>${item.domain}</td>
<td>${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
<td class="text-success" rowspan="${length + 1}"><strong>依赖异常告警</strong></td>
<th>依赖项目</th>
<th>异常名称</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
</#list>
<#list categories.dependency_exception as item>
<tr>
<td>${item.domain}</td>
<td>${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
</tr>
</#list>
</#if>
<tr>
<td class="text-success" rowspan="${categories.system?size + 1}"><strong>系统告警</strong></td>
<th colspan="2">告警参数-机器</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
<#list categories.system as item>
<#assign length = categories.system?size />
<#if length == 0>
<tr>
<td class="text-success"><strong>系统告警</strong></td>
<td class="text-success" colspan="5"><strong>系统状态正常</strong></td>
</tr>
<#else>
<tr>
<td colspan="2">${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
<td class="text-success" rowspan="${length + 1}"><strong>系统告警</strong></td>
<th colspan="2">告警参数-机器</th>
<th>告警时间</th>
<th>告警级别</th>
<th>告警内容</th>
</tr>
</#list>
<#list categories.system as item>
<tr>
<td colspan="2">${item.metric}</td>
<td>${item.dateStr}</td>
<td>${item.type}</td>
<td class="alert-content">${item.context}</td>
</tr>
</#list>
</#if>
</tbody>
</table>
</div>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册