Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
255dba5b
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,发现更多精彩内容 >>
提交
255dba5b
编写于
3月 12, 2012
作者:
Y
You Yong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add the sql report
上级
e16aee58
变更
23
隐藏空白更改
内联
并排
Showing
23 changed file
with
536 addition
and
133 deletion
+536
-133
cat-home/datasources.xml
cat-home/datasources.xml
+17
-0
cat-home/pom.xml
cat-home/pom.xml
+5
-0
cat-home/src/main/java/com/dianping/cat/report/ReportModule.java
...e/src/main/java/com/dianping/cat/report/ReportModule.java
+3
-1
cat-home/src/main/java/com/dianping/cat/report/ReportPage.java
...ome/src/main/java/com/dianping/cat/report/ReportPage.java
+6
-8
cat-home/src/main/java/com/dianping/cat/report/page/sql/Action.java
...rc/main/java/com/dianping/cat/report/page/sql/Action.java
+26
-0
cat-home/src/main/java/com/dianping/cat/report/page/sql/Context.java
...c/main/java/com/dianping/cat/report/page/sql/Context.java
+7
-0
cat-home/src/main/java/com/dianping/cat/report/page/sql/Handler.java
...c/main/java/com/dianping/cat/report/page/sql/Handler.java
+88
-0
cat-home/src/main/java/com/dianping/cat/report/page/sql/JspFile.java
...c/main/java/com/dianping/cat/report/page/sql/JspFile.java
+17
-0
cat-home/src/main/java/com/dianping/cat/report/page/sql/JspViewer.java
...main/java/com/dianping/cat/report/page/sql/JspViewer.java
+18
-0
cat-home/src/main/java/com/dianping/cat/report/page/sql/Model.java
...src/main/java/com/dianping/cat/report/page/sql/Model.java
+45
-0
cat-home/src/main/java/com/dianping/cat/report/page/sql/Payload.java
...c/main/java/com/dianping/cat/report/page/sql/Payload.java
+42
-0
cat-home/src/main/java/com/dianping/cat/report/page/sql/SqlReport.java
...main/java/com/dianping/cat/report/page/sql/SqlReport.java
+62
-0
cat-home/src/main/java/com/dianping/cat/report/page/sql/SqlReportModel.java
...java/com/dianping/cat/report/page/sql/SqlReportModel.java
+49
-0
cat-home/src/main/java/com/dianping/cat/report/view/NavigationBar.java
...main/java/com/dianping/cat/report/view/NavigationBar.java
+4
-3
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+52
-103
cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml
...home/src/main/resources/META-INF/wizard/webapp/wizard.xml
+3
-0
cat-home/src/main/webapp/jsp/report/sql.jsp
cat-home/src/main/webapp/jsp/report/sql.jsp
+52
-0
cat-home/src/test/java/com/dianping/cat/SimpleServer.java
cat-home/src/test/java/com/dianping/cat/SimpleServer.java
+1
-1
cat-job/src/main/java/com/dianping/cat/job/sql/database/SqlRecordJobReducer.java
...om/dianping/cat/job/sql/database/SqlRecordJobReducer.java
+5
-9
cat-job/src/main/java/com/dianping/cat/job/sql/database/SqlReportJobRecord.java
...com/dianping/cat/job/sql/database/SqlReportJobRecord.java
+3
-3
cat-job/src/main/resources/META-INF/dal/jdbc/dal.xml
cat-job/src/main/resources/META-INF/dal/jdbc/dal.xml
+27
-1
cat-job/src/main/resources/META-INF/plexus/components.xml
cat-job/src/main/resources/META-INF/plexus/components.xml
+2
-2
cat-job/src/test/java/com/dianping/cat/job/sql/SqlRecordTest.java
...src/test/java/com/dianping/cat/job/sql/SqlRecordTest.java
+2
-2
未找到文件。
cat-home/datasources.xml
0 → 100644
浏览文件 @
255dba5b
<?xml version="1.0" encoding="utf-8"?>
<data-sources>
<data-source
id=
"cat"
>
<maximum-pool-size>
3
</maximum-pool-size>
<connection-timeout>
1s
</connection-timeout>
<idle-timeout>
10m
</idle-timeout>
<statement-cache-size>
1000
</statement-cache-size>
<properties>
<driver>
com.mysql.jdbc.Driver
</driver>
<url>
<![CDATA[jdbc:mysql://localhost:3306/cat]]>
</url>
<user>
root
</user>
<password>
123456
</password>
<connectionProperties>
<![CDATA[useUnicode=true&autoReconnect=true]]>
</connectionProperties>
</properties>
</data-source>
</data-sources>
cat-home/pom.xml
浏览文件 @
255dba5b
...
...
@@ -46,6 +46,11 @@
<groupId>
org.mortbay.jetty
</groupId>
<artifactId>
jsp-2.1
</artifactId>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
com.site.common
</groupId>
<artifactId>
test-framework
</artifactId>
...
...
cat-home/src/main/java/com/dianping/cat/report/ReportModule.java
浏览文件 @
255dba5b
...
...
@@ -9,6 +9,8 @@ import com.site.web.mvc.annotation.ModulePagesMeta;
com
.
dianping
.
cat
.
report
.
page
.
home
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
problem
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
transaction
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
logview
.
Handler
.
class
,
...
...
@@ -17,7 +19,7 @@ com.dianping.cat.report.page.ip.Handler.class,
com
.
dianping
.
cat
.
report
.
page
.
model
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
problem
.
Handler
.
class
com
.
dianping
.
cat
.
report
.
page
.
sql
.
Handler
.
class
})
public
class
ReportModule
extends
AbstractModule
{
...
...
cat-home/src/main/java/com/dianping/cat/report/ReportPage.java
浏览文件 @
255dba5b
...
...
@@ -7,19 +7,17 @@ public enum ReportPage implements Page {
HOME
(
"home"
,
"home"
,
"Home"
,
"CAT Home Page."
,
true
),
TRANSACTION
(
"transaction"
,
"t"
,
"Transaction"
,
"CAT summary report for Transactions in current hour.
"
,
true
),
PROBLEM
(
"problem"
,
"p"
,
"Problem"
,
"Problem discovered
"
,
true
),
FAILURE
(
"failure"
,
"f"
,
"Failure"
,
"CAT details report for failed messages in current hour.
"
,
true
),
TRANSACTION
(
"transaction"
,
"t"
,
"Transaction"
,
"Transaction summary report
"
,
true
),
LOGVIEW
(
"logview"
,
"m"
,
"Logview"
,
"
CAT log details view for a given message.
"
,
false
),
LOGVIEW
(
"logview"
,
"m"
,
"Logview"
,
"
Log view details
"
,
false
),
IP
(
"ip"
,
"ip"
,
"Top IP List"
,
"Top visited IP
list in current hour.
"
,
true
),
IP
(
"ip"
,
"ip"
,
"Top IP List"
,
"Top visited IP
addresses
"
,
true
),
SERVICE
(
"service"
,
"service"
,
"Service"
,
"Service Home
"
,
false
),
MODEL
(
"model"
,
"model"
,
"Model"
,
"Service model
"
,
false
),
MODEL
(
"model"
,
"model"
,
"Model"
,
"Model Service"
,
false
),
PROBLEM
(
"problem"
,
"p"
,
"Problem"
,
"Problem"
,
true
);
SQL
(
"sql"
,
"sql"
,
"Sql"
,
"Sql"
,
true
);
private
String
m_name
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/sql/Action.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
public
enum
Action
implements
com
.
site
.
web
.
mvc
.
Action
{
VIEW
(
"view"
);
private
String
m_name
;
private
Action
(
String
name
)
{
m_name
=
name
;
}
public
static
Action
getByName
(
String
name
,
Action
defaultAction
)
{
for
(
Action
action
:
Action
.
values
())
{
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/sql/Context.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
import
com.dianping.cat.report.ReportContext
;
public
class
Context
extends
ReportContext
<
Payload
>
{
}
cat-home/src/main/java/com/dianping/cat/report/page/sql/Handler.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
javax.servlet.ServletException
;
import
com.dianping.cat.job.sql.dal.SqlReportRecord
;
import
com.dianping.cat.job.sql.dal.SqlReportRecordDao
;
import
com.dianping.cat.job.sql.dal.SqlReportRecordEntity
;
import
com.dianping.cat.report.ReportPage
;
import
com.site.dal.jdbc.DalException
;
import
com.site.dal.jdbc.Readset
;
import
com.site.lookup.annotation.Inject
;
import
com.site.web.mvc.PageHandler
;
import
com.site.web.mvc.annotation.InboundActionMeta
;
import
com.site.web.mvc.annotation.OutboundActionMeta
;
import
com.site.web.mvc.annotation.PayloadMeta
;
public
class
Handler
implements
PageHandler
<
Context
>
{
@Inject
private
JspViewer
m_jspViewer
;
@Inject
private
SqlReportRecordDao
m_dao
;
@Override
@PayloadMeta
(
Payload
.
class
)
@InboundActionMeta
(
name
=
"sql"
)
public
void
handleInbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
// display only, no action here
}
@Override
@OutboundActionMeta
(
name
=
"sql"
)
public
void
handleOutbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
Model
model
=
new
Model
(
ctx
);
model
.
setAction
(
Action
.
VIEW
);
model
.
setPage
(
ReportPage
.
SQL
);
Payload
payload
=
ctx
.
getPayload
();
SqlReport
report
=
new
SqlReport
();
String
domain
=
payload
.
getDomain
();
long
startDate
=
payload
.
getDate
();
model
.
setDate
(
startDate
);
Date
transactiondate
=
new
Date
(
startDate
);
List
<
String
>
domains
=
new
ArrayList
<
String
>();
Readset
<
SqlReportRecord
>
domainSet
=
SqlReportRecordEntity
.
READSET_DOMAIN
;
List
<
SqlReportModel
>
sqlRecordModels
=
new
ArrayList
<
SqlReportModel
>();
try
{
List
<
SqlReportRecord
>
recordsForDomain
=
m_dao
.
findAllDistinctByDate
(
transactiondate
,
domainSet
);
if
(
recordsForDomain
!=
null
)
{
for
(
SqlReportRecord
record
:
recordsForDomain
)
{
domains
.
add
(
record
.
getDomain
());
}
}
else
{
if
(
domain
!=
null
)
{
domains
.
add
(
domain
);
}
}
if
(
domain
==
null
&&
domains
.
size
()
>
0
)
{
domain
=
domains
.
get
(
0
);
}
List
<
SqlReportRecord
>
reportRecords
=
m_dao
.
findAllByDomainAndDate
(
domain
,
transactiondate
,
SqlReportRecordEntity
.
READSET_FULL
);
if
(
reportRecords
!=
null
)
{
for
(
SqlReportRecord
record
:
reportRecords
)
{
sqlRecordModels
.
add
(
new
SqlReportModel
(
record
));
}
}
if
(
domain
!=
null
)
{
reportRecords
=
m_dao
.
findAllByDomainAndDate
(
domain
,
transactiondate
,
domainSet
);
}
report
.
setDomain
(
domain
).
setDomains
(
domains
).
setReportRecords
(
sqlRecordModels
);
report
.
setStartTime
(
new
Date
(
startDate
)).
setEndTime
(
new
Date
(
startDate
+
60
*
60
*
1000
-
100
));
model
.
setReport
(
report
);
}
catch
(
DalException
e
)
{
e
.
printStackTrace
();
}
m_jspViewer
.
view
(
ctx
,
model
);
}
}
cat-home/src/main/java/com/dianping/cat/report/page/sql/JspFile.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
public
enum
JspFile
{
VIEW
(
"/jsp/report/sql.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/sql/JspViewer.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
import
com.dianping.cat.report.ReportPage
;
import
com.site.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
VIEW:
return
JspFile
.
VIEW
.
getPath
();
}
throw
new
RuntimeException
(
"Unknown action: "
+
action
);
}
}
cat-home/src/main/java/com/dianping/cat/report/page/sql/Model.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
import
java.util.Collection
;
import
java.util.Collections
;
import
com.dianping.cat.report.page.AbstractReportModel
;
public
class
Model
extends
AbstractReportModel
<
Action
,
Context
>
{
private
SqlReport
m_report
;
public
Model
(
Context
ctx
)
{
super
(
ctx
);
}
@Override
public
Action
getDefaultAction
()
{
return
Action
.
VIEW
;
}
public
SqlReport
getReport
()
{
return
m_report
;
}
public
void
setReport
(
SqlReport
report
)
{
this
.
m_report
=
report
;
}
@Override
public
String
getDomain
()
{
if
(
m_report
==
null
)
{
return
null
;
}
else
{
return
m_report
.
getDomain
();
}
}
@Override
public
Collection
<
String
>
getDomains
()
{
if
(
m_report
==
null
)
{
return
Collections
.
emptySet
();
}
else
{
return
m_report
.
getDomains
();
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/sql/Payload.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.page.AbstractReportPayload
;
import
com.dianping.cat.report.page.transaction.Action
;
import
com.site.web.mvc.ActionContext
;
import
com.site.web.mvc.payload.annotation.FieldMeta
;
public
class
Payload
extends
AbstractReportPayload
<
Action
>
{
private
ReportPage
m_page
;
@FieldMeta
(
"op"
)
private
Action
m_action
;
public
Payload
()
{
super
(
ReportPage
.
SQL
);
}
public
void
setAction
(
Action
action
)
{
m_action
=
action
;
}
@Override
public
Action
getAction
()
{
return
m_action
;
}
@Override
public
ReportPage
getPage
()
{
return
m_page
;
}
@Override
public
void
setPage
(
String
page
)
{
m_page
=
ReportPage
.
getByName
(
page
,
ReportPage
.
SQL
);
}
@Override
public
void
validate
(
ActionContext
<?>
ctx
)
{
}
}
cat-home/src/main/java/com/dianping/cat/report/page/sql/SqlReport.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
import
java.util.Date
;
import
java.util.List
;
public
class
SqlReport
{
private
Date
m_startTime
;
private
Date
m_endTime
;
private
List
<
String
>
m_domains
;
private
String
m_domain
;
private
List
<
SqlReportModel
>
m_reportRecords
;
public
Date
getStartTime
()
{
return
m_startTime
;
}
public
SqlReport
setStartTime
(
Date
startTime
)
{
m_startTime
=
startTime
;
return
this
;
}
public
Date
getEndTime
()
{
return
m_endTime
;
}
public
SqlReport
setEndTime
(
Date
endTime
)
{
m_endTime
=
endTime
;
return
this
;
}
public
List
<
String
>
getDomains
()
{
return
m_domains
;
}
public
SqlReport
setDomains
(
List
<
String
>
domains
)
{
m_domains
=
domains
;
return
this
;
}
public
String
getDomain
()
{
return
m_domain
;
}
public
SqlReport
setDomain
(
String
domain
)
{
m_domain
=
domain
;
return
this
;
}
public
List
<
SqlReportModel
>
getReportRecords
()
{
return
m_reportRecords
;
}
public
void
setReportRecords
(
List
<
SqlReportModel
>
reportRecords
)
{
m_reportRecords
=
reportRecords
;
}
}
cat-home/src/main/java/com/dianping/cat/report/page/sql/SqlReportModel.java
0 → 100644
浏览文件 @
255dba5b
package
com.dianping.cat.report.page.sql
;
import
java.text.DecimalFormat
;
import
com.dianping.cat.job.sql.dal.SqlReportRecord
;
public
class
SqlReportModel
{
private
SqlReportRecord
m_record
;
private
DecimalFormat
percent
=
new
DecimalFormat
(
"#.##%"
);
private
DecimalFormat
number
=
new
DecimalFormat
(
"#.##"
);
public
SqlReportModel
(
SqlReportRecord
record
)
{
m_record
=
record
;
}
public
String
getFailurePercent
()
{
double
value
=
m_record
.
getFailures
()
/
m_record
.
getTotalcount
();
return
percent
.
format
(
value
);
}
public
String
getLongPercent
()
{
double
value
=
m_record
.
getLongsqls
()
/
m_record
.
getTotalcount
();
return
percent
.
format
(
value
);
}
public
String
getAvg
()
{
double
value
=
m_record
.
getSumvalue
()
/
m_record
.
getTotalcount
();
return
number
.
format
(
value
);
}
public
String
getStd
()
{
double
sum2
=
m_record
.
getSum2value
();
int
count
=
m_record
.
getTotalcount
();
double
avg
=
m_record
.
getSumvalue
()
/
m_record
.
getTotalcount
();
double
std
=
Math
.
sqrt
(
sum2
/
count
-
avg
*
avg
);
return
number
.
format
(
std
);
}
public
SqlReportRecord
getRecord
()
{
return
m_record
;
}
public
void
setRecord
(
SqlReportRecord
record
)
{
m_record
=
record
;
}
}
cat-home/src/main/java/com/dianping/cat/report/view/NavigationBar.java
浏览文件 @
255dba5b
...
...
@@ -9,15 +9,16 @@ public class NavigationBar {
ReportPage
.
HOME
,
ReportPage
.
FAILURE
,
//
ReportPage.FAILURE,
ReportPage
.
TRANSACTION
,
ReportPage
.
PROBLEM
,
ReportPage
.
IP
,
ReportPage
.
SERVICE
,
ReportPage
.
SQL
,
//ReportPage.SERVICE,
ReportPage
.
LOGVIEW
...
...
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
255dba5b
...
...
@@ -22,47 +22,6 @@
<fileServer>
127.0.0.1
</fileServer>
</configuration>
</component>
<component>
<role>
com.dianping.cat.report.page.service.provider.ModelProvider
</role>
<role-hint>
failure
</role-hint>
<implementation>
com.dianping.cat.report.page.service.provider.FailureModelProvider
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.message.spi.MessageConsumer
</role>
<role-hint>
realtime
</role-hint>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.service.provider.ModelProvider
</role>
<role-hint>
transaction
</role-hint>
<implementation>
com.dianping.cat.report.page.service.provider.TransactionModelProvider
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.message.spi.MessageConsumer
</role>
<role-hint>
realtime
</role-hint>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.service.provider.ModelProvider
</role>
<role-hint>
ip
</role-hint>
<implementation>
com.dianping.cat.report.page.service.provider.IpModelProvider
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.message.spi.MessageConsumer
</role>
<role-hint>
realtime
</role-hint>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.failure.FailureManager
</role>
<implementation>
com.dianping.cat.report.page.failure.FailureManager
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.transaction.TransactionManager
</role>
<implementation>
com.dianping.cat.report.page.transaction.TransactionManager
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.ip.IpManager
</role>
<implementation>
com.dianping.cat.report.page.ip.IpManager
</implementation>
...
...
@@ -230,60 +189,43 @@
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.
transaction
.Handler
</role>
<implementation>
com.dianping.cat.report.page.
transaction
.Handler
</implementation>
<role>
com.dianping.cat.report.page.
problem
.Handler
</role>
<implementation>
com.dianping.cat.report.page.
problem
.Handler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.page.
transaction
.JspViewer
</role>
<role>
com.dianping.cat.report.page.
problem
.JspViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
transaction
</role-hint>
<role-hint>
problem
</role-hint>
<field-name>
m_service
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.graph.GraphBuilder
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.
transaction
.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.
transaction
.JspViewer
</implementation>
<role>
com.dianping.cat.report.page.
problem
.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.
problem
.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.
failure
.Handler
</role>
<implementation>
com.dianping.cat.report.page.
failure
.Handler
</implementation>
<role>
com.dianping.cat.report.page.
transaction
.Handler
</role>
<implementation>
com.dianping.cat.report.page.
transaction
.Handler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.ServerConfig
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.failure.JspViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.failure.FailureManager
</role>
<role>
com.dianping.cat.report.page.transaction.JspViewer
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.ServerConfig
</role>
<implementation>
com.dianping.cat.report.ServerConfig
</implementation>
<requirements>
<requirement>
<role>
java.util.List
</role>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
transaction
</role-hint>
<field-name>
m_service
</field-name>
</requirement>
<requirement>
<role>
java.lang.String
</role>
<role>
com.dianping.cat.report.graph.GraphBuilder
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.failure.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.failure.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.failure.FailureManager
</role>
<implementation>
com.dianping.cat.report.page.failure.FailureManager
</implementation>
<role>
com.dianping.cat.report.page.transaction.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.transaction.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.logview.Handler
</role>
...
...
@@ -323,36 +265,20 @@
<implementation>
com.dianping.cat.report.page.ip.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.ip.IpManager
</role>
<implementation>
com.dianping.cat.report.page.ip.IpManager
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.service.Handler
</role>
<implementation>
com.dianping.cat.report.page.service.Handler
</implementation>
<role>
com.dianping.cat.report.ServerConfig
</role>
<implementation>
com.dianping.cat.report.ServerConfig
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.page.service.JspViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.service.provider.ModelProvider
</role>
<role-hint>
failure
</role-hint>
<field-name>
m_failureModel
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.service.provider.ModelProvider
</role>
<role-hint>
transaction
</role-hint>
<field-name>
m_transactionModel
</field-name>
<role>
java.util.List
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.service.provider.ModelProvider
</role>
<role-hint>
ip
</role-hint>
<field-name>
m_ipModel
</field-name>
<role>
java.lang.String
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.
service.JspView
er
</role>
<implementation>
com.dianping.cat.report.page.
service.JspView
er
</implementation>
<role>
com.dianping.cat.report.page.
ip.IpManag
er
</role>
<implementation>
com.dianping.cat.report.page.
ip.IpManag
er
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.model.Handler
</role>
...
...
@@ -366,6 +292,11 @@
<role-hint>
transaction-local
</role-hint>
<field-name>
m_transactionService
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
problem-local
</role-hint>
<field-name>
m_problemService
</field-name>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
logview-local
</role-hint>
...
...
@@ -388,6 +319,17 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.model.problem.LocalProblemService
</role>
<implementation>
com.dianping.cat.report.page.model.problem.LocalProblemService
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.message.spi.MessageConsumer
</role>
<role-hint>
realtime
</role-hint>
<field-name>
m_consumer
</field-name>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.model.logview.LocalLogViewService
</role>
<implementation>
com.dianping.cat.report.page.model.logview.LocalLogViewService
</implementation>
...
...
@@ -398,22 +340,29 @@
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.
problem
.Handler
</role>
<implementation>
com.dianping.cat.report.page.
problem
.Handler
</implementation>
<role>
com.dianping.cat.report.page.
sql
.Handler
</role>
<implementation>
com.dianping.cat.report.page.
sql
.Handler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.page.
problem
.JspViewer
</role>
<role>
com.dianping.cat.report.page.
sql
.JspViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
problem
</role-hint>
<field-name>
m_service
</field-name>
<role>
com.dianping.cat.job.sql.dal.SqlReportRecordDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.problem.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.problem.JspViewer
</implementation>
<role>
com.dianping.cat.report.page.sql.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.sql.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.job.sql.dal.SqlReportRecordDao
</role>
<implementation>
com.dianping.cat.job.sql.dal.SqlReportRecordDao
</implementation>
<requirements>
<requirement>
<role>
com.site.dal.jdbc.QueryEngine
</role>
</requirement>
</requirements>
</component>
</components>
</plexus>
cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml
浏览文件 @
255dba5b
...
...
@@ -20,6 +20,9 @@
<page
name=
"model"
title=
"Model"
path=
"model"
standalone=
"false"
>
<description>
Service model
</description>
</page>
<page
name=
"sql"
title=
"Sql"
path=
"sql"
>
<description>
Sql
</description>
</page>
</module>
</webapp>
</wizard>
...
...
cat-home/src/main/webapp/jsp/report/sql.jsp
0 → 100644
浏览文件 @
255dba5b
<%@ page
contentType=
"text/html; charset=utf-8"
%>
<%@ taglib
prefix=
"a"
uri=
"/WEB-INF/app.tld"
%>
<%@ taglib
prefix=
"w"
uri=
"/web/core"
%>
<%@ taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%>
<%@ taglib
prefix=
"res"
uri=
"http://www.unidal.org/webres"
%>
<jsp:useBean
id=
"ctx"
type=
"com.dianping.cat.report.page.sql.Context"
scope=
"request"
/>
<jsp:useBean
id=
"payload"
type=
"com.dianping.cat.report.page.sql.Payload"
scope=
"request"
/>
<jsp:useBean
id=
"model"
type=
"com.dianping.cat.report.page.sql.Model"
scope=
"request"
/>
<a:report
title=
"SQL Report"
navUrlPrefix=
"domain=${model.domain}"
timestamp=
"
${
w:
format
(
model
.
currentTime
,
'yyyy-MM-dd HH:mm:ss'
)
}
"
>
<jsp:attribute
name=
"subtitle"
>
From ${w:format(model.report.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(model.report.endTime,'yyyy-MM-dd HH:mm:ss')}
</jsp:attribute>
<jsp:body>
<res:useCss
value=
"
${
res
.
css
.
local
.
transaction_css
}
"
target=
"head-css"
/>
<res:useJs
value=
"
${
res
.
js
.
local
[
'jquery-1.7.1.js'
]
}
"
target=
"head-js"
/>
<res:useJs
value=
"
${
res
.
js
.
local
.
transaction_js
}
"
target=
"head-js"
/>
<br>
<table
class=
"sql"
>
<tr>
<th>
SQL
</th>
<th>
Total
</th>
<th>
Failure
</th>
<th>
Failure%
</th>
<th>
LongSQL
</th>
<th>
Long%
</th>
<th>
Min/Max/Avg/Std(ms)
</th>
<th>
95% Avg
</th>
<th>
Sample Link
</th>
</tr>
<c:forEach
var=
"reportRecord"
items=
"
${
model
.
report
.
reportRecords
}
"
varStatus=
"status"
>
<tr
class=
"${status.index mod 2 != 0 ? 'odd' : 'even'}"
>
<td>
${reportRecord.record.name}
</td>
<td>
${reportRecord.record.totalcount}
</td>
<td>
${reportRecord.record.failures}
</td>
<td>
${reportRecord.failurePercent}
</td>
<td>
${reportRecord.record.longsqls}
</td>
<td>
${reportRecord.longPercent}
</td>
<td>
${reportRecord.record.minvalue}/${reportRecord.record.maxvalue}/${reportRecord.avg}/${reportRecord.std}
</td>
<td>
${reportRecord.avg}
</td>
<td><a
href=
'cat/r/m/${reportRecord.record.samplelink}/logview.html'
>
Link
</a></td>
</tr>
</c:forEach>
</table>
<br>
</jsp:body>
</a:report>
cat-home/src/test/java/com/dianping/cat/SimpleServer.java
浏览文件 @
255dba5b
...
...
@@ -101,7 +101,7 @@ public class SimpleServer extends SimpleServerSupport {
@Test
public
void
startServer
()
throws
Exception
{
// open the page in the default browser
s_adaptor
.
display
(
"/cat/r"
);
//
s_adaptor.display("/cat/r");
System
.
out
.
println
(
String
.
format
(
"[%s] Press any key to stop server ... "
,
getTimestamp
()));
System
.
in
.
read
();
...
...
cat-job/src/main/java/com/dianping/cat/job/sql/database/SqlRecordJobReducer.java
浏览文件 @
255dba5b
...
...
@@ -7,19 +7,19 @@ import org.apache.hadoop.io.Text;
import
org.apache.hadoop.mapreduce.Reducer
;
import
org.codehaus.plexus.component.repository.exception.ComponentLookupException
;
import
com.dianping.cat.job.sql.dal.Sql
report
;
import
com.dianping.cat.job.sql.dal.Sql
report
Dao
;
import
com.dianping.cat.job.sql.dal.Sql
ReportRecord
;
import
com.dianping.cat.job.sql.dal.Sql
ReportRecord
Dao
;
import
com.site.dal.jdbc.DalException
;
public
class
SqlRecordJobReducer
extends
Reducer
<
Text
,
Text
,
Text
,
Text
>{
public
void
reduce
(
Text
key
,
Iterable
<
Text
>
values
,
Context
context
)
throws
IOException
,
InterruptedException
{
Text
currentHour
=
values
.
iterator
().
next
();
SqlReport
Record
sql
=
new
SqlReport
Record
(
currentHour
.
toString
(),
key
.
toString
());
SqlReport
JobRecord
sql
=
new
SqlReportJob
Record
(
currentHour
.
toString
(),
key
.
toString
());
try
{
Sql
reportDao
dao
=
ContainerBootstrap
.
INSTANCE
.
lookup
(
Sqlreport
Dao
.
class
);
Sql
report
row
=
dao
.
createLocal
();
Sql
ReportRecordDao
dao
=
ContainerBootstrap
.
INSTANCE
.
lookup
(
SqlReportRecord
Dao
.
class
);
Sql
ReportRecord
row
=
dao
.
createLocal
();
row
.
setDomain
(
sql
.
getDomain
());
row
.
setTotalcount
(
sql
.
getTotalCount
());
row
.
setFailures
(
sql
.
getFailureCount
());
...
...
@@ -36,13 +36,9 @@ public class SqlRecordJobReducer extends Reducer<Text, Text, Text, Text>{
row
.
setCreationdate
(
new
Date
());
dao
.
insert
(
row
);
}
catch
(
ComponentLookupException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
catch
(
DalException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
System
.
out
.
println
(
sql
);
}
}
cat-job/src/main/java/com/dianping/cat/job/sql/database/SqlReportRecord.java
→
cat-job/src/main/java/com/dianping/cat/job/sql/database/SqlReport
Job
Record.java
浏览文件 @
255dba5b
...
...
@@ -4,7 +4,7 @@ import java.text.ParseException;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
public
class
SqlReportRecord
{
public
class
SqlReport
Job
Record
{
private
String
m_domain
;
...
...
@@ -43,7 +43,7 @@ public class SqlReportRecord {
private
static
final
String
SPIT
=
"\t"
;
public
SqlReportRecord
(){
public
SqlReport
Job
Record
(){
}
...
...
@@ -68,7 +68,7 @@ public class SqlReportRecord {
}
// domain1 SQLStatement Internal9 500 500 500 100 199 74750 11591750 147
public
SqlReportRecord
(
String
currentHour
,
String
text
)
{
public
SqlReport
Job
Record
(
String
currentHour
,
String
text
)
{
try
{
m_transactionDate
=
hourFormat
.
parse
(
currentHour
);
...
...
cat-job/src/main/resources/META-INF/dal/jdbc/dal.xml
浏览文件 @
255dba5b
<?xml version="1.0" encoding="UTF-8"?>
<entities
do-package=
"com.dianping.cat.job.sql.dal"
gen=
"true"
>
<entity
name=
"sqlreport"
table=
"SqlReport"
alias=
"s"
>
<entity
name=
"sqlreport"
class-name=
"SqlReportRecord"
table=
"SqlReport"
alias=
"s"
>
<member
name=
"minvalue"
field=
"MinValue"
value-type=
"double"
length=
"22"
nullable=
"false"
/>
<member
name=
"maxvalue"
field=
"MaxValue"
value-type=
"double"
...
...
@@ -12,6 +12,32 @@
length=
"22"
nullable=
"false"
/>
<member
name=
"sum2value"
field=
"Sum2Value"
value-type=
"double"
length=
"22"
nullable=
"false"
/>
<readsets>
<readset
name=
"DOMAIN"
>
<member
name=
"domain"
/>
</readset>
</readsets>
<query-defs>
<query
name=
"find-all-by-domain-and-date"
type=
"SELECT"
multiple=
"true"
>
<param
name=
"domain"
/>
<param
name=
"transactiondate"
/>
<statement>
<![CDATA[
SELECT <FIELDS/>
FROM
<TABLE/>
WHERE
<FIELD
name=
'domain'
/>
= ${domain}
AND
<FIELD
name=
'transactiondate'
/>
= ${transactiondate}
]]>
</statement>
</query>
<query
name=
"find-all-distinct-by-date"
type=
"SELECT"
multiple=
"true"
>
<param
name=
"transactiondate"
/>
<statement>
<![CDATA[
SELECT distinct <FIELDS/>
FROM
<TABLE/>
WHERE
<FIELD
name=
'transactiondate'
/>
= ${transactiondate}
]]>
</statement>
</query>
</query-defs>
</entity>
</entities>
cat-job/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
255dba5b
...
...
@@ -86,8 +86,8 @@
</configuration>
</component>
<component>
<role>
com.dianping.cat.job.sql.dal.Sql
report
Dao
</role>
<implementation>
com.dianping.cat.job.sql.dal.Sql
report
Dao
</implementation>
<role>
com.dianping.cat.job.sql.dal.Sql
ReportRecord
Dao
</role>
<implementation>
com.dianping.cat.job.sql.dal.Sql
ReportRecord
Dao
</implementation>
<requirements>
<requirement>
<role>
com.site.dal.jdbc.QueryEngine
</role>
...
...
cat-job/src/test/java/com/dianping/cat/job/sql/SqlRecordTest.java
浏览文件 @
255dba5b
...
...
@@ -8,7 +8,7 @@ import org.junit.Test;
import
org.junit.runner.RunWith
;
import
org.junit.runners.JUnit4
;
import
com.dianping.cat.job.sql.database.SqlReportRecord
;
import
com.dianping.cat.job.sql.database.SqlReport
Job
Record
;
@RunWith
(
JUnit4
.
class
)
public
class
SqlRecordTest
{
...
...
@@ -23,7 +23,7 @@ public class SqlRecordTest {
@Test
public
void
test2
()
{
String
text
=
"domain1 SQLStatement-Internal9 insert into mysql where is='sfsdf' 500 500 500 100 199 74750 11591750 147 www.sina.com"
;
SqlReport
Record
record
=
new
SqlReport
Record
(
"20120309/11"
,
text
);
SqlReport
JobRecord
record
=
new
SqlReportJob
Record
(
"20120309/11"
,
text
);
Assert
.
assertEquals
(
"domain1"
,
record
.
getDomain
());
Assert
.
assertEquals
(
"SQLStatement-Internal9"
,
record
.
getName
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录