Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
4e7b5d09
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,发现更多精彩内容 >>
提交
4e7b5d09
编写于
8月 21, 2013
作者:
Y
yong.you
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add the service report
上级
85bd770d
变更
42
展开全部
隐藏空白更改
内联
并排
Showing
42 changed file
with
3714 addition
and
2907 deletion
+3714
-2907
cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateDelegate.java
...n/java/com/dianping/cat/consumer/state/StateDelegate.java
+1
-0
cat-consumer/src/main/java/com/dianping/cat/consumer/transaction/TransactionReportMerger.java
...ing/cat/consumer/transaction/TransactionReportMerger.java
+0
-2
cat-home/pom.xml
cat-home/pom.xml
+2
-1
cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java
...ava/com/dianping/cat/build/TaskComponentConfigurator.java
+9
-6
cat-home/src/main/java/com/dianping/cat/report/ReportPage.java
...ome/src/main/java/com/dianping/cat/report/ReportPage.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/page/bug/Action.java
...rc/main/java/com/dianping/cat/report/page/bug/Action.java
+34
-31
cat-home/src/main/java/com/dianping/cat/report/page/bug/Context.java
...c/main/java/com/dianping/cat/report/page/bug/Context.java
+7
-7
cat-home/src/main/java/com/dianping/cat/report/page/bug/Handler.java
...c/main/java/com/dianping/cat/report/page/bug/Handler.java
+348
-280
cat-home/src/main/java/com/dianping/cat/report/page/bug/JspFile.java
...c/main/java/com/dianping/cat/report/page/bug/JspFile.java
+23
-21
cat-home/src/main/java/com/dianping/cat/report/page/bug/JspViewer.java
...main/java/com/dianping/cat/report/page/bug/JspViewer.java
+26
-22
cat-home/src/main/java/com/dianping/cat/report/page/bug/Model.java
...src/main/java/com/dianping/cat/report/page/bug/Model.java
+79
-58
cat-home/src/main/java/com/dianping/cat/report/page/bug/Payload.java
...c/main/java/com/dianping/cat/report/page/bug/Payload.java
+55
-44
cat-home/src/main/java/com/dianping/cat/report/service/DailyReportService.java
...a/com/dianping/cat/report/service/DailyReportService.java
+40
-37
cat-home/src/main/java/com/dianping/cat/report/service/HourlyReportService.java
.../com/dianping/cat/report/service/HourlyReportService.java
+51
-48
cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportCache.java
...a/com/dianping/cat/report/service/MonthlyReportCache.java
+177
-169
cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportService.java
...com/dianping/cat/report/service/MonthlyReportService.java
+40
-37
cat-home/src/main/java/com/dianping/cat/report/service/ReportService.java
...n/java/com/dianping/cat/report/service/ReportService.java
+61
-58
cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportCache.java
...va/com/dianping/cat/report/service/WeeklyReportCache.java
+176
-168
cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportService.java
.../com/dianping/cat/report/service/WeeklyReportService.java
+40
-37
cat-home/src/main/java/com/dianping/cat/report/service/impl/DailyReportServiceImpl.java
...nping/cat/report/service/impl/DailyReportServiceImpl.java
+307
-284
cat-home/src/main/java/com/dianping/cat/report/service/impl/HourlyReportServiceImpl.java
...ping/cat/report/service/impl/HourlyReportServiceImpl.java
+596
-560
cat-home/src/main/java/com/dianping/cat/report/service/impl/MonthlyReportServiceImpl.java
...ing/cat/report/service/impl/MonthlyReportServiceImpl.java
+180
-165
cat-home/src/main/java/com/dianping/cat/report/service/impl/ReportServiceImpl.java
...m/dianping/cat/report/service/impl/ReportServiceImpl.java
+459
-429
cat-home/src/main/java/com/dianping/cat/report/service/impl/WeeklyReportServiceImpl.java
...ping/cat/report/service/impl/WeeklyReportServiceImpl.java
+180
-165
cat-home/src/main/java/com/dianping/cat/report/task/service/ServiceReportBuilder.java
...ianping/cat/report/task/service/ServiceReportBuilder.java
+183
-0
cat-home/src/main/java/com/dianping/cat/report/task/service/ServiceReportMerger.java
...dianping/cat/report/task/service/ServiceReportMerger.java
+30
-0
cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java
...n/java/com/dianping/cat/report/task/spi/ReportFacade.java
+148
-143
cat-home/src/main/resources/META-INF/dal/model/service-report-codegen.xml
...n/resources/META-INF/dal/model/service-report-codegen.xml
+19
-0
cat-home/src/main/resources/META-INF/dal/model/service-report-manifest.xml
.../resources/META-INF/dal/model/service-report-manifest.xml
+6
-0
cat-home/src/main/resources/META-INF/dal/model/service-report-model.xml
...ain/resources/META-INF/dal/model/service-report-model.xml
+21
-0
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+13
-1
cat-home/src/main/resources/META-INF/wizard/model/wizard.xml
cat-home/src/main/resources/META-INF/wizard/model/wizard.xml
+3
-0
cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml
...home/src/main/resources/META-INF/wizard/webapp/wizard.xml
+1
-1
cat-home/src/main/webapp/jsp/report/bug/bug.jsp
cat-home/src/main/webapp/jsp/report/bug/bug.jsp
+51
-35
cat-home/src/main/webapp/jsp/report/bug/bugApi.jsp
cat-home/src/main/webapp/jsp/report/bug/bugApi.jsp
+3
-3
cat-home/src/main/webapp/jsp/report/bug/bugHistory.jsp
cat-home/src/main/webapp/jsp/report/bug/bugHistory.jsp
+53
-35
cat-home/src/main/webapp/jsp/report/bug/detail.jsp
cat-home/src/main/webapp/jsp/report/bug/detail.jsp
+59
-59
cat-home/src/main/webapp/jsp/report/bugTree.jsp
cat-home/src/main/webapp/jsp/report/bugTree.jsp
+24
-0
cat-home/src/main/webapp/jsp/report/service/service.jsp
cat-home/src/main/webapp/jsp/report/service/service.jsp
+69
-0
cat-home/src/main/webapp/jsp/report/service/serviceHistory.jsp
...ome/src/main/webapp/jsp/report/service/serviceHistory.jsp
+77
-0
cat-home/src/test/java/com/dianping/cat/report/task/service/ServiceBuilderTest.java
.../dianping/cat/report/task/service/ServiceBuilderTest.java
+48
-0
cat-home/src/test/resources/com/dianping/cat/report/page/service/service.xml
...esources/com/dianping/cat/report/page/service/service.xml
+14
-0
未找到文件。
cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateDelegate.java
浏览文件 @
4e7b5d09
...
...
@@ -31,6 +31,7 @@ public class StateDelegate implements ReportDelegate<StateReport> {
@Override
public
boolean
createHourlyTask
(
StateReport
report
)
{
m_taskManager
.
createTask
(
report
.
getStartTime
(),
report
.
getDomain
(),
"service"
,
TaskProlicy
.
ALL
);
m_taskManager
.
createTask
(
report
.
getStartTime
(),
report
.
getDomain
(),
"bug"
,
TaskProlicy
.
ALL
);
return
m_taskManager
.
createTask
(
report
.
getStartTime
(),
report
.
getDomain
(),
StateAnalyzer
.
ID
,
TaskProlicy
.
ALL_EXCLUED_HOURLY
);
}
...
...
cat-consumer/src/main/java/com/dianping/cat/consumer/transaction/TransactionReportMerger.java
浏览文件 @
4e7b5d09
...
...
@@ -49,8 +49,6 @@ public class TransactionReportMerger extends DefaultMerger {
old
.
setSum
(
old
.
getSum
()
+
other
.
getSum
());
old
.
setSum2
(
old
.
getSum2
()
+
other
.
getSum2
());
if
(
old
.
getTotalCount
()
>
0
)
{
old
.
setFailPercent
(
old
.
getFailCount
()
*
100.0
/
old
.
getTotalCount
());
old
.
setAvg
(
old
.
getSum
()
/
old
.
getTotalCount
());
...
...
cat-home/pom.xml
浏览文件 @
4e7b5d09
...
...
@@ -186,7 +186,8 @@
${basedir}/src/main/resources/META-INF/dal/model/exception-threshold-config-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/threshold-template-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/bug-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/bug-config-manifest.xml,
</manifest>
${basedir}/src/main/resources/META-INF/dal/model/bug-config-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/service-report-manifest.xml,
</manifest>
</configuration>
</execution>
<execution>
...
...
cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java
浏览文件 @
4e7b5d09
...
...
@@ -7,6 +7,7 @@ import org.unidal.lookup.configuration.AbstractResourceConfigurator;
import
org.unidal.lookup.configuration.Component
;
import
com.dianping.cat.ServerConfigManager
;
import
com.dianping.cat.consumer.DomainManager
;
import
com.dianping.cat.consumer.advanced.MetricConfigManager
;
import
com.dianping.cat.consumer.advanced.ProductLineConfigManager
;
import
com.dianping.cat.core.dal.DailyGraphDao
;
...
...
@@ -38,6 +39,7 @@ import com.dianping.cat.report.task.metric.MetricPointParser;
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.service.ServiceReportBuilder
;
import
com.dianping.cat.report.task.spi.ReportFacade
;
import
com.dianping.cat.report.task.sql.SqlMerger
;
import
com.dianping.cat.report.task.sql.SqlReportBuilder
;
...
...
@@ -94,8 +96,9 @@ public class TaskComponentConfigurator extends AbstractResourceConfigurator {
.
req
(
GraphDao
.
class
,
ReportService
.
class
)
//
.
req
(
HeartbeatGraphCreator
.
class
));
all
.
add
(
C
(
BugReportBuilder
.
class
)
.
req
(
ReportService
.
class
));
all
.
add
(
C
(
BugReportBuilder
.
class
).
req
(
ReportService
.
class
));
all
.
add
(
C
(
ServiceReportBuilder
.
class
).
req
(
ReportService
.
class
,
DomainManager
.
class
));
all
.
add
(
C
(
MatrixReportBuilder
.
class
).
req
(
ReportService
.
class
));
...
...
@@ -111,10 +114,10 @@ public class TaskComponentConfigurator extends AbstractResourceConfigurator {
TopologyGraphDao
.
class
));
all
.
add
(
C
(
ReportFacade
.
class
)
//
.
req
(
TransactionReportBuilder
.
class
,
EventReportBuilder
.
class
,
ProblemReportBuilder
.
class
//
,
HeartbeatReportBuilder
.
class
,
MatrixReportBuilder
.
class
,
CrossReportBuilder
.
class
//
,
SqlReportBuilder
.
class
,
StateReportBuilder
.
class
,
DependencyReportBuilder
.
class
,
Bug
ReportBuilder
.
class
,
MetricBaselineReportBuilder
.
class
));
.
req
(
TransactionReportBuilder
.
class
,
EventReportBuilder
.
class
,
ProblemReportBuilder
.
class
,
HeartbeatReportBuilder
.
class
,
MatrixReportBuilder
.
class
,
CrossReportBuilder
.
class
,
SqlReportBuilder
.
class
,
StateReportBuilder
.
class
,
Dependency
ReportBuilder
.
class
,
BugReportBuilder
.
class
,
ServiceReportBuilder
.
class
,
MetricBaselineReportBuilder
.
class
));
return
all
;
}
...
...
cat-home/src/main/java/com/dianping/cat/report/ReportPage.java
浏览文件 @
4e7b5d09
...
...
@@ -41,7 +41,7 @@ public enum ReportPage implements Page {
EXTERNALERROR
(
"externalError"
,
"externalError"
,
"externalError"
,
"ExternalError"
,
true
),
BUG
(
"bug"
,
"bug"
,
"
Bug
"
,
"Bug"
,
true
);
BUG
(
"bug"
,
"bug"
,
"
Statistics
"
,
"Bug"
,
true
);
private
String
m_name
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/bug/Action.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.page.bug
;
public
enum
Action
implements
org
.
unidal
.
web
.
mvc
.
Action
{
HISTORY_REPORT
(
"history"
),
HOURLY_REPORT
(
"view"
),
HTTP_JSON
(
"json"
)
;
private
String
m_name
;
private
Action
(
String
name
)
{
m_name
=
name
;
}
public
static
Action
getByName
(
String
name
,
Action
defaultAction
)
{
for
(
Action
action
:
Action
.
values
())
{
if
(
action
.
getName
().
equals
(
name
))
{
return
action
;
}
}
return
defaultAction
;
}
@Override
public
String
getName
()
{
return
m_name
;
}
}
package
com.dianping.cat.report.page.bug
;
public
enum
Action
implements
org
.
unidal
.
web
.
mvc
.
Action
{
HISTORY_REPORT
(
"historyBug"
),
HOURLY_REPORT
(
"view"
),
HTTP_JSON
(
"json"
),
SERVICE_REPORT
(
"service"
),
SERVICE_HISTORY_REPORT
(
"historyService"
);
private
String
m_name
;
private
Action
(
String
name
)
{
m_name
=
name
;
}
public
static
Action
getByName
(
String
name
,
Action
defaultAction
)
{
for
(
Action
action
:
Action
.
values
())
{
if
(
action
.
getName
().
equals
(
name
))
{
return
action
;
}
}
return
defaultAction
;
}
@Override
public
String
getName
()
{
return
m_name
;
}
}
cat-home/src/main/java/com/dianping/cat/report/page/bug/Context.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.page.bug
;
import
com.dianping.cat.report.ReportContext
;
public
class
Context
extends
ReportContext
<
Payload
>
{
}
package
com.dianping.cat.report.page.bug
;
import
com.dianping.cat.report.ReportContext
;
public
class
Context
extends
ReportContext
<
Payload
>
{
}
cat-home/src/main/java/com/dianping/cat/report/page/bug/Handler.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.page.bug
;
import
java.io.IOException
;
import
java.util.Comparator
;
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
javax.servlet.ServletException
;
import
org.unidal.lookup.annotation.Inject
;
import
org.unidal.web.mvc.PageHandler
;
import
org.unidal.web.mvc.annotation.InboundActionMeta
;
import
org.unidal.web.mvc.annotation.OutboundActionMeta
;
import
org.unidal.web.mvc.annotation.PayloadMeta
;
import
com.dianping.cat.core.dal.Project
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.helper.MapUtils
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.bug.entity.Domain
;
import
com.dianping.cat.home.bug.entity.ExceptionItem
;
import
com.dianping.cat.home.bug.transform.BaseVisitor
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.page.PayloadNormalizer
;
import
com.dianping.cat.report.service.ReportService
;
import
com.dianping.cat.report.view.DomainNavManager
;
import
com.dianping.cat.system.config.BugConfigManager
;
public
class
Handler
implements
PageHandler
<
Context
>
{
@Inject
private
JspViewer
m_jspViewer
;
@Inject
private
ReportService
m_reportService
;
@Inject
private
DomainNavManager
m_domainManager
;
@Inject
private
BugConfigManager
m_bugConfigManager
;
@Inject
private
PayloadNormalizer
m_normalizePayload
;
public
Project
findByDomain
(
String
domain
)
{
return
m_domainManager
.
getProjectByName
(
domain
);
}
@Override
@PayloadMeta
(
Payload
.
class
)
@InboundActionMeta
(
name
=
"bug"
)
public
void
handleInbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
// display only, no action here
}
@Override
@OutboundActionMeta
(
name
=
"bug"
)
public
void
handleOutbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
Model
model
=
new
Model
(
ctx
);
Payload
payload
=
ctx
.
getPayload
();
m_normalizePayload
.
normalize
(
model
,
payload
);
BugReport
bugReport
=
queryBugReport
(
payload
);
BugReportVisitor
visitor
=
new
BugReportVisitor
();
visitor
.
visitBugReport
(
bugReport
);
Map
<
String
,
ErrorStatis
>
errors
=
visitor
.
getErrors
();
errors
=
sortErrorStatis
(
errors
);
model
.
setErrorStatis
(
errors
);
if
(
payload
.
getAction
()
==
Action
.
HTTP_JSON
)
{
new
ClearBugReport
().
visitBugReport
(
bugReport
);
}
model
.
setBugReport
(
bugReport
);
model
.
setPage
(
ReportPage
.
BUG
);
m_jspViewer
.
view
(
ctx
,
model
);
}
private
boolean
isBug
(
String
domain
,
String
exception
)
{
Set
<
String
>
bugConfig
=
m_bugConfigManager
.
queryBugConfigsByDomain
(
domain
);
return
!
bugConfig
.
contains
(
exception
);
}
private
BugReport
queryBugReport
(
Payload
payload
)
{
Date
start
=
null
;
Date
end
=
null
;
if
(
payload
.
getAction
()
==
Action
.
HOURLY_REPORT
)
{
if
(
payload
.
getPeriod
().
isCurrent
())
{
start
=
new
Date
(
payload
.
getDate
()
-
TimeUtil
.
ONE_HOUR
);
end
=
new
Date
(
start
.
getTime
()
+
TimeUtil
.
ONE_HOUR
);
}
else
{
start
=
new
Date
(
payload
.
getDate
());
end
=
new
Date
(
start
.
getTime
()
+
TimeUtil
.
ONE_HOUR
);
}
}
else
{
start
=
payload
.
getHistoryStartDate
();
end
=
payload
.
getHistoryEndDate
();
}
return
m_reportService
.
queryBugReport
(
CatString
.
CAT
,
start
,
end
);
}
private
Map
<
String
,
ErrorStatis
>
sortErrorStatis
(
Map
<
String
,
ErrorStatis
>
errors
)
{
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
ErrorStatis
>>
errorCompator
=
new
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
ErrorStatis
>>()
{
@Override
public
int
compare
(
java
.
util
.
Map
.
Entry
<
String
,
ErrorStatis
>
o1
,
java
.
util
.
Map
.
Entry
<
String
,
ErrorStatis
>
o2
)
{
String
department1
=
o1
.
getValue
().
getDepartment
();
String
department2
=
o2
.
getValue
().
getDepartment
();
String
productLine1
=
o1
.
getValue
().
getProductLine
();
String
productLine2
=
o2
.
getValue
().
getProductLine
();
if
(
department1
.
equals
(
department2
))
{
return
productLine1
.
compareTo
(
productLine2
);
}
else
{
return
department1
.
compareTo
(
department2
);
}
}
};
errors
=
MapUtils
.
sortMap
(
errors
,
errorCompator
);
for
(
ErrorStatis
temp
:
errors
.
values
())
{
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
ExceptionItem
>>
compator
=
new
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
ExceptionItem
>>()
{
@Override
public
int
compare
(
java
.
util
.
Map
.
Entry
<
String
,
ExceptionItem
>
o1
,
java
.
util
.
Map
.
Entry
<
String
,
ExceptionItem
>
o2
)
{
return
o2
.
getValue
().
getCount
()
-
o1
.
getValue
().
getCount
();
}
};
Map
<
String
,
ExceptionItem
>
bugs
=
temp
.
getBugs
();
Map
<
String
,
ExceptionItem
>
exceptions
=
temp
.
getExceptions
();
temp
.
setBugs
(
MapUtils
.
sortMap
(
bugs
,
compator
));
temp
.
setExceptions
(
MapUtils
.
sortMap
(
exceptions
,
compator
));
}
return
errors
;
}
public
class
BugReportVisitor
extends
BaseVisitor
{
private
String
m_domain
;
private
Map
<
String
,
ErrorStatis
>
m_errors
=
new
HashMap
<
String
,
ErrorStatis
>();
public
ErrorStatis
findOrCreateErrorStatis
(
String
productLine
)
{
ErrorStatis
statis
=
m_errors
.
get
(
productLine
);
if
(
statis
==
null
)
{
statis
=
new
ErrorStatis
();
m_errors
.
put
(
productLine
,
statis
);
}
return
statis
;
}
public
Map
<
String
,
ErrorStatis
>
getErrors
()
{
return
m_errors
;
}
@Override
public
void
visitDomain
(
Domain
domain
)
{
m_domain
=
domain
.
getId
();
super
.
visitDomain
(
domain
);
}
@Override
public
void
visitExceptionItem
(
ExceptionItem
exceptionItem
)
{
String
exception
=
exceptionItem
.
getId
();
int
count
=
exceptionItem
.
getCount
();
Project
project
=
findByDomain
(
m_domain
);
if
(
project
!=
null
)
{
String
productLine
=
project
.
getProjectLine
();
String
department
=
project
.
getDepartment
();
ErrorStatis
statis
=
findOrCreateErrorStatis
(
productLine
);
statis
.
setDepartment
(
department
);
statis
.
setProductLine
(
productLine
);
Map
<
String
,
ExceptionItem
>
items
=
null
;
if
(
isBug
(
m_domain
,
exception
))
{
items
=
statis
.
getBugs
();
}
else
{
items
=
statis
.
getExceptions
();
}
ExceptionItem
item
=
items
.
get
(
exception
);
if
(
item
==
null
)
{
item
=
new
ExceptionItem
(
exception
);
item
.
setCount
(
count
);
item
.
getMessages
().
addAll
(
exceptionItem
.
getMessages
());
items
.
put
(
exception
,
item
);
}
else
{
List
<
String
>
messages
=
item
.
getMessages
();
item
.
setCount
(
item
.
getCount
()
+
count
);
messages
.
addAll
(
exceptionItem
.
getMessages
());
if
(
messages
.
size
()
>
10
)
{
messages
=
messages
.
subList
(
0
,
10
);
}
}
}
}
}
public
class
ClearBugReport
extends
BaseVisitor
{
@Override
public
void
visitDomain
(
Domain
domain
)
{
String
domainName
=
domain
.
getId
();
Project
project
=
findByDomain
(
domainName
);
if
(
project
!=
null
)
{
domain
.
setDepartment
(
project
.
getDepartment
());
domain
.
setProductLine
(
project
.
getProjectLine
());
}
Set
<
String
>
removes
=
new
HashSet
<
String
>();
Map
<
String
,
ExceptionItem
>
items
=
domain
.
getExceptionItems
();
for
(
ExceptionItem
item
:
items
.
values
())
{
if
(!
isBug
(
domainName
,
item
.
getId
()))
{
removes
.
add
(
item
.
getId
());
}
}
for
(
String
remove
:
removes
)
{
items
.
remove
(
remove
);
}
}
}
public
static
class
ErrorStatis
{
private
String
m_productLine
;
private
String
m_department
;
private
Map
<
String
,
ExceptionItem
>
m_bugs
=
new
HashMap
<
String
,
ExceptionItem
>();
private
Map
<
String
,
ExceptionItem
>
m_exceptions
=
new
HashMap
<
String
,
ExceptionItem
>();
public
Map
<
String
,
ExceptionItem
>
getBugs
()
{
return
m_bugs
;
}
public
String
getDepartment
()
{
return
m_department
;
}
public
Map
<
String
,
ExceptionItem
>
getExceptions
()
{
return
m_exceptions
;
}
public
String
getProductLine
()
{
return
m_productLine
;
}
public
void
setBugs
(
Map
<
String
,
ExceptionItem
>
bugs
)
{
m_bugs
=
bugs
;
}
public
void
setDepartment
(
String
department
)
{
m_department
=
department
;
}
public
void
setExceptions
(
Map
<
String
,
ExceptionItem
>
exceptions
)
{
m_exceptions
=
exceptions
;
}
public
void
setProductLine
(
String
productLine
)
{
m_productLine
=
productLine
;
}
}
}
package
com.dianping.cat.report.page.bug
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Comparator
;
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
javax.servlet.ServletException
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.lookup.annotation.Inject
;
import
org.unidal.web.mvc.PageHandler
;
import
org.unidal.web.mvc.annotation.InboundActionMeta
;
import
org.unidal.web.mvc.annotation.OutboundActionMeta
;
import
org.unidal.web.mvc.annotation.PayloadMeta
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.core.dal.Project
;
import
com.dianping.cat.core.dal.ProjectDao
;
import
com.dianping.cat.core.dal.ProjectEntity
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.helper.MapUtils
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.bug.entity.Domain
;
import
com.dianping.cat.home.bug.entity.ExceptionItem
;
import
com.dianping.cat.home.bug.transform.BaseVisitor
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.page.PayloadNormalizer
;
import
com.dianping.cat.report.service.ReportService
;
import
com.dianping.cat.system.config.BugConfigManager
;
public
class
Handler
implements
PageHandler
<
Context
>
{
@Inject
private
JspViewer
m_jspViewer
;
@Inject
private
ReportService
m_reportService
;
@Inject
private
ProjectDao
m_projectDao
;
@Inject
private
BugConfigManager
m_bugConfigManager
;
@Inject
private
PayloadNormalizer
m_normalizePayload
;
public
Project
findByDomain
(
String
domain
)
{
try
{
return
m_projectDao
.
findByDomain
(
domain
,
ProjectEntity
.
READSET_FULL
);
}
catch
(
DalException
e
)
{
Cat
.
logError
(
e
);
}
return
null
;
}
@Override
@PayloadMeta
(
Payload
.
class
)
@InboundActionMeta
(
name
=
"bug"
)
public
void
handleInbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
// display only, no action here
}
@Override
@OutboundActionMeta
(
name
=
"bug"
)
public
void
handleOutbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
Model
model
=
new
Model
(
ctx
);
Payload
payload
=
ctx
.
getPayload
();
m_normalizePayload
.
normalize
(
model
,
payload
);
switch
(
payload
.
getAction
())
{
case
SERVICE_REPORT:
ServiceReport
serviceReport
=
queryServiceReport
(
payload
);
List
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>
dList
=
sort
(
serviceReport
,
payload
.
getSortBy
());
model
.
setServiceList
(
dList
);
model
.
setServiceReport
(
serviceReport
);
break
;
case
SERVICE_HISTORY_REPORT:
serviceReport
=
queryServiceReport
(
payload
);
List
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>
dHisList
=
sort
(
serviceReport
,
payload
.
getSortBy
());
model
.
setServiceList
(
dHisList
);
model
.
setServiceReport
(
serviceReport
);
break
;
case
HISTORY_REPORT:
case
HOURLY_REPORT:
case
HTTP_JSON:
BugReport
bugReport
=
queryBugReport
(
payload
);
BugReportVisitor
visitor
=
new
BugReportVisitor
();
visitor
.
visitBugReport
(
bugReport
);
model
.
setBugReport
(
bugReport
);
bugReport
=
queryBugReport
(
payload
);
visitor
=
new
BugReportVisitor
();
visitor
.
visitBugReport
(
bugReport
);
Map
<
String
,
ErrorStatis
>
errors
=
visitor
.
getErrors
();
errors
=
sortErrorStatis
(
errors
);
model
.
setErrorStatis
(
errors
);
if
(
payload
.
getAction
()
==
Action
.
HTTP_JSON
)
{
new
ClearBugReport
().
visitBugReport
(
bugReport
);
}
model
.
setBugReport
(
bugReport
);
model
.
setPage
(
ReportPage
.
BUG
);
break
;
}
m_jspViewer
.
view
(
ctx
,
model
);
}
private
ServiceReport
queryServiceReport
(
Payload
payload
)
{
Date
start
=
null
;
Date
end
=
null
;
if
(
payload
.
getAction
()
==
Action
.
SERVICE_REPORT
)
{
if
(
payload
.
getPeriod
().
isCurrent
())
{
start
=
new
Date
(
payload
.
getDate
()
-
TimeUtil
.
ONE_HOUR
);
end
=
new
Date
(
start
.
getTime
()
+
TimeUtil
.
ONE_HOUR
);
}
else
{
start
=
new
Date
(
payload
.
getDate
());
end
=
new
Date
(
start
.
getTime
()
+
TimeUtil
.
ONE_HOUR
);
}
}
else
{
start
=
payload
.
getHistoryStartDate
();
end
=
payload
.
getHistoryEndDate
();
}
return
m_reportService
.
queryServiceReport
(
CatString
.
CAT
,
start
,
end
);
}
private
List
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>
sort
(
ServiceReport
serviceReport
,
final
String
sortBy
)
{
List
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>
result
=
new
ArrayList
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>(
serviceReport
.
getDomains
().
values
());
Collections
.
sort
(
result
,
new
Comparator
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>()
{
public
int
compare
(
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
d1
,
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
d2
)
{
if
(
sortBy
.
equals
(
"failure"
))
{
return
(
int
)
(
d2
.
getFailureCount
()
-
d1
.
getFailureCount
());
}
else
if
(
sortBy
.
equals
(
"total"
))
{
return
(
int
)
(
d2
.
getTotalCount
()
-
d1
.
getTotalCount
());
}
else
if
(
sortBy
.
equals
(
"failurePercent"
))
{
return
(
int
)
(
100000
*
d2
.
getFailurePercent
()
-
100000
*
d1
.
getFailurePercent
());
}
else
{
return
(
int
)
(
d2
.
getAvg
()
-
d1
.
getAvg
());
}
}
});
return
result
;
}
private
boolean
isBug
(
String
domain
,
String
exception
)
{
Set
<
String
>
bugConfig
=
m_bugConfigManager
.
queryBugConfigsByDomain
(
domain
);
return
!
bugConfig
.
contains
(
exception
);
}
private
BugReport
queryBugReport
(
Payload
payload
)
{
Date
start
=
null
;
Date
end
=
null
;
if
(
payload
.
getAction
()
==
Action
.
HOURLY_REPORT
)
{
if
(
payload
.
getPeriod
().
isCurrent
())
{
start
=
new
Date
(
payload
.
getDate
()
-
TimeUtil
.
ONE_HOUR
);
end
=
new
Date
(
start
.
getTime
()
+
TimeUtil
.
ONE_HOUR
);
}
else
{
start
=
new
Date
(
payload
.
getDate
());
end
=
new
Date
(
start
.
getTime
()
+
TimeUtil
.
ONE_HOUR
);
}
}
else
{
start
=
payload
.
getHistoryStartDate
();
end
=
payload
.
getHistoryEndDate
();
}
return
m_reportService
.
queryBugReport
(
CatString
.
CAT
,
start
,
end
);
}
private
Map
<
String
,
ErrorStatis
>
sortErrorStatis
(
Map
<
String
,
ErrorStatis
>
errors
)
{
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
ErrorStatis
>>
errorCompator
=
new
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
ErrorStatis
>>()
{
@Override
public
int
compare
(
java
.
util
.
Map
.
Entry
<
String
,
ErrorStatis
>
o1
,
java
.
util
.
Map
.
Entry
<
String
,
ErrorStatis
>
o2
)
{
String
department1
=
o1
.
getValue
().
getDepartment
();
String
department2
=
o2
.
getValue
().
getDepartment
();
String
productLine1
=
o1
.
getValue
().
getProductLine
();
String
productLine2
=
o2
.
getValue
().
getProductLine
();
if
(
department1
.
equals
(
department2
))
{
return
productLine1
.
compareTo
(
productLine2
);
}
else
{
return
department1
.
compareTo
(
department2
);
}
}
};
errors
=
MapUtils
.
sortMap
(
errors
,
errorCompator
);
for
(
ErrorStatis
temp
:
errors
.
values
())
{
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
ExceptionItem
>>
compator
=
new
Comparator
<
java
.
util
.
Map
.
Entry
<
String
,
ExceptionItem
>>()
{
@Override
public
int
compare
(
java
.
util
.
Map
.
Entry
<
String
,
ExceptionItem
>
o1
,
java
.
util
.
Map
.
Entry
<
String
,
ExceptionItem
>
o2
)
{
return
o2
.
getValue
().
getCount
()
-
o1
.
getValue
().
getCount
();
}
};
Map
<
String
,
ExceptionItem
>
bugs
=
temp
.
getBugs
();
Map
<
String
,
ExceptionItem
>
exceptions
=
temp
.
getExceptions
();
temp
.
setBugs
(
MapUtils
.
sortMap
(
bugs
,
compator
));
temp
.
setExceptions
(
MapUtils
.
sortMap
(
exceptions
,
compator
));
}
return
errors
;
}
public
class
BugReportVisitor
extends
BaseVisitor
{
private
String
m_domain
;
private
Map
<
String
,
ErrorStatis
>
m_errors
=
new
HashMap
<
String
,
ErrorStatis
>();
public
ErrorStatis
findOrCreateErrorStatis
(
String
productLine
)
{
ErrorStatis
statis
=
m_errors
.
get
(
productLine
);
if
(
statis
==
null
)
{
statis
=
new
ErrorStatis
();
m_errors
.
put
(
productLine
,
statis
);
}
return
statis
;
}
public
Map
<
String
,
ErrorStatis
>
getErrors
()
{
return
m_errors
;
}
@Override
public
void
visitDomain
(
Domain
domain
)
{
m_domain
=
domain
.
getId
();
super
.
visitDomain
(
domain
);
}
@Override
public
void
visitExceptionItem
(
ExceptionItem
exceptionItem
)
{
String
exception
=
exceptionItem
.
getId
();
int
count
=
exceptionItem
.
getCount
();
Project
project
=
findByDomain
(
m_domain
);
if
(
project
!=
null
)
{
String
productLine
=
project
.
getProjectLine
();
String
department
=
project
.
getDepartment
();
ErrorStatis
statis
=
findOrCreateErrorStatis
(
productLine
);
statis
.
setDepartment
(
department
);
statis
.
setProductLine
(
productLine
);
Map
<
String
,
ExceptionItem
>
items
=
null
;
if
(
isBug
(
m_domain
,
exception
))
{
items
=
statis
.
getBugs
();
}
else
{
items
=
statis
.
getExceptions
();
}
ExceptionItem
item
=
items
.
get
(
exception
);
if
(
item
==
null
)
{
item
=
new
ExceptionItem
(
exception
);
item
.
setCount
(
count
);
item
.
getMessages
().
addAll
(
exceptionItem
.
getMessages
());
items
.
put
(
exception
,
item
);
}
else
{
List
<
String
>
messages
=
item
.
getMessages
();
item
.
setCount
(
item
.
getCount
()
+
count
);
messages
.
addAll
(
exceptionItem
.
getMessages
());
if
(
messages
.
size
()
>
10
)
{
messages
=
messages
.
subList
(
0
,
10
);
}
}
}
}
}
public
class
ClearBugReport
extends
BaseVisitor
{
@Override
public
void
visitDomain
(
Domain
domain
)
{
String
domainName
=
domain
.
getId
();
Set
<
String
>
removes
=
new
HashSet
<
String
>();
Map
<
String
,
ExceptionItem
>
items
=
domain
.
getExceptionItems
();
for
(
ExceptionItem
item
:
items
.
values
())
{
if
(!
isBug
(
domainName
,
item
.
getId
()))
{
removes
.
add
(
item
.
getId
());
}
}
for
(
String
remove
:
removes
)
{
items
.
remove
(
remove
);
}
}
}
public
static
class
ErrorStatis
{
private
String
m_productLine
;
private
String
m_department
;
private
Map
<
String
,
ExceptionItem
>
m_bugs
=
new
HashMap
<
String
,
ExceptionItem
>();
private
Map
<
String
,
ExceptionItem
>
m_exceptions
=
new
HashMap
<
String
,
ExceptionItem
>();
public
Map
<
String
,
ExceptionItem
>
getBugs
()
{
return
m_bugs
;
}
public
String
getDepartment
()
{
return
m_department
;
}
public
Map
<
String
,
ExceptionItem
>
getExceptions
()
{
return
m_exceptions
;
}
public
String
getProductLine
()
{
return
m_productLine
;
}
public
void
setBugs
(
Map
<
String
,
ExceptionItem
>
bugs
)
{
m_bugs
=
bugs
;
}
public
void
setDepartment
(
String
department
)
{
m_department
=
department
;
}
public
void
setExceptions
(
Map
<
String
,
ExceptionItem
>
exceptions
)
{
m_exceptions
=
exceptions
;
}
public
void
setProductLine
(
String
productLine
)
{
m_productLine
=
productLine
;
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/bug/JspFile.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.page.bug
;
public
enum
JspFile
{
HOURLY_REPORT
(
"/jsp/report/bug/bug.jsp"
),
HISTORY_REPORT
(
"/jsp/report/bug/bugHistory.jsp"
),
HTTP_JSON
(
"/jsp/report/bug/bugApi.jsp"
),
;
private
String
m_path
;
private
JspFile
(
String
path
)
{
m_path
=
path
;
}
public
String
getPath
()
{
return
m_path
;
}
}
package
com.dianping.cat.report.page.bug
;
public
enum
JspFile
{
HOURLY_REPORT
(
"/jsp/report/bug/bug.jsp"
),
HISTORY_REPORT
(
"/jsp/report/bug/bugHistory.jsp"
),
HTTP_JSON
(
"/jsp/report/bug/bugApi.jsp"
),
SERVICE_REPORT
(
"/jsp/report/service/service.jsp"
),
SERVICE_HISTORY_REPORT
(
"/jsp/report/service/serviceHistory.jsp"
);
private
String
m_path
;
private
JspFile
(
String
path
)
{
m_path
=
path
;
}
public
String
getPath
()
{
return
m_path
;
}
}
cat-home/src/main/java/com/dianping/cat/report/page/bug/JspViewer.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.page.bug
;
import
com.dianping.cat.report.ReportPage
;
import
org.unidal.web.mvc.view.BaseJspViewer
;
public
class
JspViewer
extends
BaseJspViewer
<
ReportPage
,
Action
,
Context
,
Model
>
{
@Override
protected
String
getJspFilePath
(
Context
ctx
,
Model
model
)
{
Action
action
=
model
.
getAction
();
switch
(
action
)
{
case
HOURLY_REPORT:
return
JspFile
.
HOURLY_REPORT
.
getPath
();
case
HISTORY_REPORT:
return
JspFile
.
HISTORY_REPORT
.
getPath
();
case
HTTP_JSON:
return
JspFile
.
HTTP_JSON
.
getPath
();
}
throw
new
RuntimeException
(
"Unknown action: "
+
action
);
}
}
package
com.dianping.cat.report.page.bug
;
import
com.dianping.cat.report.ReportPage
;
import
org.unidal.web.mvc.view.BaseJspViewer
;
public
class
JspViewer
extends
BaseJspViewer
<
ReportPage
,
Action
,
Context
,
Model
>
{
@Override
protected
String
getJspFilePath
(
Context
ctx
,
Model
model
)
{
Action
action
=
model
.
getAction
();
switch
(
action
)
{
case
HOURLY_REPORT:
return
JspFile
.
HOURLY_REPORT
.
getPath
();
case
HISTORY_REPORT:
return
JspFile
.
HISTORY_REPORT
.
getPath
();
case
HTTP_JSON:
return
JspFile
.
HTTP_JSON
.
getPath
();
case
SERVICE_REPORT:
return
JspFile
.
SERVICE_REPORT
.
getPath
();
case
SERVICE_HISTORY_REPORT:
return
JspFile
.
SERVICE_HISTORY_REPORT
.
getPath
();
}
throw
new
RuntimeException
(
"Unknown action: "
+
action
);
}
}
cat-home/src/main/java/com/dianping/cat/report/page/bug/Model.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.page.bug
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Map
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.bug.transform.DefaultJsonBuilder
;
import
com.dianping.cat.report.page.AbstractReportModel
;
import
com.dianping.cat.report.page.bug.Handler.ErrorStatis
;
public
class
Model
extends
AbstractReportModel
<
Action
,
Context
>
{
private
BugReport
m_bugReport
;
private
Map
<
String
,
ErrorStatis
>
m_errorStatis
;
public
BugReport
getBugReport
()
{
return
m_bugReport
;
}
public
void
setBugReport
(
BugReport
bugReport
)
{
m_bugReport
=
bugReport
;
}
public
Map
<
String
,
ErrorStatis
>
getErrorStatis
()
{
return
m_errorStatis
;
}
public
void
setErrorStatis
(
Map
<
String
,
ErrorStatis
>
errorStatis
)
{
m_errorStatis
=
errorStatis
;
}
public
Model
(
Context
ctx
)
{
super
(
ctx
);
}
public
String
getBugs
()
{
return
new
DefaultJsonBuilder
().
buildJson
(
m_bugReport
);
}
@Override
public
Action
getDefaultAction
()
{
return
Action
.
HOURLY_REPORT
;
}
@Override
public
String
getDomain
()
{
return
CatString
.
CAT
;
}
@Override
public
Collection
<
String
>
getDomains
()
{
return
new
ArrayList
<
String
>();
}
}
package
com.dianping.cat.report.page.bug
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Map
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.bug.transform.DefaultJsonBuilder
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
import
com.dianping.cat.report.page.AbstractReportModel
;
import
com.dianping.cat.report.page.bug.Handler.ErrorStatis
;
public
class
Model
extends
AbstractReportModel
<
Action
,
Context
>
{
private
BugReport
m_bugReport
;
private
ServiceReport
m_serviceReport
;
private
List
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>
serviceList
;
public
ServiceReport
getServiceReport
()
{
return
m_serviceReport
;
}
public
void
setServiceReport
(
ServiceReport
serviceReport
)
{
m_serviceReport
=
serviceReport
;
}
public
List
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>
getServiceList
()
{
return
serviceList
;
}
public
void
setServiceList
(
List
<
com
.
dianping
.
cat
.
home
.
service
.
entity
.
Domain
>
serviceList
)
{
this
.
serviceList
=
serviceList
;
}
private
Map
<
String
,
ErrorStatis
>
m_errorStatis
;
public
BugReport
getBugReport
()
{
return
m_bugReport
;
}
public
void
setBugReport
(
BugReport
bugReport
)
{
m_bugReport
=
bugReport
;
}
public
Map
<
String
,
ErrorStatis
>
getErrorStatis
()
{
return
m_errorStatis
;
}
public
void
setErrorStatis
(
Map
<
String
,
ErrorStatis
>
errorStatis
)
{
m_errorStatis
=
errorStatis
;
}
public
Model
(
Context
ctx
)
{
super
(
ctx
);
}
public
String
getBugs
()
{
return
new
DefaultJsonBuilder
().
buildJson
(
m_bugReport
);
}
@Override
public
Action
getDefaultAction
()
{
return
Action
.
HOURLY_REPORT
;
}
@Override
public
String
getDomain
()
{
return
CatString
.
CAT
;
}
@Override
public
Collection
<
String
>
getDomains
()
{
return
new
ArrayList
<
String
>();
}
}
cat-home/src/main/java/com/dianping/cat/report/page/bug/Payload.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.page.bug
;
import
org.unidal.web.mvc.ActionContext
;
import
org.unidal.web.mvc.payload.annotation.FieldMeta
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.page.AbstractReportPayload
;
public
class
Payload
extends
AbstractReportPayload
<
Action
>
{
private
ReportPage
m_page
;
@FieldMeta
(
"op"
)
private
Action
m_action
;
public
Payload
()
{
super
(
ReportPage
.
BUG
);
}
@Override
public
Action
getAction
()
{
return
m_action
;
}
@Override
public
ReportPage
getPage
()
{
return
m_page
;
}
public
void
setAction
(
String
action
)
{
m_action
=
Action
.
getByName
(
action
,
Action
.
HOURLY_REPORT
);
}
@Override
public
void
setPage
(
String
page
)
{
m_page
=
ReportPage
.
getByName
(
page
,
ReportPage
.
BUG
);
}
@Override
public
void
validate
(
ActionContext
<?>
ctx
)
{
if
(
m_action
==
null
)
{
m_action
=
Action
.
HOURLY_REPORT
;
}
}
}
package
com.dianping.cat.report.page.bug
;
import
org.unidal.web.mvc.ActionContext
;
import
org.unidal.web.mvc.payload.annotation.FieldMeta
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.page.AbstractReportPayload
;
public
class
Payload
extends
AbstractReportPayload
<
Action
>
{
private
ReportPage
m_page
;
@FieldMeta
(
"op"
)
private
Action
m_action
;
@FieldMeta
(
"sort"
)
private
String
m_sortBy
=
"avg"
;
public
String
getSortBy
()
{
return
m_sortBy
;
}
public
void
setSortBy
(
String
sortBy
)
{
m_sortBy
=
sortBy
;
}
public
Payload
()
{
super
(
ReportPage
.
BUG
);
}
@Override
public
Action
getAction
()
{
return
m_action
;
}
@Override
public
ReportPage
getPage
()
{
return
m_page
;
}
public
void
setAction
(
String
action
)
{
m_action
=
Action
.
getByName
(
action
,
Action
.
HOURLY_REPORT
);
}
@Override
public
void
setPage
(
String
page
)
{
m_page
=
ReportPage
.
getByName
(
page
,
ReportPage
.
BUG
);
}
@Override
public
void
validate
(
ActionContext
<?>
ctx
)
{
if
(
m_action
==
null
)
{
m_action
=
Action
.
HOURLY_REPORT
;
}
}
}
cat-home/src/main/java/com/dianping/cat/report/service/DailyReportService.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.DailyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
public
interface
DailyReportService
{
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
,
Date
end
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
,
Date
end
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
,
Date
end
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
,
Date
end
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
,
Date
end
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
,
Date
end
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
,
Date
end
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
,
Date
end
);
public
boolean
insert
(
DailyReport
report
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
,
Date
end
);
}
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.DailyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
public
interface
DailyReportService
{
public
boolean
insert
(
DailyReport
report
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
,
Date
end
);
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
,
Date
end
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
,
Date
end
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
,
Date
end
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
,
Date
end
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
,
Date
end
);
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
,
Date
end
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
,
Date
end
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
,
Date
end
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
,
Date
end
);
}
cat-home/src/main/java/com/dianping/cat/report/service/HourlyReportService.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
java.util.Set
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.dependency.model.entity.DependencyReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.metric.model.entity.MetricReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.top.model.entity.TopReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.HourlyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
public
interface
HourlyReportService
{
public
Set
<
String
>
queryAllDomainNames
(
Date
start
,
Date
end
,
String
reportName
);
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
,
Date
end
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
,
Date
end
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
,
Date
end
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
,
Date
end
);
public
MetricReport
queryMetricReport
(
String
group
,
Date
start
,
Date
end
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
,
Date
end
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
,
Date
end
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
,
Date
end
);
public
TopReport
queryTopReport
(
String
domain
,
Date
start
,
Date
end
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
,
Date
end
);
public
DependencyReport
queryDependencyReport
(
String
domain
,
Date
start
,
Date
end
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
,
Date
end
);
public
boolean
insert
(
HourlyReport
report
);
}
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
java.util.Set
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.dependency.model.entity.DependencyReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.metric.model.entity.MetricReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.top.model.entity.TopReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.HourlyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
public
interface
HourlyReportService
{
public
boolean
insert
(
HourlyReport
report
);
public
Set
<
String
>
queryAllDomainNames
(
Date
start
,
Date
end
,
String
reportName
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
,
Date
end
);
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
,
Date
end
);
public
DependencyReport
queryDependencyReport
(
String
domain
,
Date
start
,
Date
end
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
,
Date
end
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
,
Date
end
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
,
Date
end
);
public
MetricReport
queryMetricReport
(
String
group
,
Date
start
,
Date
end
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
,
Date
end
);
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
,
Date
end
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
,
Date
end
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
,
Date
end
);
public
TopReport
queryTopReport
(
String
domain
,
Date
start
,
Date
end
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
,
Date
end
);
}
cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportCache.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
import
org.unidal.helper.Threads
;
import
org.unidal.helper.Threads.Task
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.ServerConfigManager
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.MatrixReportFilter
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.TransactionReportUrlFilter
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.message.Transaction
;
public
class
MonthlyReportCache
implements
Initializable
{
private
long
m_end
;
private
Map
<
String
,
TransactionReport
>
m_transactionReports
=
new
HashMap
<
String
,
TransactionReport
>();
private
Map
<
String
,
EventReport
>
m_eventReports
=
new
HashMap
<
String
,
EventReport
>();
private
Map
<
String
,
ProblemReport
>
m_problemReports
=
new
HashMap
<
String
,
ProblemReport
>();
private
Map
<
String
,
MatrixReport
>
m_matrixReports
=
new
HashMap
<
String
,
MatrixReport
>();
private
Map
<
String
,
CrossReport
>
m_crossReports
=
new
HashMap
<
String
,
CrossReport
>();
private
Map
<
String
,
SqlReport
>
m_sqlReports
=
new
HashMap
<
String
,
SqlReport
>();
private
Map
<
String
,
StateReport
>
m_stateReports
=
new
HashMap
<
String
,
StateReport
>();
private
Map
<
String
,
BugReport
>
m_bugReports
=
new
HashMap
<
String
,
BugReport
>();
@Inject
private
DailyReportService
m_dailyReportService
;
@Inject
private
HourlyReportService
m_hourReportService
;
@Inject
private
ServerConfigManager
m_serverConfigManager
;
@Override
public
void
initialize
()
throws
InitializationException
{
if
(
m_serverConfigManager
.
isJobMachine
())
{
Threads
.
forGroup
(
"Cat"
).
start
(
new
Reload
());
}
}
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
)
{
return
m_crossReports
.
get
(
domain
);
}
public
EventReport
queryEventReport
(
String
domain
,
Date
start
)
{
return
m_eventReports
.
get
(
domain
);
}
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
)
{
return
null
;
}
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
)
{
return
m_matrixReports
.
get
(
domain
);
}
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
)
{
return
m_problemReports
.
get
(
domain
);
}
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
)
{
return
m_sqlReports
.
get
(
domain
);
}
public
StateReport
queryStateReport
(
String
domain
,
Date
start
)
{
return
m_stateReports
.
get
(
domain
);
}
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
)
{
return
m_transactionReports
.
get
(
domain
);
}
public
class
Reload
implements
Task
{
@Override
public
String
getName
()
{
return
"Month-Report-Cache"
;
}
private
void
reload
()
{
Date
start
=
TimeUtil
.
getCurrentMonth
();
Date
end
=
TimeUtil
.
getCurrentDay
();
Set
<
String
>
domains
=
m_hourReportService
.
queryAllDomainNames
(
start
,
end
,
"transaction"
);
for
(
String
domain
:
domains
)
{
TransactionReport
transactionReport
=
m_dailyReportService
.
queryTransactionReport
(
domain
,
start
,
end
);
new
TransactionReportUrlFilter
().
visitTransactionReport
(
transactionReport
);
m_transactionReports
.
put
(
domain
,
transactionReport
);
m_eventReports
.
put
(
domain
,
m_dailyReportService
.
queryEventReport
(
domain
,
start
,
end
));
m_problemReports
.
put
(
domain
,
m_dailyReportService
.
queryProblemReport
(
domain
,
start
,
end
));
m_crossReports
.
put
(
domain
,
m_dailyReportService
.
queryCrossReport
(
domain
,
start
,
end
));
MatrixReport
matrixReport
=
m_dailyReportService
.
queryMatrixReport
(
domain
,
start
,
end
);
m_matrixReports
.
put
(
domain
,
matrixReport
);
new
MatrixReportFilter
().
visitMatrixReport
(
matrixReport
);
m_sqlReports
.
put
(
domain
,
m_dailyReportService
.
querySqlReport
(
domain
,
start
,
end
));
}
String
cat
=
"Cat"
;
m_stateReports
.
put
(
cat
,
m_dailyReportService
.
queryStateReport
(
cat
,
start
,
end
));
m_bugReports
.
put
(
cat
,
m_dailyReportService
.
queryBugReport
(
cat
,
start
,
end
));
m_end
=
end
.
getTime
();
}
@Override
public
void
run
()
{
boolean
active
=
true
;
while
(
active
)
{
Date
date
=
TimeUtil
.
getCurrentDay
();
long
time
=
date
.
getTime
();
if
(
time
>
m_end
)
{
Transaction
t
=
Cat
.
newTransaction
(
"ReportReload"
,
"Month"
);
try
{
reload
();
t
.
setStatus
(
Transaction
.
SUCCESS
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
t
.
setStatus
(
e
);
}
finally
{
t
.
complete
();
}
}
try
{
Thread
.
sleep
(
60
*
60
*
1000
);
}
catch
(
InterruptedException
e
)
{
active
=
false
;
}
}
}
@Override
public
void
shutdown
()
{
}
}
public
BugReport
queryBugReport
(
String
domain
,
Date
start
)
{
return
m_bugReports
.
get
(
domain
);
}
}
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
import
org.unidal.helper.Threads
;
import
org.unidal.helper.Threads.Task
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.ServerConfigManager
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.MatrixReportFilter
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.TransactionReportUrlFilter
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
import
com.dianping.cat.message.Transaction
;
public
class
MonthlyReportCache
implements
Initializable
{
private
long
m_end
;
private
Map
<
String
,
TransactionReport
>
m_transactionReports
=
new
HashMap
<
String
,
TransactionReport
>();
private
Map
<
String
,
EventReport
>
m_eventReports
=
new
HashMap
<
String
,
EventReport
>();
private
Map
<
String
,
ProblemReport
>
m_problemReports
=
new
HashMap
<
String
,
ProblemReport
>();
private
Map
<
String
,
MatrixReport
>
m_matrixReports
=
new
HashMap
<
String
,
MatrixReport
>();
private
Map
<
String
,
CrossReport
>
m_crossReports
=
new
HashMap
<
String
,
CrossReport
>();
private
Map
<
String
,
SqlReport
>
m_sqlReports
=
new
HashMap
<
String
,
SqlReport
>();
private
Map
<
String
,
StateReport
>
m_stateReports
=
new
HashMap
<
String
,
StateReport
>();
private
Map
<
String
,
BugReport
>
m_bugReports
=
new
HashMap
<
String
,
BugReport
>();
private
Map
<
String
,
ServiceReport
>
m_serviceReports
=
new
HashMap
<
String
,
ServiceReport
>();
@Inject
private
DailyReportService
m_dailyReportService
;
@Inject
private
HourlyReportService
m_hourReportService
;
@Inject
private
ServerConfigManager
m_serverConfigManager
;
@Override
public
void
initialize
()
throws
InitializationException
{
if
(
m_serverConfigManager
.
isJobMachine
())
{
Threads
.
forGroup
(
"Cat"
).
start
(
new
Reload
());
}
}
public
BugReport
queryBugReport
(
String
domain
,
Date
start
)
{
return
m_bugReports
.
get
(
domain
);
}
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
)
{
return
m_crossReports
.
get
(
domain
);
}
public
EventReport
queryEventReport
(
String
domain
,
Date
start
)
{
return
m_eventReports
.
get
(
domain
);
}
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
)
{
return
null
;
}
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
)
{
return
m_matrixReports
.
get
(
domain
);
}
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
)
{
return
m_problemReports
.
get
(
domain
);
}
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
)
{
return
m_serviceReports
.
get
(
domain
);
}
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
)
{
return
m_sqlReports
.
get
(
domain
);
}
public
StateReport
queryStateReport
(
String
domain
,
Date
start
)
{
return
m_stateReports
.
get
(
domain
);
}
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
)
{
return
m_transactionReports
.
get
(
domain
);
}
public
class
Reload
implements
Task
{
@Override
public
String
getName
()
{
return
"Month-Report-Cache"
;
}
private
void
reload
()
{
Date
start
=
TimeUtil
.
getCurrentMonth
();
Date
end
=
TimeUtil
.
getCurrentDay
();
Set
<
String
>
domains
=
m_hourReportService
.
queryAllDomainNames
(
start
,
end
,
"transaction"
);
for
(
String
domain
:
domains
)
{
TransactionReport
transactionReport
=
m_dailyReportService
.
queryTransactionReport
(
domain
,
start
,
end
);
new
TransactionReportUrlFilter
().
visitTransactionReport
(
transactionReport
);
m_transactionReports
.
put
(
domain
,
transactionReport
);
m_eventReports
.
put
(
domain
,
m_dailyReportService
.
queryEventReport
(
domain
,
start
,
end
));
m_problemReports
.
put
(
domain
,
m_dailyReportService
.
queryProblemReport
(
domain
,
start
,
end
));
m_crossReports
.
put
(
domain
,
m_dailyReportService
.
queryCrossReport
(
domain
,
start
,
end
));
MatrixReport
matrixReport
=
m_dailyReportService
.
queryMatrixReport
(
domain
,
start
,
end
);
m_matrixReports
.
put
(
domain
,
matrixReport
);
new
MatrixReportFilter
().
visitMatrixReport
(
matrixReport
);
m_sqlReports
.
put
(
domain
,
m_dailyReportService
.
querySqlReport
(
domain
,
start
,
end
));
}
String
cat
=
"Cat"
;
m_stateReports
.
put
(
cat
,
m_dailyReportService
.
queryStateReport
(
cat
,
start
,
end
));
m_bugReports
.
put
(
cat
,
m_dailyReportService
.
queryBugReport
(
cat
,
start
,
end
));
m_serviceReports
.
put
(
cat
,
m_dailyReportService
.
queryServiceReport
(
cat
,
start
,
end
));
m_end
=
end
.
getTime
();
}
@Override
public
void
run
()
{
boolean
active
=
true
;
while
(
active
)
{
Date
date
=
TimeUtil
.
getCurrentDay
();
long
time
=
date
.
getTime
();
if
(
time
>
m_end
)
{
Transaction
t
=
Cat
.
newTransaction
(
"ReportReload"
,
"Month"
);
try
{
reload
();
t
.
setStatus
(
Transaction
.
SUCCESS
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
t
.
setStatus
(
e
);
}
finally
{
t
.
complete
();
}
}
try
{
Thread
.
sleep
(
60
*
60
*
1000
);
}
catch
(
InterruptedException
e
)
{
active
=
false
;
}
}
}
@Override
public
void
shutdown
()
{
}
}
}
cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportService.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.MonthlyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
public
interface
MonthlyReportService
{
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
);
public
boolean
insert
(
MonthlyReport
report
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
);
}
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.MonthlyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
public
interface
MonthlyReportService
{
public
boolean
insert
(
MonthlyReport
report
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
);
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
);
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
);
}
cat-home/src/main/java/com/dianping/cat/report/service/ReportService.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
java.util.Set
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.dependency.model.entity.DependencyReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.metric.model.entity.MetricReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.top.model.entity.TopReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.DailyReport
;
import
com.dianping.cat.core.dal.HourlyReport
;
import
com.dianping.cat.core.dal.MonthlyReport
;
import
com.dianping.cat.core.dal.WeeklyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
public
interface
ReportService
{
public
Set
<
String
>
queryAllDomainNames
(
Date
start
,
Date
end
,
String
reportName
);
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
,
Date
end
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
,
Date
end
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
,
Date
end
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
,
Date
end
);
public
MetricReport
queryMetricReport
(
String
domain
,
Date
start
,
Date
end
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
,
Date
end
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
,
Date
end
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
,
Date
end
);
public
TopReport
queryTopReport
(
String
domain
,
Date
start
,
Date
end
);
public
DependencyReport
queryDependencyReport
(
String
domain
,
Date
start
,
Date
end
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
,
Date
end
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
,
Date
end
);
public
boolean
insertHourlyReport
(
HourlyReport
report
);
public
boolean
insertDailyReport
(
DailyReport
report
);
public
boolean
insertWeeklyReport
(
WeeklyReport
report
);
public
boolean
insertMonthlyReport
(
MonthlyReport
report
);
}
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
java.util.Set
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.dependency.model.entity.DependencyReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.metric.model.entity.MetricReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.top.model.entity.TopReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.DailyReport
;
import
com.dianping.cat.core.dal.HourlyReport
;
import
com.dianping.cat.core.dal.MonthlyReport
;
import
com.dianping.cat.core.dal.WeeklyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
public
interface
ReportService
{
public
boolean
insertDailyReport
(
DailyReport
report
);
public
boolean
insertHourlyReport
(
HourlyReport
report
);
public
boolean
insertMonthlyReport
(
MonthlyReport
report
);
public
boolean
insertWeeklyReport
(
WeeklyReport
report
);
public
Set
<
String
>
queryAllDomainNames
(
Date
start
,
Date
end
,
String
reportName
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
,
Date
end
);
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
,
Date
end
);
public
DependencyReport
queryDependencyReport
(
String
domain
,
Date
start
,
Date
end
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
,
Date
end
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
,
Date
end
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
,
Date
end
);
public
MetricReport
queryMetricReport
(
String
domain
,
Date
start
,
Date
end
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
,
Date
end
);
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
,
Date
end
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
,
Date
end
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
,
Date
end
);
public
TopReport
queryTopReport
(
String
domain
,
Date
start
,
Date
end
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
,
Date
end
);
}
cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportCache.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
import
org.unidal.helper.Threads
;
import
org.unidal.helper.Threads.Task
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.ServerConfigManager
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.MatrixReportFilter
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.TransactionReportUrlFilter
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.message.Transaction
;
public
class
WeeklyReportCache
implements
Initializable
{
private
long
m_end
;
private
Map
<
String
,
TransactionReport
>
m_transactionReports
=
new
HashMap
<
String
,
TransactionReport
>();
private
Map
<
String
,
EventReport
>
m_eventReports
=
new
HashMap
<
String
,
EventReport
>();
private
Map
<
String
,
ProblemReport
>
m_problemReports
=
new
HashMap
<
String
,
ProblemReport
>();
private
Map
<
String
,
MatrixReport
>
m_matrixReports
=
new
HashMap
<
String
,
MatrixReport
>();
private
Map
<
String
,
CrossReport
>
m_crossReports
=
new
HashMap
<
String
,
CrossReport
>();
private
Map
<
String
,
SqlReport
>
m_sqlReports
=
new
HashMap
<
String
,
SqlReport
>();
private
Map
<
String
,
StateReport
>
m_stateReports
=
new
HashMap
<
String
,
StateReport
>();
private
Map
<
String
,
BugReport
>
m_bugReports
=
new
HashMap
<
String
,
BugReport
>();
@Inject
private
DailyReportService
m_dailyReportService
;
@Inject
private
HourlyReportService
m_hourReportService
;
@Inject
private
ServerConfigManager
m_serverConfigManager
;
@Override
public
void
initialize
()
throws
InitializationException
{
if
(
m_serverConfigManager
.
isJobMachine
())
{
Threads
.
forGroup
(
"Cat"
).
start
(
new
Reload
());
}
}
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
)
{
return
m_crossReports
.
get
(
domain
);
}
public
EventReport
queryEventReport
(
String
domain
,
Date
start
)
{
return
m_eventReports
.
get
(
domain
);
}
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
)
{
return
null
;
}
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
)
{
return
m_matrixReports
.
get
(
domain
);
}
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
)
{
return
m_problemReports
.
get
(
domain
);
}
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
)
{
return
m_sqlReports
.
get
(
domain
);
}
public
StateReport
queryStateReport
(
String
domain
,
Date
start
)
{
return
m_stateReports
.
get
(
domain
);
}
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
)
{
return
m_transactionReports
.
get
(
domain
);
}
public
class
Reload
implements
Task
{
@Override
public
String
getName
()
{
return
"Weekly-Report-Cache"
;
}
private
void
reload
()
{
Date
start
=
TimeUtil
.
getCurrentWeek
();
Date
end
=
TimeUtil
.
getCurrentDay
();
Set
<
String
>
domains
=
m_hourReportService
.
queryAllDomainNames
(
start
,
end
,
"transaction"
);
for
(
String
domain
:
domains
)
{
TransactionReport
transactionReport
=
m_dailyReportService
.
queryTransactionReport
(
domain
,
start
,
end
);
new
TransactionReportUrlFilter
().
visitTransactionReport
(
transactionReport
);
m_transactionReports
.
put
(
domain
,
transactionReport
);
m_eventReports
.
put
(
domain
,
m_dailyReportService
.
queryEventReport
(
domain
,
start
,
end
));
m_problemReports
.
put
(
domain
,
m_dailyReportService
.
queryProblemReport
(
domain
,
start
,
end
));
m_crossReports
.
put
(
domain
,
m_dailyReportService
.
queryCrossReport
(
domain
,
start
,
end
));
MatrixReport
matrixReport
=
m_dailyReportService
.
queryMatrixReport
(
domain
,
start
,
end
);
m_matrixReports
.
put
(
domain
,
matrixReport
);
new
MatrixReportFilter
().
visitMatrixReport
(
matrixReport
);
m_sqlReports
.
put
(
domain
,
m_dailyReportService
.
querySqlReport
(
domain
,
start
,
end
));
}
String
cat
=
"Cat"
;
m_stateReports
.
put
(
cat
,
m_dailyReportService
.
queryStateReport
(
cat
,
start
,
end
));
m_bugReports
.
put
(
cat
,
m_dailyReportService
.
queryBugReport
(
cat
,
start
,
end
));
m_end
=
end
.
getTime
();
}
@Override
public
void
run
()
{
boolean
active
=
true
;
while
(
active
)
{
Date
date
=
TimeUtil
.
getCurrentDay
();
long
time
=
date
.
getTime
();
if
(
time
>
m_end
)
{
Transaction
t
=
Cat
.
newTransaction
(
"ReportReload"
,
"Week"
);
try
{
reload
();
t
.
setStatus
(
Transaction
.
SUCCESS
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
t
.
setStatus
(
e
);
}
finally
{
t
.
complete
();
}
}
try
{
Thread
.
sleep
(
60
*
60
*
1000
);
}
catch
(
InterruptedException
e
)
{
active
=
false
;
}
}
}
@Override
public
void
shutdown
()
{
}
}
public
BugReport
queryBugReport
(
String
domain
,
Date
start
)
{
return
m_bugReports
.
get
(
domain
);
}
}
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
import
org.unidal.helper.Threads
;
import
org.unidal.helper.Threads.Task
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.ServerConfigManager
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.MatrixReportFilter
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.TransactionReportUrlFilter
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
import
com.dianping.cat.message.Transaction
;
public
class
WeeklyReportCache
implements
Initializable
{
private
long
m_end
;
private
Map
<
String
,
TransactionReport
>
m_transactionReports
=
new
HashMap
<
String
,
TransactionReport
>();
private
Map
<
String
,
EventReport
>
m_eventReports
=
new
HashMap
<
String
,
EventReport
>();
private
Map
<
String
,
ProblemReport
>
m_problemReports
=
new
HashMap
<
String
,
ProblemReport
>();
private
Map
<
String
,
MatrixReport
>
m_matrixReports
=
new
HashMap
<
String
,
MatrixReport
>();
private
Map
<
String
,
CrossReport
>
m_crossReports
=
new
HashMap
<
String
,
CrossReport
>();
private
Map
<
String
,
SqlReport
>
m_sqlReports
=
new
HashMap
<
String
,
SqlReport
>();
private
Map
<
String
,
StateReport
>
m_stateReports
=
new
HashMap
<
String
,
StateReport
>();
private
Map
<
String
,
BugReport
>
m_bugReports
=
new
HashMap
<
String
,
BugReport
>();
private
Map
<
String
,
ServiceReport
>
m_serviceReports
=
new
HashMap
<
String
,
ServiceReport
>();
@Inject
private
DailyReportService
m_dailyReportService
;
@Inject
private
HourlyReportService
m_hourReportService
;
@Inject
private
ServerConfigManager
m_serverConfigManager
;
@Override
public
void
initialize
()
throws
InitializationException
{
if
(
m_serverConfigManager
.
isJobMachine
())
{
Threads
.
forGroup
(
"Cat"
).
start
(
new
Reload
());
}
}
public
BugReport
queryBugReport
(
String
domain
,
Date
start
)
{
return
m_bugReports
.
get
(
domain
);
}
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
)
{
return
m_crossReports
.
get
(
domain
);
}
public
EventReport
queryEventReport
(
String
domain
,
Date
start
)
{
return
m_eventReports
.
get
(
domain
);
}
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
)
{
return
null
;
}
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
)
{
return
m_matrixReports
.
get
(
domain
);
}
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
)
{
return
m_problemReports
.
get
(
domain
);
}
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
)
{
return
m_serviceReports
.
get
(
domain
);
}
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
)
{
return
m_sqlReports
.
get
(
domain
);
}
public
StateReport
queryStateReport
(
String
domain
,
Date
start
)
{
return
m_stateReports
.
get
(
domain
);
}
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
)
{
return
m_transactionReports
.
get
(
domain
);
}
public
class
Reload
implements
Task
{
@Override
public
String
getName
()
{
return
"Weekly-Report-Cache"
;
}
private
void
reload
()
{
Date
start
=
TimeUtil
.
getCurrentWeek
();
Date
end
=
TimeUtil
.
getCurrentDay
();
Set
<
String
>
domains
=
m_hourReportService
.
queryAllDomainNames
(
start
,
end
,
"transaction"
);
for
(
String
domain
:
domains
)
{
TransactionReport
transactionReport
=
m_dailyReportService
.
queryTransactionReport
(
domain
,
start
,
end
);
new
TransactionReportUrlFilter
().
visitTransactionReport
(
transactionReport
);
m_transactionReports
.
put
(
domain
,
transactionReport
);
m_eventReports
.
put
(
domain
,
m_dailyReportService
.
queryEventReport
(
domain
,
start
,
end
));
m_problemReports
.
put
(
domain
,
m_dailyReportService
.
queryProblemReport
(
domain
,
start
,
end
));
m_crossReports
.
put
(
domain
,
m_dailyReportService
.
queryCrossReport
(
domain
,
start
,
end
));
MatrixReport
matrixReport
=
m_dailyReportService
.
queryMatrixReport
(
domain
,
start
,
end
);
m_matrixReports
.
put
(
domain
,
matrixReport
);
new
MatrixReportFilter
().
visitMatrixReport
(
matrixReport
);
m_sqlReports
.
put
(
domain
,
m_dailyReportService
.
querySqlReport
(
domain
,
start
,
end
));
}
String
cat
=
"Cat"
;
m_stateReports
.
put
(
cat
,
m_dailyReportService
.
queryStateReport
(
cat
,
start
,
end
));
m_bugReports
.
put
(
cat
,
m_dailyReportService
.
queryBugReport
(
cat
,
start
,
end
));
m_serviceReports
.
put
(
cat
,
m_dailyReportService
.
queryServiceReport
(
cat
,
start
,
end
));
m_end
=
end
.
getTime
();
}
@Override
public
void
run
()
{
boolean
active
=
true
;
while
(
active
)
{
Date
date
=
TimeUtil
.
getCurrentDay
();
long
time
=
date
.
getTime
();
if
(
time
>
m_end
)
{
Transaction
t
=
Cat
.
newTransaction
(
"ReportReload"
,
"Week"
);
try
{
reload
();
t
.
setStatus
(
Transaction
.
SUCCESS
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
t
.
setStatus
(
e
);
}
finally
{
t
.
complete
();
}
}
try
{
Thread
.
sleep
(
60
*
60
*
1000
);
}
catch
(
InterruptedException
e
)
{
active
=
false
;
}
}
}
@Override
public
void
shutdown
()
{
}
}
}
cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportService.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.WeeklyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
public
interface
WeeklyReportService
{
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
);
public
boolean
insert
(
WeeklyReport
report
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
);
}
package
com.dianping.cat.report.service
;
import
java.util.Date
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.WeeklyReport
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
public
interface
WeeklyReportService
{
public
boolean
insert
(
WeeklyReport
report
);
public
BugReport
queryBugReport
(
String
domain
,
Date
start
);
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
);
public
EventReport
queryEventReport
(
String
domain
,
Date
start
);
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
);
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
);
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
);
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
);
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
);
public
StateReport
queryStateReport
(
String
domain
,
Date
start
);
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
);
}
cat-home/src/main/java/com/dianping/cat/report/service/impl/DailyReportServiceImpl.java
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/java/com/dianping/cat/report/service/impl/HourlyReportServiceImpl.java
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/java/com/dianping/cat/report/service/impl/MonthlyReportServiceImpl.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service.impl
;
import
java.util.Date
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.MonthlyReport
;
import
com.dianping.cat.core.dal.MonthlyReportDao
;
import
com.dianping.cat.core.dal.MonthlyReportEntity
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.report.service.MonthlyReportService
;
public
class
MonthlyReportServiceImpl
implements
MonthlyReportService
{
@Inject
private
MonthlyReportDao
m_monthlyReportDao
;
@Override
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"cross"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
cross
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
CrossReport
(
domain
);
}
@Override
public
EventReport
queryEventReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"event"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
event
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
EventReport
(
domain
);
}
@Override
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"heartbeat"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
heartbeat
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
HeartbeatReport
(
domain
);
}
@Override
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"matrix"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
matrix
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
MatrixReport
(
domain
);
}
@Override
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"problem"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
problem
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
ProblemReport
(
domain
);
}
@Override
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"sql"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
sql
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
SqlReport
(
domain
);
}
@Override
public
StateReport
queryStateReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"state"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
state
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
StateReport
(
domain
);
}
@Override
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"transaction"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
transaction
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
TransactionReport
(
domain
);
}
@Override
public
BugReport
queryBugReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"bug"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
home
.
bug
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
BugReport
(
domain
);
}
@Override
public
boolean
insert
(
MonthlyReport
report
)
{
try
{
m_monthlyReportDao
.
insert
(
report
);
return
true
;
}
catch
(
DalException
e
)
{
Cat
.
logError
(
e
);
return
false
;
}
}
}
package
com.dianping.cat.report.service.impl
;
import
java.util.Date
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.MonthlyReport
;
import
com.dianping.cat.core.dal.MonthlyReportDao
;
import
com.dianping.cat.core.dal.MonthlyReportEntity
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
import
com.dianping.cat.report.service.MonthlyReportService
;
public
class
MonthlyReportServiceImpl
implements
MonthlyReportService
{
@Inject
private
MonthlyReportDao
m_monthlyReportDao
;
@Override
public
boolean
insert
(
MonthlyReport
report
)
{
try
{
m_monthlyReportDao
.
insert
(
report
);
return
true
;
}
catch
(
DalException
e
)
{
Cat
.
logError
(
e
);
return
false
;
}
}
@Override
public
BugReport
queryBugReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"bug"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
home
.
bug
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
BugReport
(
domain
);
}
@Override
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"cross"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
cross
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
CrossReport
(
domain
);
}
@Override
public
EventReport
queryEventReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"event"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
event
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
EventReport
(
domain
);
}
@Override
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"heartbeat"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
heartbeat
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
HeartbeatReport
(
domain
);
}
@Override
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"matrix"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
matrix
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
MatrixReport
(
domain
);
}
@Override
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"problem"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
problem
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
ProblemReport
(
domain
);
}
@Override
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"service"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
home
.
service
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
ServiceReport
(
domain
);
}
@Override
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"sql"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
sql
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
SqlReport
(
domain
);
}
@Override
public
StateReport
queryStateReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"state"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
state
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
StateReport
(
domain
);
}
@Override
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
)
{
try
{
MonthlyReport
entity
=
m_monthlyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"transaction"
,
MonthlyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
transaction
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
TransactionReport
(
domain
);
}
}
cat-home/src/main/java/com/dianping/cat/report/service/impl/ReportServiceImpl.java
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/java/com/dianping/cat/report/service/impl/WeeklyReportServiceImpl.java
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.service.impl
;
import
java.util.Date
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.WeeklyReport
;
import
com.dianping.cat.core.dal.WeeklyReportDao
;
import
com.dianping.cat.core.dal.WeeklyReportEntity
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.report.service.WeeklyReportService
;
public
class
WeeklyReportServiceImpl
implements
WeeklyReportService
{
@Inject
private
WeeklyReportDao
m_weeklyReportDao
;
@Override
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"cross"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
cross
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
CrossReport
(
domain
);
}
@Override
public
EventReport
queryEventReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"event"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
event
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
EventReport
(
domain
);
}
@Override
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"heartbeat"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
heartbeat
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
HeartbeatReport
(
domain
);
}
@Override
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"matrix"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
matrix
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
MatrixReport
(
domain
);
}
@Override
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"problem"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
problem
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
ProblemReport
(
domain
);
}
@Override
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"sql"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
sql
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
SqlReport
(
domain
);
}
@Override
public
StateReport
queryStateReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"state"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
state
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
StateReport
(
domain
);
}
@Override
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"transaction"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
transaction
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
TransactionReport
(
domain
);
}
@Override
public
BugReport
queryBugReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"bug"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
home
.
bug
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
BugReport
(
domain
);
}
@Override
public
boolean
insert
(
WeeklyReport
report
)
{
try
{
m_weeklyReportDao
.
insert
(
report
);
return
true
;
}
catch
(
DalException
e
)
{
Cat
.
logError
(
e
);
return
false
;
}
}
}
package
com.dianping.cat.report.service.impl
;
import
java.util.Date
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.consumer.event.model.entity.EventReport
;
import
com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport
;
import
com.dianping.cat.consumer.matrix.model.entity.MatrixReport
;
import
com.dianping.cat.consumer.problem.model.entity.ProblemReport
;
import
com.dianping.cat.consumer.sql.model.entity.SqlReport
;
import
com.dianping.cat.consumer.state.model.entity.StateReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.core.dal.WeeklyReport
;
import
com.dianping.cat.core.dal.WeeklyReportDao
;
import
com.dianping.cat.core.dal.WeeklyReportEntity
;
import
com.dianping.cat.home.bug.entity.BugReport
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
import
com.dianping.cat.report.service.WeeklyReportService
;
public
class
WeeklyReportServiceImpl
implements
WeeklyReportService
{
@Inject
private
WeeklyReportDao
m_weeklyReportDao
;
@Override
public
boolean
insert
(
WeeklyReport
report
)
{
try
{
m_weeklyReportDao
.
insert
(
report
);
return
true
;
}
catch
(
DalException
e
)
{
Cat
.
logError
(
e
);
return
false
;
}
}
@Override
public
BugReport
queryBugReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"bug"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
home
.
bug
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
BugReport
(
domain
);
}
@Override
public
CrossReport
queryCrossReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"cross"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
cross
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
CrossReport
(
domain
);
}
@Override
public
EventReport
queryEventReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"event"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
event
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
EventReport
(
domain
);
}
@Override
public
HeartbeatReport
queryHeartbeatReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"heartbeat"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
heartbeat
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
HeartbeatReport
(
domain
);
}
@Override
public
MatrixReport
queryMatrixReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"matrix"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
matrix
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
MatrixReport
(
domain
);
}
@Override
public
ProblemReport
queryProblemReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"problem"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
problem
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
ProblemReport
(
domain
);
}
@Override
public
ServiceReport
queryServiceReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"service"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
home
.
service
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
ServiceReport
(
domain
);
}
@Override
public
SqlReport
querySqlReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"sql"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
sql
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
SqlReport
(
domain
);
}
@Override
public
StateReport
queryStateReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"state"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
state
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
StateReport
(
domain
);
}
@Override
public
TransactionReport
queryTransactionReport
(
String
domain
,
Date
start
)
{
try
{
WeeklyReport
entity
=
m_weeklyReportDao
.
findReportByDomainNamePeriod
(
start
,
domain
,
"transaction"
,
WeeklyReportEntity
.
READSET_FULL
);
String
content
=
entity
.
getContent
();
return
com
.
dianping
.
cat
.
consumer
.
transaction
.
model
.
transform
.
DefaultSaxParser
.
parse
(
content
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
return
new
TransactionReport
(
domain
);
}
}
cat-home/src/main/java/com/dianping/cat/report/task/service/ServiceReportBuilder.java
0 → 100644
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.task.service
;
import
java.util.Collection
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
org.unidal.lookup.annotation.Inject
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.configuration.NetworkInterfaceManager
;
import
com.dianping.cat.consumer.DomainManager
;
import
com.dianping.cat.consumer.cross.model.entity.CrossReport
;
import
com.dianping.cat.core.dal.DailyReport
;
import
com.dianping.cat.core.dal.HourlyReport
;
import
com.dianping.cat.core.dal.MonthlyReport
;
import
com.dianping.cat.core.dal.WeeklyReport
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.home.service.entity.Domain
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
import
com.dianping.cat.report.page.cross.display.ProjectInfo
;
import
com.dianping.cat.report.page.cross.display.TypeDetailInfo
;
import
com.dianping.cat.report.service.ReportService
;
import
com.dianping.cat.report.task.TaskHelper
;
import
com.dianping.cat.report.task.spi.ReportTaskBuilder
;
public
class
ServiceReportBuilder
implements
ReportTaskBuilder
{
@Inject
protected
ReportService
m_reportService
;
@Inject
private
DomainManager
m_domainManager
;
Map
<
String
,
Domain
>
stat
=
new
HashMap
<
String
,
Domain
>();
@Override
public
boolean
buildDailyTask
(
String
name
,
String
domain
,
Date
period
)
{
ServiceReport
serviceReport
=
queryHourlyReportsByDuration
(
name
,
domain
,
period
,
TaskHelper
.
tomorrowZero
(
period
));
DailyReport
report
=
new
DailyReport
();
report
.
setContent
(
serviceReport
.
toString
());
report
.
setCreationDate
(
new
Date
());
report
.
setDomain
(
domain
);
report
.
setIp
(
NetworkInterfaceManager
.
INSTANCE
.
getLocalHostAddress
());
report
.
setName
(
name
);
report
.
setPeriod
(
period
);
report
.
setType
(
1
);
return
m_reportService
.
insertDailyReport
(
report
);
}
@Override
public
boolean
buildHourlyTask
(
String
name
,
String
domain
,
Date
start
)
{
ServiceReport
serviceReport
=
new
ServiceReport
(
CatString
.
CAT
);
Date
end
=
new
Date
(
start
.
getTime
()
+
TimeUtil
.
ONE_HOUR
);
Set
<
String
>
domains
=
m_reportService
.
queryAllDomainNames
(
start
,
end
,
"cross"
);
for
(
String
domainName
:
domains
)
{
CrossReport
crossReport
=
m_reportService
.
queryCrossReport
(
domainName
,
start
,
end
);
ProjectInfo
projectInfo
=
new
ProjectInfo
(
TimeUtil
.
ONE_HOUR
);
projectInfo
.
setDomainManager
(
m_domainManager
);
projectInfo
.
setClientIp
(
CatString
.
ALL
);
projectInfo
.
visitCrossReport
(
crossReport
);
Collection
<
TypeDetailInfo
>
callInfos
=
projectInfo
.
getCallProjectsInfo
();
for
(
TypeDetailInfo
typeInfo
:
callInfos
)
{
if
(!
validataService
(
typeInfo
))
{
merge
(
serviceReport
.
findOrCreateDomain
(
typeInfo
.
getProjectName
()),
typeInfo
);
}
}
}
HourlyReport
report
=
new
HourlyReport
();
report
.
setContent
(
serviceReport
.
toString
());
report
.
setCreationDate
(
new
Date
());
report
.
setDomain
(
domain
);
report
.
setIp
(
NetworkInterfaceManager
.
INSTANCE
.
getLocalHostAddress
());
report
.
setName
(
name
);
report
.
setPeriod
(
start
);
report
.
setType
(
1
);
System
.
out
.
println
(
report
);
return
m_reportService
.
insertHourlyReport
(
report
);
}
public
void
merge
(
Domain
domain
,
TypeDetailInfo
info
)
{
domain
.
setTotalCount
(
domain
.
getTotalCount
()
+
info
.
getTotalCount
());
domain
.
setFailureCount
(
domain
.
getFailureCount
()
+
info
.
getFailureCount
());
domain
.
setSum
(
domain
.
getSum
()
+
info
.
getSum
());
if
(
domain
.
getTotalCount
()
>
0
)
{
domain
.
setAvg
(
domain
.
getSum
()
/
domain
.
getTotalCount
());
domain
.
setFailurePercent
((
double
)
domain
.
getFailureCount
()
/
domain
.
getTotalCount
());
}
}
private
boolean
validataService
(
TypeDetailInfo
typeInfo
)
{
return
typeInfo
.
getProjectName
().
equalsIgnoreCase
(
ProjectInfo
.
ALL_SERVER
)
||
typeInfo
.
getProjectName
().
equalsIgnoreCase
(
"UnknownProject"
);
}
public
Domain
findOrCreate
(
String
project
,
Map
<
String
,
Domain
>
sdMap
)
{
Domain
d
=
sdMap
.
get
(
project
);
if
(
d
==
null
)
{
d
=
new
Domain
();
sdMap
.
put
(
project
,
d
);
}
return
d
;
}
@Override
public
boolean
buildMonthlyTask
(
String
name
,
String
domain
,
Date
period
)
{
ServiceReport
serviceReport
=
queryDailyReportsByDuration
(
domain
,
period
,
TaskHelper
.
nextMonthStart
(
period
));
MonthlyReport
report
=
new
MonthlyReport
();
report
.
setContent
(
serviceReport
.
toString
());
report
.
setCreationDate
(
new
Date
());
report
.
setDomain
(
domain
);
report
.
setIp
(
NetworkInterfaceManager
.
INSTANCE
.
getLocalHostAddress
());
report
.
setName
(
name
);
report
.
setPeriod
(
period
);
report
.
setType
(
1
);
System
.
out
.
println
(
report
);
return
m_reportService
.
insertMonthlyReport
(
report
);
}
@Override
public
boolean
buildWeeklyTask
(
String
name
,
String
domain
,
Date
period
)
{
ServiceReport
serviceReport
=
queryDailyReportsByDuration
(
domain
,
period
,
new
Date
(
period
.
getTime
()
+
TimeUtil
.
ONE_WEEK
));
WeeklyReport
report
=
new
WeeklyReport
();
String
content
=
serviceReport
.
toString
();
report
.
setContent
(
content
);
report
.
setCreationDate
(
new
Date
());
report
.
setDomain
(
domain
);
report
.
setIp
(
NetworkInterfaceManager
.
INSTANCE
.
getLocalHostAddress
());
report
.
setName
(
name
);
report
.
setPeriod
(
period
);
report
.
setType
(
1
);
return
m_reportService
.
insertWeeklyReport
(
report
);
}
private
ServiceReport
queryDailyReportsByDuration
(
String
domain
,
Date
start
,
Date
end
)
{
long
startTime
=
start
.
getTime
();
long
endTime
=
end
.
getTime
();
ServiceReportMerger
merger
=
new
ServiceReportMerger
(
new
ServiceReport
(
domain
));
for
(;
startTime
<
endTime
;
startTime
+=
TimeUtil
.
ONE_DAY
)
{
try
{
ServiceReport
reportModel
=
m_reportService
.
queryServiceReport
(
domain
,
new
Date
(
startTime
),
new
Date
(
startTime
+
TimeUtil
.
ONE_DAY
));
reportModel
.
accept
(
merger
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
}
ServiceReport
serviceReport
=
merger
.
getServiceReport
();
serviceReport
.
setStartTime
(
start
);
serviceReport
.
setEndTime
(
end
);
return
serviceReport
;
}
private
ServiceReport
queryHourlyReportsByDuration
(
String
name
,
String
domain
,
Date
period
,
Date
endDate
)
{
long
startTime
=
period
.
getTime
();
long
endTime
=
endDate
.
getTime
();
ServiceReportMerger
merger
=
new
ServiceReportMerger
(
new
ServiceReport
(
domain
));
for
(;
startTime
<
endTime
;
startTime
=
startTime
+
TimeUtil
.
ONE_HOUR
)
{
Date
date
=
new
Date
(
startTime
);
ServiceReport
reportModel
=
m_reportService
.
queryServiceReport
(
domain
,
date
,
new
Date
(
date
.
getTime
()
+
TimeUtil
.
ONE_HOUR
));
reportModel
.
accept
(
merger
);
}
return
merger
.
getServiceReport
();
}
}
cat-home/src/main/java/com/dianping/cat/report/task/service/ServiceReportMerger.java
0 → 100644
浏览文件 @
4e7b5d09
package
com.dianping.cat.report.task.service
;
import
com.dianping.cat.home.service.entity.ServiceReport
;
import
com.dianping.cat.home.service.entity.Domain
;
import
com.dianping.cat.home.service.transform.DefaultMerger
;
public
class
ServiceReportMerger
extends
DefaultMerger
{
public
ServiceReportMerger
(
ServiceReport
serviceReport
)
{
super
(
serviceReport
);
}
@Override
protected
void
mergeServiceReport
(
ServiceReport
old
,
ServiceReport
bugReport
)
{
old
.
setStartTime
(
bugReport
.
getStartTime
());
old
.
setEndTime
(
bugReport
.
getEndTime
());
old
.
setDomain
(
bugReport
.
getDomain
());
super
.
mergeServiceReport
(
old
,
bugReport
);
}
@Override
protected
void
mergeDomain
(
Domain
old
,
Domain
domain
)
{
old
.
setTotalCount
(
old
.
getTotalCount
()
+
domain
.
getTotalCount
());
old
.
setFailureCount
(
old
.
getFailureCount
()
+
domain
.
getFailureCount
());
old
.
setFailurePercent
(
old
.
getFailureCount
()
*
1.0
/
old
.
getTotalCount
());
old
.
setSum
(
old
.
getSum
()
+
domain
.
getSum
());
old
.
setAvg
(
old
.
getSum
()
/
old
.
getTotalCount
());
}
}
cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/resources/META-INF/dal/model/service-report-codegen.xml
0 → 100644
浏览文件 @
4e7b5d09
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity
name=
"service-report"
root=
"true"
>
<attribute
name=
"startTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<attribute
name=
"domain"
value-type=
"String"
/>
<attribute
name=
"endTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<entity-ref
name=
"domain"
type=
"list"
names=
"domains"
/>
</entity>
<entity
name=
"domain"
>
<attribute
name=
"id"
value-type=
"String"
/>
<element
name=
"totalCount"
value-type=
"int"
/>
<element
name=
"failureCount"
value-type=
"int"
/>
<element
name=
"failurePercent"
value-type=
"double"
/>
<element
name=
"sum"
value-type=
"int"
/>
<element
name=
"avg"
value-type=
"int"
/>
<element
name=
"qps"
value-type=
"int"
/>
</entity>
</model>
cat-home/src/main/resources/META-INF/dal/model/service-report-manifest.xml
0 → 100644
浏览文件 @
4e7b5d09
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file
path=
"service-report-codegen.xml"
/>
<file
path=
"service-report-model.xml"
/>
</manifest>
cat-home/src/main/resources/META-INF/dal/model/service-report-model.xml
0 → 100644
浏览文件 @
4e7b5d09
<?xml version="1.0" encoding="UTF-8"?>
<model
model-package=
"com.dianping.cat.home.service"
enable-merger=
"true"
enable-sax-parser=
"true"
enable-base-visitor=
"true"
enable-json-parser=
"true"
enable-json-builder=
"true"
enable-native-parser=
"true"
enable-native-builder=
"true"
enable-xml-parser=
"false"
enable-xml-builder=
"false"
>
<entity
name=
"service-report"
root=
"true"
>
<attribute
name=
"startTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<attribute
name=
"domain"
value-type=
"String"
key=
"true"
/>
<attribute
name=
"endTime"
value-type=
"Date"
format=
"yyyy-MM-dd HH:mm:ss"
/>
<entity-ref
name=
"domain"
type=
"map"
names=
"domains"
method-find-or-create=
"true"
/>
</entity>
<entity
name=
"domain"
>
<attribute
name=
"id"
value-type=
"String"
key=
"true"
/>
<element
name=
"totalCount"
value-type=
"long"
primitive=
"true"
/>
<element
name=
"failureCount"
value-type=
"long"
primitive=
"true"
/>
<element
name=
"failurePercent"
value-type=
"double"
primitive=
"true"
/>
<element
name=
"sum"
value-type=
"double"
primitive=
"true"
/>
<element
name=
"avg"
value-type=
"double"
primitive=
"true"
/>
<element
name=
"qps"
value-type=
"double"
primitive=
"true"
/>
</entity>
</model>
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
4e7b5d09
...
...
@@ -450,6 +450,15 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.service.ServiceReportBuilder
</role>
<implementation>
com.dianping.cat.report.task.service.ServiceReportBuilder
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.service.ReportService
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.task.matrix.MatrixReportBuilder
</role>
<implementation>
com.dianping.cat.report.task.matrix.MatrixReportBuilder
</implementation>
...
...
@@ -547,6 +556,9 @@
<requirement>
<role>
com.dianping.cat.report.task.bug.BugReportBuilder
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.service.ServiceReportBuilder
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.metric.MetricBaselineReportBuilder
</role>
</requirement>
...
...
@@ -2495,7 +2507,7 @@
<role>
com.dianping.cat.report.service.ReportService
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.
report.view.DomainNavManager
</role>
<role>
com.dianping.cat.
core.dal.ProjectDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.system.config.BugConfigManager
</role>
...
...
cat-home/src/main/resources/META-INF/wizard/model/wizard.xml
浏览文件 @
4e7b5d09
...
...
@@ -18,4 +18,7 @@
<model
package=
"com.dianping.cat.home.bug.config"
name=
"bug-config"
>
<sample-model>
src/test/resources/com/dianping/cat/report/page/bug/bug-config.xml
</sample-model>
</model>
<model
package=
"com.dianping.cat.home.service"
name=
"service-report"
>
<sample-model>
src\test\resources\com\dianping\cat\report\page\service\service.xml
</sample-model>
</model>
</wizard>
cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml
浏览文件 @
4e7b5d09
...
...
@@ -56,7 +56,7 @@
<page
name=
"externalError"
title=
"externalError"
path=
"externalError"
template=
"default"
>
<description>
ExternalError
</description>
</page>
<page
name=
"bug"
title=
"
Bug
"
path=
"bug"
view=
"/jsp/report/bug/bug.jsp"
template=
"default"
>
<page
name=
"bug"
title=
"
Statistics
"
path=
"bug"
view=
"/jsp/report/bug/bug.jsp"
template=
"default"
>
<description>
Bug
</description>
</page>
</module>
...
...
cat-home/src/main/webapp/jsp/report/bug/bug.jsp
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/webapp/jsp/report/bug/bugApi.jsp
浏览文件 @
4e7b5d09
<%@ page
contentType=
"text/html; charset=utf-8"
%>
<jsp:useBean
id=
"model"
type=
"com.dianping.cat.report.page.bug.Model"
scope=
"request"
/>
${model.bugs}
<%@ page
contentType=
"text/html; charset=utf-8"
%>
<jsp:useBean
id=
"model"
type=
"com.dianping.cat.report.page.bug.Model"
scope=
"request"
/>
${model.bugs}
cat-home/src/main/webapp/jsp/report/bug/bugHistory.jsp
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/webapp/jsp/report/bug/detail.jsp
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/webapp/jsp/report/bugTree.jsp
0 → 100644
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/webapp/jsp/report/service/service.jsp
0 → 100644
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/main/webapp/jsp/report/service/serviceHistory.jsp
0 → 100644
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/test/java/com/dianping/cat/report/task/service/ServiceBuilderTest.java
0 → 100644
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
cat-home/src/test/resources/com/dianping/cat/report/page/service/service.xml
0 → 100644
浏览文件 @
4e7b5d09
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录