Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
7674dcfe
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,发现更多精彩内容 >>
提交
7674dcfe
编写于
2月 07, 2012
作者:
U
unknown
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify the pom of sonar,modify the failure js
上级
d00061e1
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
143 addition
and
99 deletion
+143
-99
cat-consumer/src/main/java/com/dianping/cat/consumer/failure/FailureReportAnalyzer.java
.../dianping/cat/consumer/failure/FailureReportAnalyzer.java
+8
-0
cat-consumer/src/test/java/com/dianping/cat/consumer/failure/FailureAnalyzerStoreTest.java
...anping/cat/consumer/failure/FailureAnalyzerStoreTest.java
+1
-0
cat-consumer/src/test/java/com/dianping/cat/consumer/failure/FailureAnalyzerTest.java
...om/dianping/cat/consumer/failure/FailureAnalyzerTest.java
+68
-5
cat-home/src/main/java/com/dianping/cat/report/page/failure/FailureData.java
...ava/com/dianping/cat/report/page/failure/FailureData.java
+13
-9
cat-home/src/main/java/com/dianping/cat/report/page/failure/Handler.java
...in/java/com/dianping/cat/report/page/failure/Handler.java
+5
-56
cat-home/src/main/webapp/js/failure.js
cat-home/src/main/webapp/js/failure.js
+30
-29
pom.xml
pom.xml
+18
-0
未找到文件。
cat-consumer/src/main/java/com/dianping/cat/consumer/failure/FailureReportAnalyzer.java
浏览文件 @
7674dcfe
...
...
@@ -91,6 +91,14 @@ public class FailureReportAnalyzer extends AbstractMessageAnalyzer<FailureReport
return
new
ArrayList
<
String
>(
result
);
}
public
Map
<
String
,
FailureReport
>
getReports
()
{
return
m_reports
;
}
public
void
setReports
(
Map
<
String
,
FailureReport
>
reports
)
{
m_reports
=
reports
;
}
private
FailureReport
getReportByDomainAndIp
(
String
domain
,
String
ip
)
{
String
domainAndIp
=
new
StringBuffer
().
append
(
domain
).
append
(
":"
).
append
(
ip
).
toString
();
FailureReport
report
=
m_reports
.
get
(
domainAndIp
);
...
...
cat-consumer/src/test/java/com/dianping/cat/consumer/failure/FailureAnalyzerStoreTest.java
浏览文件 @
7674dcfe
...
...
@@ -113,4 +113,5 @@ public class FailureAnalyzerStoreTest extends ComponentTestCase {
String
exceptedResult
=
FailureReportStore
.
getStoreString
(
targetReport
);
Assert
.
assertEquals
(
"Check file content!"
,
exceptedResult
,
realResult
);
}
}
cat-consumer/src/test/java/com/dianping/cat/consumer/failure/FailureAnalyzerTest.java
浏览文件 @
7674dcfe
...
...
@@ -33,7 +33,7 @@ public class FailureAnalyzerTest extends ComponentTestCase {
long
current
=
System
.
currentTimeMillis
();
long
duration
=
60
*
60
*
1000
;
long
extraTime
=
5
*
60
*
1000
;
long
start
=
current
-
current
%
(
60
*
60
*
1000
)
-
HOUR
;
long
start
=
current
-
current
%
(
60
*
60
*
1000
)
-
HOUR
;
AnalyzerFactory
factory
=
lookup
(
AnalyzerFactory
.
class
);
FailureReportAnalyzer
analyzer
=
(
FailureReportAnalyzer
)
factory
.
create
(
"failure"
,
start
,
duration
,
m_domain
,
...
...
@@ -94,7 +94,7 @@ public class FailureAnalyzerTest extends ComponentTestCase {
FailureReport
report
=
analyzer
.
generateByDomainAndIp
(
m_domain
,
m_host
);
assertEquals
(
"Check the domain"
,
report
.
getDomain
(),
"domain1"
);
assertEquals
(
"Check the machines"
,
m_host
,
report
.
getMachine
());
assertEquals
(
"Check the machines"
,
m_host
,
report
.
getMachine
());
assertEquals
(
"Check the threads"
,
threadNumber
,
report
.
getThreads
().
getThreads
().
size
());
Date
startDate
=
report
.
getStartTime
();
...
...
@@ -115,9 +115,9 @@ public class FailureAnalyzerTest extends ComponentTestCase {
for
(
int
i
=
0
;
i
<
number
/
10
;
i
++)
{
String
minuteStr
=
sdf2
.
format
(
startDate
);
Segment
temp
=
segments
.
get
(
minuteStr
);
List
<
Entry
>
entries
=
temp
.
getEntries
();
if
(
entries
==
null
)
{
System
.
out
.
println
(
minuteStr
);
}
else
{
...
...
@@ -155,7 +155,7 @@ public class FailureAnalyzerTest extends ComponentTestCase {
}
FailureReport
report
=
analyzer
.
generateByDomainAndIp
(
domain
,
m_host
);
assertEquals
(
"Check the machines"
,
m_host
,
report
.
getMachine
());
assertEquals
(
"Check the machines"
,
m_host
,
report
.
getMachine
());
assertEquals
(
"Check the domain"
,
report
.
getDomain
(),
"domain1"
);
Date
startDate
=
report
.
getStartTime
();
...
...
@@ -181,4 +181,67 @@ public class FailureAnalyzerTest extends ComponentTestCase {
startDate
.
setTime
(
startDate
.
getTime
()
+
1000
*
60
);
}
}
@Test
public
void
testManyDomainAndIp
()
throws
Exception
{
long
current
=
System
.
currentTimeMillis
();
long
duration
=
60
*
60
*
1000
;
long
extraTime
=
5
*
60
*
1000
;
long
start
=
current
-
current
%
(
60
*
60
*
1000
)
-
HOUR
;
String
baseDaomain
=
"domain"
;
String
baseIp
=
"192.168.1."
;
AnalyzerFactory
factory
=
lookup
(
AnalyzerFactory
.
class
);
FailureReportAnalyzer
analyzer
=
(
FailureReportAnalyzer
)
factory
.
create
(
"failure"
,
start
,
duration
,
""
,
extraTime
);
int
number
=
60
;
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
for
(
int
j
=
0
;
j
<
3
;
j
++)
{
for
(
int
index
=
0
;
index
<
number
;
index
++)
{
DefaultTransaction
t
=
new
DefaultTransaction
(
"A1"
,
"B1"
,
null
);
MessageTree
tree
=
new
DefaultMessageTree
();
tree
.
setMessageId
(
"thread0001"
);
tree
.
setDomain
(
baseDaomain
+
i
);
tree
.
setIpAddress
(
baseIp
+
j
);
tree
.
setMessage
(
t
);
t
.
setDuration
(
3
*
1000
);
t
.
setTimestamp
(
start
+
1000L
*
60
*
index
);
analyzer
.
process
(
tree
);
}
}
}
Map
<
String
,
FailureReport
>
reports
=
analyzer
.
getReports
();
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
for
(
int
j
=
0
;
j
<
3
;
j
++)
{
FailureReport
report
=
reports
.
get
(
baseDaomain
+
i
+
":"
+
baseIp
+
j
);
assertEquals
(
"Check the report is not null"
,
report
==
null
,
false
);
assertEquals
(
"Check the machine"
,
baseIp
+
j
,
report
.
getMachine
());
assertEquals
(
"Check the domain"
,
baseDaomain
+
i
,
report
.
getDomain
());
Date
startDate
=
report
.
getStartTime
();
Date
endDate
=
report
.
getEndTime
();
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
String
startStr
=
sdf
.
format
(
startDate
);
String
endStr
=
sdf
.
format
(
endDate
);
Date
realStartDate
=
new
Date
(
start
);
Date
realEndDate
=
new
Date
(
start
+
duration
-
60
*
1000
);
assertEquals
(
"Check the report start time"
,
sdf
.
format
(
realStartDate
),
startStr
);
assertEquals
(
"Check the report end time"
,
sdf
.
format
(
realEndDate
),
endStr
);
SimpleDateFormat
sdf2
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
Map
<
String
,
Segment
>
segments
=
report
.
getSegments
();
for
(
int
k
=
0
;
k
<
60
;
k
++)
{
String
minuteStr
=
sdf2
.
format
(
startDate
);
Segment
temp
=
segments
.
get
(
minuteStr
);
assertEquals
(
"Check the segment size "
,
temp
.
getEntries
().
size
(),
1
);
startDate
.
setTime
(
startDate
.
getTime
()
+
1000
*
60
);
}
}
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/failure/FailureData.java
浏览文件 @
7674dcfe
...
...
@@ -5,6 +5,7 @@ import java.io.IOException;
import
java.util.Date
;
import
java.util.Map
;
import
com.dianping.cat.consumer.failure.FailureReportAnalyzer
;
import
com.dianping.cat.consumer.failure.model.entity.FailureReport
;
import
com.dianping.cat.consumer.failure.model.entity.Segment
;
import
com.dianping.cat.consumer.failure.model.entity.Threads
;
...
...
@@ -13,19 +14,21 @@ import com.dianping.cat.tool.DateUtil;
import
com.site.helper.Files
;
public
class
FailureData
{
private
static
final
int
CURRENT
=
1
;
p
ublic
String
getFailureJsonDate
(
FailureReport
report
)
{
p
rivate
static
String
getFailureJsonDate
(
FailureReport
report
)
{
DefaultJsonBuilder
builder
=
new
DefaultJsonBuilder
();
report
.
accept
(
builder
);
return
builder
.
getString
();
}
/*public String getFailureDataFromMemory(FailureReportAnalyzer analyzer, String domain
) {
FailureReport report = analyzer.generateByDomain
(domain
);
public
static
String
getFailureDataFromMemory
(
FailureReportAnalyzer
analyzer
,
String
domain
,
String
ip
)
{
FailureReport
report
=
analyzer
.
generateByDomain
AndIp
(
domain
,
ip
);
return
getFailureJsonDate
(
report
);
}
*/
public
String
getFailureDataFromFile
(
String
basePath
,
String
file
)
{
public
static
String
getFailureDataFromFile
(
String
basePath
,
String
file
)
{
String
result
=
""
;
try
{
result
=
Files
.
forIO
().
readFrom
(
new
File
(
basePath
+
file
),
"utf-8"
);
...
...
@@ -36,19 +39,20 @@ public class FailureData {
return
result
;
}
public
String
getFailureDataByNew
(
int
pos
,
String
domain
)
{
public
static
String
getFailureDataByNew
(
int
pos
,
String
domain
,
String
ip
)
{
long
currentTime
=
System
.
currentTimeMillis
();
long
currentStart
=
currentTime
-
currentTime
%
DateUtil
.
HOUR
;
long
lastStart
=
currentTime
-
currentTime
%
DateUtil
.
HOUR
-
DateUtil
.
HOUR
;
Date
date
=
new
Date
();
if
(
pos
==
1
)
{
if
(
pos
==
CURRENT
)
{
date
.
setTime
(
currentStart
);
}
else
{
date
.
setTime
(
lastStart
);
}
FailureReport
report
=
new
FailureReport
();
//TODO
//report.setMachines(new Machines()
);
report
.
setMachine
(
ip
);
report
.
setThreads
(
new
Threads
());
report
.
setStartTime
(
date
);
report
.
setEndTime
(
new
Date
(
date
.
getTime
()
+
DateUtil
.
HOUR
-
DateUtil
.
MINUTE
));
...
...
cat-home/src/main/java/com/dianping/cat/report/page/failure/Handler.java
浏览文件 @
7674dcfe
package
com.dianping.cat.report.page.failure
;
import
java.io.File
;
import
java.io.IOException
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
javax.servlet.ServletException
;
import
com.dianping.cat.consumer.RealtimeConsumer
;
import
com.dianping.cat.consumer.failure.FailureReportAnalyzer
;
import
com.dianping.cat.consumer.failure.model.entity.FailureReport
;
import
com.dianping.cat.consumer.failure.model.entity.Segment
;
import
com.dianping.cat.consumer.failure.model.entity.Threads
;
import
com.dianping.cat.consumer.failure.model.transform.DefaultJsonBuilder
;
import
com.dianping.cat.message.spi.MessageConsumer
;
import
com.dianping.cat.report.ReportPage
;
import
com.site.helper.Files
;
import
com.site.lookup.annotation.Inject
;
import
com.site.web.mvc.PageHandler
;
import
com.site.web.mvc.annotation.InboundActionMeta
;
...
...
@@ -52,32 +45,6 @@ public class Handler implements PageHandler<Context> {
@Inject
(
type
=
MessageConsumer
.
class
,
value
=
"realtime"
)
private
RealtimeConsumer
m_consumer
;
private
FailureReport
getFailureReport
(
int
pos
,
String
domain
)
{
long
currentTime
=
System
.
currentTimeMillis
();
long
currentStart
=
currentTime
-
currentTime
%
HOUR
;
long
lastStart
=
currentTime
-
currentTime
%
HOUR
-
HOUR
;
Date
date
=
new
Date
();
if
(
pos
==
1
)
{
date
.
setTime
(
currentStart
);
}
else
{
date
.
setTime
(
lastStart
);
}
FailureReport
report
=
new
FailureReport
();
//report.setMachines(new Machines());
report
.
setThreads
(
new
Threads
());
report
.
setStartTime
(
date
);
report
.
setEndTime
(
new
Date
(
date
.
getTime
()
+
HOUR
-
MINUTE
));
report
.
setDomain
(
domain
);
long
start
=
report
.
getStartTime
().
getTime
();
long
endTime
=
report
.
getEndTime
().
getTime
();
Map
<
String
,
Segment
>
segments
=
report
.
getSegments
();
for
(;
start
<=
endTime
;
start
=
start
+
60
*
1000
)
{
String
minute
=
SDF_SEG
.
format
(
new
Date
(
start
));
segments
.
put
(
minute
,
new
Segment
(
minute
));
}
return
report
;
}
private
String
getFailureReportName
(
Payload
payload
,
Model
model
)
{
long
currentTimeMillis
=
System
.
currentTimeMillis
();
long
currentTime
=
currentTimeMillis
;
...
...
@@ -125,17 +92,6 @@ public class Handler implements PageHandler<Context> {
return
result
.
toString
();
}
private
String
getJsonResultFromFile
(
String
basePath
,
String
file
)
{
String
result
=
""
;
try
{
result
=
Files
.
forIO
().
readFrom
(
new
File
(
basePath
+
file
),
"utf-8"
);
result
=
result
.
substring
(
result
.
indexOf
(
"<body>"
)
+
6
,
result
.
indexOf
(
"</body>"
));
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
result
;
}
@Override
@PayloadMeta
(
Payload
.
class
)
@InboundActionMeta
(
name
=
"f"
)
...
...
@@ -151,7 +107,6 @@ public class Handler implements PageHandler<Context> {
model
.
setPage
(
ReportPage
.
FAILURE
);
Payload
payload
=
ctx
.
getPayload
();
FailureReportAnalyzer
analyzerForPage
=
(
FailureReportAnalyzer
)
m_consumer
.
getCurrentAnalyzer
(
"failure"
);
//Set all domain of page
...
...
@@ -159,8 +114,6 @@ public class Handler implements PageHandler<Context> {
Collections
.
sort
(
domains
);
model
.
setDomains
(
domains
);
//Set all ip of the domain
//Set the default domain and default ip
String
domain
=
payload
.
getDomain
();
if
(
null
==
domain
)
{
...
...
@@ -192,6 +145,7 @@ public class Handler implements PageHandler<Context> {
String
file
=
getFailureReportName
(
payload
,
model
);
domain
=
model
.
getCurrentDomain
();
ip
=
model
.
getCurrentIp
();
String
jsonResult
=
""
;
if
(
file
.
equals
(
MEMORY_CURRENT
)
||
file
.
equals
(
MEMORY_LAST
))
{
FailureReportAnalyzer
analyzer
;
int
pos
=
0
;
...
...
@@ -202,21 +156,16 @@ public class Handler implements PageHandler<Context> {
analyzer
=
(
FailureReportAnalyzer
)
m_consumer
.
getLastAnalyzer
(
"failure"
);
pos
=
0
;
}
FailureReport
report
;
if
(
analyzer
==
null
)
{
report
=
getFailureReport
(
pos
,
domain
);
jsonResult
=
FailureData
.
getFailureDataByNew
(
pos
,
domain
,
ip
);
}
else
{
report
=
analyzer
.
generateByDomainAndIp
(
domain
,
ip
);
jsonResult
=
FailureData
.
getFailureDataFromMemory
(
analyzer
,
domain
,
ip
);
}
DefaultJsonBuilder
builder
=
new
DefaultJsonBuilder
();
report
.
accept
(
builder
);
model
.
setJsonResult
(
builder
.
getString
());
}
else
{
String
baseFilePath
=
analyzerForPage
.
getReportPath
();
model
.
setJsonResult
(
getJsonResultFromFile
(
baseFilePath
,
file
)
);
jsonResult
=
FailureData
.
getFailureDataFromFile
(
baseFilePath
,
file
);
}
model
.
setJsonResult
(
jsonResult
);
m_jspViewer
.
view
(
ctx
,
model
);
}
}
cat-home/src/main/webapp/js/failure.js
浏览文件 @
7674dcfe
...
...
@@ -2,25 +2,27 @@ function generateTable(wrap, json) {
var
table
=
$
(
'
<table />
'
).
addClass
(
'
report-table
'
),
caption
=
$
(
'
<caption />
'
),
thead
=
$
(
'
<thead />
'
),
thr
=
$
(
'
<tr />
'
).
appendTo
(
thead
),
threads
=
json
.
threads
.
threads
,
ths
=
[
"
Minute
"
]
.
concat
(
threads
);
if
(
threads
==
null
)
{
threads
=
[];
if
(
threads
==
null
)
{
threads
=
[];
}
/*caption.html(
"From " + json.startTime + " To " + json.endTime
+ " Failure Report Domain:" + json.domain).appendTo(table);*/
/*
* caption.html( "From " + json.startTime + " To " + json.endTime + "
* Failure Report Domain:" + json.domain).appendTo(table);
*/
thead
.
appendTo
(
table
);
ths
.
forEach
(
function
(
th
)
{
var
temp
=
$
(
'
<th />
'
).
html
(
th
);
if
(
temp
!=
""
)
var
temp
=
$
(
'
<th />
'
).
html
(
th
);
if
(
temp
!=
""
)
temp
.
appendTo
(
thr
);
});
/*$('<tr />').append(
$('<td />').attr('colspan', threads.length + 1).html(
"machines:" + json.machines.machines.join(','))).appendTo(
table);*/
/*
* $('<tr />').append( $('<td />').attr('colspan', threads.length +
* 1).html( "machines:" + json.machines.machines.join(','))).appendTo(
* table);
*/
for
(
var
key
in
json
.
segments
)
{
var
seg
=
json
.
segments
[
key
];
var
tr
=
$
(
'
<tr />
'
),
tds
=
[];
...
...
@@ -33,23 +35,23 @@ function generateTable(wrap, json) {
if
(
seg
.
entries
==
null
)
{
seg
.
entries
=
[];
}
seg
.
entries
.
forEach
(
function
(
entry
)
{
var
index
=
threads
.
indexOf
(
entry
.
threadId
),
td
=
tds
[
index
],
type
=
entry
.
type
,
anchor
=
$
(
'
<a />
'
).
attr
(
"
href
"
,
"
m/
"
+
entry
.
path
).
addClass
(
type
).
html
(
entry
.
text
);
seg
.
entries
.
forEach
(
function
(
entry
)
{
var
index
=
threads
.
indexOf
(
entry
.
threadId
),
td
=
tds
[
index
],
type
=
entry
.
type
,
anchor
=
$
(
'
<a />
'
).
attr
(
"
href
"
,
"
m/
"
+
entry
.
path
).
addClass
(
type
).
html
(
entry
.
text
);
if
(
td
.
html
())
{
td
.
append
(
$
(
'
<br />
'
));
}
if
(
td
.
html
())
{
td
.
append
(
$
(
'
<br />
'
));
}
if
(
!
type
)
{
type
=
"
Other
"
;
}
td
.
append
(
anchor
);
});
tr
.
appendTo
(
table
);
if
(
!
type
)
{
type
=
"
Other
"
;
}
td
.
append
(
anchor
);
});
tr
.
appendTo
(
table
);
}
$
(
wrap
).
append
(
table
);
}
...
...
@@ -57,8 +59,7 @@ function generateTable(wrap, json) {
generateTable
(
'
#failureTable
'
,
jsonData
);
var
currentDomain
=
$
(
"
#currentDomain
"
).
val
();
$
(
"
#domain-
"
+
currentDomain
).
css
(
"
background
"
,
"
#FFCC00
"
);
$
(
"
#domain-
"
+
currentDomain
).
css
(
"
background
"
,
"
#FFCC00
"
);
var
currentIp
=
$
(
"
#currentIp
"
).
val
();
$
(
"
a[data-id='ip-
"
+
currentIp
+
"
']
"
).
css
(
"
background
"
,
"
#FFCC00
"
);
$
(
"
a[data-id='ip-
"
+
currentIp
+
"
']
"
).
css
(
"
background
"
,
"
#FFCC00
"
);
pom.xml
浏览文件 @
7674dcfe
...
...
@@ -164,6 +164,11 @@ org.eclipse.jdt.core.compiler.compliance=1.6
</additionalConfig>
</configuration>
</plugin>
<plugin>
<groupId>
org.codehaus.sonar
</groupId>
<artifactId>
sonar-maven-plugin
</artifactId>
<version>
2.13
</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
...
...
@@ -195,4 +200,17 @@ org.eclipse.jdt.core.compiler.compliance=1.6
<properties>
<project.build.sourceEncoding>
utf-8
</project.build.sourceEncoding>
</properties>
<profiles>
<profile>
<id>
sonar
</id>
<properties>
<sonar.jdbc.url>
jdbc:mysql://192.168.8.22:3306/sonar?useUnicode=true
&
characterEncoding=utf-8
</sonar.jdbc.url>
<sonar.jdbc.driver>
com.mysql.jdbc.Driver
</sonar.jdbc.driver>
<sonar.jdbc.username>
root
</sonar.jdbc.username>
<sonar.jdbc.password>
123456
</sonar.jdbc.password>
<sonar.host.url>
http://192.168.8.22:9000/sonar
</sonar.host.url>
</properties>
</profile></profiles>
</project>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录