Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
ecb08224
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,发现更多精彩内容 >>
提交
ecb08224
编写于
7月 12, 2013
作者:
Y
yong.you
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'biz' of github.com:dianping/cat into biz
上级
e55bcf20
7e5016ef
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
157 addition
and
89 deletion
+157
-89
cat-home/src/main/java/com/dianping/cat/report/baseline/impl/DefaultBaselineService.java
...ping/cat/report/baseline/impl/DefaultBaselineService.java
+17
-44
cat-home/src/main/java/com/dianping/cat/report/task/metric/MetricAlert.java
...java/com/dianping/cat/report/task/metric/MetricAlert.java
+72
-37
cat-home/src/main/java/com/dianping/cat/report/task/metric/MetricBaselineReportBuilder.java
...g/cat/report/task/metric/MetricBaselineReportBuilder.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/task/metric/MetricPointParser.java
...om/dianping/cat/report/task/metric/MetricPointParser.java
+4
-4
cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java
...n/java/com/dianping/cat/report/task/spi/ReportFacade.java
+1
-1
cat-home/src/test/java/com/dianping/cat/report/task/metric/MetricAlertTest.java
.../com/dianping/cat/report/task/metric/MetricAlertTest.java
+61
-1
cat-home/src/test/resources/com/dianping/cat/report/task/metric/metricReport.xml
...rces/com/dianping/cat/report/task/metric/metricReport.xml
+1
-1
未找到文件。
cat-home/src/main/java/com/dianping/cat/report/baseline/impl/DefaultBaselineService.java
浏览文件 @
ecb08224
...
...
@@ -6,14 +6,12 @@ import java.io.DataInputStream;
import
java.io.DataOutputStream
;
import
java.io.IOException
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
org.codehaus.plexus.logging.LogEnabled
;
import
org.codehaus.plexus.logging.Logger
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.dal.jdbc.DalNotFoundException
;
import
org.unidal.lookup.annotation.Inject
;
...
...
@@ -30,9 +28,9 @@ public class DefaultBaselineService implements BaselineService, LogEnabled {
@Inject
private
BaselineDao
m_baselineDao
;
private
Map
<
String
,
Map
<
String
,
Baseline
>>
m_baselines
=
new
HashMap
<
String
,
Map
<
String
,
Baseline
>>()
;
private
Logger
m_logger
;
private
Map
<
String
,
Baseline
>
m_baselineMap
s
=
new
LinkedHashMap
<
String
,
Baseline
>(
1000
)
{
private
Map
<
String
,
Baseline
>
m_baselineMap
=
new
LinkedHashMap
<
String
,
Baseline
>(
1000
)
{
private
static
final
long
serialVersionUID
=
1L
;
...
...
@@ -41,45 +39,26 @@ public class DefaultBaselineService implements BaselineService, LogEnabled {
return
true
;
}
};
private
Logger
m_logger
;
@Override
public
double
[]
queryDailyBaseline
(
String
reportName
,
String
key
,
Date
reportPeriod
)
{
double
[]
result
=
new
double
[
24
*
60
];
Baseline
baseline
=
queryFromMap
(
reportName
,
key
,
reportPeriod
);
String
baselineKey
=
reportName
+
":"
+
key
+
":"
+
reportPeriod
;
Baseline
baseline
=
m_baselineMap
.
get
(
baselineKey
);
if
(
baseline
==
null
)
{
try
{
baseline
=
m_baselineDao
.
findByReportNameKeyTime
(
reportPeriod
,
reportName
,
key
,
BaselineEntity
.
READSET_FULL
);
addBaselineToMap
(
baseline
,
reportName
,
key
);
m_baselineMap
.
put
(
baselineKey
,
baseline
);
result
=
parse
(
baseline
.
getData
());
return
result
;
}
catch
(
DalNotFoundException
e
)
{
m_logger
.
info
(
"Baseline not found: "
+
baselineKey
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
}
return
result
;
}
private
void
addBaselineToMap
(
Baseline
baseline
,
String
reportName
,
String
key
)
{
Map
<
String
,
Baseline
>
baselineMap
=
m_baselines
.
get
(
reportName
);
if
(
baselineMap
==
null
)
{
baselineMap
=
new
HashMap
<
String
,
Baseline
>();
m_baselines
.
put
(
reportName
,
baselineMap
);
}
baselineMap
.
put
(
key
,
baseline
);
}
private
Baseline
queryFromMap
(
String
reportName
,
String
key
,
Date
reportPeriod
)
{
Map
<
String
,
Baseline
>
baselineMap
=
m_baselines
.
get
(
reportName
);
if
(
baselineMap
==
null
)
{
return
null
;
}
Baseline
result
=
baselineMap
.
get
(
key
);
if
(
result
!=
null
&&
result
.
getReportPeriod
().
equals
(
reportPeriod
))
{
return
result
;
}
return
null
;
}
...
...
@@ -88,19 +67,15 @@ public class DefaultBaselineService implements BaselineService, LogEnabled {
double
[]
result
=
new
double
[
60
];
Date
today
=
TaskHelper
.
todayZero
(
reportPeriod
);
int
hour
=
(
int
)
((
reportPeriod
.
getTime
()
-
today
.
getTime
())
/
TimeUtil
.
ONE_HOUR
);
try
{
Baseline
baseline
=
m_baselineDao
.
findByReportNameKeyTime
(
today
,
reportName
,
key
,
BaselineEntity
.
READSET_FULL
);
double
[]
dayResult
=
parse
(
baseline
.
getData
());
for
(
int
i
=
0
;
i
<
60
;
i
++)
{
result
[
i
]
=
dayResult
[
hour
*
60
+
i
];
}
return
result
;
}
catch
(
DalNotFoundException
e
)
{
m_logger
.
warn
(
"base line cant't be fonund!"
+
reportName
+
" "
+
key
+
" "
+
reportPeriod
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
double
[]
dayResult
=
queryDailyBaseline
(
reportName
,
key
,
today
);
if
(
dayResult
==
null
)
return
null
;
for
(
int
i
=
0
;
i
<
60
;
i
++)
{
result
[
i
]
=
dayResult
[
hour
*
60
+
i
];
}
return
null
;
return
result
;
}
@Override
...
...
@@ -108,9 +83,7 @@ public class DefaultBaselineService implements BaselineService, LogEnabled {
try
{
baseline
.
setData
(
build
(
baseline
.
getDataInDoubleArray
()));
m_baselineDao
.
insert
(
baseline
);
}
catch
(
DalException
e
)
{
Cat
.
logError
(
e
);
}
catch
(
IOException
e
)
{
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
}
...
...
cat-home/src/main/java/com/dianping/cat/report/task/metric/MetricAlert.java
浏览文件 @
ecb08224
...
...
@@ -2,6 +2,7 @@ package com.dianping.cat.report.task.metric;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
...
...
@@ -60,9 +61,9 @@ public class MetricAlert implements Task, LogEnabled {
private
static
final
long
TEN_SECONDS
=
10
*
1000
;
private
static
final
int
DURATION_IN_MINUTE
=
1
;
private
static
final
long
DURATION
=
1
*
TimeUtil
.
ONE_MINUTE
;
private
static
final
long
DURATION
=
DURATION_IN_MINUTE
*
TimeUtil
.
ONE_MINUTE
;
private
Set
<
AlertInfo
>
alertInfoSet
=
new
HashSet
<
AlertInfo
>()
;
@Override
public
void
enableLogging
(
Logger
logger
)
{
...
...
@@ -98,69 +99,105 @@ public class MetricAlert implements Task, LogEnabled {
}
}
private
List
<
Integer
>
check
(
double
[]
realDatas
,
double
[]
baseLineDatas
,
BaselineConfig
config
)
{
int
size
=
realDatas
.
length
;
for
(
int
i
=
0
;
i
<=
size
;
i
++)
{
}
return
null
;
}
protected
void
metricAlert
(
Date
date
)
{
protected
List
<
AlertInfo
>
metricAlert
(
Date
date
)
{
long
current
=
date
.
getTime
()
/
1000
/
60
;
int
minute
=
(
int
)
(
current
%
(
60
));
if
(
minute
==
0
)
{
alertInfoSet
=
new
HashSet
<
AlertInfo
>();
}
Set
<
String
>
productLines
=
m_productLineConfigManager
.
queryProductLines
().
keySet
();
List
<
AlertInfo
>
alerts
=
new
ArrayList
<
AlertInfo
>();
for
(
String
productLine
:
productLines
)
{
MetricReport
report
=
queryMetricReport
(
productLine
);
if
(
report
==
null
)
{
continue
;
}
for
(
MetricItem
item
:
report
.
getMetricItems
().
values
())
{
String
key
=
item
.
getId
();
MetricItemConfig
metricConfig
=
m_metricConfigManager
.
queryMetricItemConfig
(
key
);
List
<
Integer
>
alerts
=
new
ArrayList
<
Integer
>();
MetricItemConfig
metricConfig
=
m_metricConfigManager
.
queryMetricItemConfig
(
item
.
getId
());
if
(
metricConfig
==
null
)
{
continue
;
}
if
(
metricConfig
.
isShowCount
())
{
alerts
.
addAll
(
buildAlertInfo
(
date
,
MetricType
.
COUNT
,
item
,
key
));
alerts
.
addAll
(
buildAlertInfo
(
date
,
productLine
,
MetricType
.
COUNT
,
item
,
minute
));
}
if
(
metricConfig
.
isShowAvg
())
{
alerts
.
addAll
(
buildAlertInfo
(
date
,
MetricType
.
AVG
,
item
,
key
));
alerts
.
addAll
(
buildAlertInfo
(
date
,
productLine
,
MetricType
.
AVG
,
item
,
minute
));
}
if
(
metricConfig
.
isShowSum
())
{
alerts
.
addAll
(
buildAlertInfo
(
date
,
MetricType
.
SUM
,
item
,
key
));
alerts
.
addAll
(
buildAlertInfo
(
date
,
productLine
,
MetricType
.
SUM
,
item
,
minute
));
}
if
(
alerts
.
size
()
>
0
)
{
String
alertInfo
=
buildAlertInfo
(
alerts
,
minute
);
m_logger
.
info
(
alertInfo
);
}
}
List
<
AlertInfo
>
result
=
new
ArrayList
<
AlertInfo
>();
if
(
alerts
.
size
()
>
0
)
{
for
(
AlertInfo
alert
:
alerts
)
{
if
(!
alertInfoSet
.
contains
(
alert
))
{
m_logger
.
info
(
alert
.
toString
());
result
.
add
(
alert
);
alertInfoSet
.
add
(
alert
);
}
}
}
return
result
;
}
private
String
buildAlertInfo
(
List
<
Integer
>
alerts
,
int
minute
)
{
return
null
;
protected
class
AlertInfo
{
Date
date
;
MetricType
metricType
;
String
productLine
;
String
metricId
;
public
AlertInfo
(
Date
date
,
MetricType
metricType
,
String
productLine
,
String
metricId
)
{
super
();
this
.
date
=
date
;
this
.
metricType
=
metricType
;
this
.
productLine
=
productLine
;
this
.
metricId
=
metricId
;
}
@Override
public
String
toString
()
{
return
"AlertInfo [date="
+
date
+
", metricType="
+
metricType
+
", productLine="
+
productLine
+
", metricId="
+
metricId
+
"]"
;
}
}
private
List
<
Integer
>
buildAlertInfo
(
Date
date
,
MetricType
type
,
MetricItem
item
,
String
key
)
{
String
baseLineKey
=
key
+
":"
+
type
;
private
List
<
AlertInfo
>
buildAlertInfo
(
Date
date
,
String
productLine
,
MetricType
type
,
MetricItem
item
,
int
minute
)
{
List
<
AlertInfo
>
result
=
new
ArrayList
<
AlertInfo
>();
String
id
=
item
.
getId
();
String
baseLineKey
=
id
+
":"
+
type
;
double
[]
baseline
=
m_baselineService
.
queryHourlyBaseline
(
METRIC
,
baseLineKey
,
date
);
if
(
baseline
!=
null
)
{
double
[]
realDatas
=
extractDatasFromReport
(
item
,
type
);
double
[]
realDatas
=
m_parser
.
buildHourlyData
(
item
,
type
);
if
(
realDatas
==
null
)
{
return
result
;
}
BaselineConfig
baselineConfig
=
m_baselineConfigManager
.
queryBaseLineConfig
(
baseLineKey
);
return
check
(
baseline
,
realDatas
,
baselineConfig
);
List
<
Integer
>
minutes
=
checkData
(
baseline
,
realDatas
,
minute
,
baselineConfig
);
for
(
int
resultMinuteInHour
:
minutes
)
{
long
current
=
date
.
getTime
()
/
TimeUtil
.
ONE_MINUTE
;
long
resultMinute
=
current
-
minute
+
resultMinuteInHour
;
Date
resultDate
=
new
Date
(
resultMinute
*
TimeUtil
.
ONE_MINUTE
);
AlertInfo
info
=
new
AlertInfo
(
resultDate
,
type
,
productLine
,
item
.
getId
());
result
.
add
(
info
);
}
}
return
new
ArrayList
<
Integer
>();
}
private
double
[]
extractDatasFromReport
(
MetricItem
item
,
MetricType
type
)
{
return
m_parser
.
queryOneHourData
(
item
,
type
);
return
result
;
}
private
MetricReport
queryMetricReport
(
String
product
)
{
ModelRequest
request
=
new
ModelRequest
(
product
,
ModelPeriod
.
CURRENT
.
getStartTime
());
if
(
m_service
.
isEligable
(
request
))
{
ModelResponse
<
MetricReport
>
response
=
m_service
.
invoke
(
request
);
if
(
response
==
null
)
{
return
null
;
}
MetricReport
report
=
response
.
getModel
();
return
report
;
}
else
{
...
...
@@ -170,12 +207,10 @@ public class MetricAlert implements Task, LogEnabled {
private
List
<
Integer
>
checkData
(
double
[]
baseline
,
double
[]
datas
,
int
minute
,
BaselineConfig
config
)
{
List
<
Integer
>
result
=
new
ArrayList
<
Integer
>();
int
start
=
minute
/
DURATION_IN_MINUTE
;
int
end
=
minute
/
DURATION_IN_MINUTE
+
DURATION_IN_MINUTE
;
double
minValue
=
config
.
getMinValue
();
double
lowerLimit
=
config
.
getLowerLimit
();
double
upperLimit
=
config
.
getUpperLimit
();
for
(
int
i
=
start
;
i
<
end
;
i
++)
{
for
(
int
i
=
0
;
i
<=
minute
;
i
++)
{
if
(
baseline
[
i
]
<
0
)
{
continue
;
}
else
if
(
baseline
[
i
]
==
0
)
{
...
...
cat-home/src/main/java/com/dianping/cat/report/task/metric/MetricBaselineReportBuilder.java
浏览文件 @
ecb08224
...
...
@@ -87,7 +87,7 @@ public class MetricBaselineReportBuilder implements ReportTaskBuilder {
reports
.
add
(
reportItem
);
}
double
[]
oneDayValue
=
m_parser
.
queryOneDa
yData
(
reports
,
type
);
double
[]
oneDayValue
=
m_parser
.
buildDail
yData
(
reports
,
type
);
values
.
add
(
oneDayValue
);
}
...
...
cat-home/src/main/java/com/dianping/cat/report/task/metric/MetricPointParser.java
浏览文件 @
ecb08224
...
...
@@ -10,7 +10,7 @@ public class MetricPointParser {
private
static
final
int
POINT_NUMBER
=
60
;
public
double
[]
queryOneHour
Data
(
MetricItem
item
,
MetricType
type
)
{
public
double
[]
buildHourly
Data
(
MetricItem
item
,
MetricType
type
)
{
double
[]
result
=
new
double
[
POINT_NUMBER
];
Map
<
Integer
,
Point
>
map
=
item
.
getAbtests
().
get
(
"-1"
).
getGroups
().
get
(
""
).
getPoints
();
for
(
Integer
minute
:
map
.
keySet
())
{
...
...
@@ -26,7 +26,7 @@ public class MetricPointParser {
return
result
;
}
public
double
[]
queryOneDa
yData
(
List
<
MetricItem
>
items
,
MetricType
type
)
{
public
double
[]
buildDail
yData
(
List
<
MetricItem
>
items
,
MetricType
type
)
{
int
size
=
items
.
size
();
double
[]
values
=
new
double
[
24
*
POINT_NUMBER
];
...
...
@@ -36,14 +36,14 @@ public class MetricPointParser {
for
(
int
hour
=
0
;
hour
<
size
;
hour
++)
{
MetricItem
item
=
items
.
get
(
hour
);
try
{
double
[]
oneHourValues
=
queryOneHour
Data
(
item
,
type
);
double
[]
oneHourValues
=
buildHourly
Data
(
item
,
type
);
for
(
int
minute
=
0
;
minute
<
60
;
minute
++)
{
int
index
=
hour
*
60
+
minute
;
values
[
index
]
=
oneHourValues
[
minute
];
}
}
catch
(
NullPointerException
e
)
{
// Do Nothing
continue
;
}
}
return
values
;
...
...
cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java
浏览文件 @
ecb08224
...
...
@@ -132,7 +132,7 @@ public class ReportFacade implements LogEnabled, Initializable {
m_reportBuilders
.
put
(
"sql"
,
m_sqlReportBuilder
);
m_reportBuilders
.
put
(
"state"
,
m_stateReportBuilder
);
m_reportBuilders
.
put
(
"dependency"
,
m_dependendcyReportBuilder
);
m_reportBuilders
.
put
(
"metric
Baseline
"
,
m_metricBaselineReportBuilder
);
m_reportBuilders
.
put
(
"metric"
,
m_metricBaselineReportBuilder
);
}
}
cat-home/src/test/java/com/dianping/cat/report/task/metric/MetricAlertTest.java
浏览文件 @
ecb08224
...
...
@@ -2,6 +2,11 @@ package com.dianping.cat.report.task.metric;
import
java.io.IOException
;
import
java.text.SimpleDateFormat
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.List
;
import
junit.framework.Assert
;
import
org.junit.Test
;
import
org.unidal.helper.Files
;
...
...
@@ -10,7 +15,12 @@ import org.xml.sax.SAXException;
import
com.dianping.cat.consumer.metric.model.entity.MetricReport
;
import
com.dianping.cat.consumer.metric.model.transform.DefaultSaxParser
;
import
com.dianping.cat.home.dal.report.Baseline
;
import
com.dianping.cat.report.baseline.BaselineConfig
;
import
com.dianping.cat.report.baseline.BaselineConfigManager
;
import
com.dianping.cat.report.baseline.BaselineService
;
import
com.dianping.cat.report.page.model.spi.ModelService
;
import
com.dianping.cat.report.task.metric.MetricAlert.AlertInfo
;
import
com.dianping.cat.service.ModelRequest
;
import
com.dianping.cat.service.ModelResponse
;
...
...
@@ -21,13 +31,60 @@ public class MetricAlertTest extends ComponentTestCase {
MetricAlert
alert
=
lookup
(
MetricAlert
.
class
);
ModelService
<
MetricReport
>
modelService
=
new
MyModelService
();
alert
.
m_service
=
modelService
;
alert
.
m_baselineConfigManager
=
new
MyBaselineConfigManager
();
alert
.
m_baselineService
=
new
MyBaselineService
();
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
alert
.
metricAlert
(
format
.
parse
(
"2013-07-10 10:00:00"
));
List
<
AlertInfo
>
alerts
=
alert
.
metricAlert
(
format
.
parse
(
"2013-07-10 10:00:00"
));
Assert
.
assertEquals
(
1
,
alerts
.
size
());
Assert
.
assertEquals
(
format
.
parse
(
"2013-07-10 10:00:00"
),
alerts
.
get
(
0
).
date
);
Assert
.
assertEquals
(
"TuanGouWeb:URL:/index"
,
alerts
.
get
(
0
).
metricId
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
private
class
MyBaselineService
implements
BaselineService
{
@Override
public
double
[]
queryDailyBaseline
(
String
reportName
,
String
key
,
Date
reportPeriod
)
{
return
null
;
}
@Override
public
double
[]
queryHourlyBaseline
(
String
reportName
,
String
key
,
Date
reportPeriod
)
{
double
[]
result
=
{
4935.6
,
4866.6
,
4988.8
,
4875.2
,
4847.0
,
5185.4
,
5616.4
,
5727.4
,
5529.8
,
5487.2
,
5416.8
,
5452.0
,
5483.6
,
5510.2
,
5582.8
,
5585.4
,
5401.2
,
5528.0
,
5567.2
,
5518.0
,
5630.4
,
5900.0
,
5666.8
,
5697.4
,
5639.6
,
5672.6
,
5705.2
,
5935.4
,
5889.0
,
5780.0
,
5724.8
,
5925.4
,
5912.2
,
5882.6
,
5866.8
,
5443.0
,
5678.2
,
5436.6
,
5391.8
,
5777.6
,
5725.8
,
5276.8
,
5401.2
,
5340.4
,
6110.25
,
5159.8
,
5045.6
,
4919.8
,
5080.2
,
5220.4
,
5517.2
,
6349.25
,
5355.4
,
5241.4
,
6198.0
,
6244.25
,
6327.75
,
6575.0
,
6474.75
,
6250.5
};
return
result
;
}
@Override
public
void
insertBaseline
(
Baseline
baseline
)
{
}
}
private
class
MyBaselineConfigManager
extends
BaselineConfigManager
{
@Override
public
BaselineConfig
queryBaseLineConfig
(
String
key
)
{
BaselineConfig
config
=
new
BaselineConfig
();
Integer
[]
days
=
{
0
,
-
1
,
-
2
,
-
3
,
-
4
};
Double
[]
weights
=
{
1.0
,
1.0
,
1.0
,
1.0
,
1.0
};
config
.
setDays
(
Arrays
.
asList
(
days
));
config
.
setId
(
1
);
config
.
setKey
(
key
);
config
.
setLowerLimit
(
1
);
config
.
setMinValue
(
1
);
config
.
setTargetDate
(
1
);
config
.
setUpperLimit
(
1
);
config
.
setWeights
(
Arrays
.
asList
(
weights
));
return
config
;
}
}
private
class
MyModelService
implements
ModelService
<
MetricReport
>
{
@Override
...
...
@@ -38,6 +95,9 @@ public class MetricAlertTest extends ComponentTestCase {
@Override
public
ModelResponse
<
MetricReport
>
invoke
(
ModelRequest
request
)
{
ModelResponse
<
MetricReport
>
response
=
new
ModelResponse
<
MetricReport
>();
if
(!
request
.
getDomain
().
equals
(
"TuanGou"
))
{
return
null
;
}
String
xml
;
try
{
xml
=
Files
.
forIO
().
readFrom
(
getClass
().
getResourceAsStream
(
"metricReport.xml"
),
"utf-8"
);
...
...
cat-home/src/test/resources/com/dianping/cat/report/task/metric/metricReport.xml
浏览文件 @
ecb08224
<?xml version="1.0" encoding="utf-8"?>
<metric-report
product=
"TuanGou"
startTime=
"2013-07-10 11:00:00"
endTime=
"2013-07-01 11:59:59"
>
<metric-item
id=
"/index"
type=
"C"
>
<metric-item
id=
"
TuanGouWeb:URL:
/index"
type=
"C"
>
<abtest
run-id=
"66"
>
<group
name=
""
>
<point
id=
"0"
count=
"1622"
sum=
"4.56243375E8"
avg=
"281284.44821208384"
/>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录