Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
741a17f9
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,发现更多精彩内容 >>
提交
741a17f9
编写于
3月 06, 2012
作者:
F
Frankie Wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add problem page
上级
8bfc8a20
变更
33
隐藏空白更改
内联
并排
Showing
33 changed file
with
547 addition
and
80 deletion
+547
-80
cat-consumer/src/main/java/com/dianping/cat/consumer/failure/FailureAnalyzer.java
...va/com/dianping/cat/consumer/failure/FailureAnalyzer.java
+13
-0
cat-consumer/src/main/java/com/dianping/cat/consumer/transaction/TransactionAnalyzer.java
...ianping/cat/consumer/transaction/TransactionAnalyzer.java
+0
-1
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
-4
cat-home/src/main/java/com/dianping/cat/report/build/ComponentsConfigurator.java
...com/dianping/cat/report/build/ComponentsConfigurator.java
+6
-17
cat-home/src/main/java/com/dianping/cat/report/build/ServiceComponentConfigurator.java
...anping/cat/report/build/ServiceComponentConfigurator.java
+34
-0
cat-home/src/main/java/com/dianping/cat/report/build/WebComponentConfigurator.java
...m/dianping/cat/report/build/WebComponentConfigurator.java
+20
-0
cat-home/src/main/java/com/dianping/cat/report/page/failure/Handler.java
...in/java/com/dianping/cat/report/page/failure/Handler.java
+0
-1
cat-home/src/main/java/com/dianping/cat/report/page/model/failure/LocalFailureModelService.java
...t/report/page/model/failure/LocalFailureModelService.java
+32
-9
cat-home/src/main/java/com/dianping/cat/report/page/model/spi/ModelRequest.java
.../com/dianping/cat/report/page/model/spi/ModelRequest.java
+9
-4
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/CompositeTransactionModelService.java
...e/model/transaction/CompositeTransactionModelService.java
+51
-3
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HdfsTransactionModelService.java
...t/page/model/transaction/HdfsTransactionModelService.java
+19
-0
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/LocalTransactionModelService.java
.../page/model/transaction/LocalTransactionModelService.java
+3
-4
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/RemoteTransactionModelService.java
...page/model/transaction/RemoteTransactionModelService.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/TransactionReportMerger.java
...eport/page/model/transaction/TransactionReportMerger.java
+0
-12
cat-home/src/main/java/com/dianping/cat/report/page/problem/Action.java
...ain/java/com/dianping/cat/report/page/problem/Action.java
+26
-0
cat-home/src/main/java/com/dianping/cat/report/page/problem/Context.java
...in/java/com/dianping/cat/report/page/problem/Context.java
+7
-0
cat-home/src/main/java/com/dianping/cat/report/page/problem/Handler.java
...in/java/com/dianping/cat/report/page/problem/Handler.java
+80
-0
cat-home/src/main/java/com/dianping/cat/report/page/problem/JspFile.java
...in/java/com/dianping/cat/report/page/problem/JspFile.java
+17
-0
cat-home/src/main/java/com/dianping/cat/report/page/problem/JspViewer.java
.../java/com/dianping/cat/report/page/problem/JspViewer.java
+18
-0
cat-home/src/main/java/com/dianping/cat/report/page/problem/Model.java
...main/java/com/dianping/cat/report/page/problem/Model.java
+33
-0
cat-home/src/main/java/com/dianping/cat/report/page/problem/Payload.java
...in/java/com/dianping/cat/report/page/problem/Payload.java
+41
-0
cat-home/src/main/java/com/dianping/cat/report/page/service/provider/TransactionModelProvider.java
...eport/page/service/provider/TransactionModelProvider.java
+2
-0
cat-home/src/main/java/com/dianping/cat/report/page/transaction/Handler.java
...ava/com/dianping/cat/report/page/transaction/Handler.java
+20
-7
cat-home/src/main/java/com/dianping/cat/report/page/transaction/Payload.java
...ava/com/dianping/cat/report/page/transaction/Payload.java
+4
-4
cat-home/src/main/java/com/dianping/cat/report/view/NavigationBar.java
...main/java/com/dianping/cat/report/view/NavigationBar.java
+2
-0
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+71
-10
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/css/problem.css
cat-home/src/main/webapp/css/problem.css
+0
-0
cat-home/src/main/webapp/js/problem.js
cat-home/src/main/webapp/js/problem.js
+0
-0
cat-home/src/main/webapp/jsp/report/ip.jsp
cat-home/src/main/webapp/jsp/report/ip.jsp
+1
-1
cat-home/src/main/webapp/jsp/report/problem.jsp
cat-home/src/main/webapp/jsp/report/problem.jsp
+24
-0
cat-home/src/main/webapp/jsp/report/transaction.jsp
cat-home/src/main/webapp/jsp/report/transaction.jsp
+1
-1
未找到文件。
cat-consumer/src/main/java/com/dianping/cat/consumer/failure/FailureAnalyzer.java
浏览文件 @
741a17f9
...
...
@@ -6,6 +6,7 @@ import java.text.SimpleDateFormat;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -141,7 +142,19 @@ public class FailureAnalyzer extends AbstractMessageAnalyzer<FailureReport> impl
@Override
protected
void
process
(
MessageTree
tree
)
{
String
domain
=
tree
.
getDomain
();
FailureReport
report
=
m_reports
.
get
(
domain
);
if
(
report
==
null
)
{
report
=
new
FailureReport
();
report
.
setDomain
(
domain
);
report
.
setStartTime
(
new
Date
(
m_startTime
));
report
.
setEndTime
(
new
Date
(
m_startTime
+
MINUTE
*
60
-
1
));
m_reports
.
put
(
domain
,
report
);
}
// TODO
}
public
void
setAnalyzerInfo
(
long
startTime
,
long
duration
,
String
domain
,
long
extraTime
)
{
...
...
cat-consumer/src/main/java/com/dianping/cat/consumer/transaction/TransactionAnalyzer.java
浏览文件 @
741a17f9
...
...
@@ -40,7 +40,6 @@ import com.site.lookup.annotation.Inject;
*/
public
class
TransactionAnalyzer
extends
AbstractMessageAnalyzer
<
TransactionReport
>
implements
Initializable
,
LogEnabled
{
private
static
final
SimpleDateFormat
FILE_SDF
=
new
SimpleDateFormat
(
"yyyyMMddHHmm"
);
private
static
final
long
MINUTE
=
60
*
1000
;
...
...
cat-home/src/main/java/com/dianping/cat/report/ReportModule.java
浏览文件 @
741a17f9
...
...
@@ -19,7 +19,9 @@ com.dianping.cat.report.page.ip.Handler.class,
com
.
dianping
.
cat
.
report
.
page
.
service
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
model
.
Handler
.
class
com
.
dianping
.
cat
.
report
.
page
.
model
.
Handler
.
class
,
com
.
dianping
.
cat
.
report
.
page
.
problem
.
Handler
.
class
})
public
class
ReportModule
extends
AbstractModule
{
...
...
cat-home/src/main/java/com/dianping/cat/report/ReportPage.java
浏览文件 @
741a17f9
...
...
@@ -7,17 +7,19 @@ public enum ReportPage implements Page {
HOME
(
"home"
,
"home"
,
"Home"
,
"CAT Home Page."
,
true
),
TRANSACTION
(
"transaction"
,
"t"
,
"Transaction"
,
"CA
L
summary report for Transactions in current hour."
,
true
),
TRANSACTION
(
"transaction"
,
"t"
,
"Transaction"
,
"CA
T
summary report for Transactions in current hour."
,
true
),
FAILURE
(
"failure"
,
"f"
,
"Failure"
,
"CA
L detail report for failure
messages in current hour."
,
true
),
FAILURE
(
"failure"
,
"f"
,
"Failure"
,
"CA
T details report for failed
messages in current hour."
,
true
),
LOGVIEW
(
"logview"
,
"m"
,
"Logview"
,
"CA
L
log details view for a given message."
,
false
),
LOGVIEW
(
"logview"
,
"m"
,
"Logview"
,
"CA
T
log details view for a given message."
,
false
),
IP
(
"ip"
,
"ip"
,
"Top IP List"
,
"Top visited IP list in current hour."
,
true
),
SERVICE
(
"service"
,
"service"
,
"Service"
,
"Service Home"
,
false
),
MODEL
(
"model"
,
"model"
,
"Model"
,
"Model Service"
,
false
);
MODEL
(
"model"
,
"model"
,
"Model"
,
"Model Service"
,
false
),
PROBLEM
(
"problem"
,
"p"
,
"Problem"
,
"Problem"
,
true
);
private
String
m_name
;
...
...
cat-home/src/main/java/com/dianping/cat/report/build/ComponentsConfigurator.java
浏览文件 @
741a17f9
...
...
@@ -6,7 +6,6 @@ import java.util.List;
import
com.dianping.cat.message.spi.MessageConsumer
;
import
com.dianping.cat.message.spi.MessageConsumerRegistry
;
import
com.dianping.cat.message.spi.internal.DefaultMessageConsumerRegistry
;
import
com.dianping.cat.report.ReportModule
;
import
com.dianping.cat.report.ServerConfig
;
import
com.dianping.cat.report.graph.DefaultGraphBuilder
;
import
com.dianping.cat.report.graph.DefaultValueTranslater
;
...
...
@@ -14,21 +13,16 @@ import com.dianping.cat.report.graph.GraphBuilder;
import
com.dianping.cat.report.graph.ValueTranslater
;
import
com.dianping.cat.report.page.failure.FailureManager
;
import
com.dianping.cat.report.page.ip.IpManager
;
import
com.dianping.cat.report.page.model.spi.ModelService
;
import
com.dianping.cat.report.page.model.transaction.CompositeTransactionModelService
;
import
com.dianping.cat.report.page.model.transaction.LocalTransactionModelService
;
import
com.dianping.cat.report.page.model.transaction.RemoteTransactionModelService
;
import
com.dianping.cat.report.page.service.provider.FailureModelProvider
;
import
com.dianping.cat.report.page.service.provider.IpModelProvider
;
import
com.dianping.cat.report.page.service.provider.ModelProvider
;
import
com.dianping.cat.report.page.service.provider.TransactionModelProvider
;
import
com.dianping.cat.report.page.transaction.TransactionManager
;
import
com.site.lookup.configuration.AbstractResourceConfigurator
;
import
com.site.lookup.configuration.Component
;
import
com.site.web.configuration.AbstractWebComponentsConfigurator
;
public
class
ComponentsConfigurator
extends
Abstract
WebComponents
Configurator
{
public
class
ComponentsConfigurator
extends
Abstract
Resource
Configurator
{
@Override
@SuppressWarnings
(
"unchecked"
)
public
List
<
Component
>
defineComponents
()
{
List
<
Component
>
all
=
new
ArrayList
<
Component
>();
...
...
@@ -57,19 +51,14 @@ public class ComponentsConfigurator extends AbstractWebComponentsConfigurator {
all
.
add
(
C
(
IpManager
.
class
));
all
.
add
(
C
(
ModelService
.
class
,
"transaction-local"
,
LocalTransactionModelService
.
class
)
//
.
req
(
MessageConsumer
.
class
,
"realtime"
));
all
.
add
(
C
(
ModelService
.
class
,
"transaction-localhost"
,
RemoteTransactionModelService
.
class
)
//
.
config
(
E
(
"host"
).
value
(
"localhost"
)));
all
.
add
(
C
(
ModelService
.
class
,
"transaction"
,
CompositeTransactionModelService
.
class
)
//
.
req
(
ModelService
.
class
,
new
String
[]
{
"transaction-local"
},
"m_services"
));
all
.
add
(
C
(
ValueTranslater
.
class
,
DefaultValueTranslater
.
class
));
all
.
add
(
C
(
GraphBuilder
.
class
,
DefaultGraphBuilder
.
class
)
//
.
req
(
ValueTranslater
.
class
));
.
req
(
ValueTranslater
.
class
));
all
.
addAll
(
new
ServiceComponentConfigurator
().
defineComponents
());
// Please keep it last
defineModuleRegistry
(
all
,
ReportModule
.
class
,
ReportModule
.
class
);
all
.
addAll
(
new
WebComponentConfigurator
().
defineComponents
()
);
return
all
;
}
...
...
cat-home/src/main/java/com/dianping/cat/report/build/ServiceComponentConfigurator.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.build
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.dianping.cat.message.spi.MessageConsumer
;
import
com.dianping.cat.report.page.model.failure.CompositeFailureModelService
;
import
com.dianping.cat.report.page.model.failure.LocalFailureModelService
;
import
com.dianping.cat.report.page.model.spi.ModelService
;
import
com.dianping.cat.report.page.model.transaction.CompositeTransactionModelService
;
import
com.dianping.cat.report.page.model.transaction.HdfsTransactionModelService
;
import
com.dianping.cat.report.page.model.transaction.LocalTransactionModelService
;
import
com.site.lookup.configuration.AbstractResourceConfigurator
;
import
com.site.lookup.configuration.Component
;
class
ServiceComponentConfigurator
extends
AbstractResourceConfigurator
{
@Override
public
List
<
Component
>
defineComponents
()
{
List
<
Component
>
all
=
new
ArrayList
<
Component
>();
all
.
add
(
C
(
ModelService
.
class
,
"transaction-local"
,
LocalTransactionModelService
.
class
)
//
.
req
(
MessageConsumer
.
class
,
"realtime"
));
all
.
add
(
C
(
ModelService
.
class
,
"transaction-hdfs"
,
HdfsTransactionModelService
.
class
));
all
.
add
(
C
(
ModelService
.
class
,
"transaction"
,
CompositeTransactionModelService
.
class
)
//
.
req
(
ModelService
.
class
,
new
String
[]
{
"transaction-local"
,
"transaction-hdfs"
},
"m_services"
));
all
.
add
(
C
(
ModelService
.
class
,
"failure-local"
,
LocalFailureModelService
.
class
)
//
.
req
(
MessageConsumer
.
class
,
"realtime"
));
all
.
add
(
C
(
ModelService
.
class
,
"failure"
,
CompositeFailureModelService
.
class
)
//
.
req
(
ModelService
.
class
,
new
String
[]
{
"failure-local"
},
"m_services"
));
return
all
;
}
}
cat-home/src/main/java/com/dianping/cat/report/build/WebComponentConfigurator.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.build
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.dianping.cat.report.ReportModule
;
import
com.site.lookup.configuration.Component
;
import
com.site.web.configuration.AbstractWebComponentsConfigurator
;
class
WebComponentConfigurator
extends
AbstractWebComponentsConfigurator
{
@SuppressWarnings
(
"unchecked"
)
@Override
public
List
<
Component
>
defineComponents
()
{
List
<
Component
>
all
=
new
ArrayList
<
Component
>();
defineModuleRegistry
(
all
,
ReportModule
.
class
,
ReportModule
.
class
);
return
all
;
}
}
cat-home/src/main/java/com/dianping/cat/report/page/failure/Handler.java
浏览文件 @
741a17f9
...
...
@@ -25,7 +25,6 @@ import com.site.web.mvc.annotation.OutboundActionMeta;
import
com.site.web.mvc.annotation.PayloadMeta
;
public
class
Handler
implements
PageHandler
<
Context
>
{
@Inject
private
ServerConfig
serverConfig
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/model/failure/LocalFailureModelService.java
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.model.failure
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
com.dianping.cat.consumer.RealtimeConsumer
;
import
com.dianping.cat.consumer.failure.FailureAnalyzer
;
import
com.dianping.cat.consumer.failure.Failure
Report
Analyzer
;
import
com.dianping.cat.consumer.failure.model.entity.FailureReport
;
import
com.dianping.cat.message.spi.MessageConsumer
;
import
com.dianping.cat.report.page.model.spi.ModelPeriod
;
...
...
@@ -18,13 +23,14 @@ public class LocalFailureModelService implements ModelService<FailureReport> {
@Override
public
ModelResponse
<
FailureReport
>
invoke
(
ModelRequest
request
)
{
FailureAnalyzer
analyzer
=
getAnalyzer
(
request
.
getPeriod
());
Failure
Report
Analyzer
analyzer
=
getAnalyzer
(
request
.
getPeriod
());
ModelResponse
<
FailureReport
>
response
=
new
ModelResponse
<
FailureReport
>();
if
(
analyzer
!=
null
)
{
List
<
String
>
domains
=
analyzer
.
getDomains
();
Map
<
String
,
FailureReport
>
reports
=
analyzer
.
getReports
();
List
<
String
>
domains
=
getDomains
(
reports
.
keySet
());
String
d
=
request
.
getDomain
();
FailureReport
report
=
analyzer
.
getRepor
t
(
d
!=
null
?
d
:
domains
.
isEmpty
()
?
null
:
domains
.
get
(
0
));
FailureReport
report
=
reports
.
ge
t
(
d
!=
null
?
d
:
domains
.
isEmpty
()
?
null
:
domains
.
get
(
0
));
if
(
report
!=
null
)
{
for
(
String
domain
:
domains
)
{
...
...
@@ -38,11 +44,28 @@ public class LocalFailureModelService implements ModelService<FailureReport> {
return
response
;
}
private
FailureAnalyzer
getAnalyzer
(
ModelPeriod
period
)
{
if
(
period
.
isCurrent
())
{
return
(
FailureAnalyzer
)
m_consumer
.
getCurrentAnalyzer
(
"failure"
);
public
List
<
String
>
getDomains
(
Set
<
String
>
keys
)
{
List
<
String
>
domains
=
new
ArrayList
<
String
>(
keys
);
Collections
.
sort
(
domains
,
new
Comparator
<
String
>()
{
@Override
public
int
compare
(
String
d1
,
String
d2
)
{
if
(
d1
.
equals
(
"Cat"
))
{
return
1
;
}
return
d1
.
compareTo
(
d2
);
}
});
return
domains
;
}
private
FailureReportAnalyzer
getAnalyzer
(
ModelPeriod
period
)
{
if
(
period
.
isCurrent
()
||
period
.
isFuture
())
{
return
(
FailureReportAnalyzer
)
m_consumer
.
getCurrentAnalyzer
(
"failure"
);
}
else
if
(
period
.
isLast
())
{
return
(
FailureAnalyzer
)
m_consumer
.
getLastAnalyzer
(
"failure"
);
return
(
Failure
Report
Analyzer
)
m_consumer
.
getLastAnalyzer
(
"failure"
);
}
else
{
return
null
;
}
...
...
@@ -52,6 +75,6 @@ public class LocalFailureModelService implements ModelService<FailureReport> {
public
boolean
isEligable
(
ModelRequest
request
)
{
ModelPeriod
period
=
request
.
getPeriod
();
return
period
.
isCurrent
()
||
period
.
isLast
();
return
!
period
.
isHistorical
();
}
}
cat-home/src/main/java/com/dianping/cat/report/page/model/spi/ModelRequest.java
浏览文件 @
741a17f9
...
...
@@ -16,6 +16,12 @@ public class ModelRequest {
m_period
=
period
;
}
public
static
ModelRequest
from
(
String
domain
,
String
period
)
{
ModelRequest
request
=
new
ModelRequest
(
domain
,
ModelPeriod
.
getByName
(
period
,
ModelPeriod
.
CURRENT
));
return
request
;
}
public
String
getDomain
()
{
return
m_domain
;
}
...
...
@@ -49,9 +55,8 @@ public class ModelRequest {
return
this
;
}
public
static
ModelRequest
from
(
String
domain
,
String
period
)
{
ModelRequest
request
=
new
ModelRequest
(
domain
,
ModelPeriod
.
getByName
(
period
,
ModelPeriod
.
CURRENT
));
return
request
;
@Override
public
String
toString
()
{
return
String
.
format
(
"ModelRequest[domain=%s, period=%s, properties=%s]"
,
m_domain
,
m_period
,
m_properties
);
}
}
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/CompositeTransactionModelService.java
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.model.transaction
;
import
java.net.InetAddress
;
import
java.net.UnknownHostException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
...
...
@@ -15,11 +16,12 @@ import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import
com.dianping.cat.report.page.model.spi.ModelRequest
;
import
com.dianping.cat.report.page.model.spi.ModelResponse
;
import
com.dianping.cat.report.page.model.spi.ModelService
;
import
com.site.helper.Splitters
;
import
com.site.lookup.annotation.Inject
;
public
class
CompositeTransactionModelService
implements
ModelService
<
TransactionReport
>,
Initializable
{
@Inject
private
List
<
ModelService
<
TransactionReport
>>
m_services
;
private
List
<
ModelService
<
TransactionReport
>>
m_services
=
new
ArrayList
<
ModelService
<
TransactionReport
>>()
;
private
ExecutorService
m_threadPool
;
...
...
@@ -92,6 +94,52 @@ public class CompositeTransactionModelService implements ModelService<Transactio
}
public
void
setSerivces
(
ModelService
<
TransactionReport
>...
services
)
{
m_services
=
Arrays
.
asList
(
services
);
for
(
ModelService
<
TransactionReport
>
service
:
services
)
{
m_services
.
add
(
service
);
}
}
/**
* Inject remote servers to load transaction model.
* <p>
*
* For example, servers: 192.168.1.1:2281,192.168.1.2,192.168.1.3
*
* @param servers
* server list separated by comma(',')
*/
public
void
setRemoteServers
(
String
servers
)
{
List
<
String
>
endpoints
=
Splitters
.
by
(
','
).
split
(
servers
);
String
localAddress
=
null
;
String
localHost
=
null
;
try
{
localAddress
=
InetAddress
.
getLocalHost
().
getHostAddress
();
localHost
=
InetAddress
.
getLocalHost
().
getHostName
();
}
catch
(
UnknownHostException
e
)
{
// ignore it
}
for
(
String
endpoint
:
endpoints
)
{
int
pos
=
endpoint
.
indexOf
(
':'
);
String
host
=
(
pos
>
0
?
endpoint
.
substring
(
0
,
pos
)
:
endpoint
);
int
port
=
(
pos
>
0
?
Integer
.
parseInt
(
endpoint
.
substring
(
pos
)
+
1
)
:
2281
);
if
(
port
==
2281
)
{
if
(
"localhost"
.
equals
(
host
)
||
"127.0.0.1"
.
equals
(
host
))
{
// exclude localhost
continue
;
}
else
if
(
host
.
equals
(
localAddress
)
||
host
.
equals
(
localHost
))
{
// exclude itself
continue
;
}
}
RemoteTransactionModelService
remote
=
new
RemoteTransactionModelService
();
remote
.
setHost
(
host
);
remote
.
setPort
(
port
);
m_services
.
add
(
remote
);
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HdfsTransactionModelService.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.model.transaction
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.report.page.model.spi.ModelRequest
;
import
com.dianping.cat.report.page.model.spi.ModelResponse
;
import
com.dianping.cat.report.page.model.spi.ModelService
;
public
class
HdfsTransactionModelService
implements
ModelService
<
TransactionReport
>
{
@Override
public
boolean
isEligable
(
ModelRequest
request
)
{
return
request
.
getPeriod
().
isHistorical
();
}
@Override
public
ModelResponse
<
TransactionReport
>
invoke
(
ModelRequest
request
)
{
// TODO
return
null
;
}
}
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/LocalTransactionModelService.java
浏览文件 @
741a17f9
...
...
@@ -24,12 +24,11 @@ public class LocalTransactionModelService implements ModelService<TransactionRep
if
(
analyzer
!=
null
)
{
List
<
String
>
domains
=
analyzer
.
getDomains
();
String
d
=
request
.
getDomain
();
TransactionReport
report
=
analyzer
.
getReport
(
d
!=
null
?
d
:
domains
.
isEmpty
()
?
null
:
domains
.
get
(
0
));
String
domain
=
d
!=
null
?
d
:
domains
.
isEmpty
()
?
null
:
domains
.
get
(
0
);
TransactionReport
report
=
analyzer
.
getReport
(
domain
);
if
(
report
!=
null
)
{
for
(
String
domain
:
domains
)
{
report
.
addDomain
(
domain
);
}
report
.
getDomains
().
addAll
(
domains
);
}
response
.
setModel
(
report
);
...
...
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/RemoteTransactionModelService.java
浏览文件 @
741a17f9
...
...
@@ -64,7 +64,7 @@ public class RemoteTransactionModelService implements ModelService<TransactionRe
public
boolean
isEligable
(
ModelRequest
request
)
{
ModelPeriod
period
=
request
.
getPeriod
();
return
period
.
isCurrent
()
||
period
.
isLast
();
return
!
period
.
isHistorical
();
}
public
void
setHost
(
String
host
)
{
...
...
cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/TransactionReportMerger.java
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.model.transaction
;
import
java.util.List
;
import
com.dianping.cat.consumer.transaction.model.entity.Duration
;
import
com.dianping.cat.consumer.transaction.model.entity.Range
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionName
;
...
...
@@ -14,16 +12,6 @@ public class TransactionReportMerger extends DefaultMerger {
super
(
transactionReport
);
}
public
static
TransactionReport
merges
(
List
<
TransactionReport
>
reports
)
{
TransactionReportMerger
merger
=
new
TransactionReportMerger
(
new
TransactionReport
(
""
));
for
(
TransactionReport
report
:
reports
)
{
report
.
accept
(
merger
);
}
return
merger
.
getTransactionReport
();
}
@Override
protected
void
mergeDuration
(
Duration
old
,
Duration
duration
)
{
old
.
setCount
(
old
.
getCount
()
+
duration
.
getCount
());
...
...
cat-home/src/main/java/com/dianping/cat/report/page/problem/Action.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.problem
;
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/problem/Context.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.problem
;
import
com.dianping.cat.report.ReportContext
;
public
class
Context
extends
ReportContext
<
Payload
>
{
}
cat-home/src/main/java/com/dianping/cat/report/page/problem/Handler.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.problem
;
import
java.io.IOException
;
import
javax.servlet.ServletException
;
import
com.dianping.cat.consumer.failure.model.entity.FailureReport
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.page.model.spi.ModelRequest
;
import
com.dianping.cat.report.page.model.spi.ModelResponse
;
import
com.dianping.cat.report.page.model.spi.ModelService
;
import
com.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
(
type
=
ModelService
.
class
,
value
=
"failure"
)
private
ModelService
<
FailureReport
>
m_service
;
private
FailureReport
getReport
(
Payload
payload
)
{
String
domain
=
payload
.
getDomain
();
String
date
=
String
.
valueOf
(
payload
.
getDate
());
ModelRequest
request
=
new
ModelRequest
(
domain
,
payload
.
getPeriod
())
//
.
setProperty
(
"domain"
,
domain
)
//
.
setProperty
(
"date"
,
date
)
//
.
setProperty
(
"ipAddress"
,
payload
.
getIpAddress
());
if
(
m_service
.
isEligable
(
request
))
{
ModelResponse
<
FailureReport
>
response
=
m_service
.
invoke
(
request
);
FailureReport
report
=
response
.
getModel
();
return
report
;
}
else
{
throw
new
RuntimeException
(
"Internal error: no eligable service registered for "
+
request
+
"!"
);
}
}
@Override
@PayloadMeta
(
Payload
.
class
)
@InboundActionMeta
(
name
=
"p"
)
public
void
handleInbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
// display only, no action here
}
@Override
@OutboundActionMeta
(
name
=
"p"
)
public
void
handleOutbound
(
Context
ctx
)
throws
ServletException
,
IOException
{
Model
model
=
new
Model
(
ctx
);
Payload
payload
=
ctx
.
getPayload
();
model
.
setAction
(
Action
.
VIEW
);
model
.
setPage
(
ReportPage
.
PROBLEM
);
switch
(
payload
.
getAction
())
{
case
VIEW:
try
{
FailureReport
report
=
getReport
(
payload
);
if
(
payload
.
getPeriod
().
isFuture
())
{
model
.
setDate
(
payload
.
getCurrentDate
());
}
else
{
model
.
setDate
(
payload
.
getDate
());
}
model
.
setReport
(
report
);
}
catch
(
Throwable
e
)
{
model
.
setException
(
e
);
}
break
;
}
m_jspViewer
.
view
(
ctx
,
model
);
}
}
cat-home/src/main/java/com/dianping/cat/report/page/problem/JspFile.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.problem
;
public
enum
JspFile
{
VIEW
(
"/jsp/report/problem.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/problem/JspViewer.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.problem
;
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/problem/Model.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.problem
;
import
java.util.Collection
;
import
java.util.Collections
;
import
com.dianping.cat.consumer.failure.model.entity.FailureReport
;
import
com.dianping.cat.report.page.AbstractReportModel
;
public
class
Model
extends
AbstractReportModel
<
Action
,
Context
>
{
private
FailureReport
m_report
;
public
Model
(
Context
ctx
)
{
super
(
ctx
);
}
@Override
public
Action
getDefaultAction
()
{
return
Action
.
VIEW
;
}
@Override
public
Collection
<
String
>
getDomains
()
{
return
Collections
.
emptyList
();
}
public
FailureReport
getReport
()
{
return
m_report
;
}
public
void
setReport
(
FailureReport
report
)
{
m_report
=
report
;
}
}
cat-home/src/main/java/com/dianping/cat/report/page/problem/Payload.java
0 → 100644
浏览文件 @
741a17f9
package
com.dianping.cat.report.page.problem
;
import
com.dianping.cat.report.ReportPage
;
import
com.dianping.cat.report.page.AbstractReportPayload
;
import
com.site.web.mvc.ActionContext
;
import
com.site.web.mvc.payload.annotation.FieldMeta
;
public
class
Payload
extends
AbstractReportPayload
<
Action
>
{
public
Payload
()
{
super
(
ReportPage
.
PROBLEM
);
}
@FieldMeta
(
"op"
)
private
Action
m_action
;
@FieldMeta
(
"ip"
)
private
String
m_ipAddress
;
public
void
setAction
(
Action
action
)
{
m_action
=
action
;
}
@Override
public
Action
getAction
()
{
return
m_action
;
}
public
String
getIpAddress
()
{
return
m_ipAddress
;
}
public
void
setIpAddress
(
String
ipAddress
)
{
m_ipAddress
=
ipAddress
;
}
@Override
public
void
validate
(
ActionContext
<?>
ctx
)
{
if
(
m_action
==
null
)
{
m_action
=
Action
.
VIEW
;
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/service/provider/TransactionModelProvider.java
浏览文件 @
741a17f9
...
...
@@ -48,6 +48,8 @@ public class TransactionModelProvider implements ModelProvider {
analyzer
=
(
TransactionReportAnalyzer
)
m_consumer
.
getCurrentAnalyzer
(
"transaction"
);
}
else
if
(
index
.
equals
(
Constants
.
MEMORY_LAST
))
{
analyzer
=
(
TransactionReportAnalyzer
)
m_consumer
.
getLastAnalyzer
(
"transaction"
);
}
else
{
System
.
err
.
println
(
"historical model is not implemented yet"
);
}
TransactionReport
report
=
analyzer
.
generate
(
domain
);
...
...
cat-home/src/main/java/com/dianping/cat/report/page/transaction/Handler.java
浏览文件 @
741a17f9
...
...
@@ -45,12 +45,16 @@ public class Handler implements PageHandler<Context>, Initializable {
private
MeanSquareDeviationComputer
m_computer
=
new
MeanSquareDeviationComputer
();
private
TransactionName
getName
(
Payload
payload
)
{
private
TransactionName
get
Transaction
Name
(
Payload
payload
)
{
String
domain
=
payload
.
getDomain
();
String
type
=
payload
.
getType
();
String
name
=
payload
.
getName
();
String
date
=
String
.
valueOf
(
payload
.
getDate
());
ModelRequest
request
=
new
ModelRequest
(
domain
,
payload
.
getPeriod
())
//
.
setProperty
(
"type"
,
type
).
setProperty
(
"name"
,
name
);
.
setProperty
(
"domain"
,
domain
)
//
.
setProperty
(
"date"
,
date
)
//
.
setProperty
(
"type"
,
payload
.
getType
())
//
.
setProperty
(
"name"
,
payload
.
getName
());
ModelResponse
<
TransactionReport
>
response
=
m_service
.
invoke
(
request
);
TransactionReport
report
=
response
.
getModel
();
TransactionType
t
=
report
.
findType
(
type
);
...
...
@@ -70,11 +74,20 @@ public class Handler implements PageHandler<Context>, Initializable {
private
TransactionReport
getReport
(
Payload
payload
)
{
String
domain
=
payload
.
getDomain
();
ModelRequest
request
=
new
ModelRequest
(
domain
,
payload
.
getPeriod
());
ModelResponse
<
TransactionReport
>
response
=
m_service
.
invoke
(
request
);
TransactionReport
report
=
response
.
getModel
();
String
date
=
String
.
valueOf
(
payload
.
getDate
());
ModelRequest
request
=
new
ModelRequest
(
domain
,
payload
.
getPeriod
())
//
.
setProperty
(
"domain"
,
domain
)
//
.
setProperty
(
"date"
,
date
)
//
.
setProperty
(
"type"
,
payload
.
getType
());
return
report
;
if
(
m_service
.
isEligable
(
request
))
{
ModelResponse
<
TransactionReport
>
response
=
m_service
.
invoke
(
request
);
TransactionReport
report
=
response
.
getModel
();
return
report
;
}
else
{
throw
new
RuntimeException
(
"Internal error: no eligable service registered for "
+
request
+
"!"
);
}
}
@Override
...
...
@@ -118,7 +131,7 @@ public class Handler implements PageHandler<Context>, Initializable {
}
private
void
showGraphs
(
Model
model
,
Payload
payload
)
{
final
TransactionName
name
=
getName
(
payload
);
final
TransactionName
name
=
get
Transaction
Name
(
payload
);
if
(
name
==
null
)
{
return
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/transaction/Payload.java
浏览文件 @
741a17f9
...
...
@@ -6,10 +6,6 @@ import com.site.web.mvc.ActionContext;
import
com.site.web.mvc.payload.annotation.FieldMeta
;
public
class
Payload
extends
AbstractReportPayload
<
Action
>
{
public
Payload
()
{
super
(
ReportPage
.
TRANSACTION
);
}
@FieldMeta
(
"op"
)
private
Action
m_action
;
...
...
@@ -19,6 +15,10 @@ public class Payload extends AbstractReportPayload<Action> {
@FieldMeta
(
"name"
)
private
String
m_name
;
public
Payload
()
{
super
(
ReportPage
.
TRANSACTION
);
}
@Override
public
Action
getAction
()
{
return
m_action
;
...
...
cat-home/src/main/java/com/dianping/cat/report/view/NavigationBar.java
浏览文件 @
741a17f9
...
...
@@ -13,6 +13,8 @@ public class NavigationBar {
ReportPage
.
TRANSACTION
,
ReportPage
.
PROBLEM
,
ReportPage
.
IP
,
ReportPage
.
SERVICE
,
...
...
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
741a17f9
...
...
@@ -67,6 +67,19 @@
<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.graph.ValueTranslater
</role>
<implementation>
com.dianping.cat.report.graph.DefaultValueTranslater
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.graph.GraphBuilder
</role>
<implementation>
com.dianping.cat.report.graph.DefaultGraphBuilder
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.graph.ValueTranslater
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
transaction-local
</role-hint>
...
...
@@ -80,11 +93,8 @@
</component>
<component>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
transaction-localhost
</role-hint>
<implementation>
com.dianping.cat.report.page.model.transaction.RemoteTransactionModelService
</implementation>
<configuration>
<host>
localhost
</host>
</configuration>
<role-hint>
transaction-hdfs
</role-hint>
<implementation>
com.dianping.cat.report.page.model.transaction.HdfsTransactionModelService
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
...
...
@@ -95,21 +105,34 @@
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hints>
<role-hint>
transaction-local
</role-hint>
<role-hint>
transaction-hdfs
</role-hint>
</role-hints>
<field-name>
m_services
</field-name>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.graph.ValueTranslater
</role>
<implementation>
com.dianping.cat.report.graph.DefaultValueTranslater
</implementation>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
failure-local
</role-hint>
<implementation>
com.dianping.cat.report.page.model.failure.LocalFailureModelService
</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.graph.GraphBuilder
</role>
<implementation>
com.dianping.cat.report.graph.DefaultGraphBuilder
</implementation>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
failure
</role-hint>
<implementation>
com.dianping.cat.report.page.model.failure.CompositeFailureModelService
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.report.graph.ValueTranslater
</role>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hints>
<role-hint>
failure-local
</role-hint>
</role-hints>
<field-name>
m_services
</field-name>
</requirement>
</requirements>
</component>
...
...
@@ -175,10 +198,26 @@
</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>
</requirement>
<requirement>
<role>
java.lang.String
</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>
</component>
<component>
<role>
com.dianping.cat.report.page.logview.Handler
</role>
<implementation>
com.dianping.cat.report.page.logview.Handler
</implementation>
...
...
@@ -214,6 +253,10 @@
<role>
com.dianping.cat.report.page.ip.JspViewer
</role>
<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>
...
...
@@ -301,5 +344,23 @@
</requirement>
</requirements>
</component>
<component>
<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.problem.JspViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.model.spi.ModelService
</role>
<role-hint>
failure
</role-hint>
<field-name>
m_service
</field-name>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.report.page.problem.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.problem.JspViewer
</implementation>
</component>
</components>
</plexus>
cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml
浏览文件 @
741a17f9
...
...
@@ -23,6 +23,9 @@
<page
name=
"model"
title=
"Model"
path=
"model"
standalone=
"false"
>
<description>
Model Service
</description>
</page>
<page
name=
"problem"
title=
"Problem"
path=
"p"
>
<description>
Problem
</description>
</page>
</module>
</webapp>
</wizard>
...
...
cat-home/src/main/webapp/css/problem.css
0 → 100644
浏览文件 @
741a17f9
cat-home/src/main/webapp/js/problem.js
0 → 100644
浏览文件 @
741a17f9
cat-home/src/main/webapp/jsp/report/ip.jsp
浏览文件 @
741a17f9
...
...
@@ -11,7 +11,7 @@
<a:report
title=
"Hot IP Report"
timestamp=
"2012-02-07"
>
<jsp:body>
${model.b}
<table
class=
"ip-table"
>
<tr><th>
IP
</th><th>
last 1 min
</th><th>
last 5 mins
</th><th>
last 15 mins
</th></tr>
<c:forEach
var=
"m"
items=
"
${
model
.
displayModels
}
"
varStatus=
"status"
>
...
...
cat-home/src/main/webapp/jsp/report/problem.jsp
0 → 100644
浏览文件 @
741a17f9
<%@ 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.problem.Context"
scope=
"request"
/>
<jsp:useBean
id=
"payload"
type=
"com.dianping.cat.report.page.problem.Payload"
scope=
"request"
/>
<jsp:useBean
id=
"model"
type=
"com.dianping.cat.report.page.problem.Model"
scope=
"request"
/>
<c:set
var=
"report"
value=
"
${
model
.
report
}
"
/>
<res:useCss
value=
"
${
res
.
css
.
local
.
problem_css
}
"
target=
"head-css"
/>
<res:useJs
value=
"
${
res
.
js
.
local
[
'jquery-1.7.1.js'
]
}
"
target=
"head-js"
/>
<res:useJs
value=
"
${
res
.
js
.
local
.
problem_js
}
"
target=
"head-js"
/>
<a:report
title=
"Problem Report"
timestamp=
"
${
w:
format
(
model
.
currentTime
,
'yyyy-MM-dd HH:mm:ss'
)
}
"
>
<jsp:attribute
name=
"subtitle"
>
From ${w:format(report.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(report.endTime,'yyyy-MM-dd HH:mm:ss')}
</jsp:attribute>
<jsp:body>
Hello, Problem
</jsp:body>
</a:report>
\ No newline at end of file
cat-home/src/main/webapp/jsp/report/transaction.jsp
浏览文件 @
741a17f9
...
...
@@ -18,7 +18,7 @@
<jsp:attribute
name=
"subtitle"
>
From ${w:format(report.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(report.endTime,'yyyy-MM-dd HH:mm:ss')}
</jsp:attribute>
<jsp:body>
<table
class=
"transaction"
border=
"0"
>
<table
class=
"transaction"
>
<tr><th>
${empty payload.type ? "Type" : "Name"}
</th><th>
Total Count
</th><th>
Failure Count
</th><th>
Failure%
</th><th>
Sample Link
</th><th>
Min/Max/Avg/Std(ms)
</th></tr>
<c:choose>
<c:when
test=
"
${
empty
payload
.
type
}
"
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录