Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
8fc07647
C
cat
项目概览
梦中观雨
/
cat
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
cat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8fc07647
编写于
7月 16, 2014
作者:
L
leon.li
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
merge by domains for dependency business alerts
上级
7ced2a4b
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
180 addition
and
2272 deletion
+180
-2272
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryFTLDecorator.java
...t/report/task/alert/summary/AlertSummaryFTLDecorator.java
+36
-2
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryGenerator.java
.../cat/report/task/alert/summary/AlertSummaryGenerator.java
+4
-4
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryVisitor.java
...ng/cat/report/task/alert/summary/AlertSummaryVisitor.java
+3
-5
cat-home/src/main/resources/dependency/TopologyGraph.xml
cat-home/src/main/resources/dependency/TopologyGraph.xml
+0
-0
cat-home/src/main/resources/freemaker/summary.ftl
cat-home/src/main/resources/freemaker/summary.ftl
+137
-86
cat-home/src/test/resources/com/dianping/cat/report/dependency/TopologyGraph.xml
...rces/com/dianping/cat/report/dependency/TopologyGraph.xml
+0
-2175
未找到文件。
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryFTLDecorator.java
浏览文件 @
8fc07647
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
();
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryGenerator.java
浏览文件 @
8fc07647
...
...
@@ -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
())
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/alert/summary/AlertSummaryVisitor.java
浏览文件 @
8fc07647
...
...
@@ -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
);
}
...
...
cat-home/src/main/resources/TopologyGraph.xml
→
cat-home/src/main/resources/
dependency/
TopologyGraph.xml
浏览文件 @
8fc07647
文件已移动
cat-home/src/main/resources/freemaker/summary.ftl
浏览文件 @
8fc07647
...
...
@@ -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
cat-home/src/test/resources/com/dianping/cat/report/dependency/TopologyGraph.xml
已删除
100644 → 0
浏览文件 @
7ced2a4b
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录