Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
94bc5444
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,发现更多精彩内容 >>
提交
94bc5444
编写于
6月 14, 2013
作者:
Y
yong.you
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor dependency handler
上级
16756e04
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
313 addition
and
285 deletion
+313
-285
cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java
...n/java/com/dianping/cat/build/ComponentsConfigurator.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/page/dependency/ExternalInfoBuilder.java
...nping/cat/report/page/dependency/ExternalInfoBuilder.java
+241
-0
cat-home/src/main/java/com/dianping/cat/report/page/dependency/Handler.java
...java/com/dianping/cat/report/page/dependency/Handler.java
+23
-246
cat-home/src/main/java/com/dianping/cat/report/page/dependency/ProblemInfoVisitor.java
...anping/cat/report/page/dependency/ProblemInfoVisitor.java
+3
-2
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+44
-35
未找到文件。
cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java
浏览文件 @
94bc5444
...
...
@@ -75,9 +75,9 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all
.
add
(
C
(
TopologyGraphItemBuilder
.
class
).
req
(
TopologyGraphConfigManager
.
class
));
all
.
add
(
C
(
TopologyGraphBuilder
.
class
).
req
(
TopologyGraphItemBuilder
.
class
).
is
(
PER_LOOKUP
));
all
.
add
(
C
(
TopologyGraphManager
.
class
).
req
(
TopologyGraphBuilder
.
class
,
ServerConfigManager
.
class
)
//
.
req
(
ProductLineConfigManager
.
class
,
TopologyGraphDao
.
class
,
DomainNavManager
.
class
)
//
.
req
(
ProductLineConfigManager
.
class
,
TopologyGraphDao
.
class
,
DomainNavManager
.
class
)
//
.
req
(
ModelService
.
class
,
"dependency"
));
// report serivce
...
...
cat-home/src/main/java/com/dianping/cat/report/page/dependency/ExternalInfoBuilder.java
0 → 100644
浏览文件 @
94bc5444
package
com.dianping.cat.report.page.dependency
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashSet
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.top.model.entity.TopReport
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.dal.report.Event
;
import
com.dianping.cat.home.dependency.graph.entity.TopologyGraph
;
import
com.dianping.cat.home.dependency.graph.entity.TopologyNode
;
import
com.dianping.cat.report.page.dependency.graph.GraphConstrant
;
import
com.dianping.cat.report.page.externalError.EventCollectManager
;
import
com.dianping.cat.report.page.model.spi.ModelRequest
;
import
com.dianping.cat.report.page.model.spi.ModelResponse
;
import
com.dianping.cat.report.page.model.spi.ModelService
;
import
com.dianping.cat.report.page.top.TopMetric
;
import
com.dianping.cat.report.service.ReportService
;
public
class
ExternalInfoBuilder
{
@Inject
(
type
=
ModelService
.
class
,
value
=
"problem"
)
private
ModelService
<
ProblemReport
>
m_problemservice
;
@Inject
(
type
=
ModelService
.
class
,
value
=
"top"
)
private
ModelService
<
TopReport
>
m_topService
;
@Inject
private
EventCollectManager
m_eventManager
;
@Inject
private
ReportService
m_reportService
;
private
SimpleDateFormat
m_dateFormat
=
new
SimpleDateFormat
(
"yyyyMMddHH"
);
private
SimpleDateFormat
m_sdf
=
new
SimpleDateFormat
(
"HH:mm"
);
public
void
buildExceptionInfoOnGraph
(
Payload
payload
,
Model
model
,
TopologyGraph
graph
)
{
if
(
graph
.
getStatus
()
!=
GraphConstrant
.
OK
)
{
String
problemInfo
=
buildProblemInfo
(
graph
.
getId
(),
payload
);
graph
.
setDes
(
graph
.
getDes
()
+
problemInfo
);
}
for
(
TopologyNode
node
:
graph
.
getNodes
().
values
())
{
if
(
node
.
getType
().
equals
(
GraphConstrant
.
PROJECT
))
{
node
.
setLink
(
buildTopologyNodeLink
(
payload
,
model
,
node
.
getId
()));
if
(
node
.
getStatus
()
!=
GraphConstrant
.
OK
)
{
String
problemInfo
=
buildProblemInfo
(
node
.
getId
(),
payload
);
node
.
setDes
(
node
.
getDes
()
+
problemInfo
);
}
}
}
}
public
void
buildZabbixErrorOnGraph
(
TopologyGraph
graph
,
String
zabbixHeader
,
Map
<
String
,
List
<
Event
>>
events
)
{
Set
<
String
>
nodes
=
new
HashSet
<
String
>();
for
(
Entry
<
String
,
List
<
Event
>>
entry
:
events
.
entrySet
())
{
List
<
Event
>
eventList
=
entry
.
getValue
();
for
(
Event
event
:
eventList
)
{
TopologyNode
node
=
graph
.
findTopologyNode
(
event
.
getDomain
());
if
(
node
!=
null
)
{
if
(!
nodes
.
contains
(
node
.
getId
()))
{
node
.
setDes
(
node
.
getDes
()
+
zabbixHeader
);
nodes
.
add
(
node
.
getId
());
}
if
(
node
.
getStatus
()
==
GraphConstrant
.
OK
)
{
node
.
setStatus
(
GraphConstrant
.
OP_ERROR
);
}
String
des
=
node
.
getDes
();
des
=
des
+
m_sdf
.
format
(
event
.
getDate
())
+
" "
+
event
.
getSubject
()
+
GraphConstrant
.
ENTER
;
node
.
setDes
(
des
);
}
else
if
(
event
.
getDomain
().
equals
(
graph
.
getId
()))
{
if
(!
nodes
.
contains
(
graph
.
getId
()))
{
graph
.
setDes
(
graph
.
getDes
()
+
zabbixHeader
);
nodes
.
add
(
graph
.
getId
());
}
if
(
graph
.
getStatus
()
==
GraphConstrant
.
OK
)
{
graph
.
setStatus
(
GraphConstrant
.
OP_ERROR
);
}
String
des
=
graph
.
getDes
();
des
=
des
+
m_sdf
.
format
(
event
.
getDate
())
+
" "
+
event
.
getSubject
()
+
GraphConstrant
.
ENTER
;
graph
.
setDes
(
des
);
}
}
}
}
private
String
buildTopologyNodeLink
(
Payload
payload
,
Model
model
,
String
domain
)
{
return
String
.
format
(
"?op=dependencyGraph&minute=%s&domain=%s&date=%s"
,
model
.
getMinute
(),
domain
,
m_dateFormat
.
format
(
new
Date
(
payload
.
getDate
())));
}
public
void
buildNodeExceptionInfo
(
TopologyNode
node
,
Model
model
,
Payload
payload
)
{
String
domain
=
node
.
getId
();
if
(
node
.
getStatus
()
!=
GraphConstrant
.
OK
)
{
String
exceptionInfo
=
buildProblemInfo
(
domain
,
payload
);
node
.
setDes
(
node
.
getDes
()
+
exceptionInfo
);
}
}
public
void
buildNodeZabbixInfo
(
TopologyNode
node
,
Model
model
,
Payload
payload
)
{
Date
reportTime
=
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_MINUTE
*
model
.
getMinute
());
String
domain
=
node
.
getId
();
List
<
Event
>
events
=
m_eventManager
.
findEvents
(
reportTime
.
getTime
(),
domain
);
node
.
setLink
(
buildTopologyNodeLink
(
payload
,
model
,
domain
));
if
(
events
!=
null
&&
events
.
size
()
>
0
)
{
if
(
node
.
getStatus
()
==
GraphConstrant
.
OK
)
{
node
.
setStatus
(
GraphConstrant
.
OP_ERROR
);
}
node
.
setDes
(
node
.
getDes
()
+
buildZabbixHeader
(
payload
,
model
));
StringBuilder
sb
=
new
StringBuilder
();
for
(
Event
event
:
events
)
{
sb
.
append
(
m_sdf
.
format
(
event
.
getDate
())).
append
((
" "
));
sb
.
append
(
event
.
getSubject
()).
append
(
GraphConstrant
.
ENTER
);
}
node
.
setDes
(
node
.
getDes
()
+
sb
.
toString
());
}
}
private
String
buildProblemInfo
(
String
domain
,
Payload
payload
)
{
ProblemReport
report
=
queryProblemReport
(
payload
,
domain
);
ProblemInfoVisitor
visitor
=
new
ProblemInfoVisitor
();
visitor
.
visitProblemReport
(
report
);
return
visitor
.
buildExceptionInfo
();
}
public
void
buildTopErrorInfo
(
Payload
payload
,
Model
model
)
{
int
minuteCount
=
payload
.
getMinuteCounts
();
int
minute
=
model
.
getMinute
();
TopReport
report
=
queryTopReport
(
payload
);
TopMetric
topMetric
=
new
TopMetric
(
minuteCount
,
payload
.
getTopCounts
());
Date
end
=
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_MINUTE
*
minute
);
Date
start
=
new
Date
(
end
.
getTime
()
-
TimeUtil
.
ONE_MINUTE
*
minuteCount
);
topMetric
.
setStart
(
start
).
setEnd
(
end
);
if
(
minuteCount
>
minute
)
{
Payload
lastPayload
=
new
Payload
();
Date
lastHour
=
new
Date
(
payload
.
getDate
()
-
TimeUtil
.
ONE_HOUR
);
lastPayload
.
setDate
(
new
SimpleDateFormat
(
"yyyyMMddHH"
).
format
(
lastHour
));
topMetric
.
visitTopReport
(
queryTopReport
(
lastPayload
));
}
topMetric
.
visitTopReport
(
report
);
model
.
setTopReport
(
report
);
model
.
setTopMetric
(
topMetric
);
}
public
String
buildZabbixHeader
(
Payload
payload
,
Model
model
)
{
StringBuilder
sb
=
new
StringBuilder
();
long
end
=
payload
.
getDate
()
+
TimeUtil
.
ONE_MINUTE
*
model
.
getMinute
();
sb
.
append
(
GraphConstrant
.
LINE
).
append
(
GraphConstrant
.
ENTER
);
sb
.
append
(
"<span style='color:red'>"
).
append
(
CatString
.
ZABBIX_ERROR
).
append
(
"("
)
.
append
(
m_sdf
.
format
(
new
Date
(
end
-
TimeUtil
.
ONE_MINUTE
*
10
))).
append
(
"-"
).
append
(
m_sdf
.
format
(
end
))
.
append
(
")"
).
append
(
"</span>"
).
append
(
GraphConstrant
.
ENTER
);
return
sb
.
toString
();
}
public
Map
<
String
,
List
<
Event
>>
queryDependencyEvent
(
Map
<
String
,
List
<
String
>>
dependencies
,
String
domain
,
Date
date
)
{
Map
<
String
,
List
<
Event
>>
result
=
new
LinkedHashMap
<
String
,
List
<
Event
>>();
List
<
Event
>
domainEvents
=
m_eventManager
.
queryEvents
(
domain
,
date
);
if
(
domainEvents
!=
null
&&
domainEvents
.
size
()
>
0
)
{
result
.
put
(
domain
,
domainEvents
);
}
for
(
Entry
<
String
,
List
<
String
>>
entry
:
dependencies
.
entrySet
())
{
String
key
=
entry
.
getKey
();
List
<
String
>
targets
=
entry
.
getValue
();
for
(
String
temp
:
targets
)
{
List
<
Event
>
queryEvents
=
m_eventManager
.
queryEvents
(
temp
,
date
);
if
(
queryEvents
!=
null
&&
queryEvents
.
size
()
>
0
)
{
List
<
Event
>
events
=
result
.
get
(
key
);
if
(
events
==
null
)
{
events
=
new
ArrayList
<
Event
>();
result
.
put
(
key
,
events
);
}
events
.
addAll
(
queryEvents
);
}
}
}
return
result
;
}
private
ProblemReport
queryProblemReport
(
Payload
payload
,
String
domain
)
{
String
date
=
String
.
valueOf
(
payload
.
getDate
());
ModelRequest
request
=
new
ModelRequest
(
domain
,
payload
.
getPeriod
())
//
.
setProperty
(
"date"
,
date
).
setProperty
(
"type"
,
"view"
);
if
(
m_problemservice
.
isEligable
(
request
))
{
ModelResponse
<
ProblemReport
>
response
=
m_problemservice
.
invoke
(
request
);
return
response
.
getModel
();
}
else
{
throw
new
RuntimeException
(
"Internal error: no eligible problem service registered for "
+
request
+
"!"
);
}
}
private
TopReport
queryTopReport
(
Payload
payload
)
{
String
domain
=
CatString
.
CAT
;
String
date
=
String
.
valueOf
(
payload
.
getDate
());
ModelRequest
request
=
new
ModelRequest
(
domain
,
payload
.
getPeriod
())
//
.
setProperty
(
"date"
,
date
);
if
(
m_topService
.
isEligable
(
request
))
{
ModelResponse
<
TopReport
>
response
=
m_topService
.
invoke
(
request
);
TopReport
report
=
response
.
getModel
();
if
(
report
==
null
||
report
.
getDomains
().
size
()
==
0
)
{
report
=
m_reportService
.
queryTopReport
(
domain
,
new
Date
(
payload
.
getDate
()),
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_HOUR
));
}
return
report
;
}
else
{
throw
new
RuntimeException
(
"Internal error: no eligable top service registered for "
+
request
+
"!"
);
}
}
}
\ No newline at end of file
cat-home/src/main/java/com/dianping/cat/report/page/dependency/Handler.java
浏览文件 @
94bc5444
package
com.dianping.cat.report.page.dependency
;
import
java.io.IOException
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.TreeMap
;
import
javax.servlet.ServletException
;
...
...
@@ -26,8 +22,6 @@ import com.dianping.cat.consumer.dependency.model.entity.Dependency;
import
com.dianping.cat.consumer.dependency.model.entity.DependencyReport
;
import
com.dianping.cat.consumer.dependency.model.entity.Index
;
import
com.dianping.cat.consumer.dependency.model.entity.Segment
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.top.model.entity.TopReport
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.company.entity.ProductLine
;
...
...
@@ -41,16 +35,12 @@ import com.dianping.cat.report.page.LineChart;
import
com.dianping.cat.report.page.PayloadNormalizer
;
import
com.dianping.cat.report.page.dependency.dashboard.ProductLineDashboard
;
import
com.dianping.cat.report.page.dependency.dashboard.ProductLinesDashboard
;
import
com.dianping.cat.report.page.dependency.graph.GraphConstrant
;
import
com.dianping.cat.report.page.dependency.graph.LineGraphBuilder
;
import
com.dianping.cat.report.page.dependency.graph.TopologyGraphManager
;
import
com.dianping.cat.report.page.externalError.EventCollectManager
;
import
com.dianping.cat.report.page.model.dependency.DependencyReportMerger
;
import
com.dianping.cat.report.page.model.spi.ModelRequest
;
import
com.dianping.cat.report.page.model.spi.ModelResponse
;
import
com.dianping.cat.report.page.model.spi.ModelService
;
import
com.dianping.cat.report.page.top.TopMetric
;
import
com.dianping.cat.report.service.ReportService
;
import
com.dianping.cat.system.config.ProductLineConfigManager
;
public
class
Handler
implements
PageHandler
<
Context
>
{
...
...
@@ -58,9 +48,6 @@ public class Handler implements PageHandler<Context> {
@Inject
(
type
=
ModelService
.
class
,
value
=
"dependency"
)
private
ModelService
<
DependencyReport
>
m_dependencyService
;
@Inject
private
EventCollectManager
m_eventManager
;
@Inject
private
TopologyGraphManager
m_graphManager
;
...
...
@@ -68,27 +55,15 @@ public class Handler implements PageHandler<Context> {
private
ProductLineConfigManager
m_productLineConfigManger
;
@Inject
private
ReportService
m_reportService
;
private
ExternalInfoBuilder
m_externalInfoBuilder
;
@Inject
private
JspViewer
m_jspViewer
;
private
Set
<
String
>
m_nodes
;
@Inject
private
PayloadNormalizer
m_normalizePayload
;
@Inject
(
type
=
ModelService
.
class
,
value
=
"problem"
)
private
ModelService
<
ProblemReport
>
m_problemservice
;
@Inject
(
type
=
ModelService
.
class
,
value
=
"top"
)
private
ModelService
<
TopReport
>
m_topService
;
private
SimpleDateFormat
m_sdf
=
new
SimpleDateFormat
(
"HH:mm"
);
private
SimpleDateFormat
m_dateFormat
=
new
SimpleDateFormat
(
"yyyyMMddHH"
);
private
Segment
buildAllSegmentInfo
(
DependencyReport
report
)
{
private
Segment
buildAllSegmentsInfo
(
DependencyReport
report
)
{
Segment
result
=
new
Segment
();
Map
<
Integer
,
Segment
>
segments
=
report
.
getSegments
();
DependencyReportMerger
merger
=
new
DependencyReportMerger
(
null
);
...
...
@@ -110,63 +85,6 @@ public class Handler implements PageHandler<Context> {
return
result
;
}
private
void
buildExceptionInfoOnGraph
(
Payload
payload
,
Model
model
,
TopologyGraph
graph
)
{
if
(
graph
.
getStatus
()
!=
GraphConstrant
.
OK
)
{
String
problemInfo
=
buildProblemInfo
(
graph
.
getId
(),
payload
);
graph
.
setDes
(
graph
.
getDes
()
+
problemInfo
);
}
for
(
TopologyNode
node
:
graph
.
getNodes
().
values
())
{
if
(
node
.
getType
().
equals
(
GraphConstrant
.
PROJECT
))
{
node
.
setLink
(
buildLink
(
payload
,
model
,
node
.
getId
()));
if
(
node
.
getStatus
()
!=
GraphConstrant
.
OK
)
{
String
problemInfo
=
buildProblemInfo
(
node
.
getId
(),
payload
);
node
.
setDes
(
node
.
getDes
()
+
problemInfo
);
}
}
}
}
private
void
buildExternalErrorOnGraph
(
TopologyGraph
graph
,
String
zabbixHeader
,
Map
<
String
,
List
<
Event
>>
events
)
{
for
(
Entry
<
String
,
List
<
Event
>>
entry
:
events
.
entrySet
())
{
List
<
Event
>
eventList
=
entry
.
getValue
();
for
(
Event
event
:
eventList
)
{
TopologyNode
node
=
graph
.
findTopologyNode
(
event
.
getDomain
());
if
(
node
!=
null
)
{
if
(!
m_nodes
.
contains
(
node
.
getId
()))
{
node
.
setDes
(
node
.
getDes
()
+
zabbixHeader
);
m_nodes
.
add
(
node
.
getId
());
}
if
(
node
.
getStatus
()
==
GraphConstrant
.
OK
)
{
node
.
setStatus
(
GraphConstrant
.
OP_ERROR
);
}
String
des
=
node
.
getDes
();
des
=
des
+
m_sdf
.
format
(
event
.
getDate
())
+
" "
+
event
.
getSubject
()
+
GraphConstrant
.
ENTER
;
node
.
setDes
(
des
);
}
else
if
(
event
.
getDomain
().
equals
(
graph
.
getId
()))
{
if
(!
m_nodes
.
contains
(
graph
.
getId
()))
{
graph
.
setDes
(
graph
.
getDes
()
+
zabbixHeader
);
m_nodes
.
add
(
graph
.
getId
());
}
if
(
graph
.
getStatus
()
==
GraphConstrant
.
OK
)
{
graph
.
setStatus
(
GraphConstrant
.
OP_ERROR
);
}
String
des
=
graph
.
getDes
();
des
=
des
+
m_sdf
.
format
(
event
.
getDate
())
+
" "
+
event
.
getSubject
()
+
GraphConstrant
.
ENTER
;
graph
.
setDes
(
des
);
}
}
}
}
private
void
buildHourlyLineGraph
(
DependencyReport
report
,
Model
model
)
{
LineGraphBuilder
builder
=
new
LineGraphBuilder
();
...
...
@@ -175,8 +93,8 @@ public class Handler implements PageHandler<Context> {
List
<
LineChart
>
index
=
builder
.
queryIndex
();
Map
<
String
,
List
<
LineChart
>>
dependencys
=
builder
.
queryDependencyGraph
();
model
.
setIndexGraph
(
buildLineChartGraph
s
(
index
));
model
.
setDependencyGraph
(
buildLineChartGraph
Map
(
dependencys
));
model
.
setIndexGraph
(
buildLineChartGraph
(
index
));
model
.
setDependencyGraph
(
buildLineChartGraph
s
(
dependencys
));
}
private
void
buildHourlyReport
(
DependencyReport
report
,
Model
model
,
Payload
payload
)
{
...
...
@@ -186,20 +104,20 @@ public class Handler implements PageHandler<Context> {
model
.
setSegment
(
segment
);
if
(
payload
.
isAll
())
{
model
.
setSegment
(
buildAllSegmentInfo
(
report
));
model
.
setSegment
(
buildAllSegment
s
Info
(
report
));
}
}
private
Map
<
String
,
List
<
String
>>
buildLineChartGraph
Map
(
Map
<
String
,
List
<
LineChart
>>
charts
)
{
private
Map
<
String
,
List
<
String
>>
buildLineChartGraph
s
(
Map
<
String
,
List
<
LineChart
>>
charts
)
{
Map
<
String
,
List
<
String
>>
result
=
new
HashMap
<
String
,
List
<
String
>>();
for
(
Entry
<
String
,
List
<
LineChart
>>
temp
:
charts
.
entrySet
())
{
result
.
put
(
temp
.
getKey
(),
buildLineChartGraph
s
(
temp
.
getValue
()));
result
.
put
(
temp
.
getKey
(),
buildLineChartGraph
(
temp
.
getValue
()));
}
return
result
;
}
private
List
<
String
>
buildLineChartGraph
s
(
List
<
LineChart
>
charts
)
{
private
List
<
String
>
buildLineChartGraph
(
List
<
LineChart
>
charts
)
{
List
<
String
>
result
=
new
ArrayList
<
String
>();
for
(
LineChart
temp
:
charts
)
{
...
...
@@ -208,104 +126,7 @@ public class Handler implements PageHandler<Context> {
return
result
;
}
private
String
buildLink
(
Payload
payload
,
Model
model
,
String
domain
)
{
return
String
.
format
(
"?op=dependencyGraph&minute=%s&domain=%s&date=%s"
,
model
.
getMinute
(),
domain
,
m_dateFormat
.
format
(
new
Date
(
payload
.
getDate
())));
}
private
void
buildNodeZabbixInfo
(
TopologyNode
node
,
Model
model
,
Payload
payload
)
{
Date
reportTime
=
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_MINUTE
*
model
.
getMinute
());
String
domain
=
node
.
getId
();
List
<
Event
>
events
=
m_eventManager
.
queryEvents
(
domain
,
reportTime
);
node
.
setLink
(
buildLink
(
payload
,
model
,
domain
));
if
(
events
!=
null
&&
events
.
size
()
>
0
)
{
if
(
node
.
getStatus
()
==
GraphConstrant
.
OK
)
{
node
.
setStatus
(
GraphConstrant
.
OP_ERROR
);
}
node
.
setDes
(
node
.
getDes
()
+
buildZabbixHeader
(
payload
,
model
));
StringBuilder
sb
=
new
StringBuilder
();
for
(
Event
event
:
events
)
{
sb
.
append
(
m_sdf
.
format
(
event
.
getDate
())).
append
((
" "
));
sb
.
append
(
event
.
getSubject
()).
append
(
GraphConstrant
.
ENTER
);
}
node
.
setDes
(
node
.
getDes
()
+
sb
.
toString
());
}
}
private
void
buildNodeExceptionInfo
(
TopologyNode
node
,
Model
model
,
Payload
payload
)
{
String
domain
=
node
.
getId
();
if
(
node
.
getStatus
()
!=
GraphConstrant
.
OK
)
{
String
exceptionInfo
=
buildProblemInfo
(
domain
,
payload
);
node
.
setDes
(
node
.
getDes
()
+
exceptionInfo
);
}
}
private
String
buildProblemInfo
(
String
domain
,
Payload
payload
)
{
ProblemReport
report
=
queryProblemReport
(
payload
,
domain
);
ExceptionInfoBuilder
visitor
=
new
ExceptionInfoBuilder
();
visitor
.
visitProblemReport
(
report
);
String
result
=
visitor
.
buildResult
();
return
result
;
}
private
String
buildZabbixHeader
(
Payload
payload
,
Model
model
)
{
StringBuilder
sb
=
new
StringBuilder
();
long
end
=
payload
.
getDate
()
+
TimeUtil
.
ONE_MINUTE
*
model
.
getMinute
();
sb
.
append
(
GraphConstrant
.
LINE
).
append
(
GraphConstrant
.
ENTER
);
sb
.
append
(
"<span style='color:red'>"
).
append
(
CatString
.
ZABBIX_ERROR
).
append
(
"("
)
.
append
(
m_sdf
.
format
(
new
Date
(
end
-
TimeUtil
.
ONE_MINUTE
*
10
))).
append
(
"-"
).
append
(
m_sdf
.
format
(
end
))
.
append
(
")"
).
append
(
"</span>"
).
append
(
GraphConstrant
.
ENTER
);
return
sb
.
toString
();
}
private
TopReport
queryTopReport
(
Payload
payload
)
{
String
domain
=
CatString
.
CAT
;
String
date
=
String
.
valueOf
(
payload
.
getDate
());
ModelRequest
request
=
new
ModelRequest
(
domain
,
payload
.
getPeriod
())
//
.
setProperty
(
"date"
,
date
);
if
(
m_topService
.
isEligable
(
request
))
{
ModelResponse
<
TopReport
>
response
=
m_topService
.
invoke
(
request
);
TopReport
report
=
response
.
getModel
();
if
(
report
==
null
||
report
.
getDomains
().
size
()
==
0
)
{
report
=
m_reportService
.
queryTopReport
(
domain
,
new
Date
(
payload
.
getDate
()),
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_HOUR
));
}
return
report
;
}
else
{
throw
new
RuntimeException
(
"Internal error: no eligable top service registered for "
+
request
+
"!"
);
}
}
private
void
buildTopErrorInfo
(
Payload
payload
,
Model
model
)
{
int
minuteCount
=
payload
.
getMinuteCounts
();
int
minute
=
model
.
getMinute
();
TopReport
report
=
queryTopReport
(
payload
);
TopMetric
topMetric
=
new
TopMetric
(
minuteCount
,
payload
.
getTopCounts
());
Date
end
=
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_MINUTE
*
minute
);
Date
start
=
new
Date
(
end
.
getTime
()
-
TimeUtil
.
ONE_MINUTE
*
minuteCount
);
topMetric
.
setStart
(
start
).
setEnd
(
end
);
if
(
minuteCount
>
minute
)
{
Payload
lastPayload
=
new
Payload
();
Date
lastHour
=
new
Date
(
payload
.
getDate
()
-
TimeUtil
.
ONE_HOUR
);
lastPayload
.
setDate
(
new
SimpleDateFormat
(
"yyyyMMddHH"
).
format
(
lastHour
));
topMetric
.
visitTopReport
(
queryTopReport
(
lastPayload
));
}
topMetric
.
visitTopReport
(
report
);
model
.
setTopReport
(
report
);
model
.
setTopMetric
(
topMetric
);
}
private
int
computeMinute
(
Payload
payload
)
{
private
int
parseQueryMinute
(
Payload
payload
)
{
int
minute
=
0
;
String
min
=
payload
.
getMinute
();
...
...
@@ -335,33 +156,31 @@ public class Handler implements PageHandler<Context> {
Action
action
=
payload
.
getAction
();
Date
reportTime
=
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_MINUTE
*
model
.
getMinute
());
DependencyReport
report
=
null
;
switch
(
action
)
{
case
TOPOLOGY:
TopologyGraph
topologyGraph
=
m_graphManager
.
buildTopologyGraph
(
model
.
getDomain
(),
reportTime
.
getTime
());
Map
<
String
,
List
<
String
>>
graphDependency
=
parseDependencies
(
topologyGraph
);
Map
<
String
,
List
<
Event
>>
externalErrors
=
queryDependencyEvent
(
graphDependency
,
model
.
getDomain
(),
reportTime
);
Map
<
String
,
List
<
Event
>>
externalErrors
=
m_externalInfoBuilder
.
queryDependencyEvent
(
graphDependency
,
model
.
getDomain
(),
reportTime
);
report
=
queryDependencyReport
(
payload
);
DependencyReport
report
=
queryDependencyReport
(
payload
);
buildHourlyReport
(
report
,
model
,
payload
);
model
.
setEvents
(
externalErrors
);
m_nodes
=
new
HashSet
<
String
>();
buildExternalErrorOnGraph
(
topologyGraph
,
buildZabbixHeader
(
payload
,
model
),
externalErrors
);
buildExceptionInfoOnGraph
(
payload
,
model
,
topologyGraph
);
m_externalInfoBuilder
.
buildZabbixErrorOnGraph
(
topologyGraph
,
m_externalInfoBuilder
.
buildZabbixHeader
(
payload
,
model
),
externalErrors
);
m_externalInfoBuilder
.
buildExceptionInfoOnGraph
(
payload
,
model
,
topologyGraph
);
model
.
setReportStart
(
new
Date
(
payload
.
getDate
()));
model
.
setReportEnd
(
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_HOUR
-
1
));
model
.
setTopologyGraph
(
new
DefaultJsonBuilder
().
buildJson
(
topologyGraph
));
break
;
case
LINE_CHART:
r
eport
=
queryDependencyReport
(
payload
);
buildHourlyReport
(
r
eport
,
model
,
payload
);
buildHourlyLineGraph
(
r
eport
,
model
);
DependencyReport
dependencyR
eport
=
queryDependencyReport
(
payload
);
buildHourlyReport
(
dependencyR
eport
,
model
,
payload
);
buildHourlyLineGraph
(
dependencyR
eport
,
model
);
Segment
segment
=
r
eport
.
findSegment
(
model
.
getMinute
());
Segment
segment
=
dependencyR
eport
.
findSegment
(
model
.
getMinute
());
Map
<
String
,
List
<
String
>>
dependency
=
parseDependencies
(
segment
);
model
.
setEvents
(
queryDependencyEvent
(
dependency
,
model
.
getDomain
(),
reportTime
));
model
.
setEvents
(
m_externalInfoBuilder
.
queryDependencyEvent
(
dependency
,
model
.
getDomain
(),
reportTime
));
break
;
case
DASHBOARD:
ProductLinesDashboard
dashboardGraph
=
m_graphManager
.
buildDashboardGraph
(
reportTime
.
getTime
());
...
...
@@ -369,10 +188,10 @@ public class Handler implements PageHandler<Context> {
for
(
Entry
<
String
,
List
<
TopologyNode
>>
entry
:
dashboardNodes
.
entrySet
())
{
for
(
TopologyNode
node
:
entry
.
getValue
())
{
buildNodeZabbixInfo
(
node
,
model
,
payload
);
m_externalInfoBuilder
.
buildNodeZabbixInfo
(
node
,
model
,
payload
);
}
}
buildTopErrorInfo
(
payload
,
model
);
m_externalInfoBuilder
.
buildTopErrorInfo
(
payload
,
model
);
model
.
setReportStart
(
new
Date
(
payload
.
getDate
()));
model
.
setReportEnd
(
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_HOUR
-
1
));
model
.
setDashboardGraph
(
dashboardGraph
.
toJson
());
...
...
@@ -389,8 +208,8 @@ public class Handler implements PageHandler<Context> {
List
<
TopologyNode
>
productLineNodes
=
productLineGraph
.
getNodes
();
for
(
TopologyNode
node
:
productLineNodes
)
{
buildNodeZabbixInfo
(
node
,
model
,
payload
);
buildNodeExceptionInfo
(
node
,
model
,
payload
);
m_externalInfoBuilder
.
buildNodeZabbixInfo
(
node
,
model
,
payload
);
m_externalInfoBuilder
.
buildNodeExceptionInfo
(
node
,
model
,
payload
);
}
model
.
setReportStart
(
new
Date
(
payload
.
getDate
()));
model
.
setReportEnd
(
new
Date
(
payload
.
getDate
()
+
TimeUtil
.
ONE_HOUR
-
1
));
...
...
@@ -407,7 +226,7 @@ public class Handler implements PageHandler<Context> {
m_normalizePayload
.
normalize
(
model
,
payload
);
Integer
minute
=
compute
Minute
(
payload
);
Integer
minute
=
parseQuery
Minute
(
payload
);
int
maxMinute
=
60
;
List
<
Integer
>
minutes
=
new
ArrayList
<
Integer
>();
...
...
@@ -461,35 +280,6 @@ public class Handler implements PageHandler<Context> {
return
dependencies
;
}
private
Map
<
String
,
List
<
Event
>>
queryDependencyEvent
(
Map
<
String
,
List
<
String
>>
dependencies
,
String
domain
,
Date
date
)
{
Map
<
String
,
List
<
Event
>>
result
=
new
LinkedHashMap
<
String
,
List
<
Event
>>();
List
<
Event
>
domainEvents
=
m_eventManager
.
queryEvents
(
domain
,
date
);
if
(
domainEvents
!=
null
&&
domainEvents
.
size
()
>
0
)
{
result
.
put
(
domain
,
domainEvents
);
}
for
(
Entry
<
String
,
List
<
String
>>
entry
:
dependencies
.
entrySet
())
{
String
key
=
entry
.
getKey
();
List
<
String
>
targets
=
entry
.
getValue
();
for
(
String
temp
:
targets
)
{
List
<
Event
>
queryEvents
=
m_eventManager
.
queryEvents
(
temp
,
date
);
if
(
queryEvents
!=
null
&&
queryEvents
.
size
()
>
0
)
{
List
<
Event
>
events
=
result
.
get
(
key
);
if
(
events
==
null
)
{
events
=
new
ArrayList
<
Event
>();
result
.
put
(
key
,
events
);
}
events
.
addAll
(
queryEvents
);
}
}
}
return
result
;
}
private
DependencyReport
queryDependencyReport
(
Payload
payload
)
{
String
domain
=
payload
.
getDomain
();
String
date
=
String
.
valueOf
(
payload
.
getDate
());
...
...
@@ -510,17 +300,4 @@ public class Handler implements PageHandler<Context> {
}
}
private
ProblemReport
queryProblemReport
(
Payload
payload
,
String
domain
)
{
String
date
=
String
.
valueOf
(
payload
.
getDate
());
ModelRequest
request
=
new
ModelRequest
(
domain
,
payload
.
getPeriod
())
//
.
setProperty
(
"date"
,
date
).
setProperty
(
"type"
,
"view"
);
if
(
m_problemservice
.
isEligable
(
request
))
{
ModelResponse
<
ProblemReport
>
response
=
m_problemservice
.
invoke
(
request
);
return
response
.
getModel
();
}
else
{
throw
new
RuntimeException
(
"Internal error: no eligible problem service registered for "
+
request
+
"!"
);
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/dependency/
ExceptionInfoBuilde
r.java
→
cat-home/src/main/java/com/dianping/cat/report/page/dependency/
ProblemInfoVisito
r.java
浏览文件 @
94bc5444
...
...
@@ -16,7 +16,7 @@ import com.dianping.cat.helper.MapUtils;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.report.page.dependency.graph.GraphConstrant
;
public
class
ExceptionInfoBuilde
r
extends
BaseVisitor
{
public
class
ProblemInfoVisito
r
extends
BaseVisitor
{
private
Map
<
String
,
Integer
>
m_errors
=
new
LinkedHashMap
<
String
,
Integer
>();
...
...
@@ -54,7 +54,7 @@ public class ExceptionInfoBuilder extends BaseVisitor {
super
.
visitSegment
(
segment
);
}
public
String
build
Result
()
{
public
String
build
ExceptionInfo
()
{
StringBuilder
sb
=
new
StringBuilder
();
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
Integer
>>
compator
=
new
Comparator
<
Map
.
Entry
<
String
,
Integer
>>()
{
@Override
...
...
@@ -63,6 +63,7 @@ public class ExceptionInfoBuilder extends BaseVisitor {
}
};
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
if
(
m_errors
.
size
()
>
0
)
{
sb
.
append
(
GraphConstrant
.
LINE
).
append
(
GraphConstrant
.
ENTER
);
sb
.
append
(
"<span style='color:red'>"
).
append
(
CatString
.
EXCEPTION_INFO
).
append
(
"("
);
...
...
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
94bc5444
...
...
@@ -2646,9 +2646,6 @@
<role-hint>
dependency
</role-hint>
<field-name>
m_dependencyService
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.externalError.EventCollectManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.dependency.graph.TopologyGraphManager
</role>
</requirement>
...
...
@@ -2656,7 +2653,7 @@
<role>
com.dianping.cat.system.config.ProductLineConfigManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.
service.ReportService
</role>
<role>
com.dianping.cat.report.
page.dependency.ExternalInfoBuilder
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.dependency.JspViewer
</role>
...
...
@@ -2664,37 +2661,6 @@
<requirement>
<role>
com.dianping.cat.report.page.PayloadNormalizer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
problem
</role-hint>
<field-name>
m_problemservice
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
top
</role-hint>
<field-name>
m_topService
</field-name>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.externalError.EventCollectManager
</role>
<implementation>
com.dianping.cat.report.page.externalError.EventCollectManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.home.dal.report.EventDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.configuration.ServerConfigManager
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.home.dal.report.EventDao
</role>
<implementation>
com.dianping.cat.home.dal.report.EventDao
</implementation>
<requirements>
<requirement>
<role>
org.unidal.dal.jdbc.QueryEngine
</role>
</requirement>
</requirements>
</component>
<component>
...
...
@@ -2766,6 +2732,49 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.dependency.ExternalInfoBuilder
</role>
<implementation>
com.dianping.cat.report.page.dependency.ExternalInfoBuilder
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
problem
</role-hint>
<field-name>
m_problemservice
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
top
</role-hint>
<field-name>
m_topService
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.externalError.EventCollectManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.service.ReportService
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.externalError.EventCollectManager
</role>
<implementation>
com.dianping.cat.report.page.externalError.EventCollectManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.home.dal.report.EventDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.configuration.ServerConfigManager
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.home.dal.report.EventDao
</role>
<implementation>
com.dianping.cat.home.dal.report.EventDao
</implementation>
<requirements>
<requirement>
<role>
org.unidal.dal.jdbc.QueryEngine
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.dependency.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.dependency.JspViewer
</implementation>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录