Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
b7f220ce
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,发现更多精彩内容 >>
提交
b7f220ce
编写于
9月 13, 2012
作者:
Y
youyong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify the health report
上级
c6a52ce6
变更
66
展开全部
隐藏空白更改
内联
并排
Showing
66 changed file
with
1953 addition
and
1065 deletion
+1953
-1065
cat-consumer/pom.xml
cat-consumer/pom.xml
+1
-1
cat-consumer/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java
...m/dianping/cat/consumer/build/ComponentsConfigurator.java
+1
-1
cat-consumer/src/main/java/com/dianping/cat/consumer/common/CommonAnalyzer.java
...java/com/dianping/cat/consumer/common/CommonAnalyzer.java
+25
-1
cat-consumer/src/main/resources/META-INF/dal/model/health-report-codegen.xml
...in/resources/META-INF/dal/model/health-report-codegen.xml
+1
-9
cat-consumer/src/main/resources/META-INF/dal/model/health-report-manifest.xml
...n/resources/META-INF/dal/model/health-report-manifest.xml
+6
-0
cat-consumer/src/main/resources/META-INF/dal/model/health-report-model.xml
...main/resources/META-INF/dal/model/health-report-model.xml
+89
-0
cat-consumer/src/main/resources/META-INF/plexus/components.xml
...onsumer/src/main/resources/META-INF/plexus/components.xml
+3
-0
cat-consumer/src/test/resources/com/dianping/cat/consumer/dailyreport/dailyreport.xml
...ces/com/dianping/cat/consumer/dailyreport/dailyreport.xml
+2
-2
cat-core/src/main/resources/com/dianping/cat/configuration/client/config.xsd
...esources/com/dianping/cat/configuration/client/config.xsd
+63
-62
cat-core/src/main/resources/com/dianping/cat/status/model/status.xsd
...c/main/resources/com/dianping/cat/status/model/status.xsd
+96
-95
cat-home/src/main/java/com/dianping/cat/CatHomeModule.java
cat-home/src/main/java/com/dianping/cat/CatHomeModule.java
+0
-3
cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java
...n/java/com/dianping/cat/build/ComponentsConfigurator.java
+13
-9
cat-home/src/main/java/com/dianping/cat/report/ReportModule.java
...e/src/main/java/com/dianping/cat/report/ReportModule.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/ReportPage.java
...ome/src/main/java/com/dianping/cat/report/ReportPage.java
+3
-3
cat-home/src/main/java/com/dianping/cat/report/page/cache/Handler.java
...main/java/com/dianping/cat/report/page/cache/Handler.java
+10
-0
cat-home/src/main/java/com/dianping/cat/report/page/cache/TransactionReportVistor.java
...anping/cat/report/page/cache/TransactionReportVistor.java
+1
-9
cat-home/src/main/java/com/dianping/cat/report/page/health/Action.java
...main/java/com/dianping/cat/report/page/health/Action.java
+9
-9
cat-home/src/main/java/com/dianping/cat/report/page/health/Context.java
...ain/java/com/dianping/cat/report/page/health/Context.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/page/health/Handler.java
...ain/java/com/dianping/cat/report/page/health/Handler.java
+148
-0
cat-home/src/main/java/com/dianping/cat/report/page/health/JspFile.java
...ain/java/com/dianping/cat/report/page/health/JspFile.java
+5
-3
cat-home/src/main/java/com/dianping/cat/report/page/health/JspViewer.java
...n/java/com/dianping/cat/report/page/health/JspViewer.java
+6
-5
cat-home/src/main/java/com/dianping/cat/report/page/health/Model.java
.../main/java/com/dianping/cat/report/page/health/Model.java
+53
-0
cat-home/src/main/java/com/dianping/cat/report/page/health/Payload.java
...ain/java/com/dianping/cat/report/page/health/Payload.java
+10
-22
cat-home/src/main/java/com/dianping/cat/report/page/model/database/HistoricalDatabaseService.java
...report/page/model/database/HistoricalDatabaseService.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/page/monthreport/Handler.java
...ava/com/dianping/cat/report/page/monthreport/Handler.java
+0
-146
cat-home/src/main/java/com/dianping/cat/report/page/monthreport/MonthReportFlagBuilder.java
...g/cat/report/page/monthreport/MonthReportFlagBuilder.java
+0
-258
cat-home/src/main/java/com/dianping/cat/report/page/task/Handler.java
.../main/java/com/dianping/cat/report/page/task/Handler.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/DailyTaskProducer.java
.../java/com/dianping/cat/report/task/DailyTaskProducer.java
+1
-0
cat-home/src/main/java/com/dianping/cat/report/task/DefaultTaskConsumer.java
...ava/com/dianping/cat/report/task/DefaultTaskConsumer.java
+1
-0
cat-home/src/main/java/com/dianping/cat/report/task/cross/CrossMerger.java
.../java/com/dianping/cat/report/task/cross/CrossMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/cross/CrossReportBuilder.java
...om/dianping/cat/report/task/cross/CrossReportBuilder.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/database/DatabaseMerger.java
...com/dianping/cat/report/task/database/DatabaseMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/database/DatabaseReportBuilder.java
...nping/cat/report/task/database/DatabaseReportBuilder.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/event/EventGraphCreator.java
...com/dianping/cat/report/task/event/EventGraphCreator.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/event/EventMerger.java
.../java/com/dianping/cat/report/task/event/EventMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/event/EventReportBuilder.java
...om/dianping/cat/report/task/event/EventReportBuilder.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/health/HealthReportBuilder.java
.../dianping/cat/report/task/health/HealthReportBuilder.java
+194
-0
cat-home/src/main/java/com/dianping/cat/report/task/health/HealthReportCreator.java
.../dianping/cat/report/task/health/HealthReportCreator.java
+430
-0
cat-home/src/main/java/com/dianping/cat/report/task/health/HealthReportMerger.java
...m/dianping/cat/report/task/health/HealthReportMerger.java
+56
-0
cat-home/src/main/java/com/dianping/cat/report/task/health/HealthServiceCollector.java
...anping/cat/report/task/health/HealthServiceCollector.java
+159
-0
cat-home/src/main/java/com/dianping/cat/report/task/heartbeat/HeartbeatGraphCreator.java
...ping/cat/report/task/heartbeat/HeartbeatGraphCreator.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/heartbeat/HeartbeatMerger.java
...m/dianping/cat/report/task/heartbeat/HeartbeatMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/heartbeat/HeartbeatReportBuilder.java
...ing/cat/report/task/heartbeat/HeartbeatReportBuilder.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/matrix/MatrixMerger.java
...ava/com/dianping/cat/report/task/matrix/MatrixMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/matrix/MatrixReportBuilder.java
.../dianping/cat/report/task/matrix/MatrixReportBuilder.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/monthreport/MonthReportBuilderTask.java
...g/cat/report/task/monthreport/MonthReportBuilderTask.java
+0
-244
cat-home/src/main/java/com/dianping/cat/report/task/problem/ProblemGraphCreator.java
...dianping/cat/report/task/problem/ProblemGraphCreator.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/problem/ProblemMerger.java
...a/com/dianping/cat/report/task/problem/ProblemMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/problem/ProblemReportBuilder.java
...ianping/cat/report/task/problem/ProblemReportBuilder.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/spi/AbstractReportBuilder.java
...m/dianping/cat/report/task/spi/AbstractReportBuilder.java
+3
-3
cat-home/src/main/java/com/dianping/cat/report/task/spi/GraphCreator.java
...n/java/com/dianping/cat/report/task/spi/GraphCreator.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/spi/GraphLine.java
...main/java/com/dianping/cat/report/task/spi/GraphLine.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportBuilder.java
.../java/com/dianping/cat/report/task/spi/ReportBuilder.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java
...n/java/com/dianping/cat/report/task/spi/ReportFacade.java
+6
-1
cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportMerger.java
...n/java/com/dianping/cat/report/task/spi/ReportMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/sql/SqlMerger.java
...main/java/com/dianping/cat/report/task/sql/SqlMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/sql/SqlReportBuilder.java
...va/com/dianping/cat/report/task/sql/SqlReportBuilder.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionGraphCreator.java
.../cat/report/task/transaction/TransactionGraphCreator.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionMerger.java
...anping/cat/report/task/transaction/TransactionMerger.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionReportBuilder.java
...cat/report/task/transaction/TransactionReportBuilder.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/view/NavigationBar.java
...main/java/com/dianping/cat/report/view/NavigationBar.java
+2
-2
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+103
-55
cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml
...home/src/main/resources/META-INF/wizard/webapp/wizard.xml
+55
-55
cat-home/src/main/webapp/css/health.css
cat-home/src/main/webapp/css/health.css
+27
-0
cat-home/src/main/webapp/jsp/report/health.jsp
cat-home/src/main/webapp/jsp/report/health.jsp
+317
-0
cat-home/src/test/java/com/dianping/cat/report/task/healthreport/HealthReportBuilderTest.java
...cat/report/task/healthreport/HealthReportBuilderTest.java
+14
-27
未找到文件。
cat-consumer/pom.xml
浏览文件 @
b7f220ce
...
...
@@ -47,7 +47,7 @@
<manifest>
${basedir}/src/main/resources/META-INF/dal/model/database-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/sql-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/
mon
th-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/
heal
th-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/common-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/cross-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/matrix-report-manifest.xml,
...
...
cat-consumer/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java
浏览文件 @
b7f220ce
...
...
@@ -90,7 +90,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
.
req
(
BucketManager
.
class
,
ReportDao
.
class
));
all
.
add
(
C
(
CommonAnalyzer
.
class
).
is
(
PER_LOOKUP
)
//
.
req
(
HostinfoDao
.
class
)
//
.
req
(
HostinfoDao
.
class
,
TaskDao
.
class
)
//
.
req
(
BucketManager
.
class
));
all
.
add
(
C
(
TopIpAnalyzer
.
class
).
is
(
PER_LOOKUP
)
//
...
...
cat-consumer/src/main/java/com/dianping/cat/consumer/common/CommonAnalyzer.java
浏览文件 @
b7f220ce
...
...
@@ -9,9 +9,12 @@ import org.codehaus.plexus.logging.LogEnabled;
import
org.codehaus.plexus.logging.Logger
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.configuration.NetworkInterfaceManager
;
import
com.dianping.cat.consumer.common.model.entity.CommonReport
;
import
com.dianping.cat.hadoop.dal.Hostinfo
;
import
com.dianping.cat.hadoop.dal.HostinfoDao
;
import
com.dianping.cat.hadoop.dal.Task
;
import
com.dianping.cat.hadoop.dal.TaskDao
;
import
com.dianping.cat.message.spi.AbstractMessageAnalyzer
;
import
com.dianping.cat.message.spi.MessageTree
;
import
com.dianping.cat.storage.BucketManager
;
...
...
@@ -22,11 +25,14 @@ public class CommonAnalyzer extends AbstractMessageAnalyzer<CommonReport> implem
private
Map
<
String
,
CommonReport
>
m_reports
=
new
HashMap
<
String
,
CommonReport
>();
@Inject
private
BucketManager
m_bucketManager
;
@Inject
private
HostinfoDao
m_hostInfoDao
;
@Inject
private
BucketManager
m_bucketManager
;
private
TaskDao
m_taskDao
;
@Override
public
void
doCheckpoint
(
boolean
atEnd
)
{
...
...
@@ -57,6 +63,24 @@ public class CommonAnalyzer extends AbstractMessageAnalyzer<CommonReport> implem
}
}
}
Date
period
=
new
Date
(
m_startTime
);
String
ip
=
NetworkInterfaceManager
.
INSTANCE
.
getLocalHostAddress
();
//Create task for health report
for
(
String
domain
:
m_reports
.
keySet
())
{
try
{
Task
task
=
m_taskDao
.
createLocal
();
task
.
setCreationDate
(
new
Date
());
task
.
setProducer
(
ip
);
task
.
setReportDomain
(
domain
);
task
.
setReportName
(
"health"
);
task
.
setReportPeriod
(
period
);
task
.
setStatus
(
1
);
// status todo
m_taskDao
.
insert
(
task
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
}
}
@Override
...
...
cat-consumer/src/main/resources/META-INF/dal/model/
mon
th-report-codegen.xml
→
cat-consumer/src/main/resources/META-INF/dal/model/
heal
th-report-codegen.xml
浏览文件 @
b7f220ce
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity
name=
"
mon
th-report"
root=
"true"
>
<entity
name=
"
heal
th-report"
root=
"true"
>
<attribute
name=
"domain"
value-type=
"String"
/>
<attribute
name=
"startTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<attribute
name=
"endTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
...
...
@@ -17,18 +17,13 @@
</entity>
<entity
name=
"problem-info"
>
<attribute
name=
"exceptions"
value-type=
"long"
/>
<attribute
name=
"avg-exceptions"
value-type=
"double"
/>
<attribute
name=
"longSqls"
value-type=
"long"
/>
<attribute
name=
"avg-longSqls"
value-type=
"double"
/>
<attribute
name=
"long-sqlPercent"
value-type=
"double"
/>
<attribute
name=
"longUrls"
value-type=
"long"
/>
<attribute
name=
"avg-longUrls"
value-type=
"double"
/>
<attribute
name=
"long-urlPercent"
value-type=
"double"
/>
<attribute
name=
"longServices"
value-type=
"long"
/>
<attribute
name=
"avg-longServices"
value-type=
"double"
/>
<attribute
name=
"long-servicePercent"
value-type=
"double"
/>
<attribute
name=
"longCaches"
value-type=
"long"
/>
<attribute
name=
"avg-longCaches"
value-type=
"double"
/>
<attribute
name=
"long-cachePercent"
value-type=
"double"
/>
</entity>
<entity
name=
"url"
>
...
...
@@ -36,10 +31,8 @@
</entity>
<entity
name=
"base-info"
>
<attribute
name=
"total"
value-type=
"int"
/>
<attribute
name=
"avg"
value-type=
"double"
/>
<attribute
name=
"response-time"
value-type=
"double"
/>
<attribute
name=
"error-total"
value-type=
"int"
/>
<attribute
name=
"error-avg"
value-type=
"double"
/>
<attribute
name=
"error-percent"
value-type=
"double"
/>
</entity>
<entity
name=
"service"
>
...
...
@@ -56,7 +49,6 @@
</entity>
<entity
name=
"base-cache-info"
>
<attribute
name=
"total"
value-type=
"int"
/>
<attribute
name=
"avg"
value-type=
"double"
/>
<attribute
name=
"response-time"
value-type=
"double"
/>
<attribute
name=
"hit-percent"
value-type=
"double"
/>
</entity>
...
...
cat-consumer/src/main/resources/META-INF/dal/model/
mon
th-report-manifest.xml
→
cat-consumer/src/main/resources/META-INF/dal/model/
heal
th-report-manifest.xml
浏览文件 @
b7f220ce
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file
path=
"
mon
th-report-codegen.xml"
/>
<file
path=
"
mon
th-report-model.xml"
/>
<file
path=
"
heal
th-report-codegen.xml"
/>
<file
path=
"
heal
th-report-model.xml"
/>
</manifest>
cat-consumer/src/main/resources/META-INF/dal/model/
mon
th-report-model.xml
→
cat-consumer/src/main/resources/META-INF/dal/model/
heal
th-report-model.xml
浏览文件 @
b7f220ce
<?xml version="1.0" encoding="UTF-8"?>
<model
model-package=
"com.dianping.cat.consumer.
monthreport
.model"
enable-merger=
"true"
enable-json-builder=
"true"
<model
model-package=
"com.dianping.cat.consumer.
health
.model"
enable-merger=
"true"
enable-json-builder=
"true"
enable-xml-parser=
"true"
enable-sax-parser=
"true"
enable-json-parser=
"true"
enable-base-visitor=
"true"
enable-native-builder=
"true"
enable-native-parser=
"true"
>
<entity
name=
"
mon
th-report"
root=
"true"
>
<attribute
name=
"domain"
value-type=
"String"
/>
<entity
name=
"
heal
th-report"
root=
"true"
>
<attribute
name=
"domain"
value-type=
"String"
key=
"true"
/>
<attribute
name=
"startTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<attribute
name=
"endTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<attribute
name=
"day"
value-type=
"int"
primitive=
"true"
/>
<element
name=
"domain"
value-type=
"String"
type=
"
list"
names=
"domain
s"
/>
<element
name=
"domain"
value-type=
"String"
type=
"
set"
names=
"domainName
s"
/>
<entity-ref
name=
"problem-info"
/>
<entity-ref
name=
"url"
/>
<entity-ref
name=
"service"
/>
<entity-ref
name=
"clientService"
/>
<entity-ref
name=
"call"
/>
<entity-ref
name=
"sql"
/>
<entity-ref
name=
"web-cache"
/>
<entity-ref
name=
"kvdb-cache"
/>
<entity-ref
name=
"mem-cache"
/>
<entity-ref
name=
"machine-info"
/>
</entity>
<entity
name=
"machine-info"
>
<attribute
name=
"numbers"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"avg-load"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-load"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-load-machine"
value-type=
"String"
/>
<attribute
name=
"avg-oldgc"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-oldgc"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-oldgc-machine"
value-type=
"String"
/>
<attribute
name=
"avg-http"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-http"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-http-machine"
value-type=
"String"
/>
<attribute
name=
"avg-pigeon"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-pigeon"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-pigeon-machine"
value-type=
"String"
/>
<attribute
name=
"avg-memory-used"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-memory-used"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"avg-max-memory-used-machine"
value-type=
"String"
/>
</entity>
<entity
name=
"problem-info"
>
<attribute
name=
"exceptions"
value-type=
"long"
primitive=
"true"
/>
<attribute
name=
"avg-exceptions"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"longSqls"
value-type=
"long"
primitive=
"true"
/>
<attribute
name=
"avg-longSqls"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"long-sqlPercent"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"longUrls"
value-type=
"long"
primitive=
"true"
/>
<attribute
name=
"avg-longUrls"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"long-urlPercent"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"longServices"
value-type=
"long"
primitive=
"true"
/>
<attribute
name=
"avg-longServices"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"long-servicePercent"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"longCaches"
value-type=
"long"
primitive=
"true"
/>
<attribute
name=
"avg-longCaches"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"long-cachePercent"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"exceptions-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"avg-exceptions-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"longSqls-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"avg-longSqls-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"long-sqlPercent-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"longUrls-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"avg-longUrls-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"long-urlPercent-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"longServices-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"avg-longServices-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"long-servicePercent-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"longCaches-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"avg-longCaches-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"long-cachePercent-flag"
value-type=
"int"
primitive=
"true"
/>
</entity>
<entity
name=
"url"
>
<entity-ref
name=
"base-info"
/>
</entity>
<entity
name=
"base-info"
>
<attribute
name=
"total"
value-type=
"long"
primitive=
"true"
/>
<attribute
name=
"avg"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"response-time"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"error-total"
value-type=
"long"
primitive=
"true"
/>
<attribute
name=
"error-avg"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"error-percent"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"success-percent"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"total-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"avg-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"response-time-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"error-total-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"error-avg-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"error-percent-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"success-percent-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"tps"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
</entity>
<entity
name=
"service"
>
<entity-ref
name=
"base-info"
/>
</entity>
<entity
name=
"clientService"
>
<entity-ref
name=
"base-info"
/>
</entity>
<entity
name=
"call"
>
<entity-ref
name=
"base-info"
/>
</entity>
...
...
@@ -83,14 +76,8 @@
</entity>
<entity
name=
"base-cache-info"
>
<attribute
name=
"total"
value-type=
"long"
primitive=
"true"
/>
<attribute
name=
"avg"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"response-time"
value-type=
"double"
primitive=
"true"
format=
"0.00"
/>
<attribute
name=
"hit-percent"
value-type=
"double"
primitive=
"true"
format=
"0.000000"
/>
<attribute
name=
"total-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"avg-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"response-time-flag"
value-type=
"int"
primitive=
"true"
/>
<attribute
name=
"hit-percent-flag"
value-type=
"int"
primitive=
"true"
/>
</entity>
<entity
name=
"kvdb-cache"
>
<entity-ref
name=
"base-cache-info"
/>
...
...
cat-consumer/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
b7f220ce
...
...
@@ -171,6 +171,9 @@
<requirement>
<role>
com.dianping.cat.hadoop.dal.HostinfoDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.TaskDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.storage.BucketManager
</role>
</requirement>
...
...
cat-consumer/src/test/resources/com/dianping/cat/consumer/
monthreport/month
report.xml
→
cat-consumer/src/test/resources/com/dianping/cat/consumer/
dailyreport/daily
report.xml
浏览文件 @
b7f220ce
<
month
-report
domain=
"GroupWeb"
startTime=
"2012-07-20 13:00:00"
<
daily
-report
domain=
"GroupWeb"
startTime=
"2012-07-20 13:00:00"
endTime=
"2012-07-20 13:59:59"
day=
"10"
>
<domain>
Cat
</domain>
<domain>
MobileApi
</domain>
...
...
@@ -39,4 +39,4 @@
<mem-cache>
<base-cache-info
total=
"199"
avg=
"100.0"
response-time=
"0.2"
hit-percent=
"12.0"
></base-cache-info>
</mem-cache>
</month-report>
\ No newline at end of file
</daily-report>
\ No newline at end of file
cat-core/src/main/resources/com/dianping/cat/configuration/client/config.xsd
浏览文件 @
b7f220ce
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs=
"http://www.w3.org/2001/XMLSchema"
elementFormDefault=
"qualified"
attributeFormDefault=
"unqualified"
>
<xs:element
name=
"config"
type=
"ConfigType"
/>
<xs:complexType
name=
"ConfigType"
>
<xs:sequence>
<xs:element
name=
"base-log-dir"
type=
"xs:string"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"servers"
minOccurs=
"0"
maxOccurs=
"1"
>
<xs:complexType>
<xs:sequence
minOccurs=
"0"
maxOccurs=
"unbounded"
>
<xs:element
name=
"server"
type=
"ServerType"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element
name=
"domain"
type=
"DomainType"
minOccurs=
"0"
maxOccurs=
"unbounded"
/>
<xs:element
name=
"bind"
type=
"BindType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"properties"
minOccurs=
"0"
maxOccurs=
"1"
>
<xs:complexType>
<xs:sequence
minOccurs=
"0"
maxOccurs=
"unbounded"
>
<xs:element
name=
"property"
type=
"PropertyType"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute
name=
"mode"
type=
"xs:string"
use=
"required"
/>
<xs:attribute
name=
"enabled"
type=
"xs:boolean"
default=
"true"
/>
<xs:attribute
name=
"dump-locked"
type=
"xs:boolean"
/>
<xs:anyAttribute
processContents=
"lax"
/>
</xs:complexType>
<xs:complexType
name=
"ServerType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"ip"
type=
"xs:string"
use=
"required"
/>
<xs:attribute
name=
"port"
type=
"xs:int"
/>
<xs:attribute
name=
"enabled"
type=
"xs:boolean"
default=
"true"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"DomainType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"id"
type=
"xs:string"
use=
"required"
/>
<xs:attribute
name=
"ip"
type=
"xs:string"
/>
<xs:attribute
name=
"max-threads"
type=
"xs:int"
default=
"500"
/>
<xs:attribute
name=
"enabled"
type=
"xs:boolean"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"BindType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"ip"
type=
"xs:string"
/>
<xs:attribute
name=
"port"
type=
"xs:int"
default=
"2280"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"PropertyType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"name"
type=
"xs:string"
use=
"required"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs=
"http://www.w3.org/2001/XMLSchema"
elementFormDefault=
"qualified"
attributeFormDefault=
"unqualified"
>
<xs:element
name=
"config"
type=
"ConfigType"
/>
<xs:complexType
name=
"ConfigType"
>
<xs:sequence>
<xs:element
name=
"base-log-dir"
type=
"xs:string"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"servers"
minOccurs=
"0"
maxOccurs=
"1"
>
<xs:complexType>
<xs:sequence
minOccurs=
"0"
maxOccurs=
"unbounded"
>
<xs:element
name=
"server"
type=
"ServerType"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element
name=
"domain"
type=
"DomainType"
minOccurs=
"0"
maxOccurs=
"unbounded"
/>
<xs:element
name=
"bind"
type=
"BindType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"properties"
minOccurs=
"0"
maxOccurs=
"1"
>
<xs:complexType>
<xs:sequence
minOccurs=
"0"
maxOccurs=
"unbounded"
>
<xs:element
name=
"property"
type=
"PropertyType"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute
name=
"mode"
type=
"xs:string"
use=
"required"
/>
<xs:attribute
name=
"enabled"
type=
"xs:boolean"
default=
"true"
/>
<xs:attribute
name=
"dump-locked"
type=
"xs:boolean"
/>
<xs:anyAttribute
processContents=
"lax"
/>
</xs:complexType>
<xs:complexType
name=
"ServerType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"ip"
type=
"xs:string"
use=
"required"
/>
<xs:attribute
name=
"port"
type=
"xs:int"
/>
<xs:attribute
name=
"enabled"
type=
"xs:boolean"
default=
"true"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"DomainType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"id"
type=
"xs:string"
use=
"required"
/>
<xs:attribute
name=
"ip"
type=
"xs:string"
/>
<xs:attribute
name=
"max-threads"
type=
"xs:int"
default=
"500"
/>
<xs:attribute
name=
"enabled"
type=
"xs:boolean"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"BindType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"ip"
type=
"xs:string"
/>
<xs:attribute
name=
"port"
type=
"xs:int"
default=
"2280"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"PropertyType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"name"
type=
"xs:string"
use=
"required"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
cat-core/src/main/resources/com/dianping/cat/status/model/status.xsd
浏览文件 @
b7f220ce
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs=
"http://www.w3.org/2001/XMLSchema"
elementFormDefault=
"qualified"
attributeFormDefault=
"unqualified"
>
<xs:element
name=
"status"
type=
"StatusType"
/>
<xs:complexType
name=
"StatusType"
>
<xs:sequence>
<xs:element
name=
"runtime"
type=
"RuntimeType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"os"
type=
"OsType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"disk"
type=
"DiskType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"memory"
type=
"MemoryType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"thread"
type=
"ThreadType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"message"
type=
"MessageType"
minOccurs=
"0"
maxOccurs=
"1"
/>
</xs:sequence>
<xs:attribute
name=
"timestamp"
type=
"xs:string"
/>
<xs:anyAttribute
processContents=
"lax"
/>
</xs:complexType>
<xs:complexType
name=
"RuntimeType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"start-time"
type=
"xs:long"
/>
<xs:attribute
name=
"up-time"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"OsType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"name"
type=
"xs:string"
/>
<xs:attribute
name=
"arch"
type=
"xs:string"
/>
<xs:attribute
name=
"version"
type=
"xs:string"
/>
<xs:attribute
name=
"available-processors"
type=
"xs:int"
/>
<xs:attribute
name=
"system-load-average"
type=
"xs:double"
/>
<xs:attribute
name=
"process-time"
type=
"xs:long"
/>
<xs:attribute
name=
"total-physical-memory"
type=
"xs:long"
/>
<xs:attribute
name=
"free-physical-memory"
type=
"xs:long"
/>
<xs:attribute
name=
"committed-virtual-memory"
type=
"xs:long"
/>
<xs:attribute
name=
"total-swap-space"
type=
"xs:long"
/>
<xs:attribute
name=
"free-swap-space"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"DiskType"
>
<xs:sequence>
<xs:element
name=
"disk-volume"
type=
"DiskVolumeType"
minOccurs=
"0"
maxOccurs=
"unbounded"
/>
</xs:sequence>
</xs:complexType>
<xs:complexType
name=
"DiskVolumeType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"id"
type=
"xs:string"
use=
"required"
/>
<xs:attribute
name=
"total"
type=
"xs:long"
/>
<xs:attribute
name=
"free"
type=
"xs:long"
/>
<xs:attribute
name=
"usable"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"MemoryType"
>
<xs:sequence>
<xs:element
name=
"gc"
type=
"GcType"
minOccurs=
"0"
maxOccurs=
"unbounded"
/>
</xs:sequence>
<xs:attribute
name=
"max"
type=
"xs:long"
/>
<xs:attribute
name=
"total"
type=
"xs:long"
/>
<xs:attribute
name=
"free"
type=
"xs:long"
/>
<xs:attribute
name=
"heap-usage"
type=
"xs:long"
/>
<xs:attribute
name=
"non-heap-usage"
type=
"xs:long"
/>
</xs:complexType>
<xs:complexType
name=
"ThreadType"
>
<xs:sequence>
<xs:element
name=
"dump"
type=
"xs:string"
minOccurs=
"0"
maxOccurs=
"1"
/>
</xs:sequence>
<xs:attribute
name=
"count"
type=
"xs:int"
/>
<xs:attribute
name=
"daemon-count"
type=
"xs:int"
/>
<xs:attribute
name=
"peek-count"
type=
"xs:int"
/>
<xs:attribute
name=
"total-started-count"
type=
"xs:int"
/>
<xs:attribute
name=
"cat-thread-count"
type=
"xs:int"
/>
<xs:attribute
name=
"pigeon-thread-count"
type=
"xs:int"
/>
<xs:attribute
name=
"http-thread-count"
type=
"xs:int"
/>
</xs:complexType>
<xs:complexType
name=
"MessageType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"produced"
type=
"xs:long"
/>
<xs:attribute
name=
"overflowed"
type=
"xs:long"
/>
<xs:attribute
name=
"bytes"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"GcType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"name"
type=
"xs:string"
/>
<xs:attribute
name=
"count"
type=
"xs:long"
/>
<xs:attribute
name=
"time"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs=
"http://www.w3.org/2001/XMLSchema"
elementFormDefault=
"qualified"
attributeFormDefault=
"unqualified"
>
<xs:element
name=
"status"
type=
"StatusType"
/>
<xs:complexType
name=
"StatusType"
>
<xs:sequence>
<xs:element
name=
"runtime"
type=
"RuntimeType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"os"
type=
"OsType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"disk"
type=
"DiskType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"memory"
type=
"MemoryType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"thread"
type=
"ThreadType"
minOccurs=
"0"
maxOccurs=
"1"
/>
<xs:element
name=
"message"
type=
"MessageType"
minOccurs=
"0"
maxOccurs=
"1"
/>
</xs:sequence>
<xs:attribute
name=
"timestamp"
type=
"xs:string"
/>
<xs:anyAttribute
processContents=
"lax"
/>
</xs:complexType>
<xs:complexType
name=
"RuntimeType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"start-time"
type=
"xs:long"
/>
<xs:attribute
name=
"up-time"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"OsType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"name"
type=
"xs:string"
/>
<xs:attribute
name=
"arch"
type=
"xs:string"
/>
<xs:attribute
name=
"version"
type=
"xs:string"
/>
<xs:attribute
name=
"available-processors"
type=
"xs:int"
/>
<xs:attribute
name=
"system-load-average"
type=
"xs:double"
/>
<xs:attribute
name=
"process-time"
type=
"xs:long"
/>
<xs:attribute
name=
"total-physical-memory"
type=
"xs:long"
/>
<xs:attribute
name=
"free-physical-memory"
type=
"xs:long"
/>
<xs:attribute
name=
"committed-virtual-memory"
type=
"xs:long"
/>
<xs:attribute
name=
"total-swap-space"
type=
"xs:long"
/>
<xs:attribute
name=
"free-swap-space"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"DiskType"
>
<xs:sequence>
<xs:element
name=
"disk-volume"
type=
"DiskVolumeType"
minOccurs=
"0"
maxOccurs=
"unbounded"
/>
</xs:sequence>
</xs:complexType>
<xs:complexType
name=
"DiskVolumeType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"id"
type=
"xs:string"
use=
"required"
/>
<xs:attribute
name=
"total"
type=
"xs:long"
/>
<xs:attribute
name=
"free"
type=
"xs:long"
/>
<xs:attribute
name=
"usable"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"MemoryType"
>
<xs:sequence>
<xs:element
name=
"gc"
type=
"GcType"
minOccurs=
"0"
maxOccurs=
"unbounded"
/>
</xs:sequence>
<xs:attribute
name=
"max"
type=
"xs:long"
/>
<xs:attribute
name=
"total"
type=
"xs:long"
/>
<xs:attribute
name=
"free"
type=
"xs:long"
/>
<xs:attribute
name=
"heap-usage"
type=
"xs:long"
/>
<xs:attribute
name=
"non-heap-usage"
type=
"xs:long"
/>
</xs:complexType>
<xs:complexType
name=
"ThreadType"
>
<xs:sequence>
<xs:element
name=
"dump"
type=
"xs:string"
minOccurs=
"0"
maxOccurs=
"1"
/>
</xs:sequence>
<xs:attribute
name=
"count"
type=
"xs:int"
/>
<xs:attribute
name=
"daemon-count"
type=
"xs:int"
/>
<xs:attribute
name=
"peek-count"
type=
"xs:int"
/>
<xs:attribute
name=
"total-started-count"
type=
"xs:int"
/>
<xs:attribute
name=
"cat-thread-count"
type=
"xs:int"
/>
<xs:attribute
name=
"pigeon-thread-count"
type=
"xs:int"
/>
<xs:attribute
name=
"http-thread-count"
type=
"xs:int"
/>
</xs:complexType>
<xs:complexType
name=
"MessageType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"produced"
type=
"xs:long"
/>
<xs:attribute
name=
"overflowed"
type=
"xs:long"
/>
<xs:attribute
name=
"bytes"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType
name=
"GcType"
>
<xs:simpleContent>
<xs:extension
base=
"xs:string"
>
<xs:attribute
name=
"name"
type=
"xs:string"
/>
<xs:attribute
name=
"count"
type=
"xs:long"
/>
<xs:attribute
name=
"time"
type=
"xs:long"
/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
cat-home/src/main/java/com/dianping/cat/CatHomeModule.java
浏览文件 @
b7f220ce
...
...
@@ -11,7 +11,6 @@ import com.dianping.cat.message.spi.internal.DefaultMessageHandler;
import
com.dianping.cat.report.page.ip.location.IPSeekerManager
;
import
com.dianping.cat.report.task.DailyTaskProducer
;
import
com.dianping.cat.report.task.TaskConsumer
;
import
com.dianping.cat.report.task.monthreport.MonthReportBuilderTask
;
import
com.site.helper.Threads
;
import
com.site.initialization.AbstractModule
;
import
com.site.initialization.Module
;
...
...
@@ -31,12 +30,10 @@ public class CatHomeModule extends AbstractModule {
TaskConsumer
taskConsumer
=
ctx
.
lookup
(
TaskConsumer
.
class
);
DailyTaskProducer
dailyTaskProducer
=
ctx
.
lookup
(
DailyTaskProducer
.
class
);
MonthReportBuilderTask
monthReportBuilder
=
ctx
.
lookup
(
MonthReportBuilderTask
.
class
);
if
(
serverConfigManager
.
isJobMachine
()
&&
!
serverConfigManager
.
isLocalMode
())
{
Threads
.
forGroup
(
"Cat"
).
start
(
dailyTaskProducer
);
Threads
.
forGroup
(
"Cat"
).
start
(
taskConsumer
);
Threads
.
forGroup
(
"Cat"
).
start
(
monthReportBuilder
);
}
}
...
...
cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java
浏览文件 @
b7f220ce
...
...
@@ -8,7 +8,6 @@ import com.dianping.cat.configuration.ServerConfigManager;
import
com.dianping.cat.hadoop.dal.DailyreportDao
;
import
com.dianping.cat.hadoop.dal.GraphDao
;
import
com.dianping.cat.hadoop.dal.HostinfoDao
;
import
com.dianping.cat.hadoop.dal.MonthreportDao
;
import
com.dianping.cat.hadoop.dal.ReportDao
;
import
com.dianping.cat.hadoop.dal.TaskDao
;
import
com.dianping.cat.message.spi.MessageConsumer
;
...
...
@@ -21,7 +20,6 @@ import com.dianping.cat.report.graph.ValueTranslater;
import
com.dianping.cat.report.page.cross.DomainManager
;
import
com.dianping.cat.report.task.DailyTaskProducer
;
import
com.dianping.cat.report.task.DefaultTaskConsumer
;
import
com.dianping.cat.report.task.ReportFacade
;
import
com.dianping.cat.report.task.TaskConsumer
;
import
com.dianping.cat.report.task.cross.CrossMerger
;
import
com.dianping.cat.report.task.cross.CrossReportBuilder
;
...
...
@@ -30,15 +28,17 @@ import com.dianping.cat.report.task.database.DatabaseReportBuilder;
import
com.dianping.cat.report.task.event.EventGraphCreator
;
import
com.dianping.cat.report.task.event.EventMerger
;
import
com.dianping.cat.report.task.event.EventReportBuilder
;
import
com.dianping.cat.report.task.health.HealthReportBuilder
;
import
com.dianping.cat.report.task.health.HealthServiceCollector
;
import
com.dianping.cat.report.task.heartbeat.HeartbeatGraphCreator
;
import
com.dianping.cat.report.task.heartbeat.HeartbeatMerger
;
import
com.dianping.cat.report.task.heartbeat.HeartbeatReportBuilder
;
import
com.dianping.cat.report.task.matrix.MatrixMerger
;
import
com.dianping.cat.report.task.matrix.MatrixReportBuilder
;
import
com.dianping.cat.report.task.monthreport.MonthReportBuilderTask
;
import
com.dianping.cat.report.task.problem.ProblemGraphCreator
;
import
com.dianping.cat.report.task.problem.ProblemMerger
;
import
com.dianping.cat.report.task.problem.ProblemReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportFacade
;
import
com.dianping.cat.report.task.sql.SqlMerger
;
import
com.dianping.cat.report.task.sql.SqlReportBuilder
;
import
com.dianping.cat.report.task.transaction.TransactionGraphCreator
;
...
...
@@ -66,9 +66,6 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all
.
add
(
C
(
GraphBuilder
.
class
,
DefaultGraphBuilder
.
class
)
//
.
req
(
ValueTranslater
.
class
));
all
.
add
(
C
(
MonthReportBuilderTask
.
class
)
//
.
req
(
MonthreportDao
.
class
,
DailyreportDao
.
class
));
all
.
add
(
C
(
TaskConsumer
.
class
,
DefaultTaskConsumer
.
class
)
//
.
req
(
TaskDao
.
class
,
ReportFacade
.
class
));
...
...
@@ -114,13 +111,20 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all
.
add
(
C
(
DailyTaskProducer
.
class
,
DailyTaskProducer
.
class
)
//
.
req
(
TaskDao
.
class
,
ReportDao
.
class
,
DailyreportDao
.
class
));
all
.
add
(
C
(
HealthReportBuilder
.
class
)
//
.
req
(
GraphDao
.
class
,
ReportDao
.
class
,
DailyreportDao
.
class
,
//
HealthServiceCollector
.
class
));
all
.
add
(
C
(
ReportFacade
.
class
)
//
.
req
(
TransactionReportBuilder
.
class
,
EventReportBuilder
.
class
,
ProblemReportBuilder
.
class
,
HeartbeatReportBuilder
.
class
,
MatrixReportBuilder
.
class
,
CrossReportBuilder
.
class
,
DatabaseReportBuilder
.
class
,
SqlReportBuilder
.
class
,
TaskDao
.
class
));
.
req
(
TransactionReportBuilder
.
class
,
EventReportBuilder
.
class
,
ProblemReportBuilder
.
class
,
//
HeartbeatReportBuilder
.
class
,
MatrixReportBuilder
.
class
,
CrossReportBuilder
.
class
,
//
DatabaseReportBuilder
.
class
,
SqlReportBuilder
.
class
,
HealthReportBuilder
.
class
,
//
TaskDao
.
class
));
all
.
add
(
C
(
DomainManager
.
class
,
DomainManager
.
class
).
req
(
ServerConfigManager
.
class
,
HostinfoDao
.
class
));
all
.
add
(
C
(
HealthServiceCollector
.
class
).
req
(
DomainManager
.
class
,
ReportDao
.
class
));
all
.
addAll
(
new
ServiceComponentConfigurator
().
defineComponents
());
all
.
add
(
C
(
Module
.
class
,
CatHomeModule
.
ID
,
CatHomeModule
.
class
));
...
...
cat-home/src/main/java/com/dianping/cat/report/ReportModule.java
浏览文件 @
b7f220ce
...
...
@@ -33,7 +33,7 @@ com.dianping.cat.report.page.task.Handler.class,
com
.
dianping
.
cat
.
report
.
page
.
matrix
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
monthreport
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
health
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
cross
.
Handler
.
class
,
...
...
cat-home/src/main/java/com/dianping/cat/report/ReportPage.java
浏览文件 @
b7f220ce
...
...
@@ -21,6 +21,8 @@ public enum ReportPage implements Page {
MODEL
(
"model"
,
"model"
,
"Model"
,
"Service Model"
,
false
),
SQL
(
"sql"
,
"sql"
,
"SQL"
,
"SQL Report"
,
true
),
HEATMAP
(
"heatmap"
,
"heatmap"
,
"Heatmap"
,
"Heatmap"
,
false
),
DASHBOARD
(
"dashboard"
,
"dashboard"
,
"Dashboard"
,
"Dashboard"
,
false
),
...
...
@@ -29,14 +31,12 @@ public enum ReportPage implements Page {
MATRIX
(
"matrix"
,
"matrix"
,
"Matrix"
,
"Matrix"
,
true
),
MONTHREPORT
(
"monthreport"
,
"monthreport"
,
"Monthreport"
,
"Monthreport"
,
fals
e
),
HEALTH
(
"health"
,
"health"
,
"Health"
,
"Health"
,
tru
e
),
CROSS
(
"cross"
,
"cross"
,
"Cross"
,
"Cross"
,
true
),
CACHE
(
"cache"
,
"cache"
,
"Cache"
,
"Cache"
,
true
),
SQL
(
"sql"
,
"sql"
,
"SQL"
,
"SQL Report"
,
true
),
DATABASE
(
"database"
,
"database"
,
"Database"
,
"Database"
,
true
);
private
String
m_name
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/cache/Handler.java
浏览文件 @
b7f220ce
...
...
@@ -258,12 +258,17 @@ public class Handler implements PageHandler<Context> {
request
.
setProperty
(
"type"
,
"Cache.kvdb"
);
ModelResponse
<
EventReport
>
kvdbResponse
=
m_eventService
.
invoke
(
request
);
EventReport
kvdbReport
=
kvdbResponse
.
getModel
();
request
.
setProperty
(
"type"
,
"Cache.memcached-tuangou"
);
ModelResponse
<
EventReport
>
tuangouResponse
=
m_eventService
.
invoke
(
request
);
EventReport
tuangouReport
=
tuangouResponse
.
getModel
();
EventReportMerger
merger
=
new
EventReportMerger
(
new
EventReport
(
domain
));
merger
.
visitEventReport
(
webCacheReport
);
merger
.
visitEventReport
(
memcachedReport
);
merger
.
visitEventReport
(
kvdbReport
);
merger
.
visitEventReport
(
tuangouReport
);
return
merger
.
getEventReport
();
}
else
{
...
...
@@ -295,12 +300,17 @@ public class Handler implements PageHandler<Context> {
request
.
setProperty
(
"type"
,
"Cache.kvdb"
);
ModelResponse
<
TransactionReport
>
kvdbResponse
=
m_transactionService
.
invoke
(
request
);
TransactionReport
kvdbReport
=
kvdbResponse
.
getModel
();
request
.
setProperty
(
"type"
,
"Cache.memcached-tuangou"
);
ModelResponse
<
TransactionReport
>
tuangouResponse
=
m_transactionService
.
invoke
(
request
);
TransactionReport
tuangouReport
=
tuangouResponse
.
getModel
();
TransactionReportMerger
merger
=
new
TransactionReportMerger
(
new
TransactionReport
(
domain
));
merger
.
visitTransactionReport
(
webCacheReport
);
merger
.
visitTransactionReport
(
memcachedReport
);
merger
.
visitTransactionReport
(
kvdbReport
);
merger
.
visitTransactionReport
(
tuangouReport
);
return
merger
.
getTransactionReport
();
}
else
{
request
.
setProperty
(
"type"
,
type
);
...
...
cat-home/src/main/java/com/dianping/cat/report/page/cache/TransactionReportVistor.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.page.cache
;
import
java.util.HashSet
;
import
java.util.Set
;
import
org.apache.commons.lang.StringUtils
;
import
com.dianping.cat.consumer.event.model.entity.EventName
;
...
...
@@ -18,8 +15,6 @@ public class TransactionReportVistor extends BaseVisitor {
private
CacheReport
m_cacheReport
=
new
CacheReport
();
private
Set
<
String
>
m_cacheTypes
=
new
HashSet
<
String
>();
private
String
m_currentIp
;
private
String
m_currentType
;
...
...
@@ -110,9 +105,6 @@ public class TransactionReportVistor extends BaseVisitor {
@Override
public
void
visitTransactionReport
(
TransactionReport
transactionReport
)
{
m_cacheTypes
.
add
(
"Cache.memcached"
);
m_cacheTypes
.
add
(
"Cache.web"
);
m_cacheTypes
.
add
(
"Cache.kvdb"
);
m_cacheReport
.
setSortBy
(
m_sortBy
);
super
.
visitTransactionReport
(
transactionReport
);
...
...
@@ -126,7 +118,7 @@ public class TransactionReportVistor extends BaseVisitor {
@Override
public
void
visitType
(
TransactionType
transactionType
)
{
String
id
=
transactionType
.
getId
();
if
(
m_cacheTypes
.
contains
(
id
))
{
if
(
id
.
startsWith
(
"Cache."
))
{
if
(
StringUtils
.
isEmpty
(
m_type
))
{
m_currentType
=
transactionType
.
getId
();
com
.
dianping
.
cat
.
consumer
.
event
.
model
.
entity
.
Machine
machine
=
m_eventReport
...
...
cat-home/src/main/java/com/dianping/cat/report/page/
monthreport
/Action.java
→
cat-home/src/main/java/com/dianping/cat/report/page/
health
/Action.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.page.
monthreport
;
package
com.dianping.cat.report.page.
health
;
public
enum
Action
implements
com
.
site
.
web
.
mvc
.
Action
{
ALL
(
"all"
),
HOURLY_REPORT
(
"hourly"
),
HISTORY_REPORT
(
"history"
);
VIEW
(
"view"
);
private
String
m_name
;
private
Action
(
String
name
)
{
m_name
=
name
;
}
public
static
Action
getByName
(
String
name
,
Action
defaultAction
)
{
for
(
Action
action
:
Action
.
values
())
{
...
...
@@ -15,12 +21,6 @@ public enum Action implements com.site.web.mvc.Action {
return
defaultAction
;
}
private
String
m_name
;
private
Action
(
String
name
)
{
m_name
=
name
;
}
@Override
public
String
getName
()
{
return
m_name
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/
monthreport
/Context.java
→
cat-home/src/main/java/com/dianping/cat/report/page/
health
/Context.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.page.
monthreport
;
package
com.dianping.cat.report.page.
health
;
import
com.dianping.cat.report.ReportContext
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/health/Handler.java
0 → 100644
浏览文件 @
b7f220ce
package
com.dianping.cat.report.page.health
;
import
java.io.IOException
;
import
java.util.Date
;
import
java.util.List
;
import
javax.servlet.ServletException
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.configuration.ServerConfigManager
;
import
com.dianping.cat.consumer.health.model.entity.HealthReport
;
import
com.dianping.cat.consumer.health.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Dailyreport
;
import
com.dianping.cat.hadoop.dal.DailyreportDao
;
import
com.dianping.cat.hadoop.dal.DailyreportEntity
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportDao
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.task.health.HealthReportMerger
;
import
com.site.lookup.annotation.Inject
;
import
com.site.lookup.util.StringUtils
;
import
com.site.web.mvc.PageHandler
;
import
com.site.web.mvc.annotation.InboundActionMeta
;
import
com.site.web.mvc.annotation.OutboundActionMeta
;
import
com.site.web.mvc.annotation.PayloadMeta
;
public
class
Handler
implements
PageHandler
<
Context
>
{
public
static
final
long
ONE_HOUR
=
3600
*
1000L
;
@Inject
private
JspViewer
m_jspViewer
;
@Inject
private
ServerConfigManager
m_manager
;
@Inject
private
ReportDao
m_reportDao
;
@Inject
private
DailyreportDao
m_dailyReportDao
;
@Override
@PayloadMeta
(
Payload
.
class
)
@InboundActionMeta
(
name
=
"health"
)
public
void
handleInbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
// display only, no action here
}
@Override
@OutboundActionMeta
(
name
=
"health"
)
public
void
handleOutbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
Model
model
=
new
Model
(
ctx
);
Payload
payload
=
ctx
.
getPayload
();
normalize
(
model
,
payload
);
switch
(
payload
.
getAction
())
{
case
HOURLY_REPORT:
HealthReport
report
=
getHourlyReport
(
payload
.
getDate
(),
payload
.
getDomain
());
model
.
setReport
(
report
);
break
;
case
HISTORY_REPORT:
HealthReport
historyReport
=
getHistoryReport
(
payload
.
getHistoryStartDate
(),
payload
.
getHistoryEndDate
(),
payload
.
getDomain
());
model
.
setReport
(
historyReport
);
break
;
}
m_jspViewer
.
view
(
ctx
,
model
);
}
private
HealthReport
getHistoryReport
(
Date
startDate
,
Date
endDate
,
String
domain
)
{
try
{
List
<
Dailyreport
>
reports
=
m_dailyReportDao
.
findAllByDomainNameDuration
(
startDate
,
endDate
,
domain
,
"health"
,
DailyreportEntity
.
READSET_FULL
);
HealthReportMerger
merger
=
new
HealthReportMerger
(
new
HealthReport
(
domain
));
HealthReport
healthReport
=
merger
.
getHealthReport
();
merger
.
setDuration
(
endDate
.
getTime
()
-
startDate
.
getTime
());
for
(
Dailyreport
report
:
reports
)
{
String
xml
=
report
.
getContent
();
HealthReport
model
=
DefaultSaxParser
.
parse
(
xml
);
model
.
accept
(
merger
);
healthReport
.
getDomainNames
().
addAll
(
model
.
getDomainNames
());
}
return
healthReport
;
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
HealthReport
(
domain
);
}
private
HealthReport
getHourlyReport
(
long
date
,
String
domain
)
{
try
{
List
<
Report
>
reports
=
m_reportDao
.
findAllByPeriodDomainName
(
new
Date
(
date
),
domain
,
"health"
,
ReportEntity
.
READSET_FULL
);
HealthReportMerger
merger
=
new
HealthReportMerger
(
new
HealthReport
(
domain
));
HealthReport
healthReport
=
merger
.
getHealthReport
();
merger
.
setDuration
(
ONE_HOUR
);
for
(
Report
report
:
reports
)
{
String
xml
=
report
.
getContent
();
HealthReport
model
=
DefaultSaxParser
.
parse
(
xml
);
model
.
accept
(
merger
);
healthReport
.
getDomainNames
().
addAll
(
model
.
getDomainNames
());
}
return
healthReport
;
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
HealthReport
(
domain
);
}
public
void
normalize
(
Model
model
,
Payload
payload
)
{
Action
action
=
payload
.
getAction
();
model
.
setAction
(
action
);
model
.
setPage
(
ReportPage
.
HEALTH
);
if
(
StringUtils
.
isEmpty
(
payload
.
getDomain
()))
{
payload
.
setDomain
(
m_manager
.
getConsoleDefaultDomain
());
}
model
.
setDisplayDomain
(
payload
.
getDomain
());
if
(
payload
.
getPeriod
().
isFuture
())
{
model
.
setLongDate
(
payload
.
getCurrentDate
());
}
else
{
model
.
setLongDate
(
payload
.
getDate
());
}
if
(
action
==
Action
.
HISTORY_REPORT
)
{
String
type
=
payload
.
getReportType
();
if
(
type
==
null
||
type
.
length
()
==
0
)
{
payload
.
setReportType
(
"day"
);
}
model
.
setReportType
(
payload
.
getReportType
());
payload
.
computeStartDate
();
if
(!
payload
.
isToday
())
{
payload
.
setYesterdayDefault
();
}
model
.
setLongDate
(
payload
.
getDate
());
model
.
setCustomDate
(
payload
.
getHistoryStartDate
(),
payload
.
getHistoryEndDate
());
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/
monthreport
/JspFile.java
→
cat-home/src/main/java/com/dianping/cat/report/page/
health
/JspFile.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.page.
monthreport
;
package
com.dianping.cat.report.page.
health
;
public
enum
JspFile
{
ALL
(
"/jsp/report/monthreportAll
.jsp"
),
HOURLY
(
"/jsp/report/health
.jsp"
),
VIEW
(
"/jsp/report/monthreport.jsp"
),
;
HISTORY
(
"/jsp/report/healthHistory.jsp"
),
;
private
String
m_path
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/
monthreport
/JspViewer.java
→
cat-home/src/main/java/com/dianping/cat/report/page/
health
/JspViewer.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.page.
monthreport
;
package
com.dianping.cat.report.page.
health
;
import
com.dianping.cat.report.ReportPage
;
import
com.site.web.mvc.view.BaseJspViewer
;
...
...
@@ -9,10 +9,11 @@ public class JspViewer extends BaseJspViewer<ReportPage, Action, Context, Model>
Action
action
=
model
.
getAction
();
switch
(
action
)
{
case
VIEW:
return
JspFile
.
VIEW
.
getPath
();
case
ALL:
return
JspFile
.
ALL
.
getPath
();
case
HOURLY_REPORT:
return
JspFile
.
HOURLY
.
getPath
();
case
HISTORY_REPORT:
return
JspFile
.
HISTORY
.
getPath
();
default
:
}
throw
new
RuntimeException
(
"Unknown action: "
+
action
);
...
...
cat-home/src/main/java/com/dianping/cat/report/page/
monthreport
/Model.java
→
cat-home/src/main/java/com/dianping/cat/report/page/
health
/Model.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.page.
monthreport
;
package
com.dianping.cat.report.page.
health
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.
Lis
t
;
import
java.util.
Se
t
;
import
com.dianping.cat.consumer.
monthreport.model.entity.Mon
thReport
;
import
com.dianping.cat.consumer.
health.model.entity.Heal
thReport
;
import
com.dianping.cat.report.page.AbstractReportModel
;
import
com.dianping.cat.report.view.StringSortHelper
;
public
class
Model
extends
AbstractReportModel
<
Action
,
Context
>
{
private
String
m_domain
;
private
MonthReport
m_report
;
private
MonthReport
m_reportLast
;
private
MonthReport
m_reportLastTwo
;
private
List
<
MonthReport
>
m_reports
;
private
HealthReport
m_report
;
public
Model
(
Context
ctx
)
{
super
(
ctx
);
...
...
@@ -25,63 +17,37 @@ public class Model extends AbstractReportModel<Action, Context> {
@Override
public
Action
getDefaultAction
()
{
return
Action
.
VIEW
;
return
Action
.
HOURLY_REPORT
;
}
@Override
public
String
getDomain
()
{
return
m_domain
;
if
(
m_report
!=
null
)
{
return
m_report
.
getDomain
();
}
return
getDisplayDomain
();
}
@Override
public
Collection
<
String
>
getDomains
()
{
if
(
m_report
!
=
null
)
{
List
<
String
>
domains
=
m_report
.
getDomains
();
if
(
m_report
=
=
null
)
{
ArrayList
<
String
>
arrayList
=
new
ArrayList
<
String
>
();
StringSortHelper
.
sortDomain
(
domains
);
return
domains
;
}
arrayList
.
add
(
getDomain
());
return
arrayList
;
}
else
{
Set
<
String
>
domainNames
=
m_report
.
getDomainNames
();
ArrayList
<
String
>
arrayList
=
new
ArrayList
<
String
>();
arrayList
.
add
(
getDomain
());
return
arrayList
;
return
StringSortHelper
.
sortDomain
(
domainNames
);
}
}
public
Mon
thReport
getReport
()
{
public
Heal
thReport
getReport
()
{
return
m_report
;
}
public
List
<
MonthReport
>
getReports
()
{
return
m_reports
;
}
public
void
setDomain
(
String
domain
)
{
m_domain
=
domain
;
}
public
void
setReport
(
MonthReport
report
)
{
public
void
setReport
(
HealthReport
report
)
{
m_report
=
report
;
}
public
void
setReports
(
List
<
MonthReport
>
reports
)
{
m_reports
=
reports
;
}
public
MonthReport
getReportLast
()
{
return
m_reportLast
;
}
public
void
setReportLast
(
MonthReport
reportLast
)
{
m_reportLast
=
reportLast
;
}
public
MonthReport
getReportLastTwo
()
{
return
m_reportLastTwo
;
}
public
void
setReportLastTwo
(
MonthReport
reportLastTwo
)
{
m_reportLastTwo
=
reportLastTwo
;
}
}
cat-home/src/main/java/com/dianping/cat/report/page/
monthreport
/Payload.java
→
cat-home/src/main/java/com/dianping/cat/report/page/
health
/Payload.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.page.
monthreport
;
package
com.dianping.cat.report.page.
health
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.page.AbstractReportPayload
;
...
...
@@ -6,17 +6,17 @@ import com.site.web.mvc.ActionContext;
import
com.site.web.mvc.payload.annotation.FieldMeta
;
public
class
Payload
extends
AbstractReportPayload
<
Action
>
{
public
Payload
()
{
super
(
ReportPage
.
HEALTH
);
}
private
ReportPage
m_page
;
@FieldMeta
(
"op"
)
private
Action
m_action
;
@FieldMeta
(
"domain"
)
private
String
m_domain
;
private
ReportPage
m_page
;
public
Payload
()
{
super
(
ReportPage
.
MONTHREPORT
);
public
void
setAction
(
String
action
)
{
m_action
=
Action
.
getByName
(
action
,
Action
.
HOURLY_REPORT
);
}
@Override
...
...
@@ -24,32 +24,20 @@ public class Payload extends AbstractReportPayload<Action> {
return
m_action
;
}
public
String
getDomain
()
{
return
m_domain
;
}
@Override
public
ReportPage
getPage
()
{
return
m_page
;
}
public
void
setAction
(
String
action
)
{
m_action
=
Action
.
getByName
(
action
,
Action
.
VIEW
);
}
public
void
setDomain
(
String
domain
)
{
m_domain
=
domain
;
}
@Override
public
void
setPage
(
String
page
)
{
m_page
=
ReportPage
.
getByName
(
page
,
ReportPage
.
MONTHREPORT
);
m_page
=
ReportPage
.
getByName
(
page
,
ReportPage
.
HEALTH
);
}
@Override
public
void
validate
(
ActionContext
<?>
ctx
)
{
if
(
m_action
==
null
)
{
m_action
=
Action
.
VIEW
;
m_action
=
Action
.
HOURLY_REPORT
;
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/model/database/HistoricalDatabaseService.java
浏览文件 @
b7f220ce
...
...
@@ -43,7 +43,7 @@ public class HistoricalDatabaseService extends BaseHistoricalModelService<Databa
}
private
DatabaseReport
getReportFromDatabase
(
long
timestamp
,
String
database
)
throws
Exception
{
List
<
Report
>
reports
=
m_reportDao
.
findAllByPeriodDomainTypeName
(
new
Date
(
timestamp
),
database
,
1
,
getName
(),
List
<
Report
>
reports
=
m_reportDao
.
findAllByPeriodDomainTypeName
(
new
Date
(
timestamp
),
database
,
2
,
getName
(),
ReportEntity
.
READSET_FULL
);
DatabaseReportMerger
merger
=
new
DatabaseReportMerger
(
new
DatabaseReport
(
database
));
...
...
cat-home/src/main/java/com/dianping/cat/report/page/monthreport/Handler.java
已删除
100644 → 0
浏览文件 @
c6a52ce6
package
com.dianping.cat.report.page.monthreport
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.List
;
import
javax.servlet.ServletException
;
import
org.xml.sax.SAXException
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.configuration.ServerConfigManager
;
import
com.dianping.cat.consumer.monthreport.model.entity.MonthReport
;
import
com.dianping.cat.consumer.monthreport.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Monthreport
;
import
com.dianping.cat.hadoop.dal.MonthreportDao
;
import
com.dianping.cat.hadoop.dal.MonthreportEntity
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
import
com.site.web.mvc.PageHandler
;
import
com.site.web.mvc.annotation.InboundActionMeta
;
import
com.site.web.mvc.annotation.OutboundActionMeta
;
import
com.site.web.mvc.annotation.PayloadMeta
;
public
class
Handler
implements
PageHandler
<
Context
>
{
@Inject
private
JspViewer
m_jspViewer
;
@Inject
private
MonthreportDao
m_monthreportDao
;
@Inject
private
ServerConfigManager
m_manager
;
private
MonthReport
buildMonthReport
(
String
domain
,
Date
start
)
throws
DalException
,
SAXException
,
IOException
{
try
{
Monthreport
report
=
m_monthreportDao
.
findByDomainPeriod
(
domain
,
start
,
MonthreportEntity
.
READSET_FULL
);
String
content
=
report
.
getContent
();
MonthReport
monthreport
=
DefaultSaxParser
.
parse
(
content
);
return
monthreport
;
}
catch
(
Exception
e
)
{
}
return
new
MonthReport
();
}
@Override
@PayloadMeta
(
Payload
.
class
)
@InboundActionMeta
(
name
=
"monthreport"
)
public
void
handleInbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
// display only, no action here
}
@Override
@OutboundActionMeta
(
name
=
"monthreport"
)
public
void
handleOutbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
Model
model
=
new
Model
(
ctx
);
Payload
payload
=
ctx
.
getPayload
();
normalize
(
payload
,
model
);
try
{
Action
action
=
payload
.
getAction
();
Date
start
=
payload
.
getHistoryStartDate
();
Date
end
=
payload
.
getHistoryEndDate
();
switch
(
action
)
{
case
VIEW:
MonthReport
report
=
buildMonthReport
(
payload
.
getDomain
(),
start
);
MonthReport
reportLast
=
buildMonthReport
(
payload
.
getDomain
(),
getLastMonthDate
(
start
,
-
1
));
MonthReport
reportLastTwo
=
buildMonthReport
(
payload
.
getDomain
(),
getLastMonthDate
(
start
,
-
2
));
// MonthReportFlagBuilder lastBuilder = new MonthReportFlagBuilder();
// lastBuilder.setLastMonthReport(last);
// lastBuilder.visitMonthReport(report);
//
// MonthReportFlagBuilder lastTwoBuilder = new MonthReportFlagBuilder();
// lastTwoBuilder.setLastMonthReport(lastTwo);
// lastTwoBuilder.visitMonthReport(last);
model
.
setReport
(
report
);
model
.
setReportLast
(
reportLast
);
model
.
setReportLastTwo
(
reportLastTwo
);
break
;
case
ALL:
List
<
MonthReport
>
reports
=
new
ArrayList
<
MonthReport
>();
List
<
String
>
domains
=
getAllDomains
(
start
,
end
);
for
(
String
domain
:
domains
)
{
MonthReport
buildProblemReport
=
buildMonthReport
(
domain
,
start
);
reports
.
add
(
buildProblemReport
);
}
model
.
setReports
(
reports
);
break
;
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
m_jspViewer
.
view
(
ctx
,
model
);
}
private
Date
getLastMonthDate
(
Date
date
,
int
step
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
cal
.
add
(
Calendar
.
MONTH
,
step
);
return
cal
.
getTime
();
}
public
MonthReport
buildMonthReportFlag
(
MonthReport
last
,
MonthReport
current
)
{
if
(
last
!=
null
)
{
MonthReportFlagBuilder
flagBuilder
=
new
MonthReportFlagBuilder
();
flagBuilder
.
setLastMonthReport
(
last
);
flagBuilder
.
visitMonthReport
(
current
);
}
return
current
;
}
private
List
<
String
>
getAllDomains
(
Date
start
,
Date
end
)
{
List
<
String
>
domains
=
new
ArrayList
<
String
>();
try
{
List
<
Monthreport
>
reports
=
m_monthreportDao
.
findByPeriod
(
start
,
MonthreportEntity
.
READSET_DOMAIN_PERIOD
);
for
(
Monthreport
report:
reports
){
domains
.
add
(
report
.
getDomain
());
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
domains
;
}
private
void
normalize
(
Payload
payload
,
Model
model
)
{
String
domain
=
payload
.
getDomain
();
if
(
domain
==
null
||
domain
.
length
()
==
0
)
{
payload
.
setDomain
(
m_manager
.
getConsoleDefaultDomain
());
}
model
.
setDomain
(
payload
.
getDomain
());
model
.
setAction
(
payload
.
getAction
());
payload
.
setReportType
(
"month"
);
payload
.
computeStartDate
();
model
.
setLongDate
(
payload
.
getDate
());
}
}
cat-home/src/main/java/com/dianping/cat/report/page/monthreport/MonthReportFlagBuilder.java
已删除
100644 → 0
浏览文件 @
c6a52ce6
package
com.dianping.cat.report.page.monthreport
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.consumer.monthreport.model.entity.BaseCacheInfo
;
import
com.dianping.cat.consumer.monthreport.model.entity.BaseInfo
;
import
com.dianping.cat.consumer.monthreport.model.entity.Call
;
import
com.dianping.cat.consumer.monthreport.model.entity.KvdbCache
;
import
com.dianping.cat.consumer.monthreport.model.entity.MemCache
;
import
com.dianping.cat.consumer.monthreport.model.entity.MonthReport
;
import
com.dianping.cat.consumer.monthreport.model.entity.ProblemInfo
;
import
com.dianping.cat.consumer.monthreport.model.entity.Service
;
import
com.dianping.cat.consumer.monthreport.model.entity.Sql
;
import
com.dianping.cat.consumer.monthreport.model.entity.Url
;
import
com.dianping.cat.consumer.monthreport.model.entity.WebCache
;
import
com.dianping.cat.consumer.monthreport.model.transform.BaseVisitor
;
public
class
MonthReportFlagBuilder
extends
BaseVisitor
{
private
MonthReport
m_lastMonthReport
;
private
String
m_currentCache
;
private
String
m_currentType
;
private
static
final
int
HIGH_GOOD
=
1
;
private
static
final
int
HIGH_BAD
=
2
;
private
static
final
int
LOW_GOOD
=
-
1
;
private
static
final
int
LOW_BAD
=
-
2
;
public
MonthReportFlagBuilder
setLastMonthReport
(
MonthReport
report
)
{
m_lastMonthReport
=
report
;
return
this
;
}
@Override
public
void
visitBaseCacheInfo
(
BaseCacheInfo
baseCacheInfo
)
{
try
{
BaseCacheInfo
lastCache
=
null
;
if
(
m_currentCache
.
equals
(
"kvdbCache"
))
{
lastCache
=
m_lastMonthReport
.
getKvdbCache
().
getBaseCacheInfo
();
}
else
if
(
m_currentCache
.
equals
(
"memCache"
))
{
lastCache
=
m_lastMonthReport
.
getMemCache
().
getBaseCacheInfo
();
}
else
if
(
m_currentCache
.
equals
(
"webCache"
))
{
lastCache
=
m_lastMonthReport
.
getWebCache
().
getBaseCacheInfo
();
}
else
{
throw
new
RuntimeException
(
"inter error in build cache flag!"
);
}
if
(
baseCacheInfo
.
getTotal
()
>
lastCache
.
getTotal
())
{
baseCacheInfo
.
setTotalFlag
(
HIGH_GOOD
);
}
else
if
(
baseCacheInfo
.
getTotal
()
<
lastCache
.
getTotal
())
{
baseCacheInfo
.
setTotalFlag
(
LOW_BAD
);
}
if
(
baseCacheInfo
.
getAvg
()
>
lastCache
.
getAvg
())
{
baseCacheInfo
.
setAvgFlag
(
HIGH_GOOD
);
}
else
if
(
baseCacheInfo
.
getAvg
()
<
lastCache
.
getAvg
())
{
baseCacheInfo
.
setAvgFlag
(
LOW_BAD
);
}
if
(
baseCacheInfo
.
getResponseTime
()
>
lastCache
.
getResponseTime
())
{
baseCacheInfo
.
setResponseTimeFlag
(
HIGH_BAD
);
}
else
if
(
baseCacheInfo
.
getResponseTime
()
<
lastCache
.
getResponseTime
())
{
baseCacheInfo
.
setResponseTimeFlag
(
LOW_GOOD
);
}
if
(
baseCacheInfo
.
getHitPercent
()
>
lastCache
.
getHitPercent
())
{
baseCacheInfo
.
setHitPercentFlag
(
HIGH_GOOD
);
}
else
if
(
baseCacheInfo
.
getHitPercent
()
<
lastCache
.
getHitPercent
())
{
baseCacheInfo
.
setHitPercentFlag
(
LOW_BAD
);
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
}
@Override
public
void
visitBaseInfo
(
BaseInfo
baseInfo
)
{
try
{
BaseInfo
lastBaseInfo
=
null
;
if
(
m_currentType
.
equals
(
"Call"
))
{
lastBaseInfo
=
m_lastMonthReport
.
getCall
().
getBaseInfo
();
}
else
if
(
m_currentType
.
equals
(
"URL"
))
{
lastBaseInfo
=
m_lastMonthReport
.
getUrl
().
getBaseInfo
();
}
else
if
(
m_currentType
.
equals
(
"Sql"
))
{
lastBaseInfo
=
m_lastMonthReport
.
getSql
().
getBaseInfo
();
}
else
if
(
m_currentType
.
equals
(
"Service"
))
{
lastBaseInfo
=
m_lastMonthReport
.
getService
().
getBaseInfo
();
}
else
{
throw
new
RuntimeException
(
"inter error in build baseInfo flag!"
);
}
if
(
baseInfo
.
getAvg
()
>
lastBaseInfo
.
getAvg
())
{
baseInfo
.
setAvgFlag
(
HIGH_GOOD
);
}
else
if
(
baseInfo
.
getAvg
()
<
lastBaseInfo
.
getAvg
())
{
baseInfo
.
setAvgFlag
(
LOW_BAD
);
}
if
(
baseInfo
.
getTotal
()
>
lastBaseInfo
.
getTotal
())
{
baseInfo
.
setTotalFlag
(
HIGH_GOOD
);
}
else
if
(
baseInfo
.
getTotal
()
<
lastBaseInfo
.
getTotal
())
{
baseInfo
.
setTotalFlag
(
LOW_BAD
);
}
if
(
baseInfo
.
getErrorTotal
()
>
lastBaseInfo
.
getErrorTotal
())
{
baseInfo
.
setErrorTotalFlag
(
HIGH_BAD
);
}
else
if
(
baseInfo
.
getErrorTotal
()
<
lastBaseInfo
.
getErrorTotal
())
{
baseInfo
.
setErrorTotalFlag
(
LOW_GOOD
);
}
if
(
baseInfo
.
getErrorAvg
()
>
lastBaseInfo
.
getErrorAvg
())
{
baseInfo
.
setErrorAvgFlag
(
HIGH_BAD
);
}
else
if
(
baseInfo
.
getErrorAvg
()
<
lastBaseInfo
.
getErrorAvg
())
{
baseInfo
.
setErrorAvgFlag
(
LOW_GOOD
);
}
if
(
baseInfo
.
getResponseTime
()
>
lastBaseInfo
.
getResponseTime
())
{
baseInfo
.
setResponseTimeFlag
(
HIGH_BAD
);
}
else
if
(
baseInfo
.
getResponseTime
()
<
lastBaseInfo
.
getResponseTime
())
{
baseInfo
.
setResponseTimeFlag
(
LOW_GOOD
);
}
if
(
baseInfo
.
getErrorPercent
()
>
lastBaseInfo
.
getErrorPercent
())
{
baseInfo
.
setErrorPercentFlag
(
HIGH_BAD
);
}
else
if
(
baseInfo
.
getErrorPercent
()
<
lastBaseInfo
.
getErrorPercent
())
{
baseInfo
.
setErrorPercentFlag
(
LOW_GOOD
);
}
if
(
baseInfo
.
getSuccessPercent
()
>
lastBaseInfo
.
getSuccessPercent
())
{
baseInfo
.
setSuccessPercentFlag
(
HIGH_GOOD
);
}
else
if
(
baseInfo
.
getSuccessPercent
()
<
lastBaseInfo
.
getSuccessPercent
())
{
baseInfo
.
setSuccessPercentFlag
(
LOW_BAD
);
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
}
@Override
public
void
visitCall
(
Call
call
)
{
m_currentType
=
"Call"
;
super
.
visitCall
(
call
);
}
@Override
public
void
visitKvdbCache
(
KvdbCache
kvdbCache
)
{
m_currentCache
=
"kvdbCache"
;
super
.
visitKvdbCache
(
kvdbCache
);
}
@Override
public
void
visitMemCache
(
MemCache
memCache
)
{
m_currentCache
=
"memCache"
;
super
.
visitMemCache
(
memCache
);
}
@Override
public
void
visitMonthReport
(
MonthReport
monthReport
)
{
super
.
visitMonthReport
(
monthReport
);
}
@Override
public
void
visitProblemInfo
(
ProblemInfo
problemInfo
)
{
try
{
ProblemInfo
lastProblemInfo
=
m_lastMonthReport
.
getProblemInfo
();
if
(
problemInfo
.
getExceptions
()
>
lastProblemInfo
.
getExceptions
())
{
problemInfo
.
setExceptionsFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getExceptions
()
<
lastProblemInfo
.
getExceptions
())
{
problemInfo
.
setExceptionsFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getAvgExceptions
()
>
lastProblemInfo
.
getAvgExceptions
())
{
problemInfo
.
setAvgExceptionsFlag
(
HIGH_GOOD
);
}
else
if
(
problemInfo
.
getAvgExceptions
()
<
lastProblemInfo
.
getAvgExceptions
())
{
problemInfo
.
setAvgExceptionsFlag
(
LOW_BAD
);
}
if
(
problemInfo
.
getLongSqls
()
>
lastProblemInfo
.
getLongSqls
())
{
problemInfo
.
setLongSqlsFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getLongSqls
()
<
lastProblemInfo
.
getLongSqls
())
{
problemInfo
.
setLongSqlsFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getAvgLongSqls
()
>
lastProblemInfo
.
getAvgLongSqls
())
{
problemInfo
.
setAvgLongSqlsFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getAvgLongSqls
()
<
lastProblemInfo
.
getAvgLongSqls
())
{
problemInfo
.
setAvgLongSqlsFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getLongSqlPercent
()
>
lastProblemInfo
.
getLongSqlPercent
())
{
problemInfo
.
setLongSqlPercentFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getLongSqlPercent
()
<
lastProblemInfo
.
getLongSqlPercent
())
{
problemInfo
.
setLongSqlPercentFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getLongUrls
()
>
lastProblemInfo
.
getLongUrls
())
{
problemInfo
.
setLongUrlsFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getLongUrls
()
<
lastProblemInfo
.
getLongUrls
())
{
problemInfo
.
setLongUrlsFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getAvgLongUrls
()
>
lastProblemInfo
.
getAvgLongUrls
())
{
problemInfo
.
setAvgLongUrlsFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getAvgLongUrls
()
<
lastProblemInfo
.
getAvgLongUrls
())
{
problemInfo
.
setAvgLongUrlsFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getLongUrlPercent
()
>
lastProblemInfo
.
getLongUrlPercent
())
{
problemInfo
.
setLongUrlPercentFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getLongUrlPercent
()
<
lastProblemInfo
.
getLongUrlPercent
())
{
problemInfo
.
setLongUrlPercentFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getLongCaches
()
>
lastProblemInfo
.
getLongCaches
())
{
problemInfo
.
setLongCachesFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getLongCaches
()
<
lastProblemInfo
.
getLongCaches
())
{
problemInfo
.
setLongCachesFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getAvgLongCaches
()
>
lastProblemInfo
.
getAvgLongCaches
())
{
problemInfo
.
setAvgLongCachesFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getAvgLongCaches
()
<
lastProblemInfo
.
getAvgLongCaches
())
{
problemInfo
.
setAvgLongCachesFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getLongCachePercent
()
>
lastProblemInfo
.
getLongCachePercent
())
{
problemInfo
.
setLongCachePercentFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getLongCachePercent
()
<
lastProblemInfo
.
getLongCachePercent
())
{
problemInfo
.
setLongCachePercentFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getLongServices
()
>
lastProblemInfo
.
getLongServices
())
{
problemInfo
.
setLongServicesFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getLongServices
()
<
lastProblemInfo
.
getLongServices
())
{
problemInfo
.
setLongServicesFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getAvgLongServices
()
>
lastProblemInfo
.
getAvgLongServices
())
{
problemInfo
.
setAvgLongServicesFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getAvgLongServices
()
<
lastProblemInfo
.
getAvgLongServices
())
{
problemInfo
.
setAvgLongServicesFlag
(
LOW_GOOD
);
}
if
(
problemInfo
.
getLongServicePercent
()
>
lastProblemInfo
.
getLongServicePercent
())
{
problemInfo
.
setLongServicePercentFlag
(
HIGH_BAD
);
}
else
if
(
problemInfo
.
getLongServicePercent
()
<
lastProblemInfo
.
getLongServicePercent
())
{
problemInfo
.
setLongServicePercentFlag
(
LOW_GOOD
);
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
}
@Override
public
void
visitService
(
Service
service
)
{
m_currentType
=
"Service"
;
super
.
visitService
(
service
);
}
@Override
public
void
visitSql
(
Sql
sql
)
{
m_currentType
=
"Sql"
;
super
.
visitSql
(
sql
);
}
@Override
public
void
visitUrl
(
Url
url
)
{
m_currentType
=
"URL"
;
super
.
visitUrl
(
url
);
}
@Override
public
void
visitWebCache
(
WebCache
webCache
)
{
m_currentCache
=
"webCache"
;
super
.
visitWebCache
(
webCache
);
}
}
cat-home/src/main/java/com/dianping/cat/report/page/task/Handler.java
浏览文件 @
b7f220ce
...
...
@@ -13,7 +13,7 @@ import com.dianping.cat.hadoop.dal.Task;
import
com.dianping.cat.hadoop.dal.TaskDao
;
import
com.dianping.cat.hadoop.dal.TaskEntity
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.task.ReportFacade
;
import
com.dianping.cat.report.task.
spi.
ReportFacade
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
import
com.site.web.mvc.PageHandler
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/DailyTaskProducer.java
浏览文件 @
b7f220ce
...
...
@@ -198,6 +198,7 @@ public class DailyTaskProducer implements Runnable, Initializable {
m_dailyReportNameSet
.
add
(
"matrix"
);
m_dailyReportNameSet
.
add
(
"cross"
);
m_dailyReportNameSet
.
add
(
"sql"
);
m_dailyReportNameSet
.
add
(
"health"
);
}
@Override
...
...
cat-home/src/main/java/com/dianping/cat/report/task/DefaultTaskConsumer.java
浏览文件 @
b7f220ce
...
...
@@ -11,6 +11,7 @@ import com.dianping.cat.configuration.NetworkInterfaceManager;
import
com.dianping.cat.hadoop.dal.Task
;
import
com.dianping.cat.hadoop.dal.TaskDao
;
import
com.dianping.cat.hadoop.dal.TaskEntity
;
import
com.dianping.cat.report.task.spi.ReportFacade
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/cross/CrossMerger.java
浏览文件 @
b7f220ce
...
...
@@ -9,8 +9,8 @@ import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import
com.dianping.cat.consumer.cross.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.report.page.model.cross.CrossReportMerger
;
import
com.dianping.cat.report.task.ReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.ReportMerger
;
public
class
CrossMerger
implements
ReportMerger
<
CrossReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/cross/CrossReportBuilder.java
浏览文件 @
b7f220ce
...
...
@@ -10,9 +10,9 @@ import com.dianping.cat.configuration.NetworkInterfaceManager;
import
com.dianping.cat.hadoop.dal.Dailyreport
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.task.AbstractReportBuilder
;
import
com.dianping.cat.report.task.ReportBuilder
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.AbstractReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/database/DatabaseMerger.java
浏览文件 @
b7f220ce
...
...
@@ -10,8 +10,8 @@ import com.dianping.cat.consumer.database.model.transform.DefaultSaxParser;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.report.page.model.database.DatabaseReportMerger
;
import
com.dianping.cat.report.task.ReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.ReportMerger
;
public
class
DatabaseMerger
implements
ReportMerger
<
DatabaseReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/database/DatabaseReportBuilder.java
浏览文件 @
b7f220ce
...
...
@@ -10,9 +10,9 @@ import com.dianping.cat.configuration.NetworkInterfaceManager;
import
com.dianping.cat.hadoop.dal.Dailyreport
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.task.AbstractReportBuilder
;
import
com.dianping.cat.report.task.ReportBuilder
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.AbstractReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/event/EventGraphCreator.java
浏览文件 @
b7f220ce
...
...
@@ -17,8 +17,8 @@ import com.dianping.cat.consumer.event.model.entity.EventType;
import
com.dianping.cat.consumer.event.model.entity.Range
;
import
com.dianping.cat.consumer.event.model.entity.Machine
;
import
com.dianping.cat.hadoop.dal.Graph
;
import
com.dianping.cat.report.task.GraphCreator
;
import
com.dianping.cat.report.task.GraphLine
;
import
com.dianping.cat.report.task.
spi.
GraphCreator
;
import
com.dianping.cat.report.task.
spi.
GraphLine
;
public
class
EventGraphCreator
implements
GraphCreator
<
EventReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/event/EventMerger.java
浏览文件 @
b7f220ce
...
...
@@ -13,8 +13,8 @@ import com.dianping.cat.consumer.event.model.entity.Machine;
import
com.dianping.cat.consumer.event.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.report.page.model.event.EventReportMerger
;
import
com.dianping.cat.report.task.ReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.ReportMerger
;
public
class
EventMerger
implements
ReportMerger
<
EventReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/event/EventReportBuilder.java
浏览文件 @
b7f220ce
...
...
@@ -13,9 +13,9 @@ import com.dianping.cat.hadoop.dal.Dailyreport;
import
com.dianping.cat.hadoop.dal.Graph
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.task.AbstractReportBuilder
;
import
com.dianping.cat.report.task.ReportBuilder
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.AbstractReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/health/HealthReportBuilder.java
0 → 100644
浏览文件 @
b7f220ce
package
com.dianping.cat.report.task.health
;
import
java.io.IOException
;
import
java.util.Date
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
org.xml.sax.SAXException
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.configuration.NetworkInterfaceManager
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.health.model.entity.HealthReport
;
import
com.dianping.cat.consumer.health.model.transform.DefaultXmlBuilder
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Dailyreport
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.page.model.event.EventReportMerger
;
import
com.dianping.cat.report.page.model.heartbeat.HeartbeatReportMerger
;
import
com.dianping.cat.report.page.model.problem.ProblemReportMerger
;
import
com.dianping.cat.report.page.model.transaction.TransactionReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.health.HealthServiceCollector.ServiceInfo
;
import
com.dianping.cat.report.task.spi.AbstractReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
public
class
HealthReportBuilder
extends
AbstractReportBuilder
implements
ReportBuilder
{
@Inject
private
HealthServiceCollector
m_serviceCollector
;
@Override
public
boolean
buildDailyReport
(
String
reportName
,
String
reportDomain
,
Date
reportPeriod
)
{
Date
endDate
=
TaskHelper
.
tomorrowZero
(
reportPeriod
);
Set
<
String
>
domainSet
=
new
HashSet
<
String
>();
getDomainSet
(
domainSet
,
reportPeriod
,
endDate
);
HealthReportMerger
merger
=
new
HealthReportMerger
(
new
HealthReport
(
reportDomain
));
List
<
Report
>
reports
=
null
;
try
{
reports
=
m_reportDao
.
findAllByDomainNameDuration
(
reportPeriod
,
endDate
,
reportDomain
,
reportName
,
ReportEntity
.
READSET_FULL
);
}
catch
(
DalException
e1
)
{
Cat
.
logError
(
e1
);
}
if
(
reports
!=
null
)
{
for
(
Report
report
:
reports
)
{
String
xml
=
report
.
getContent
();
try
{
HealthReport
model
=
com
.
dianping
.
cat
.
consumer
.
health
.
model
.
transform
.
DefaultSaxParser
.
parse
(
xml
);
model
.
accept
(
merger
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
}
}
String
content
=
merger
.
getHealthReport
().
toString
();
Dailyreport
report
=
m_dailyReportDao
.
createLocal
();
report
.
setContent
(
content
);
report
.
setCreationDate
(
new
Date
());
report
.
setDomain
(
reportDomain
);
report
.
setIp
(
NetworkInterfaceManager
.
INSTANCE
.
getLocalHostAddress
());
report
.
setName
(
reportName
);
report
.
setPeriod
(
reportPeriod
);
report
.
setType
(
1
);
return
false
;
}
private
HealthReport
buildHealthHourlyReport
(
String
reportDomain
,
Date
reportPeriod
)
throws
DalException
,
SAXException
,
IOException
{
TransactionReport
transactionReport
=
queryTransactionReport
(
reportDomain
,
reportPeriod
);
EventReport
eventReport
=
queryEventReport
(
reportDomain
,
reportPeriod
);
ProblemReport
problemReport
=
queryProblemReport
(
reportDomain
,
reportPeriod
);
HeartbeatReport
heartbeatReport
=
queryHeartbeatReport
(
reportDomain
,
reportPeriod
);
m_serviceCollector
.
buildCrossInfo
(
reportPeriod
.
getTime
());
Map
<
String
,
ServiceInfo
>
infos
=
m_serviceCollector
.
getServiceInfos
();
HealthReportCreator
healthReportCreator
=
new
HealthReportCreator
();
HealthReport
report
=
healthReportCreator
.
build
(
transactionReport
,
eventReport
,
problemReport
,
heartbeatReport
,
infos
);
return
report
;
}
@Override
public
boolean
buildHourReport
(
String
reportName
,
String
reportDomain
,
Date
reportPeriod
)
{
String
ip
=
NetworkInterfaceManager
.
INSTANCE
.
getLocalHostAddress
();
try
{
HealthReport
report
=
buildHealthHourlyReport
(
reportDomain
,
reportPeriod
);
DefaultXmlBuilder
builder
=
new
DefaultXmlBuilder
(
true
);
Report
r
=
m_reportDao
.
createLocal
();
String
xml
=
builder
.
buildXml
(
report
);
String
domain
=
report
.
getDomain
();
r
.
setName
(
"health"
);
r
.
setDomain
(
domain
);
r
.
setPeriod
(
reportPeriod
);
r
.
setIp
(
ip
);
r
.
setType
(
1
);
r
.
setContent
(
xml
);
m_reportDao
.
insert
(
r
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
return
false
;
}
return
true
;
}
private
EventReport
queryEventReport
(
String
domain
,
Date
reportPeriod
)
throws
DalException
,
SAXException
,
IOException
{
List
<
Report
>
reports
=
m_reportDao
.
findAllByPeriodDomainTypeName
(
reportPeriod
,
domain
,
1
,
"event"
,
ReportEntity
.
READSET_FULL
);
EventReportMerger
merger
=
new
EventReportMerger
(
new
EventReport
(
domain
));
merger
.
setAllIp
(
true
);
for
(
Report
report
:
reports
)
{
String
xml
=
report
.
getContent
();
EventReport
model
=
com
.
dianping
.
cat
.
consumer
.
event
.
model
.
transform
.
DefaultSaxParser
.
parse
(
xml
);
model
.
accept
(
merger
);
}
EventReport
eventReport
=
merger
.
getEventReport
();
return
eventReport
;
}
private
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
reportPeriod
)
throws
DalException
,
SAXException
,
IOException
{
List
<
Report
>
reports
=
m_reportDao
.
findAllByPeriodDomainTypeName
(
reportPeriod
,
domain
,
1
,
"heartbeat"
,
ReportEntity
.
READSET_FULL
);
HeartbeatReportMerger
merger
=
new
HeartbeatReportMerger
(
new
HeartbeatReport
(
domain
));
for
(
Report
report
:
reports
)
{
String
xml
=
report
.
getContent
();
HeartbeatReport
model
=
com
.
dianping
.
cat
.
consumer
.
heartbeat
.
model
.
transform
.
DefaultSaxParser
.
parse
(
xml
);
model
.
accept
(
merger
);
}
HeartbeatReport
heartbeatReport
=
merger
.
getHeartbeatReport
();
return
heartbeatReport
;
}
private
ProblemReport
queryProblemReport
(
String
domain
,
Date
reportPeriod
)
throws
DalException
,
SAXException
,
IOException
{
List
<
Report
>
reports
=
m_reportDao
.
findAllByPeriodDomainTypeName
(
reportPeriod
,
domain
,
1
,
"problem"
,
ReportEntity
.
READSET_FULL
);
ProblemReportMerger
merger
=
new
ProblemReportMerger
(
new
ProblemReport
(
domain
));
for
(
Report
report
:
reports
)
{
String
xml
=
report
.
getContent
();
ProblemReport
model
=
com
.
dianping
.
cat
.
consumer
.
problem
.
model
.
transform
.
DefaultSaxParser
.
parse
(
xml
);
model
.
accept
(
merger
);
}
ProblemReport
problemReport
=
merger
.
getProblemReport
();
return
problemReport
;
}
private
TransactionReport
queryTransactionReport
(
String
domain
,
Date
reportPeriod
)
throws
DalException
,
SAXException
,
IOException
{
List
<
Report
>
reports
=
m_reportDao
.
findAllByPeriodDomainTypeName
(
reportPeriod
,
domain
,
1
,
"transaction"
,
ReportEntity
.
READSET_FULL
);
TransactionReportMerger
merger
=
new
TransactionReportMerger
(
new
TransactionReport
(
domain
));
merger
.
setAllIp
(
true
);
for
(
Report
report
:
reports
)
{
String
xml
=
report
.
getContent
();
TransactionReport
model
=
DefaultSaxParser
.
parse
(
xml
);
model
.
accept
(
merger
);
}
TransactionReport
transactionReport
=
merger
.
getTransactionReport
();
return
transactionReport
;
}
@Override
public
boolean
redoDailyReport
(
String
reportName
,
String
reportDomain
,
Date
reportPeriod
)
{
return
true
;
}
@Override
public
boolean
redoHourReport
(
String
reportName
,
String
reportDomain
,
Date
reportPeriod
)
{
return
true
;
}
}
cat-home/src/main/java/com/dianping/cat/report/task/
monthreport/MonthReportBuilde
r.java
→
cat-home/src/main/java/com/dianping/cat/report/task/
health/HealthReportCreato
r.java
浏览文件 @
b7f220ce
此差异已折叠。
点击以展开。
cat-home/src/main/java/com/dianping/cat/report/task/health/HealthReportMerger.java
0 → 100644
浏览文件 @
b7f220ce
package
com.dianping.cat.report.task.health
;
import
com.dianping.cat.consumer.health.model.entity.BaseCacheInfo
;
import
com.dianping.cat.consumer.health.model.entity.BaseInfo
;
import
com.dianping.cat.consumer.health.model.entity.HealthReport
;
import
com.dianping.cat.consumer.health.model.transform.DefaultMerger
;
public
class
HealthReportMerger
extends
DefaultMerger
{
private
double
m_duration
=
0
;
public
HealthReportMerger
(
HealthReport
healthReport
)
{
super
(
healthReport
);
}
@Override
protected
void
mergeBaseCacheInfo
(
BaseCacheInfo
old
,
BaseCacheInfo
baseCacheInfo
)
{
double
totalTime
=
old
.
getTotal
()
*
old
.
getResponseTime
()
+
baseCacheInfo
.
getTotal
()
*
baseCacheInfo
.
getResponseTime
();
long
totalCount
=
old
.
getTotal
()
+
baseCacheInfo
.
getTotal
();
double
hitNumber
=
old
.
getTotal
()
*
old
.
getHitPercent
()
+
baseCacheInfo
.
getTotal
()
*
baseCacheInfo
.
getHitPercent
();
old
.
setTotal
(
totalCount
);
if
(
totalCount
>
0
)
{
old
.
setResponseTime
(
totalTime
/
totalCount
);
old
.
setHitPercent
(
hitNumber
/
totalCount
);
}
}
@Override
protected
void
mergeBaseInfo
(
BaseInfo
old
,
BaseInfo
baseInfo
)
{
long
totalCount
=
old
.
getTotal
()
+
baseInfo
.
getTotal
();
double
totalTime
=
old
.
getTotal
()
*
old
.
getResponseTime
()
+
baseInfo
.
getTotal
()
*
baseInfo
.
getResponseTime
();
long
errorCount
=
old
.
getErrorTotal
()
+
baseInfo
.
getErrorTotal
();
old
.
setTotal
(
totalCount
);
if
(
totalCount
>
0
)
{
old
.
setResponseTime
(
totalTime
/
totalCount
);
old
.
setErrorPercent
((
double
)
errorCount
/
totalCount
);
old
.
setSuccessPercent
(
1
-
old
.
getErrorPercent
());
}
old
.
setErrorTotal
(
errorCount
);
old
.
setTps
(
totalCount
/
m_duration
);
}
public
HealthReportMerger
setDuration
(
long
time
)
{
m_duration
=
time
;
return
this
;
}
@Override
public
void
visitHealthReport
(
HealthReport
healthReport
)
{
super
.
visitHealthReport
(
healthReport
);
}
}
cat-home/src/main/java/com/dianping/cat/report/task/health/HealthServiceCollector.java
0 → 100644
浏览文件 @
b7f220ce
package
com.dianping.cat.report.task.health
;
import
java.util.Collection
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.cross.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportDao
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.report.page.cross.DomainManager
;
import
com.dianping.cat.report.page.cross.display.ProjectInfo
;
import
com.dianping.cat.report.page.cross.display.TypeDetailInfo
;
import
com.dianping.cat.report.page.model.cross.CrossReportMerger
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
public
class
HealthServiceCollector
{
private
static
final
long
ONE_HOUR
=
60
*
60
*
1000L
;
@Inject
private
ReportDao
m_reportDao
;
@Inject
private
DomainManager
m_domainManager
;
private
long
m_timestamp
;
private
Map
<
String
,
ServiceInfo
>
m_serviceInfos
=
new
HashMap
<
String
,
ServiceInfo
>();
private
void
addCallinfo
(
TypeDetailInfo
info
)
{
String
projectName
=
info
.
getProjectName
();
if
(
projectName
.
equals
(
"UnknownProject"
)
||
projectName
.
equals
(
"AllServers"
))
{
return
;
}
long
totalCount
=
info
.
getTotalCount
();
double
avgTime
=
info
.
getAvg
();
long
failCount
=
info
.
getFailureCount
();
ServiceInfo
call
=
m_serviceInfos
.
get
(
projectName
);
if
(
call
==
null
)
{
call
=
new
ServiceInfo
();
m_serviceInfos
.
put
(
projectName
,
call
);
call
.
setTotalCount
(
totalCount
);
call
.
setFailCount
(
failCount
);
call
.
setAvgTime
(
avgTime
);
}
else
{
double
sum
=
totalCount
*
avgTime
+
call
.
getTotalCount
()
*
call
.
getAvgTime
();
long
allTotalCount
=
call
.
getTotalCount
()
+
totalCount
;
call
.
setTotalCount
(
allTotalCount
);
call
.
setFailCount
(
call
.
getFailCount
()
+
failCount
);
call
.
setAvgTime
(
sum
/
allTotalCount
);
}
}
public
synchronized
void
buildCrossInfo
(
long
time
)
{
if
(
m_timestamp
!=
time
)
{
m_serviceInfos
.
clear
();
Set
<
String
>
domains
=
queryAllDomains
(
new
Date
(
time
));
for
(
String
domain
:
domains
)
{
CrossReport
report
=
queryCrossReport
(
new
Date
(
time
),
domain
);
ProjectInfo
projectInfo
=
new
ProjectInfo
(
ONE_HOUR
);
projectInfo
.
setDomainManager
(
m_domainManager
);
projectInfo
.
setClientIp
(
CatString
.
ALL_IP
);
projectInfo
.
visitCrossReport
(
report
);
Collection
<
TypeDetailInfo
>
calls
=
projectInfo
.
getCallProjectsInfo
();
for
(
TypeDetailInfo
info
:
calls
)
{
addCallinfo
(
info
);
}
}
}
}
private
Set
<
String
>
queryAllDomains
(
Date
date
)
{
List
<
Report
>
historyReports
=
null
;
try
{
historyReports
=
m_reportDao
.
findAllByDomainNameDuration
(
date
,
new
Date
(
date
.
getTime
()
+
ONE_HOUR
),
null
,
"cross"
,
ReportEntity
.
READSET_DOMAIN_NAME
);
}
catch
(
DalException
e
)
{
Cat
.
logError
(
e
);
}
Set
<
String
>
domainNames
=
new
HashSet
<
String
>();
if
(
historyReports
!=
null
)
{
for
(
Report
report
:
historyReports
)
{
domainNames
.
add
(
report
.
getDomain
());
}
}
return
domainNames
;
}
private
CrossReport
queryCrossReport
(
Date
date
,
String
domain
)
{
CrossReportMerger
merger
=
new
CrossReportMerger
(
new
CrossReport
(
domain
));
try
{
List
<
Report
>
reports
=
m_reportDao
.
findAllByPeriodDomainTypeName
(
date
,
domain
,
1
,
"cross"
,
ReportEntity
.
READSET_FULL
);
for
(
Report
report
:
reports
)
{
String
xml
=
report
.
getContent
();
CrossReport
model
=
DefaultSaxParser
.
parse
(
xml
);
model
.
accept
(
merger
);
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
CrossReport
crossReport
=
merger
.
getCrossReport
();
return
crossReport
;
}
public
Map
<
String
,
ServiceInfo
>
getServiceInfos
()
{
return
m_serviceInfos
;
}
public
static
class
ServiceInfo
{
private
long
m_totalCount
;
private
long
m_failCount
;
private
double
m_avgTime
;
public
double
getAvgTime
()
{
return
m_avgTime
;
}
public
long
getFailCount
()
{
return
m_failCount
;
}
public
long
getTotalCount
()
{
return
m_totalCount
;
}
public
void
setAvgTime
(
double
avgTime
)
{
m_avgTime
=
avgTime
;
}
public
void
setFailCount
(
long
failCount
)
{
m_failCount
=
failCount
;
}
public
void
setTotalCount
(
long
totalCount
)
{
m_totalCount
=
totalCount
;
}
}
}
cat-home/src/main/java/com/dianping/cat/report/task/heartbeat/HeartbeatGraphCreator.java
浏览文件 @
b7f220ce
...
...
@@ -15,9 +15,9 @@ import com.dianping.cat.consumer.heartbeat.model.entity.Disk;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.Period
;
import
com.dianping.cat.hadoop.dal.Graph
;
import
com.dianping.cat.report.task.GraphCreator
;
import
com.dianping.cat.report.task.GraphLine
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.GraphCreator
;
import
com.dianping.cat.report.task.spi.GraphLine
;
public
class
HeartbeatGraphCreator
implements
GraphCreator
<
HeartbeatReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/heartbeat/HeartbeatMerger.java
浏览文件 @
b7f220ce
...
...
@@ -11,7 +11,7 @@ import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import
com.dianping.cat.consumer.heartbeat.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.report.page.model.heartbeat.HeartbeatReportMerger
;
import
com.dianping.cat.report.task.ReportMerger
;
import
com.dianping.cat.report.task.
spi.
ReportMerger
;
public
class
HeartbeatMerger
implements
ReportMerger
<
HeartbeatReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/heartbeat/HeartbeatReportBuilder.java
浏览文件 @
b7f220ce
...
...
@@ -9,8 +9,8 @@ import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import
com.dianping.cat.hadoop.dal.Graph
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.task.AbstractReportBuilder
;
import
com.dianping.cat.report.task.ReportBuilder
;
import
com.dianping.cat.report.task.
spi.
AbstractReportBuilder
;
import
com.dianping.cat.report.task.
spi.
ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/matrix/MatrixMerger.java
浏览文件 @
b7f220ce
...
...
@@ -9,8 +9,8 @@ import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import
com.dianping.cat.consumer.matrix.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.report.page.model.matrix.MatrixReportMerger
;
import
com.dianping.cat.report.task.ReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.ReportMerger
;
public
class
MatrixMerger
implements
ReportMerger
<
MatrixReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/matrix/MatrixReportBuilder.java
浏览文件 @
b7f220ce
...
...
@@ -10,9 +10,9 @@ import com.dianping.cat.configuration.NetworkInterfaceManager;
import
com.dianping.cat.hadoop.dal.Dailyreport
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.task.AbstractReportBuilder
;
import
com.dianping.cat.report.task.ReportBuilder
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.AbstractReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/monthreport/MonthReportBuilderTask.java
已删除
100644 → 0
浏览文件 @
c6a52ce6
package
com.dianping.cat.report.task.monthreport
;
import
java.io.IOException
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
import
org.xml.sax.SAXException
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.monthreport.model.entity.MonthReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Dailyreport
;
import
com.dianping.cat.hadoop.dal.DailyreportDao
;
import
com.dianping.cat.hadoop.dal.DailyreportEntity
;
import
com.dianping.cat.hadoop.dal.Monthreport
;
import
com.dianping.cat.hadoop.dal.MonthreportDao
;
import
com.dianping.cat.hadoop.dal.MonthreportEntity
;
import
com.dianping.cat.message.Transaction
;
import
com.dianping.cat.report.page.model.event.EventReportMerger
;
import
com.dianping.cat.report.page.model.problem.ProblemReportMerger
;
import
com.dianping.cat.report.page.model.transaction.TransactionReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
public
class
MonthReportBuilderTask
implements
Runnable
{
private
static
final
long
DAY
=
24
*
60
*
60
*
1000L
;
@Inject
private
DailyreportDao
m_dailyreportDao
;
@Inject
private
MonthreportDao
m_monthreportDao
;
public
MonthReport
buildMonthReport
(
String
domain
,
Date
start
,
Date
end
)
throws
DalException
,
SAXException
,
IOException
{
TransactionReport
transactionReport
=
getTransactionReport
(
start
,
end
,
domain
);
EventReport
eventReport
=
getEventReport
(
start
,
end
,
domain
);
ProblemReport
problemReport
=
getProblemReport
(
start
,
end
,
domain
);
MonthReportBuilder
builder
=
new
MonthReportBuilder
();
return
builder
.
build
(
transactionReport
,
eventReport
,
problemReport
);
}
private
Set
<
String
>
getAllDomains
(
final
Date
start
,
final
Date
end
)
throws
DalException
{
Set
<
String
>
domains
=
new
HashSet
<
String
>();
List
<
Dailyreport
>
historyReports
=
m_dailyreportDao
.
findAllByPeriod
(
start
,
end
,
DailyreportEntity
.
READSET_DOMAIN_NAME
);
for
(
Dailyreport
report
:
historyReports
)
{
domains
.
add
(
report
.
getDomain
());
}
return
domains
;
}
private
EventReport
getEventReport
(
final
Date
start
,
final
Date
end
,
String
domain
)
throws
DalException
,
SAXException
,
IOException
{
long
startLong
=
Long
.
MAX_VALUE
;
long
endLong
=
0
;
long
startTime
=
start
.
getTime
();
int
days
=
(
int
)
((
end
.
getTime
()
-
startTime
)
/
DAY
);
final
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
EventReportMerger
merger
=
new
EventReportMerger
(
new
EventReport
(
domain
));
for
(
int
i
=
0
;
i
<
days
;
i
++)
{
Dailyreport
report
=
null
;
try
{
report
=
m_dailyreportDao
.
findByNameDomainPeriod
(
new
Date
(
startTime
+
i
*
DAY
),
domain
,
"event"
,
DailyreportEntity
.
READSET_FULL
);
}
catch
(
DalException
e
)
{
}
if
(
report
!=
null
)
{
String
xml
=
report
.
getContent
();
EventReport
reportModel
=
com
.
dianping
.
cat
.
consumer
.
event
.
model
.
transform
.
DefaultSaxParser
.
parse
(
xml
);
startLong
=
Math
.
min
(
startLong
,
reportModel
.
getStartTime
().
getTime
());
endLong
=
Math
.
max
(
startLong
,
reportModel
.
getEndTime
().
getTime
());
reportModel
.
accept
(
merger
);
}
else
{
Cat
.
getProducer
().
logEvent
(
"MonthReport"
,
"event"
,
"NotFound"
,
domain
+
sdf
.
format
(
new
Date
(
startTime
+
i
*
DAY
)));
}
}
EventReport
eventReport
=
merger
.
getEventReport
();
eventReport
.
setStartTime
(
new
Date
(
startLong
));
eventReport
.
setEndTime
(
new
Date
(
endLong
));
return
eventReport
;
}
public
Date
getMonthFirstDay
(
int
step
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cal
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
cal
.
set
(
Calendar
.
MINUTE
,
0
);
cal
.
set
(
Calendar
.
SECOND
,
0
);
cal
.
set
(
Calendar
.
MILLISECOND
,
0
);
cal
.
add
(
Calendar
.
MONTH
,
step
);
return
cal
.
getTime
();
}
private
List
<
String
>
getMonthReportCreatedDomin
(
Date
date
)
{
List
<
String
>
domains
=
new
ArrayList
<
String
>();
try
{
List
<
Monthreport
>
monthreports
=
m_monthreportDao
.
findByPeriod
(
date
,
MonthreportEntity
.
READSET_DOMAIN_PERIOD
);
for
(
Monthreport
report
:
monthreports
)
{
domains
.
add
(
report
.
getDomain
());
}
}
catch
(
DalException
e
)
{
e
.
printStackTrace
();
}
return
domains
;
}
private
ProblemReport
getProblemReport
(
final
Date
start
,
final
Date
end
,
String
domain
)
throws
DalException
,
SAXException
,
IOException
{
long
startLong
=
Long
.
MAX_VALUE
;
long
endLong
=
0
;
long
startTime
=
start
.
getTime
();
int
days
=
(
int
)
((
end
.
getTime
()
-
startTime
)
/
DAY
);
final
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
ProblemReportMerger
merger
=
new
ProblemReportMerger
(
new
ProblemReport
(
domain
));
for
(
int
i
=
0
;
i
<
days
;
i
++)
{
Dailyreport
report
=
null
;
try
{
report
=
m_dailyreportDao
.
findByNameDomainPeriod
(
new
Date
(
startTime
+
i
*
DAY
),
domain
,
"problem"
,
DailyreportEntity
.
READSET_FULL
);
}
catch
(
DalException
e
)
{
}
if
(
report
!=
null
)
{
String
xml
=
report
.
getContent
();
ProblemReport
reportModel
=
com
.
dianping
.
cat
.
consumer
.
problem
.
model
.
transform
.
DefaultSaxParser
.
parse
(
xml
);
startLong
=
Math
.
min
(
startLong
,
reportModel
.
getStartTime
().
getTime
());
endLong
=
Math
.
max
(
startLong
,
reportModel
.
getEndTime
().
getTime
());
reportModel
.
accept
(
merger
);
}
else
{
Cat
.
getProducer
().
logEvent
(
"MonthReport"
,
"transaction"
,
"NotFound"
,
domain
+
sdf
.
format
(
new
Date
(
startTime
+
i
*
DAY
)));
}
}
ProblemReport
problemReport
=
merger
.
getProblemReport
();
problemReport
.
setStartTime
(
new
Date
(
startLong
));
problemReport
.
setEndTime
(
new
Date
(
endLong
));
return
problemReport
;
}
private
long
getSleepTime
()
{
long
currentTime
=
System
.
currentTimeMillis
();
long
nextDay
=
TaskHelper
.
tomorrowZero
(
new
Date
()).
getTime
()
+
1000
*
60
*
10
;
return
nextDay
-
currentTime
;
}
private
TransactionReport
getTransactionReport
(
final
Date
start
,
final
Date
end
,
String
domain
)
throws
DalException
,
SAXException
,
IOException
{
long
startLong
=
Long
.
MAX_VALUE
;
long
endLong
=
0
;
long
startTime
=
start
.
getTime
();
int
days
=
(
int
)
((
end
.
getTime
()
-
startTime
)
/
DAY
);
final
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
TransactionReportMerger
merger
=
new
TransactionReportMerger
(
new
TransactionReport
(
domain
));
for
(
int
i
=
0
;
i
<
days
;
i
++)
{
Dailyreport
report
=
null
;
try
{
report
=
m_dailyreportDao
.
findByNameDomainPeriod
(
new
Date
(
startTime
+
i
*
DAY
),
domain
,
"transaction"
,
DailyreportEntity
.
READSET_FULL
);
}
catch
(
DalException
e
)
{
}
if
(
report
!=
null
)
{
String
xml
=
report
.
getContent
();
TransactionReport
reportModel
=
DefaultSaxParser
.
parse
(
xml
);
startLong
=
Math
.
min
(
startLong
,
reportModel
.
getStartTime
().
getTime
());
endLong
=
Math
.
max
(
startLong
,
reportModel
.
getEndTime
().
getTime
());
reportModel
.
accept
(
merger
);
}
else
{
Cat
.
getProducer
().
logEvent
(
"MonthReport"
,
"transaction"
,
"NotFound"
,
domain
+
sdf
.
format
(
new
Date
(
startTime
+
i
*
DAY
)));
}
}
TransactionReport
transactionReport
=
merger
.
getTransactionReport
();
transactionReport
.
setStartTime
(
new
Date
(
startLong
));
transactionReport
.
setEndTime
(
new
Date
(
endLong
));
return
transactionReport
;
}
public
void
run
()
{
while
(
true
)
{
try
{
Date
lastMonth
=
getMonthFirstDay
(-
1
);
Date
currentMonth
=
getMonthFirstDay
(
0
);
Set
<
String
>
allDomains
=
getAllDomains
(
lastMonth
,
currentMonth
);
List
<
String
>
createdDomains
=
getMonthReportCreatedDomin
(
lastMonth
);
for
(
String
temp
:
createdDomains
)
{
allDomains
.
remove
(
temp
);
}
for
(
String
domain
:
allDomains
)
{
Transaction
t
=
Cat
.
newTransaction
(
"MonthReport"
,
domain
);
try
{
MonthReport
report
=
buildMonthReport
(
domain
,
lastMonth
,
currentMonth
);
Monthreport
entity
=
m_monthreportDao
.
createLocal
();
entity
.
setContent
(
report
.
toString
());
entity
.
setDomain
(
domain
);
entity
.
setName
(
"monthreport"
);
entity
.
setPeriod
(
lastMonth
);
m_monthreportDao
.
insert
(
entity
);
t
.
setStatus
(
Transaction
.
SUCCESS
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
t
.
setStatus
(
e
);
}
finally
{
t
.
complete
();
}
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
try
{
long
sleepTime
=
getSleepTime
();
Thread
.
sleep
(
sleepTime
);
}
catch
(
InterruptedException
e
)
{
// Ignore
}
}
}
}
cat-home/src/main/java/com/dianping/cat/report/task/problem/ProblemGraphCreator.java
浏览文件 @
b7f220ce
...
...
@@ -15,9 +15,9 @@ import com.dianping.cat.consumer.problem.model.entity.JavaThread;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.problem.model.entity.Segment
;
import
com.dianping.cat.hadoop.dal.Graph
;
import
com.dianping.cat.report.task.GraphCreator
;
import
com.dianping.cat.report.task.GraphLine
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.GraphCreator
;
import
com.dianping.cat.report.task.spi.GraphLine
;
public
class
ProblemGraphCreator
implements
GraphCreator
<
ProblemReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/problem/ProblemMerger.java
浏览文件 @
b7f220ce
...
...
@@ -12,8 +12,8 @@ import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import
com.dianping.cat.consumer.problem.model.transform.DefaultSaxParser
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.report.page.model.problem.ProblemReportMerger
;
import
com.dianping.cat.report.task.ReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.ReportMerger
;
public
class
ProblemMerger
implements
ReportMerger
<
ProblemReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/problem/ProblemReportBuilder.java
浏览文件 @
b7f220ce
...
...
@@ -13,9 +13,9 @@ import com.dianping.cat.hadoop.dal.Dailyreport;
import
com.dianping.cat.hadoop.dal.Graph
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.task.AbstractReportBuilder
;
import
com.dianping.cat.report.task.ReportBuilder
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.AbstractReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/AbstractReportBuilder.java
→
cat-home/src/main/java/com/dianping/cat/report/task/
spi/
AbstractReportBuilder.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.task
;
package
com.dianping.cat.report.task
.spi
;
import
java.util.ArrayList
;
import
java.util.Date
;
...
...
@@ -28,12 +28,12 @@ public abstract class AbstractReportBuilder {
protected
ReportDao
m_reportDao
;
protected
void
clearDailyReport
(
Dailyreport
report
)
throws
DalException
{
this
.
m_dailyReportDao
.
deleteByDomainNamePeriod
(
report
);
m_dailyReportDao
.
deleteByDomainNamePeriod
(
report
);
}
protected
void
clearHourlyGraphs
(
List
<
Graph
>
graphs
)
throws
DalException
{
for
(
Graph
graph
:
graphs
)
{
this
.
m_graphDao
.
deleteByDomainNamePeriodIp
(
graph
);
m_graphDao
.
deleteByDomainNamePeriodIp
(
graph
);
}
}
...
...
cat-home/src/main/java/com/dianping/cat/report/task/GraphCreator.java
→
cat-home/src/main/java/com/dianping/cat/report/task/
spi/
GraphCreator.java
浏览文件 @
b7f220ce
/**
*
*/
package
com.dianping.cat.report.task
;
package
com.dianping.cat.report.task
.spi
;
import
java.util.Date
;
import
java.util.List
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/GraphLine.java
→
cat-home/src/main/java/com/dianping/cat/report/task/
spi/
GraphLine.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.task
;
package
com.dianping.cat.report.task
.spi
;
public
final
class
GraphLine
{
public
long
failCount
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/ReportBuilder.java
→
cat-home/src/main/java/com/dianping/cat/report/task/
spi/
ReportBuilder.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.task
;
package
com.dianping.cat.report.task
.spi
;
import
java.util.Date
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/ReportFacade.java
→
cat-home/src/main/java/com/dianping/cat/report/task/
spi/
ReportFacade.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.task
;
package
com.dianping.cat.report.task
.spi
;
import
java.util.Date
;
import
java.util.HashMap
;
...
...
@@ -16,6 +16,7 @@ import com.dianping.cat.hadoop.dal.TaskEntity;
import
com.dianping.cat.report.task.cross.CrossReportBuilder
;
import
com.dianping.cat.report.task.database.DatabaseReportBuilder
;
import
com.dianping.cat.report.task.event.EventReportBuilder
;
import
com.dianping.cat.report.task.health.HealthReportBuilder
;
import
com.dianping.cat.report.task.heartbeat.HeartbeatReportBuilder
;
import
com.dianping.cat.report.task.matrix.MatrixReportBuilder
;
import
com.dianping.cat.report.task.problem.ProblemReportBuilder
;
...
...
@@ -53,6 +54,9 @@ public class ReportFacade implements LogEnabled, Initializable {
@Inject
private
SqlReportBuilder
m_sqlReportBuilder
;
@Inject
private
HealthReportBuilder
m_healthReportBuilder
;
@Inject
private
TaskDao
m_taskDao
;
...
...
@@ -103,6 +107,7 @@ public class ReportFacade implements LogEnabled, Initializable {
m_reportBuilders
.
put
(
"cross"
,
m_crossReportBuilder
);
m_reportBuilders
.
put
(
"database"
,
m_databaseReportBuilder
);
m_reportBuilders
.
put
(
"sql"
,
m_sqlReportBuilder
);
m_reportBuilders
.
put
(
"health"
,
m_healthReportBuilder
);
}
public
boolean
redoTask
(
int
taskID
)
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/ReportMerger.java
→
cat-home/src/main/java/com/dianping/cat/report/task/
spi/
ReportMerger.java
浏览文件 @
b7f220ce
/**
*
*/
package
com.dianping.cat.report.task
;
package
com.dianping.cat.report.task
.spi
;
import
java.util.List
;
import
java.util.Set
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/sql/SqlMerger.java
浏览文件 @
b7f220ce
...
...
@@ -10,8 +10,8 @@ import com.dianping.cat.consumer.sql.model.transform.DefaultSaxParser;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.report.page.model.sql.SqlReportMerger
;
import
com.dianping.cat.report.task.ReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.ReportMerger
;
public
class
SqlMerger
implements
ReportMerger
<
SqlReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/sql/SqlReportBuilder.java
浏览文件 @
b7f220ce
...
...
@@ -10,9 +10,9 @@ import com.dianping.cat.configuration.NetworkInterfaceManager;
import
com.dianping.cat.hadoop.dal.Dailyreport
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.task.AbstractReportBuilder
;
import
com.dianping.cat.report.task.ReportBuilder
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.AbstractReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionGraphCreator.java
浏览文件 @
b7f220ce
...
...
@@ -17,8 +17,8 @@ import com.dianping.cat.consumer.transaction.model.entity.TransactionName;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionType
;
import
com.dianping.cat.hadoop.dal.Graph
;
import
com.dianping.cat.report.task.GraphCreator
;
import
com.dianping.cat.report.task.GraphLine
;
import
com.dianping.cat.report.task.
spi.
GraphCreator
;
import
com.dianping.cat.report.task.
spi.
GraphLine
;
public
class
TransactionGraphCreator
implements
GraphCreator
<
TransactionReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionMerger.java
浏览文件 @
b7f220ce
...
...
@@ -13,8 +13,8 @@ import com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.message.Event
;
import
com.dianping.cat.report.page.model.transaction.TransactionReportMerger
;
import
com.dianping.cat.report.task.ReportMerger
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.ReportMerger
;
public
class
TransactionMerger
implements
ReportMerger
<
TransactionReport
>
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/transaction/TransactionReportBuilder.java
浏览文件 @
b7f220ce
...
...
@@ -13,9 +13,9 @@ import com.dianping.cat.hadoop.dal.Dailyreport;
import
com.dianping.cat.hadoop.dal.Graph
;
import
com.dianping.cat.hadoop.dal.Report
;
import
com.dianping.cat.hadoop.dal.ReportEntity
;
import
com.dianping.cat.report.task.AbstractReportBuilder
;
import
com.dianping.cat.report.task.ReportBuilder
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.AbstractReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportBuilder
;
import
com.site.dal.jdbc.DalException
;
import
com.site.lookup.annotation.Inject
;
...
...
cat-home/src/main/java/com/dianping/cat/report/view/NavigationBar.java
浏览文件 @
b7f220ce
...
...
@@ -33,9 +33,9 @@ public class NavigationBar {
ReportPage
.
LOGVIEW
,
ReportPage
.
MONTHREPORT
,
ReportPage
.
DATABASE
,
ReportPage
.
DATABASE
ReportPage
.
HEALTH
};
}
...
...
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
b7f220ce
...
...
@@ -26,18 +26,6 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.monthreport.MonthReportBuilderTask
</role>
<implementation>
com.dianping.cat.report.task.monthreport.MonthReportBuilderTask
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.hadoop.dal.MonthreportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.DailyreportDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.TaskConsumer
</role>
<implementation>
com.dianping.cat.report.task.DefaultTaskConsumer
</implementation>
...
...
@@ -46,7 +34,7 @@
<role>
com.dianping.cat.hadoop.dal.TaskDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.ReportFacade
</role>
<role>
com.dianping.cat.report.task.
spi.
ReportFacade
</role>
</requirement>
</requirements>
</component>
...
...
@@ -266,8 +254,26 @@
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.ReportFacade
</role>
<implementation>
com.dianping.cat.report.task.ReportFacade
</implementation>
<role>
com.dianping.cat.report.task.health.HealthReportBuilder
</role>
<implementation>
com.dianping.cat.report.task.health.HealthReportBuilder
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.hadoop.dal.GraphDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.ReportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.DailyreportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.health.HealthServiceCollector
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.spi.ReportFacade
</role>
<implementation>
com.dianping.cat.report.task.spi.ReportFacade
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.task.transaction.TransactionReportBuilder
</role>
...
...
@@ -293,6 +299,9 @@
<requirement>
<role>
com.dianping.cat.report.task.sql.SqlReportBuilder
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.health.HealthReportBuilder
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.TaskDao
</role>
</requirement>
...
...
@@ -310,6 +319,18 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.health.HealthServiceCollector
</role>
<implementation>
com.dianping.cat.report.task.health.HealthServiceCollector
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.page.cross.DomainManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.ReportDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
transaction-local
</role-hint>
...
...
@@ -1536,7 +1557,7 @@
<role>
com.dianping.cat.report.page.task.JspViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.ReportFacade
</role>
<role>
com.dianping.cat.report.task.
spi.
ReportFacade
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.TaskDao
</role>
...
...
@@ -1548,8 +1569,8 @@
<implementation>
com.dianping.cat.report.page.task.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.task.ReportFacade
</role>
<implementation>
com.dianping.cat.report.task.ReportFacade
</implementation>
<role>
com.dianping.cat.report.task.
spi.
ReportFacade
</role>
<implementation>
com.dianping.cat.report.task.
spi.
ReportFacade
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.task.event.EventReportBuilder
</role>
...
...
@@ -1575,6 +1596,9 @@
<requirement>
<role>
com.dianping.cat.report.task.sql.SqlReportBuilder
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.health.HealthReportBuilder
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.TaskDao
</role>
</requirement>
...
...
@@ -1768,6 +1792,57 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.health.HealthReportBuilder
</role>
<implementation>
com.dianping.cat.report.task.health.HealthReportBuilder
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.task.health.HealthServiceCollector
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.DailyreportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.GraphDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.hadoop.dal.ReportDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.health.HealthServiceCollector
</role>
<implementation>
com.dianping.cat.report.task.health.HealthServiceCollector
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.hadoop.dal.ReportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.cross.DomainManager
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.cross.DomainManager
</role>
<implementation>
com.dianping.cat.report.page.cross.DomainManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.hadoop.dal.HostinfoDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.configuration.ServerConfigManager
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.hadoop.dal.HostinfoDao
</role>
<implementation>
com.dianping.cat.hadoop.dal.HostinfoDao
</implementation>
<requirements>
<requirement>
<role>
com.site.dal.jdbc.QueryEngine
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.hadoop.dal.TaskDao
</role>
<implementation>
com.dianping.cat.hadoop.dal.TaskDao
</implementation>
...
...
@@ -1808,33 +1883,27 @@
<implementation>
com.dianping.cat.report.page.matrix.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.
monthreport
.Handler
</role>
<implementation>
com.dianping.cat.report.page.
monthreport
.Handler
</implementation>
<role>
com.dianping.cat.report.page.
health
.Handler
</role>
<implementation>
com.dianping.cat.report.page.
health
.Handler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.page.
monthreport
.JspViewer
</role>
<role>
com.dianping.cat.report.page.
health
.JspViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.
hadoop.dal.MonthreportDao
</role>
<role>
com.dianping.cat.
configuration.ServerConfigManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.
configuration.ServerConfigManager
</role>
<role>
com.dianping.cat.
hadoop.dal.ReportDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.monthreport.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.monthreport.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.hadoop.dal.MonthreportDao
</role>
<implementation>
com.dianping.cat.hadoop.dal.MonthreportDao
</implementation>
<requirements>
<requirement>
<role>
com.
site.dal.jdbc.QueryEngine
</role>
<role>
com.
dianping.cat.hadoop.dal.DailyreportDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.health.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.health.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.cross.Handler
</role>
<implementation>
com.dianping.cat.report.page.cross.Handler
</implementation>
...
...
@@ -1868,27 +1937,6 @@
<role>
com.dianping.cat.report.page.cross.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.cross.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.cross.DomainManager
</role>
<implementation>
com.dianping.cat.report.page.cross.DomainManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.hadoop.dal.HostinfoDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.configuration.ServerConfigManager
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.hadoop.dal.HostinfoDao
</role>
<implementation>
com.dianping.cat.hadoop.dal.HostinfoDao
</implementation>
<requirements>
<requirement>
<role>
com.site.dal.jdbc.QueryEngine
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.cache.Handler
</role>
<implementation>
com.dianping.cat.report.page.cache.Handler
</implementation>
...
...
cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml
浏览文件 @
b7f220ce
<?xml version="1.0" encoding="UTF-8"?>
<wizard
package=
"com.dianping.cat"
>
<webapp
package=
"com.dianping.cat"
webres=
"true"
>
<module
name=
"report"
path=
"r"
>
<page
name=
"home"
title=
"Home"
default=
"true"
>
<description>
Home Page
</description>
</page>
<page
name=
"problem"
title=
"Problem"
path=
"p"
view=
"/jsp/report/problemGroup.jsp"
>
<description>
Problem Discovered
</description>
</page>
<page
name=
"transaction"
title=
"Transaction"
path=
"t"
>
<description>
Transaction Summary Report
</description>
</page>
<page
name=
"event"
title=
"Event"
path=
"e"
>
<description>
Event Summary Report
</description>
</page>
<page
name=
"heartbeat"
title=
"Heartbeat"
path=
"h"
>
<description>
Heartbeat Summary Report
</description>
</page>
<page
name=
"logview"
title=
"Logview"
path=
"m"
standalone=
"false"
>
<description>
Log View Details
</description>
</page>
<page
name=
"ip"
title=
"Top IP"
standalone=
"false"
>
<description>
Top Visited IP
</description>
</page>
<page
name=
"model"
title=
"Model"
path=
"model"
standalone=
"false"
>
<description>
Service Model
</description>
</page>
<page
name=
"sql"
title=
"SQL"
path=
"sql"
>
<description>
SQL Report
</description>
</page>
<page
name=
"heatmap"
title=
"Heatmap"
path=
"heatmap"
standalone=
"false"
>
<description>
Heatmap
</description>
</page>
<page
name=
"dashboard"
title=
"Dashboard"
path=
"dashboard"
standalone=
"false"
>
<description>
Dashboard
</description>
</page>
<page
name=
"task"
title=
"Task"
path=
"task"
standalone=
"false"
>
<description>
Task
</description>
</page>
<page
name=
"matrix"
title=
"Matrix"
path=
"matrix"
>
<description>
Matrix
</description>
</page>
<page
name=
"monthreport"
title=
"Monthreport"
path=
"monthreport"
standalone=
"false
"
>
<description>
Monthreport
</description>
</page>
<page
name=
"cross"
title=
"Cross"
path=
"cross"
>
<description>
Cross
</description>
</page>
<page
name=
"cache"
title=
"Cache"
path=
"cache"
>
<description>
Cache
</description>
</page>
<page
name=
"database"
title=
"Database"
path=
"database"
>
<description>
Database
</description>
</page>
</module>
</webapp>
<webapp
package=
"com.dianping.cat"
webres=
"true"
>
<module
name=
"report"
path=
"r"
>
<page
name=
"home"
title=
"Home"
default=
"true"
>
<description>
Home Page
</description>
</page>
<page
name=
"problem"
title=
"Problem"
path=
"p"
view=
"/jsp/report/problemGroup.jsp"
>
<description>
Problem Discovered
</description>
</page>
<page
name=
"transaction"
title=
"Transaction"
path=
"t"
>
<description>
Transaction Summary Report
</description>
</page>
<page
name=
"event"
title=
"Event"
path=
"e"
>
<description>
Event Summary Report
</description>
</page>
<page
name=
"heartbeat"
title=
"Heartbeat"
path=
"h"
>
<description>
Heartbeat Summary Report
</description>
</page>
<page
name=
"logview"
title=
"Logview"
path=
"m"
standalone=
"false"
>
<description>
Log View Details
</description>
</page>
<page
name=
"ip"
title=
"Top IP"
standalone=
"false"
>
<description>
Top Visited IP
</description>
</page>
<page
name=
"model"
title=
"Model"
path=
"model"
standalone=
"false"
>
<description>
Service Model
</description>
</page>
<page
name=
"sql"
title=
"SQL"
path=
"sql"
>
<description>
SQL Report
</description>
</page>
<page
name=
"heatmap"
title=
"Heatmap"
path=
"heatmap"
standalone=
"false"
>
<description>
Heatmap
</description>
</page>
<page
name=
"dashboard"
title=
"Dashboard"
path=
"dashboard"
standalone=
"false"
>
<description>
Dashboard
</description>
</page>
<page
name=
"task"
title=
"Task"
path=
"task"
standalone=
"false"
>
<description>
Task
</description>
</page>
<page
name=
"matrix"
title=
"Matrix"
path=
"matrix"
>
<description>
Matrix
</description>
</page>
<page
name=
"health"
title=
"Health"
path=
"health
"
>
<description>
Health
</description>
</page>
<page
name=
"cross"
title=
"Cross"
path=
"cross"
>
<description>
Cross
</description>
</page>
<page
name=
"cache"
title=
"Cache"
path=
"cache"
>
<description>
Cache
</description>
</page>
<page
name=
"database"
title=
"Database"
path=
"database"
>
<description>
Database
</description>
</page>
</module>
</webapp>
</wizard>
cat-home/src/main/webapp/css/health.css
0 → 100755
浏览文件 @
b7f220ce
.health
{
width
:
auto
;
font-size
:
small
;
}
.health
.odd
td
{
background-color
:
#eee
;
font-size
:
small
;
text-align
:
right
;
}
.health
.even
td
{
background-color
:
white
;
font-size
:
small
;
text-align
:
right
;
}
.health
th
.left
{
text-align
:
left
;
}
.health
tr
.left
{
text-align
:
left
;
}
.health
tr
.left
{
text-align
:
left
;
}
\ No newline at end of file
cat-home/src/main/webapp/jsp/report/health.jsp
0 → 100644
浏览文件 @
b7f220ce
<%@ page
contentType=
"text/html; charset=utf-8"
%>
<%@ taglib
prefix=
"a"
uri=
"/WEB-INF/app.tld"
%>
<%@ taglib
prefix=
"w"
uri=
"http://www.unidal.org/web/core"
%>
<%@ taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%>
<%@ taglib
prefix=
"res"
uri=
"http://www.unidal.org/webres"
%>
<jsp:useBean
id=
"ctx"
type=
"com.dianping.cat.report.page.health.Context"
scope=
"request"
/>
<jsp:useBean
id=
"payload"
type=
"com.dianping.cat.report.page.health.Payload"
scope=
"request"
/>
<jsp:useBean
id=
"model"
type=
"com.dianping.cat.report.page.health.Model"
scope=
"request"
/>
<a:report
title=
"Health Report"
navUrlPrefix=
"domain=${model.domain}"
>
<jsp:attribute
name=
"subtitle"
>
From ${w:format(model.report.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(model.report.endTime,'yyyy-MM-dd HH:mm:ss')}
</jsp:attribute>
<jsp:body>
<res:useCss
value=
"
${
res
.
css
.
local
.
health_css
}
"
target=
"head-css"
/>
<br>
<h2>
综合指标:99
</h2>
<div
style=
"float: left;width:100%"
>
<div
style=
"width: 33%; float: left"
>
<table
class=
"health"
>
<tr
class=
"odd"
>
<th>
URL请求平均响应时间(ms)
</th>
<td>
${w:formatNumber(model.report.url.baseInfo.responseTime,'0.0','ms')}
</td>
</tr>
<tr
class=
"even"
>
<th>
URL请求总访问量
</th>
<td>
${w:formatNumber(model.report.url.baseInfo.total,'0.0','')}
</td>
</tr>
<tr
class=
"odd"
>
<th>
URL请求出错次数
</th>
<td>
${w:formatNumber(model.report.url.baseInfo.errorTotal,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
URL请求成功百分比
</th>
<td>
${w:format(model.report.url.baseInfo.successPercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
(从服务端看)Service请求平均响应时间(ms)
</th>
<td>
${w:formatNumber(model.report.service.baseInfo.responseTime,'0.0','ms')}
</td>
</tr>
<tr
class=
"even"
>
<th>
(从服务端看)Service请求总访问量
</th>
<td>
${w:formatNumber(model.report.service.baseInfo.total,'0.0','')}
</td>
</tr>
<tr
class=
"odd"
>
<th>
(从服务端看)Service请求出错次数
</th>
<td>
${w:formatNumber(model.report.service.baseInfo.errorTotal,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
(从服务端看)Service请求成功百分比
</th>
<td>
${w:format(model.report.service.baseInfo.successPercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
(从客户端看)Service请求平均响应时间(ms)
</th>
<td>
${w:formatNumber(model.report.clientService.baseInfo.responseTime,'0.0','ms')}
</td>
</tr>
<tr
class=
"even"
>
<th>
(从客户端看)Service请求总访问量
</th>
<td>
${w:formatNumber(model.report.clientService.baseInfo.total,'0.0','')}
</td>
</tr>
<tr
class=
"odd"
>
<th>
(从客户端看)Service请求出错次数
</th>
<td>
${w:formatNumber(model.report.clientService.baseInfo.errorTotal,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
(从客户端看)Service请求成功百分比
</th>
<td>
${w:format(model.report.clientService.baseInfo.successPercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
远程调用平均响应时间(ms)
</th>
<td>
${w:formatNumber(model.report.call.baseInfo.responseTime,'0.0','ms')}
</td>
</tr>
<tr
class=
"even"
>
<th>
远程调用总访问量
</th>
<td>
${w:formatNumber(model.report.call.baseInfo.total,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
远程调用出错次数
</th>
<td>
${w:formatNumber(model.report.call.baseInfo.errorTotal,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
远程调用成功百分比
</th>
<td>
${w:format(model.report.call.baseInfo.successPercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
数据库平均响应时间(ms)
</th>
<td>
${w:formatNumber(model.report.sql.baseInfo.responseTime,'0.0','ms')}
</td>
</tr>
<tr
class=
"even"
>
<th>
数据库总访问量
</th>
<td>
${w:formatNumber(model.report.sql.baseInfo.total,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
数据库出错次数
</th>
<td>
${w:formatNumber(model.report.sql.baseInfo.errorTotal,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
数据库成功百分比
</th>
<td>
${w:format(model.report.sql.baseInfo.successPercent,'00.0000%')}
</td>
</tr>
</table>
</div>
<div
style=
"width: 33%; float:left"
>
<table>
<tr
class=
"odd"
>
<th>
memcached缓存平均响应时间(ms)
</th>
<td>
${w:formatNumber(model.report.memCache.baseCacheInfo.responseTime,'0.0','ms')}
</td>
</tr>
<tr
class=
"even"
>
<th>
memcached缓存月总访问量
</th>
<td>
${w:formatNumber(model.report.memCache.baseCacheInfo.total,'0.0','')}
</td>
</tr>
<tr
class=
"odd"
>
<th>
memcached缓存命中率
</th>
<td>
${w:format(model.report.memCache.baseCacheInfo.hitPercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
kvdbCache缓存平均响应时间(ms)
</th>
<td>
${w:formatNumber(model.report.kvdbCache.baseCacheInfo.responseTime,'0.0','ms')}
</td>
</tr>
<tr
class=
"even"
>
<th>
kvdbCache缓存月总访问量
</th>
<td>
${w:formatNumber(model.report.kvdbCache.baseCacheInfo.total,'0.0','')}
</td>
</tr>
<tr
class=
"odd"
>
<th>
kvdbCache缓存命中率
</th>
<td>
${w:format(model.report.kvdbCache.baseCacheInfo.hitPercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
webCache缓存平均响应时间(ms)
</th>
<td>
${w:formatNumber(model.report.webCache.baseCacheInfo.responseTime,'0.0','ms')}
</td>
</tr>
<tr
class=
"even"
>
<th>
webCache缓存月总访问量
</th>
<td>
${w:formatNumber(model.report.webCache.baseCacheInfo.total,'0.0','')}
</td>
</tr>
<tr
class=
"odd"
>
<th>
webCache缓存命中率
</th>
<td>
${w:format(model.report.webCache.baseCacheInfo.hitPercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
Exception月异常数
</th>
<td>
${w:formatNumber(model.report.problemInfo.exceptions,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
Long-url月总次数(大于1000ms)
</th>
<td>
${w:formatNumber(model.report.problemInfo.longUrls,'0.0','')}
</td>
</tr>
<tr
class=
"odd"
>
<th>
Long-url百分比
</th>
<td>
${w:format(model.report.problemInfo.longUrlPercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
Long-service月总次数(大于1000ms)
</th>
<td>
${w:formatNumber(model.report.problemInfo.longServices,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
Long-service百分比
</th>
<td>
${w:format(model.report.problemInfo.longServicePercent,'00.0000%')}
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr
class=
"odd"
>
<th>
Long-sql月总次数(大于100ms)
</th>
<td>
${w:formatNumber(model.report.problemInfo.longSqls,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
Long-sql百分比
</th>
<td>
${w:format(model.report.problemInfo.longSqlPercent,'00.0000%')}
</td>
</tr>
<tr><td>
</td><td>
</td></tr>
<tr
class=
"odd"
>
<th>
Long-cache月总次数(大于10ms)
</th>
<td>
${w:formatNumber(model.report.problemInfo.longCaches,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
Long-cache百分比
</th>
<td>
${w:format(model.report.problemInfo.longCachePercent,'00.0000%')}
</td>
</tr>
</table>
</div>
<div
style=
"width: 33%; float:left"
>
<table>
<tr
class=
"odd"
>
<th>
部署机器数量
</th>
<td>
${model.report.machineInfo.numbers}
</td>
</tr>
<tr><td>
</td><td>
</td></tr>
<tr
class=
"odd"
>
<th>
所有机器平均负载
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgLoad,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
所有机器最大负载
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgMaxLoad,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
最大负载机器IP
</th>
<td>
${model.report.machineInfo.avgMaxLoadMachine}
</td>
</tr>
<tr><td>
</td><td>
</td></tr>
<tr
class=
"odd"
>
<th>
所有机器平均每分钟OldGc
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgOldgc,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
所有机器平均最大每分钟OldGc
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgMaxOldgc,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
最大OldGc机器IP
</th>
<td>
${model.report.machineInfo.avgMaxOldgcMachine}
</td>
</tr>
<tr><td>
</td><td>
</td></tr>
<tr
class=
"odd"
>
<th>
所有机器平均HTTP线程
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgHttp,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
所有机器平均最大HTTP线程
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgMaxHttp,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
最大HTTP机器IP
</th>
<td>
${model.report.machineInfo.avgMaxHttpMachine}
</td>
</tr>
<tr><td>
</td><td>
</td></tr>
<tr
class=
"odd"
>
<th>
所有机器平均Pigeon线程
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgPigeon,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
所有机器平均最大Pigeon线程
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgMaxPigeon,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
最大Pigeon机器IP
</th>
<td>
${model.report.machineInfo.avgMaxPigeonMachine}
</td>
</tr>
<tr><td>
</td><td>
</td></tr>
<tr
class=
"odd"
>
<th>
所有机器平均内存使用(MB)
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgMemoryUsed,'0.0','')}
</td>
</tr>
<tr
class=
"even"
>
<th>
所有机器平均最大内存使用(MB)
</th>
<td>
${w:formatNumber(model.report.machineInfo.avgMaxMemoryUsed,'0.0','')}
</td>
</tr><tr
class=
"even"
>
<th>
最大内存使用机器IP
</th>
<td>
${model.report.machineInfo.avgMaxMemoryUsedMachine}
</td>
</tr>
</table>
</div>
</div>
</jsp:body>
</a:report>
cat-home/src/test/java/com/dianping/cat/report/task/
monthreport/Mon
thReportBuilderTest.java
→
cat-home/src/test/java/com/dianping/cat/report/task/
healthreport/Heal
thReportBuilderTest.java
浏览文件 @
b7f220ce
package
com.dianping.cat.report.task.monthreport
;
import
java.util.Date
;
package
com.dianping.cat.report.task.healthreport
;
import
junit.framework.Assert
;
...
...
@@ -9,35 +7,24 @@ import org.unidal.webres.helper.Files;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.event.model.transform.DefaultDomParser
;
import
com.dianping.cat.consumer.
monthreport.model.entity.Mon
thReport
;
import
com.dianping.cat.consumer.
health.model.entity.Heal
thReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.report.task.health.HealthReportCreator
;
public
class
MonthReportBuilderTest
{
@Test
public
void
testCreatLastMonthFirstDay
()
{
MonthReportBuilderTask
task
=
new
MonthReportBuilderTask
();
Date
date
=
task
.
getMonthFirstDay
(
0
);
System
.
out
.
println
(
date
);
date
=
task
.
getMonthFirstDay
(-
1
);
System
.
out
.
println
(
date
);
date
=
task
.
getMonthFirstDay
(-
2
);
System
.
out
.
println
(
date
);
}
public
class
HealthReportBuilderTest
{
@Test
public
void
testBuild
Mon
thReport
()
throws
Exception
{
MonthReportBuilder
builder
=
new
MonthReportBuilde
r
();
public
void
testBuild
Heal
thReport
()
throws
Exception
{
HealthReportCreator
builder
=
new
HealthReportCreato
r
();
TransactionReport
transactionReport
=
getTranscationReportFromFile
(
"TransactionReport.xml"
);
EventReport
eventReport
=
getEventReportFromFile
(
"EventReport.xml"
);
ProblemReport
problemReport
=
getProblemReportFromFile
(
"ProblemReport.xml"
);
MonthReport
real
=
builder
.
build
(
transactionReport
,
eventReport
,
problemReport
);
String
expected
=
Files
.
forIO
().
readFrom
(
getClass
().
getResourceAsStream
(
"
Mon
thReport.xml"
),
"utf-8"
);
Assert
.
assertEquals
(
expected
.
replaceAll
(
"\\s*"
,
""
),
real
.
toString
().
replaceAll
(
"\\s*"
,
""
));
EventReport
eventReport
=
getEventReportFromFile
(
"EventReport.xml"
);
ProblemReport
problemReport
=
getProblemReportFromFile
(
"ProblemReport.xml"
);
HealthReport
real
=
builder
.
build
(
transactionReport
,
eventReport
,
problemReport
,
null
,
null
);
String
expected
=
Files
.
forIO
().
readFrom
(
getClass
().
getResourceAsStream
(
"
Heal
thReport.xml"
),
"utf-8"
);
Assert
.
assertEquals
(
expected
.
replaceAll
(
"\\s*"
,
""
),
real
.
toString
().
replaceAll
(
"\\s*"
,
""
));
}
private
TransactionReport
getTranscationReportFromFile
(
String
fileName
)
throws
Exception
{
...
...
@@ -51,7 +38,7 @@ public class MonthReportBuilderTest {
return
new
DefaultDomParser
().
parse
(
xml
);
}
private
ProblemReport
getProblemReportFromFile
(
String
fileName
)
throws
Exception
{
String
xml
=
Files
.
forIO
().
readFrom
(
getClass
().
getResourceAsStream
(
fileName
),
"utf-8"
);
return
new
com
.
dianping
.
cat
.
consumer
.
problem
.
model
.
transform
.
DefaultDomParser
().
parse
(
xml
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录