Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
a4c443a8
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,发现更多精彩内容 >>
提交
a4c443a8
编写于
6月 21, 2013
作者:
Y
yong.you
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add metric config
上级
6c9057a6
变更
27
显示空白变更内容
内联
并排
Showing
27 changed file
with
419 addition
and
411 deletion
+419
-411
cat-consumer-advanced/pom.xml
cat-consumer-advanced/pom.xml
+2
-1
cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/BussinessConfigManager.java
...ianping/cat/consumer/advanced/BussinessConfigManager.java
+0
-292
cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/MetricAnalyzer.java
...va/com/dianping/cat/consumer/advanced/MetricAnalyzer.java
+8
-10
cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/MetricConfigManager.java
...m/dianping/cat/consumer/advanced/MetricConfigManager.java
+178
-0
cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java
...m/dianping/cat/consumer/build/ComponentsConfigurator.java
+4
-3
cat-consumer-advanced/src/main/resources/META-INF/dal/model/metric-config-codegen.xml
...in/resources/META-INF/dal/model/metric-config-codegen.xml
+18
-0
cat-consumer-advanced/src/main/resources/META-INF/dal/model/metric-config-manifest.xml
...n/resources/META-INF/dal/model/metric-config-manifest.xml
+6
-0
cat-consumer-advanced/src/main/resources/META-INF/dal/model/metric-config-model.xml
...main/resources/META-INF/dal/model/metric-config-model.xml
+17
-0
cat-consumer-advanced/src/main/resources/META-INF/plexus/components.xml
...dvanced/src/main/resources/META-INF/plexus/components.xml
+8
-3
cat-consumer-advanced/src/main/resources/META-INF/wizard/model/wizard.xml
...anced/src/main/resources/META-INF/wizard/model/wizard.xml
+3
-0
cat-consumer-advanced/src/test/resources/com/dianping/cat/consumer/model/metric-config.xml
...sources/com/dianping/cat/consumer/model/metric-config.xml
+5
-0
cat-consumer/src/main/java/com/dianping/cat/consumer/core/ProductLineConfigManager.java
.../dianping/cat/consumer/core/ProductLineConfigManager.java
+23
-15
cat-home/src/main/java/com/dianping/cat/helper/CatString.java
...home/src/main/java/com/dianping/cat/helper/CatString.java
+6
-0
cat-home/src/main/java/com/dianping/cat/report/page/LineChart.java
...src/main/java/com/dianping/cat/report/page/LineChart.java
+5
-5
cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/LineGraphBuilder.java
...ng/cat/report/page/dependency/graph/LineGraphBuilder.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/page/event/HistoryGraphs.java
...ava/com/dianping/cat/report/page/event/HistoryGraphs.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/page/health/HistoryGraphs.java
...va/com/dianping/cat/report/page/health/HistoryGraphs.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/page/heartbeat/HistoryGraphs.java
...com/dianping/cat/report/page/heartbeat/HistoryGraphs.java
+1
-1
cat-home/src/main/java/com/dianping/cat/report/page/metric/Handler.java
...ain/java/com/dianping/cat/report/page/metric/Handler.java
+7
-3
cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplay.java
...va/com/dianping/cat/report/page/metric/MetricDisplay.java
+56
-21
cat-home/src/main/java/com/dianping/cat/report/page/state/StateGraphs.java
.../java/com/dianping/cat/report/page/state/StateGraphs.java
+2
-2
cat-home/src/main/java/com/dianping/cat/report/page/transaction/HistoryGraphs.java
...m/dianping/cat/report/page/transaction/HistoryGraphs.java
+3
-3
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+8
-3
cat-home/src/main/resources/config/default-metric-config.xml
cat-home/src/main/resources/config/default-metric-config.xml
+7
-0
cat-home/src/main/webapp/jsp/report/metric.jsp
cat-home/src/main/webapp/jsp/report/metric.jsp
+8
-5
cat-home/src/test/java/com/dianping/cat/demo/TestABTestBusinessMessage.java
...java/com/dianping/cat/demo/TestABTestBusinessMessage.java
+39
-38
cat-home/src/test/java/com/dianping/cat/demo/TestBusinessMessage.java
.../test/java/com/dianping/cat/demo/TestBusinessMessage.java
+0
-1
未找到文件。
cat-consumer-advanced/pom.xml
浏览文件 @
a4c443a8
...
...
@@ -69,7 +69,8 @@
${basedir}/src/main/resources/META-INF/dal/model/matrix-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/metric-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/health-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/dependency-report-manifest.xml,
</manifest>
${basedir}/src/main/resources/META-INF/dal/model/dependency-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/metric-config-manifest.xml,
</manifest>
</configuration>
</execution>
<execution>
...
...
cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/BussinessConfigManager.java
已删除
100644 → 0
浏览文件 @
6c9057a6
package
com.dianping.cat.consumer.advanced
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.concurrent.ConcurrentHashMap
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
public
class
BussinessConfigManager
implements
Initializable
{
// key is domain
private
Map
<
String
,
Map
<
Integer
,
Map
<
String
,
BusinessConfig
>>>
m_configs
=
new
ConcurrentHashMap
<
String
,
Map
<
Integer
,
Map
<
String
,
BusinessConfig
>>>();
public
Map
<
String
,
BusinessConfig
>
getUrlConfigs
(
String
domain
)
{
return
getMetricConfigsByType
(
domain
,
BusinessConfig
.
URL
);
}
public
Map
<
String
,
BusinessConfig
>
getMetricConfigs
(
String
domain
)
{
return
getMetricConfigsByType
(
domain
,
BusinessConfig
.
METRIC
);
}
public
List
<
BusinessConfig
>
getConfigs
(
List
<
String
>
domains
)
{
List
<
BusinessConfig
>
configs
=
new
ArrayList
<
BusinessConfig
>();
for
(
String
domain
:
domains
)
{
Map
<
Integer
,
Map
<
String
,
BusinessConfig
>>
value
=
m_configs
.
get
(
domain
);
if
(
value
!=
null
){
for
(
Entry
<
Integer
,
Map
<
String
,
BusinessConfig
>>
internalEntry
:
value
.
entrySet
())
{
configs
.
addAll
(
internalEntry
.
getValue
().
values
());
}
}
}
Collections
.
sort
(
configs
,
new
BusinessConfigCompator
());
return
configs
;
}
private
Map
<
String
,
BusinessConfig
>
getMetricConfigsByType
(
String
domain
,
int
type
)
{
Map
<
Integer
,
Map
<
String
,
BusinessConfig
>>
configMap
=
m_configs
.
get
(
domain
);
if
(
configMap
!=
null
)
{
Map
<
String
,
BusinessConfig
>
config
=
configMap
.
get
(
type
);
if
(
config
!=
null
)
{
return
config
;
}
}
return
new
HashMap
<
String
,
BusinessConfig
>();
}
private
BussinessConfigManager
addConfig
(
BusinessConfig
config
)
{
String
domain
=
config
.
getDomain
();
Map
<
Integer
,
Map
<
String
,
BusinessConfig
>>
configsMap
=
m_configs
.
get
(
domain
);
if
(
configsMap
==
null
)
{
configsMap
=
new
ConcurrentHashMap
<
Integer
,
Map
<
String
,
BusinessConfig
>>();
m_configs
.
put
(
config
.
getDomain
(),
configsMap
);
}
int
type
=
config
.
getType
();
Map
<
String
,
BusinessConfig
>
configs
=
configsMap
.
get
(
type
);
if
(
configs
==
null
)
{
configs
=
new
ConcurrentHashMap
<
String
,
BusinessConfig
>();
configsMap
.
put
(
config
.
getType
(),
configs
);
}
configs
.
put
(
config
.
getMainKey
(),
config
);
return
this
;
}
@Override
public
void
initialize
()
throws
InitializationException
{
String
TuanGouWeb
=
"TuanGouWeb"
;
String
PayOrder
=
"PayOrder"
;
String
Cat
=
"Cat"
;
BusinessConfig
config
=
new
BusinessConfig
();
config
.
setDomain
(
Cat
).
setType
(
BusinessConfig
.
URL
);
config
.
setViewOrder
(
1
).
setMainKey
(
"t"
).
setClassifications
(
null
);
config
.
setTitle
(
"Transaction"
).
setShowCount
(
true
).
setShowAvg
(
true
).
setShowSum
(
true
);
addConfig
(
config
);
config
=
new
BusinessConfig
();
config
.
setDomain
(
Cat
).
setType
(
BusinessConfig
.
URL
);
config
.
setViewOrder
(
2
).
setMainKey
(
"e"
).
setClassifications
(
null
);
config
.
setTitle
(
"Event"
).
setShowCount
(
true
).
setShowAvg
(
false
).
setShowSum
(
false
);
addConfig
(
config
);
config
=
new
BusinessConfig
();
config
.
setDomain
(
Cat
).
setType
(
BusinessConfig
.
URL
);
config
.
setViewOrder
(
3
).
setMainKey
(
"home"
).
setClassifications
(
null
);
config
.
setTitle
(
"Home"
).
setShowCount
(
true
).
setShowAvg
(
false
).
setShowSum
(
false
);
addConfig
(
config
);
config
=
new
BusinessConfig
();
config
.
setDomain
(
TuanGouWeb
).
setType
(
BusinessConfig
.
URL
);
config
.
setViewOrder
(
1
).
setMainKey
(
"/index"
).
setClassifications
(
"channel"
);
config
.
setTitle
(
MetricTitle
.
INDEX
).
setShowCount
(
true
).
setShowAvg
(
false
).
setShowSum
(
false
);
addConfig
(
config
);
config
=
new
BusinessConfig
();
config
.
setDomain
(
TuanGouWeb
).
setType
(
BusinessConfig
.
URL
);
config
.
setViewOrder
(
2
).
setMainKey
(
"/detail"
).
setClassifications
(
"channel"
);
config
.
setTitle
(
MetricTitle
.
DETAIL
).
setShowCount
(
true
).
setShowAvg
(
false
).
setShowSum
(
false
);
addConfig
(
config
);
config
=
new
BusinessConfig
();
config
.
setDomain
(
PayOrder
).
setType
(
BusinessConfig
.
URL
);
config
.
setViewOrder
(
3
).
setMainKey
(
"/order/submitOrder"
).
setClassifications
(
"channel"
);
config
.
setTitle
(
MetricTitle
.
PAY
).
setShowCount
(
true
).
setShowAvg
(
false
).
setShowSum
(
false
);
addConfig
(
config
);
config
=
new
BusinessConfig
();
config
.
setDomain
(
PayOrder
).
setType
(
BusinessConfig
.
METRIC
);
config
.
setViewOrder
(
4
).
setMainKey
(
"order"
).
setClassifications
(
"channel"
).
setTarget
(
"quantity"
);
config
.
setTitle
(
MetricTitle
.
ORDER
).
setShowCount
(
true
).
setShowAvg
(
false
).
setShowSum
(
false
);
addConfig
(
config
);
config
=
new
BusinessConfig
();
config
.
setDomain
(
PayOrder
).
setType
(
BusinessConfig
.
METRIC
);
config
.
setViewOrder
(
5
).
setMainKey
(
"payment.pending"
).
setClassifications
(
"channel"
).
setTarget
(
"amount"
);
config
.
setTitle
(
MetricTitle
.
SUCCESS
).
setShowCount
(
false
).
setShowAvg
(
false
).
setShowSum
(
false
);
addConfig
(
config
);
config
=
new
BusinessConfig
();
config
.
setDomain
(
PayOrder
).
setType
(
BusinessConfig
.
METRIC
);
config
.
setViewOrder
(
6
).
setMainKey
(
"payment.success"
).
setClassifications
(
"channel"
).
setTarget
(
"amount"
);
config
.
setTitle
(
MetricTitle
.
SUCCESS
).
setShowCount
(
false
).
setShowAvg
(
false
).
setShowSum
(
true
);
addConfig
(
config
);
}
public
static
class
BusinessConfigCompator
implements
Comparator
<
BusinessConfig
>
{
@Override
public
int
compare
(
BusinessConfig
o1
,
BusinessConfig
o2
)
{
return
o1
.
getViewOrder
()
-
o2
.
getViewOrder
();
}
}
public
static
class
BusinessConfig
{
public
static
final
int
URL
=
1
;
public
static
final
int
METRIC
=
2
;
public
static
final
String
Suffix_SUM
=
"(总和)"
;
public
static
final
String
Suffix_COUNT
=
"(次数)"
;
public
static
final
String
Suffix_AVG
=
"(平均)"
;
private
String
m_domain
;
private
int
m_type
;
private
int
m_viewOrder
;
private
String
m_mainKey
;
private
String
m_target
;
private
String
m_classifications
;
private
String
m_title
;
private
boolean
m_showSum
;
private
boolean
m_showCount
;
private
boolean
m_showAvg
;
public
String
getTarget
()
{
return
m_target
;
}
public
BusinessConfig
setTarget
(
String
target
)
{
m_target
=
target
;
return
this
;
}
public
String
getClassifications
()
{
return
m_classifications
;
}
public
String
getDomain
()
{
return
m_domain
;
}
public
String
getMainKey
()
{
return
m_mainKey
;
}
public
String
getTitle
()
{
return
m_title
;
}
public
int
getType
()
{
return
m_type
;
}
public
int
getViewOrder
()
{
return
m_viewOrder
;
}
public
boolean
isShowAvg
()
{
return
m_showAvg
;
}
public
boolean
isShowCount
()
{
return
m_showCount
;
}
public
boolean
isShowSum
()
{
return
m_showSum
;
}
public
BusinessConfig
setClassifications
(
String
childKeys
)
{
m_classifications
=
childKeys
;
return
this
;
}
public
BusinessConfig
setDomain
(
String
domain
)
{
m_domain
=
domain
;
return
this
;
}
public
BusinessConfig
setMainKey
(
String
mainKey
)
{
m_mainKey
=
mainKey
;
return
this
;
}
public
BusinessConfig
setShowAvg
(
boolean
showAvg
)
{
m_showAvg
=
showAvg
;
return
this
;
}
public
BusinessConfig
setShowCount
(
boolean
showCount
)
{
m_showCount
=
showCount
;
return
this
;
}
public
BusinessConfig
setShowSum
(
boolean
showSum
)
{
m_showSum
=
showSum
;
return
this
;
}
public
BusinessConfig
setTitle
(
String
title
)
{
m_title
=
title
;
return
this
;
}
public
BusinessConfig
setType
(
int
type
)
{
m_type
=
type
;
return
this
;
}
public
BusinessConfig
setViewOrder
(
int
viewOrder
)
{
m_viewOrder
=
viewOrder
;
return
this
;
}
}
public
class
MetricTitle
{
public
static
final
String
INDEX
=
"团购首页"
;
public
static
final
String
DETAIL
=
"团购详情"
;
public
static
final
String
PAY
=
"支付页面"
;
public
static
final
String
ORDER
=
"订单创建"
;
public
static
final
String
SUCCESS
=
"支付金额(单位:元)"
;
}
}
cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/MetricAnalyzer.java
浏览文件 @
a4c443a8
...
...
@@ -15,9 +15,9 @@ import org.unidal.tuple.Pair;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.CatConstants
;
import
com.dianping.cat.abtest.spi.internal.ABTestCodec
;
import
com.dianping.cat.advanced.metric.config.entity.MetricItemConfig
;
import
com.dianping.cat.configuration.NetworkInterfaceManager
;
import
com.dianping.cat.consumer.AbstractMessageAnalyzer
;
import
com.dianping.cat.consumer.advanced.BussinessConfigManager.BusinessConfig
;
import
com.dianping.cat.consumer.advanced.dal.BusinessReport
;
import
com.dianping.cat.consumer.advanced.dal.BusinessReportDao
;
import
com.dianping.cat.consumer.core.ProductLineConfigManager
;
...
...
@@ -47,7 +47,7 @@ public class MetricAnalyzer extends AbstractMessageAnalyzer<MetricReport> implem
private
BusinessReportDao
m_businessReportDao
;
@Inject
private
Bussiness
ConfigManager
m_configManager
;
private
Metric
ConfigManager
m_configManager
;
@Inject
private
ProductLineConfigManager
m_productLineConfigManager
;
...
...
@@ -120,7 +120,6 @@ public class MetricAnalyzer extends AbstractMessageAnalyzer<MetricReport> implem
if
(
"URL"
.
equals
(
message
.
getType
())
&&
"ABTest"
.
equals
(
message
.
getName
()))
{
String
data
=
(
String
)
message
.
getData
();
System
.
out
.
println
(
data
);
return
data
;
}
}
...
...
@@ -168,7 +167,8 @@ public class MetricAnalyzer extends AbstractMessageAnalyzer<MetricReport> implem
String
name
=
metric
.
getName
();
String
domain
=
tree
.
getDomain
();
String
data
=
(
String
)
metric
.
getData
();
Pair
<
Integer
,
Double
>
value
=
parseValue
(
metric
.
getStatus
(),
data
);
String
status
=
metric
.
getStatus
();
Pair
<
Integer
,
Double
>
value
=
parseValue
(
status
,
data
);
if
(
value
!=
null
)
{
long
current
=
metric
.
getTimestamp
()
/
1000
/
60
;
...
...
@@ -176,7 +176,7 @@ public class MetricAnalyzer extends AbstractMessageAnalyzer<MetricReport> implem
MetricItem
metricItem
=
report
.
findOrCreateMetricItem
(
name
);
Map
<
String
,
String
>
abtests
=
parseABTests
(
type
);
metricItem
.
addDomain
(
domain
);
metricItem
.
addDomain
(
domain
)
.
setType
(
status
)
;
updateMetric
(
metricItem
,
abtests
,
min
,
value
.
getKey
(),
value
.
getValue
());
}
return
0
;
...
...
@@ -229,10 +229,8 @@ public class MetricAnalyzer extends AbstractMessageAnalyzer<MetricReport> implem
if
(
CatConstants
.
TYPE_URL
.
equals
(
type
))
{
String
name
=
transaction
.
getName
();
String
domain
=
tree
.
getDomain
();
Map
<
String
,
BusinessConfig
>
configs
=
m_configManager
.
getUrlConfigs
(
domain
);
BusinessConfig
config
=
null
;
MetricItemConfig
config
=
m_configManager
.
queryMetricItemConfig
(
domain
+
":"
+
name
);
config
=
configs
.
get
(
name
);
if
(
config
!=
null
)
{
long
current
=
transaction
.
getTimestamp
()
/
1000
/
60
;
int
min
=
(
int
)
(
current
%
(
60
));
...
...
@@ -240,7 +238,7 @@ public class MetricAnalyzer extends AbstractMessageAnalyzer<MetricReport> implem
MetricItem
metricItem
=
report
.
findOrCreateMetricItem
(
name
);
Map
<
String
,
String
>
abtests
=
parseABtests
(
transaction
);
metricItem
.
addDomain
(
domain
);
metricItem
.
addDomain
(
domain
)
.
setType
(
"C"
)
;
updateMetric
(
metricItem
,
abtests
,
min
,
1
,
sum
);
}
}
...
...
cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/MetricConfigManager.java
0 → 100644
浏览文件 @
a4c443a8
package
com.dianping.cat.consumer.advanced
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
org.codehaus.plexus.logging.LogEnabled
;
import
org.codehaus.plexus.logging.Logger
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.dal.jdbc.DalNotFoundException
;
import
org.unidal.helper.Files
;
import
org.unidal.helper.Threads.Task
;
import
org.unidal.lookup.annotation.Inject
;
import
org.xml.sax.SAXException
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.advanced.metric.config.entity.MetricConfig
;
import
com.dianping.cat.advanced.metric.config.entity.MetricItemConfig
;
import
com.dianping.cat.advanced.metric.config.transform.DefaultSaxParser
;
import
com.dianping.cat.consumer.core.config.Config
;
import
com.dianping.cat.consumer.core.config.ConfigDao
;
import
com.dianping.cat.consumer.core.config.ConfigEntity
;
public
class
MetricConfigManager
implements
Initializable
,
LogEnabled
{
@Inject
private
ConfigDao
m_configDao
;
private
int
m_configId
;
private
MetricConfig
m_metricConfig
;
private
long
m_modifyTime
;
private
Logger
m_logger
;
private
static
final
String
CONFIG_NAME
=
"metricConfig"
;
public
MetricConfig
getMetricConfig
()
{
synchronized
(
m_metricConfig
)
{
return
m_metricConfig
;
}
}
public
boolean
insertMetricItemConfig
(
MetricItemConfig
config
){
getMetricConfig
().
addMetricItemConfig
(
config
);
return
storeConfig
();
}
public
MetricItemConfig
queryMetricItemConfig
(
String
id
)
{
return
getMetricConfig
().
findMetricItemConfig
(
id
);
}
public
List
<
MetricItemConfig
>
queryMetricItemConfig
(
Set
<
String
>
domains
)
{
List
<
MetricItemConfig
>
configs
=
new
ArrayList
<
MetricItemConfig
>();
Map
<
String
,
MetricItemConfig
>
metricConfig
=
getMetricConfig
().
getMetricItemConfigs
();
for
(
Entry
<
String
,
MetricItemConfig
>
entry
:
metricConfig
.
entrySet
())
{
MetricItemConfig
item
=
entry
.
getValue
();
if
(
domains
.
contains
(
item
.
getDomain
()))
{
configs
.
add
(
item
);
}
}
return
configs
;
}
public
boolean
deleteDomainConfig
(
String
domain
)
{
getMetricConfig
().
removeMetricItemConfig
(
domain
);
return
storeConfig
();
}
@Override
public
void
enableLogging
(
Logger
logger
)
{
m_logger
=
logger
;
}
@Override
public
void
initialize
()
throws
InitializationException
{
try
{
Config
config
=
m_configDao
.
findByName
(
CONFIG_NAME
,
ConfigEntity
.
READSET_FULL
);
String
content
=
config
.
getContent
();
m_metricConfig
=
DefaultSaxParser
.
parse
(
content
);
m_configId
=
config
.
getId
();
m_modifyTime
=
config
.
getModifyDate
().
getTime
();
}
catch
(
DalNotFoundException
e
)
{
try
{
String
content
=
Files
.
forIO
().
readFrom
(
this
.
getClass
().
getResourceAsStream
(
"/config/default-metric-config.xml"
),
"utf-8"
);
Config
config
=
m_configDao
.
createLocal
();
config
.
setName
(
CONFIG_NAME
);
config
.
setContent
(
content
);
m_configDao
.
insert
(
config
);
m_metricConfig
=
DefaultSaxParser
.
parse
(
content
);
m_configId
=
config
.
getId
();
m_modifyTime
=
config
.
getModifyDate
().
getTime
();
}
catch
(
Exception
ex
)
{
Cat
.
logError
(
ex
);
}
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
if
(
getMetricConfig
()
==
null
)
{
m_metricConfig
=
new
MetricConfig
();
}
}
private
void
refreshMetricConfig
()
throws
DalException
,
SAXException
,
IOException
{
Config
config
=
m_configDao
.
findByName
(
CONFIG_NAME
,
ConfigEntity
.
READSET_FULL
);
long
modifyTime
=
config
.
getModifyDate
().
getTime
();
if
(
modifyTime
>
m_modifyTime
)
{
String
content
=
config
.
getContent
();
synchronized
(
getMetricConfig
())
{
m_metricConfig
=
DefaultSaxParser
.
parse
(
content
);
}
m_modifyTime
=
modifyTime
;
m_logger
.
info
(
"metric config refresh done!"
);
}
}
private
boolean
storeConfig
()
{
try
{
Config
config
=
m_configDao
.
createLocal
();
config
.
setId
(
m_configId
);
config
.
setKeyId
(
m_configId
);
config
.
setName
(
CONFIG_NAME
);
config
.
setContent
(
getMetricConfig
().
toString
());
m_configDao
.
updateByPK
(
config
,
ConfigEntity
.
UPDATESET_FULL
);
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
return
false
;
}
return
true
;
}
public
class
Reload
implements
Task
{
@Override
public
String
getName
()
{
return
"Metric-Config-Reload"
;
}
@Override
public
void
run
()
{
boolean
active
=
true
;
while
(
active
)
{
try
{
refreshMetricConfig
();
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
try
{
Thread
.
sleep
(
60
*
1000L
);
}
catch
(
InterruptedException
e
)
{
active
=
false
;
}
}
}
@Override
public
void
shutdown
()
{
}
}
}
cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java
浏览文件 @
a4c443a8
...
...
@@ -13,17 +13,18 @@ import com.dianping.cat.configuration.ServerConfigManager;
import
com.dianping.cat.consumer.CatConsumerAdvancedModule
;
import
com.dianping.cat.consumer.DomainManager
;
import
com.dianping.cat.consumer.MessageAnalyzer
;
import
com.dianping.cat.consumer.advanced.BussinessConfigManager
;
import
com.dianping.cat.consumer.advanced.CrossAnalyzer
;
import
com.dianping.cat.consumer.advanced.DatabaseAnalyzer
;
import
com.dianping.cat.consumer.advanced.DatabaseParser
;
import
com.dianping.cat.consumer.advanced.DependencyAnalyzer
;
import
com.dianping.cat.consumer.advanced.MatrixAnalyzer
;
import
com.dianping.cat.consumer.advanced.MetricAnalyzer
;
import
com.dianping.cat.consumer.advanced.MetricConfigManager
;
import
com.dianping.cat.consumer.advanced.SqlAnalyzer
;
import
com.dianping.cat.consumer.advanced.dal.BusinessReportDao
;
import
com.dianping.cat.consumer.advanced.dal.SqltableDao
;
import
com.dianping.cat.consumer.core.ProductLineConfigManager
;
import
com.dianping.cat.consumer.core.config.ConfigDao
;
import
com.dianping.cat.consumer.core.dal.HostinfoDao
;
import
com.dianping.cat.consumer.core.dal.ReportDao
;
import
com.dianping.cat.consumer.core.dal.TaskDao
;
...
...
@@ -35,7 +36,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
public
List
<
Component
>
defineComponents
()
{
List
<
Component
>
all
=
new
ArrayList
<
Component
>();
all
.
add
(
C
(
BussinessConfigManager
.
class
));
all
.
add
(
C
(
MetricConfigManager
.
class
).
req
(
ConfigDao
.
class
));
all
.
add
(
C
(
DomainManager
.
class
,
DomainManager
.
class
).
req
(
ServerConfigManager
.
class
,
HostinfoDao
.
class
));
...
...
@@ -59,7 +60,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
.
req
(
BucketManager
.
class
,
ReportDao
.
class
,
TaskDao
.
class
,
DomainManager
.
class
,
DatabaseParser
.
class
));
all
.
add
(
C
(
MessageAnalyzer
.
class
,
MetricAnalyzer
.
ID
,
MetricAnalyzer
.
class
).
is
(
PER_LOOKUP
)
//
.
req
(
BucketManager
.
class
,
BusinessReportDao
.
class
,
Bussiness
ConfigManager
.
class
)
//
.
req
(
BucketManager
.
class
,
BusinessReportDao
.
class
,
Metric
ConfigManager
.
class
)
//
.
req
(
ProductLineConfigManager
.
class
,
ABTestCodec
.
class
));
all
.
add
(
C
(
Module
.
class
,
CatConsumerAdvancedModule
.
ID
,
CatConsumerAdvancedModule
.
class
));
...
...
cat-consumer-advanced/src/main/resources/META-INF/dal/model/metric-config-codegen.xml
0 → 100644
浏览文件 @
a4c443a8
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity
name=
"metric-config"
root=
"true"
>
<entity-ref
name=
"metric-item-config"
type=
"list"
names=
"metric-item-configs"
/>
</entity>
<entity
name=
"metric-item-config"
>
<attribute
name=
"id"
value-type=
"String"
/>
<attribute
name=
"domain"
value-type=
"String"
/>
<attribute
name=
"type"
value-type=
"String"
/>
<attribute
name=
"view-order"
value-type=
"int"
/>
<attribute
name=
"metric-key"
value-type=
"String"
/>
<attribute
name=
"title"
value-type=
"String"
/>
<attribute
name=
"show-count"
value-type=
"boolean"
/>
<attribute
name=
"show-avg"
value-type=
"boolean"
/>
<attribute
name=
"show-sum"
value-type=
"boolean"
/>
</entity>
</model>
cat-consumer-advanced/src/main/resources/META-INF/dal/model/metric-config-manifest.xml
0 → 100644
浏览文件 @
a4c443a8
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file
path=
"metric-config-codegen.xml"
/>
<file
path=
"metric-config-model.xml"
/>
</manifest>
cat-consumer-advanced/src/main/resources/META-INF/dal/model/metric-config-model.xml
0 → 100644
浏览文件 @
a4c443a8
<?xml version="1.0" encoding="UTF-8"?>
<model
model-package=
"com.dianping.cat.advanced.metric.config"
enable-merger=
"true"
enable-sax-parser=
"true"
>
<entity
name=
"metric-config"
root=
"true"
>
<entity-ref
name=
"metric-item-config"
type=
"map"
names=
"metric-item-configs"
method-find-or-create=
"true"
/>
</entity>
<entity
name=
"metric-item-config"
>
<attribute
name=
"id"
value-type=
"String"
key=
"true"
/>
<attribute
name=
"domain"
value-type=
"String"
/>
<attribute
name=
"type"
value-type=
"String"
/>
<attribute
name=
"view-order"
value-type=
"int"
primative=
"true"
/>
<attribute
name=
"metric-key"
value-type=
"String"
/>
<attribute
name=
"title"
value-type=
"String"
/>
<attribute
name=
"show-count"
value-type=
"boolean"
primative=
"true"
/>
<attribute
name=
"show-avg"
value-type=
"boolean"
primative=
"true"
/>
<attribute
name=
"show-sum"
value-type=
"boolean"
primative=
"true"
/>
</entity>
</model>
\ No newline at end of file
cat-consumer-advanced/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
a4c443a8
<plexus>
<components>
<component>
<role>
com.dianping.cat.consumer.advanced.BussinessConfigManager
</role>
<implementation>
com.dianping.cat.consumer.advanced.BussinessConfigManager
</implementation>
<role>
com.dianping.cat.consumer.advanced.MetricConfigManager
</role>
<implementation>
com.dianping.cat.consumer.advanced.MetricConfigManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.consumer.core.config.ConfigDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.consumer.DomainManager
</role>
...
...
@@ -133,7 +138,7 @@
<role>
com.dianping.cat.consumer.advanced.dal.BusinessReportDao
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.consumer.advanced.
Bussiness
ConfigManager
</role>
<role>
com.dianping.cat.consumer.advanced.
Metric
ConfigManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.consumer.core.ProductLineConfigManager
</role>
...
...
cat-consumer-advanced/src/main/resources/META-INF/wizard/model/wizard.xml
浏览文件 @
a4c443a8
...
...
@@ -6,4 +6,7 @@
<model
package=
"com.dianping.cat.advanced.metric-report"
name=
"metric-report"
>
<sample-model>
src/test/resources/com/dianping/cat/consumer/model/metric-report.xml
</sample-model>
</model>
<model
package=
"com.dianping.cat.advanced.metric-config"
name=
"metric-config"
>
<sample-model>
src/test/resources/com/dianping/cat/consumer/model/metric-config.xml
</sample-model>
</model>
</wizard>
cat-consumer-advanced/src/test/resources/com/dianping/cat/consumer/model/metric-config.xml
0 → 100644
浏览文件 @
a4c443a8
<metric-config>
<metric-item-config
id=
"/detail"
domain=
"TuanGouWeb"
type=
"URL"
view-order=
"1"
metric-key=
"/order/submitOrder"
title=
"支付页面"
show-count=
"true"
show-avg=
"true"
show-sum=
"true"
></metric-item-config>
<metric-item-config></metric-item-config>
</metric-config>
cat-consumer/src/main/java/com/dianping/cat/consumer/core/ProductLineConfigManager.java
浏览文件 @
a4c443a8
package
com.dianping.cat.consumer.core
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Comparator
;
...
...
@@ -14,10 +15,12 @@ import org.codehaus.plexus.logging.LogEnabled;
import
org.codehaus.plexus.logging.Logger
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
import
org.unidal.dal.jdbc.DalException
;
import
org.unidal.dal.jdbc.DalNotFoundException
;
import
org.unidal.helper.Files
;
import
org.unidal.helper.Threads.Task
;
import
org.unidal.lookup.annotation.Inject
;
import
org.xml.sax.SAXException
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.consumer.company.model.entity.Company
;
...
...
@@ -177,18 +180,8 @@ public class ProductLineConfigManager implements Initializable, LogEnabled {
return
result
;
}
public
class
Reload
implements
Task
{
@Override
public
String
getName
()
{
return
null
;
}
@Override
public
void
run
()
{
boolean
active
=
true
;
while
(
active
)
{
try
{
private
void
refreshProductLineConfig
()
throws
DalException
,
SAXException
,
IOException
{
Config
config
=
m_configDao
.
findByName
(
CONFIG_NAME
,
ConfigEntity
.
READSET_FULL
);
long
modifyTime
=
config
.
getModifyDate
().
getTime
();
...
...
@@ -202,6 +195,21 @@ public class ProductLineConfigManager implements Initializable, LogEnabled {
m_modifyTime
=
modifyTime
;
m_logger
.
info
(
"product line config refresh done!"
);
}
}
public
class
Reload
implements
Task
{
@Override
public
String
getName
()
{
return
"Product-Config-Reload"
;
}
@Override
public
void
run
()
{
boolean
active
=
true
;
while
(
active
)
{
try
{
refreshProductLineConfig
();
}
catch
(
Exception
e
)
{
Cat
.
logError
(
e
);
}
...
...
cat-home/src/main/java/com/dianping/cat/helper/CatString.java
浏览文件 @
a4c443a8
...
...
@@ -34,4 +34,10 @@ public class CatString {
public
static
final
String
TUAN_TOU
=
"TuanGou"
;
public
static
final
String
SUM
=
":和"
;
public
static
final
String
COUNT
=
":次数"
;
public
static
final
String
AVG
=
":平均"
;
}
cat-home/src/main/java/com/dianping/cat/report/page/LineChart.java
浏览文件 @
a4c443a8
...
...
@@ -20,7 +20,7 @@ public class LineChart {
private
List
<
String
>
subTitles
=
new
ArrayList
<
String
>();
private
String
title
s
;
private
String
title
;
private
List
<
double
[]>
values
=
new
ArrayList
<
double
[]>();
...
...
@@ -56,8 +56,8 @@ public class LineChart {
return
this
.
subTitles
;
}
public
String
getTitle
s
()
{
return
this
.
title
s
;
public
String
getTitle
()
{
return
this
.
title
;
}
public
List
<
double
[]>
getValues
()
{
...
...
@@ -83,8 +83,8 @@ public class LineChart {
return
this
;
}
public
LineChart
setTitle
s
(
String
titles
)
{
this
.
title
s
=
titles
;
public
LineChart
setTitle
(
String
title
)
{
this
.
title
=
title
;
return
this
;
}
...
...
cat-home/src/main/java/com/dianping/cat/report/page/dependency/graph/LineGraphBuilder.java
浏览文件 @
a4c443a8
...
...
@@ -49,7 +49,7 @@ public class LineGraphBuilder extends BaseVisitor {
result
.
setSize
(
60
);
result
.
setStep
(
TimeUtil
.
ONE_MINUTE
);
result
.
setTitle
s
(
title
);
result
.
setTitle
(
title
);
result
.
setStart
(
m_start
);
if
(
items
!=
null
)
{
for
(
Entry
<
String
,
Item
>
entry
:
items
.
entrySet
())
{
...
...
cat-home/src/main/java/com/dianping/cat/report/page/event/HistoryGraphs.java
浏览文件 @
a4c443a8
...
...
@@ -50,7 +50,7 @@ public class HistoryGraphs extends BaseHistoryGraphs{
item
.
setStart
(
start
);
item
.
setSize
(
size
);
item
.
setStep
(
step
);
item
.
setTitle
s
(
name
+
" Error (count)"
);
item
.
setTitle
(
name
+
" Error (count)"
);
for
(
Map
<
String
,
double
[]>
data
:
datas
)
{
item
.
addValue
(
data
.
get
(
"failure_count"
));
...
...
@@ -145,7 +145,7 @@ public class HistoryGraphs extends BaseHistoryGraphs{
item
.
setStart
(
start
);
item
.
setSize
(
size
);
item
.
setStep
(
step
);
item
.
setTitle
s
(
name
+
" Hits (count)"
);
item
.
setTitle
(
name
+
" Hits (count)"
);
for
(
Map
<
String
,
double
[]>
data
:
datas
)
{
double
[]
totalCount
=
data
.
get
(
"total_count"
);
...
...
cat-home/src/main/java/com/dianping/cat/report/page/health/HistoryGraphs.java
浏览文件 @
a4c443a8
...
...
@@ -32,7 +32,7 @@ public class HistoryGraphs {
}
int
day
=
(
int
)
((
end
.
getTime
()
-
start
.
getTime
())
/
TimeUtil
.
ONE_DAY
);
LineChart
item
=
new
LineChart
();
item
.
setStart
(
start
).
setSize
(
day
).
setTitle
s
(
key
).
addSubTitle
(
key
).
setStep
(
TimeUtil
.
ONE_DAY
);
item
.
setStart
(
start
).
setSize
(
day
).
setTitle
(
key
).
addSubTitle
(
key
).
setStep
(
TimeUtil
.
ONE_DAY
);
item
.
addValue
(
getDateFromReports
(
reports
,
day
,
key
));
return
item
;
}
...
...
@@ -44,7 +44,7 @@ public class HistoryGraphs {
reports
.
add
(
report
);
}
LineChart
item
=
new
LineChart
();
item
.
setStart
(
start
).
setSize
(
24
).
setTitle
s
(
key
).
addSubTitle
(
key
).
setStep
(
TimeUtil
.
ONE_HOUR
);
item
.
setStart
(
start
).
setSize
(
24
).
setTitle
(
key
).
addSubTitle
(
key
).
setStep
(
TimeUtil
.
ONE_HOUR
);
item
.
addValue
(
getDateFromReports
(
reports
,
24
,
key
));
return
item
;
}
...
...
cat-home/src/main/java/com/dianping/cat/report/page/heartbeat/HistoryGraphs.java
浏览文件 @
a4c443a8
...
...
@@ -96,7 +96,7 @@ public class HistoryGraphs extends BaseHistoryGraphs{
LineChart
item
=
new
LineChart
();
item
.
setStart
(
start
);
item
.
setSize
(
size
);
item
.
setTitle
s
(
title
);
item
.
setTitle
(
title
);
item
.
addSubTitle
(
title
);
item
.
setStep
(
TimeUtil
.
ONE_MINUTE
);
double
[]
activeThread
=
graphData
.
get
(
key
);
...
...
cat-home/src/main/java/com/dianping/cat/report/page/metric/Handler.java
浏览文件 @
a4c443a8
...
...
@@ -2,6 +2,7 @@ package com.dianping.cat.report.page.metric;
import
java.io.IOException
;
import
java.util.Date
;
import
java.util.HashSet
;
import
java.util.List
;
import
javax.servlet.ServletException
;
...
...
@@ -12,7 +13,8 @@ import org.unidal.web.mvc.annotation.InboundActionMeta;
import
org.unidal.web.mvc.annotation.OutboundActionMeta
;
import
org.unidal.web.mvc.annotation.PayloadMeta
;
import
com.dianping.cat.consumer.advanced.BussinessConfigManager
;
import
com.dianping.cat.advanced.metric.config.entity.MetricItemConfig
;
import
com.dianping.cat.consumer.advanced.MetricConfigManager
;
import
com.dianping.cat.consumer.core.ProductLineConfigManager
;
import
com.dianping.cat.consumer.metric.model.entity.MetricReport
;
import
com.dianping.cat.report.ReportPage
;
...
...
@@ -32,7 +34,7 @@ public class Handler implements PageHandler<Context> {
private
PayloadNormalizer
m_normalizePayload
;
@Inject
private
Bussiness
ConfigManager
m_configManager
;
private
Metric
ConfigManager
m_configManager
;
@Inject
private
ProductLineConfigManager
m_productLineConfigManager
;
...
...
@@ -78,7 +80,9 @@ public class Handler implements PageHandler<Context> {
}
String
product
=
payload
.
getProduct
();
List
<
String
>
domains
=
m_productLineConfigManager
.
queryProductLineDomains
(
product
);
MetricDisplay
display
=
new
MetricDisplay
(
m_configManager
.
getConfigs
(
domains
),
test
,
startTime
);
List
<
MetricItemConfig
>
domainSet
=
m_configManager
.
queryMetricItemConfig
(
new
HashSet
<
String
>(
domains
));
MetricDisplay
display
=
new
MetricDisplay
(
domainSet
,
test
,
startTime
);
display
.
visitMetricReport
(
report
);
model
.
setDisplay
(
display
);
...
...
cat-home/src/main/java/com/dianping/cat/report/page/metric/MetricDisplay.java
浏览文件 @
a4c443a8
...
...
@@ -8,17 +8,23 @@ import java.util.Map;
import
java.util.Set
;
import
java.util.TreeSet
;
import
com.dianping.cat.
consumer.advanced.BussinessConfigManager.Business
Config
;
import
com.dianping.cat.
advanced.metric.config.entity.MetricItem
Config
;
import
com.dianping.cat.consumer.metric.model.entity.Abtest
;
import
com.dianping.cat.consumer.metric.model.entity.Group
;
import
com.dianping.cat.consumer.metric.model.entity.MetricItem
;
import
com.dianping.cat.consumer.metric.model.entity.MetricReport
;
import
com.dianping.cat.consumer.metric.model.entity.Point
;
import
com.dianping.cat.consumer.metric.model.transform.BaseVisitor
;
import
com.dianping.cat.helper.CatString
;
import
com.dianping.cat.helper.TimeUtil
;
import
com.dianping.cat.report.page.LineChart
;
public
class
MetricDisplay
extends
BaseVisitor
{
public
static
final
String
Suffix_SUM
=
"(总和)"
;
public
static
final
String
Suffix_COUNT
=
"(次数)"
;
public
static
final
String
Suffix_AVG
=
"(平均)"
;
private
Map
<
String
,
LineChart
>
m_lineCharts
=
new
LinkedHashMap
<
String
,
LineChart
>();
...
...
@@ -30,11 +36,13 @@ public class MetricDisplay extends BaseVisitor {
private
String
m_metricKey
;
private
static
final
String
SUM
=
":sum"
;
private
String
m_currentComputeType
;
private
static
final
String
COUNT
=
":count"
;
private
static
final
String
SUM
=
CatString
.
SUM
;
private
static
final
String
AVG
=
"avg"
;
private
static
final
String
COUNT
=
CatString
.
COUNT
;
private
static
final
String
AVG
=
CatString
.
AVG
;
public
List
<
LineChart
>
getLineCharts
()
{
return
new
ArrayList
<
LineChart
>(
m_lineCharts
.
values
());
...
...
@@ -44,34 +52,33 @@ public class MetricDisplay extends BaseVisitor {
return
m_abtests
;
}
public
MetricDisplay
(
List
<
Business
Config
>
configs
,
String
abtest
,
Date
start
)
{
public
MetricDisplay
(
List
<
MetricItem
Config
>
configs
,
String
abtest
,
Date
start
)
{
m_start
=
start
;
m_abtest
=
abtest
;
for
(
BusinessConfig
fla
g
:
configs
)
{
if
(
fla
g
.
isShowSum
())
{
String
key
=
flag
.
getMain
Key
()
+
SUM
;
for
(
MetricItemConfig
confi
g
:
configs
)
{
if
(
confi
g
.
isShowSum
())
{
String
key
=
config
.
getMetric
Key
()
+
SUM
;
m_lineCharts
.
put
(
key
,
creatLineChart
(
key
));
m_lineCharts
.
put
(
key
,
creatLineChart
(
config
.
getTitle
()
+
Suffix_SUM
));
}
if
(
flag
.
isShowCount
())
{
String
key
=
flag
.
getMainKey
()
+
COUNT
;
m_lineCharts
.
put
(
key
,
creatLineChart
(
key
));
if
(
config
.
isShowCount
())
{
String
key
=
config
.
getMetricKey
()
+
COUNT
;
m_lineCharts
.
put
(
key
,
creatLineChart
(
config
.
getTitle
()
+
Suffix_COUNT
));
}
if
(
fla
g
.
isShowAvg
())
{
String
key
=
flag
.
getMain
Key
()
+
AVG
;
if
(
confi
g
.
isShowAvg
())
{
String
key
=
config
.
getMetric
Key
()
+
AVG
;
m_lineCharts
.
put
(
key
,
creatLineChart
(
key
));
m_lineCharts
.
put
(
key
,
creatLineChart
(
config
.
getTitle
()
+
Suffix_AVG
));
}
}
}
private
LineChart
creatLineChart
(
String
key
)
{
private
LineChart
creatLineChart
(
String
title
)
{
LineChart
lineChart
=
new
LineChart
();
lineChart
.
setTitle
s
(
key
);
lineChart
.
setTitle
(
title
);
lineChart
.
setStart
(
m_start
);
lineChart
.
setSize
(
60
);
lineChart
.
setStep
(
TimeUtil
.
ONE_MINUTE
);
...
...
@@ -88,6 +95,33 @@ public class MetricDisplay extends BaseVisitor {
}
}
private
LineChart
findOrCreateChart
(
String
type
,
String
metricKey
,
String
computeType
)
{
String
key
=
metricKey
+
computeType
;
LineChart
chart
=
m_lineCharts
.
get
(
key
);
if
(
chart
==
null
)
{
if
(
computeType
.
equals
(
COUNT
))
{
if
(
type
.
equals
(
"C"
)
||
type
.
equals
(
"S,C"
))
{
chart
=
creatLineChart
(
key
);
}
}
else
if
(
computeType
.
equals
(
AVG
))
{
if
(
type
.
equals
(
"T"
))
{
chart
=
creatLineChart
(
key
);
}
}
else
if
(
computeType
.
equals
(
SUM
))
{
if
(
type
.
equals
(
"S"
)
||
type
.
equals
(
"S,C"
))
{
chart
=
creatLineChart
(
key
);
}
}
if
(
chart
!=
null
)
{
m_lineCharts
.
put
(
key
,
chart
);
}
}
return
chart
;
}
@Override
public
void
visitGroup
(
Group
group
)
{
String
id
=
group
.
getName
();
...
...
@@ -107,19 +141,19 @@ public class MetricDisplay extends BaseVisitor {
count
[
index
]
=
point
.
getCount
();
}
LineChart
sumLine
=
m_lineCharts
.
get
(
m_metricKey
+
SUM
);
LineChart
sumLine
=
findOrCreateChart
(
m_currentComputeType
,
m_metricKey
,
SUM
);
if
(
sumLine
!=
null
)
{
sumLine
.
addSubTitle
(
id
);
sumLine
.
addValue
(
sum
);
}
LineChart
countLine
=
m_lineCharts
.
get
(
m_metricKey
+
COUNT
);
LineChart
countLine
=
findOrCreateChart
(
m_currentComputeType
,
m_metricKey
,
COUNT
);
if
(
countLine
!=
null
)
{
countLine
.
addSubTitle
(
id
);
countLine
.
addValue
(
count
);
}
LineChart
avgLine
=
m_lineCharts
.
get
(
m_metricKey
+
AVG
);
LineChart
avgLine
=
findOrCreateChart
(
m_currentComputeType
,
m_metricKey
,
AVG
);
if
(
avgLine
!=
null
)
{
avgLine
.
addSubTitle
(
id
);
...
...
@@ -130,6 +164,7 @@ public class MetricDisplay extends BaseVisitor {
@Override
public
void
visitMetricItem
(
MetricItem
metricItem
)
{
m_metricKey
=
metricItem
.
getId
();
m_currentComputeType
=
metricItem
.
getType
();
super
.
visitMetricItem
(
metricItem
);
}
...
...
cat-home/src/main/java/com/dianping/cat/report/page/state/StateGraphs.java
浏览文件 @
a4c443a8
...
...
@@ -40,7 +40,7 @@ public class StateGraphs {
int
day
=
(
int
)
((
end
.
getTime
()
-
start
.
getTime
())
/
TimeUtil
.
ONE_HOUR
);
LineChart
item
=
new
LineChart
();
item
.
setStart
(
start
).
setSize
(
day
).
setTitle
s
(
key
).
setStep
(
TimeUtil
.
ONE_HOUR
);
item
.
setStart
(
start
).
setSize
(
day
).
setTitle
(
key
).
setStep
(
TimeUtil
.
ONE_HOUR
);
item
.
addSubTitle
(
key
);
item
.
addValue
(
getDataFromHourlySummary
(
reports
,
start
.
getTime
(),
day
,
key
,
ip
));
return
item
;
...
...
@@ -137,7 +137,7 @@ public class StateGraphs {
String
ip
)
{
LineChart
item
=
new
LineChart
();
item
.
setStart
(
start
).
setSize
(
60
).
setTitle
s
(
key
).
setStep
(
TimeUtil
.
ONE_MINUTE
);
item
.
setStart
(
start
).
setSize
(
60
).
setTitle
(
key
).
setStep
(
TimeUtil
.
ONE_MINUTE
);
item
.
addSubTitle
(
key
);
item
.
addValue
(
getDataFromHourlyDetail
(
report
,
start
.
getTime
(),
60
,
key
,
ip
));
return
item
;
...
...
cat-home/src/main/java/com/dianping/cat/report/page/transaction/HistoryGraphs.java
浏览文件 @
a4c443a8
...
...
@@ -53,7 +53,7 @@ public class HistoryGraphs extends BaseHistoryGraphs{
item
.
setStart
(
start
);
item
.
setSize
(
size
);
item
.
setStep
(
step
);
item
.
setTitle
s
(
name
+
" Response Time (ms)"
);
item
.
setTitle
(
name
+
" Response Time (ms)"
);
for
(
Map
<
String
,
double
[]>
data
:
datas
)
{
double
[]
sum
=
data
.
get
(
"sum"
);
...
...
@@ -78,7 +78,7 @@ public class HistoryGraphs extends BaseHistoryGraphs{
item
.
setStart
(
start
);
item
.
setSize
(
size
);
item
.
setStep
(
step
);
item
.
setTitle
s
(
name
+
" Error (count)"
);
item
.
setTitle
(
name
+
" Error (count)"
);
for
(
Map
<
String
,
double
[]>
data
:
datas
)
{
item
.
addValue
(
data
.
get
(
"failure_count"
));
...
...
@@ -194,7 +194,7 @@ public class HistoryGraphs extends BaseHistoryGraphs{
item
.
setStart
(
start
);
item
.
setSize
(
size
);
item
.
setStep
(
step
);
item
.
setTitle
s
(
name
+
" Hits (count)"
);
item
.
setTitle
(
name
+
" Hits (count)"
);
for
(
Map
<
String
,
double
[]>
data
:
datas
)
{
double
[]
totalCount
=
data
.
get
(
"total_count"
);
...
...
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
a4c443a8
...
...
@@ -2650,7 +2650,7 @@
<role>
com.dianping.cat.report.page.PayloadNormalizer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.consumer.advanced.
Bussiness
ConfigManager
</role>
<role>
com.dianping.cat.consumer.advanced.
Metric
ConfigManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.consumer.core.ProductLineConfigManager
</role>
...
...
@@ -2667,8 +2667,13 @@
</requirements>
</component>
<component>
<role>
com.dianping.cat.consumer.advanced.BussinessConfigManager
</role>
<implementation>
com.dianping.cat.consumer.advanced.BussinessConfigManager
</implementation>
<role>
com.dianping.cat.consumer.advanced.MetricConfigManager
</role>
<implementation>
com.dianping.cat.consumer.advanced.MetricConfigManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.consumer.core.config.ConfigDao
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.cat.consumer.core.ProductLineConfigManager
</role>
...
...
cat-home/src/main/resources/config/default-metric-config.xml
0 → 100644
浏览文件 @
a4c443a8
<metric-config>
<metric-item-config
id=
"TuanGouWeb:/index"
domain=
"TuanGouWeb"
type=
"URL"
view-order=
"1"
metric-key=
"/index"
title=
"团购首页"
show-count=
"true"
show-avg=
"false"
show-sum=
"false"
></metric-item-config>
<metric-item-config
id=
"TuanGouWeb:/detail"
domain=
"TuanGouWeb"
type=
"URL"
view-order=
"1"
metric-key=
"/detail"
title=
"团购详情"
show-count=
"true"
show-avg=
"false"
show-sum=
"false"
></metric-item-config>
<metric-item-config
id=
"TuanGouWeb:/order/submitOrder"
domain=
"PayOrder"
type=
"URL"
view-order=
"1"
metric-key=
"/index"
title=
"团购支付"
show-count=
"true"
show-avg=
"false"
show-sum=
"false"
></metric-item-config>
<metric-item-config
id=
"Cat:t"
domain=
"Cat"
type=
"URL"
view-order=
"1"
metric-key=
"t"
title=
"transaction"
show-count=
"true"
show-avg=
"false"
show-sum=
"false"
></metric-item-config>
<metric-item-config
id=
"Cat:home"
domain=
"Cat"
type=
"URL"
view-order=
"1"
metric-key=
"home"
title=
"home"
show-count=
"true"
show-avg=
"false"
show-sum=
"false"
></metric-item-config>
</metric-config>
cat-home/src/main/webapp/jsp/report/metric.jsp
浏览文件 @
a4c443a8
...
...
@@ -17,7 +17,7 @@
$
(
document
).
ready
(
function
()
{
<c:forEach
var=
"item"
items=
"
${
model
.
display
.
lineCharts
}
"
varStatus=
"status"
>
var
data
=
$
{
item
.
jsonString
};
graphLineChart
(
document
.
getElementById
(
'
${item.title
s
}
'
),
data
);
graphLineChart
(
document
.
getElementById
(
'
${item.title}
'
),
data
);
</c:forEach>
var
product
=
'
${payload.product}
'
;
...
...
@@ -33,7 +33,7 @@
<td
class=
"title"
>
From ${w:format(model.report.startTime,'yyyy-MM-dd HH:mm:ss')} to ${w:format(model.report.endTime,'yyyy-MM-dd HH:mm:ss')}
</td>
<td
class=
"nav"
>
<c:forEach
var=
"nav"
items=
"
${
model
.
navs
}
"
>
[
<a
href=
"${model.baseUri}?date=${model.date}&step=${nav.hours}&product=${payload.product}&${navUrlPrefix}"
>
${nav.title}
</a>
]
[
<a
href=
"${model.baseUri}?date=${model.date}&
domain=${model.domain}&
step=${nav.hours}&product=${payload.product}&${navUrlPrefix}"
>
${nav.title}
</a>
]
</c:forEach>
[
<a
href=
"${model.baseUri}?${navUrlPrefix}"
>
now
</a>
]
</td>
...
...
@@ -46,11 +46,11 @@
<div
class=
"well sidebar-nav"
>
<ul
class=
"nav nav-list"
>
<c:forEach
var=
"item"
items=
"
${
model
.
products
}
"
varStatus=
"status"
>
<li
class=
'nav-header'
id=
"${item}"
><a
href=
"?date=${model.date}&product=${item}"
><strong>
${item}
</strong></a></li>
<li
class=
'nav-header'
id=
"${item}"
><a
href=
"?date=${model.date}&
domain=${model.domain}&
product=${item}"
><strong>
${item}
</strong></a></li>
<c:if
test=
"
${
payload
.
product
eq
item
}
"
>
<c:forEach
var=
"item"
items=
"
${
model
.
display
.
abtests
}
"
varStatus=
"status"
>
<c:if
test=
"
${
item
ne
-
1
}
"
>
<li
id=
"${item}"
><a
href=
"?date=${model.date}&product=${payload.product}&test=${item}"
>
AB测试${item}
</a></li>
<li
id=
"${item}"
><a
href=
"?date=${model.date}&
domain=${model.domain}&
product=${payload.product}&test=${item}"
>
AB测试${item}
</a></li>
</c:if>
</c:forEach>
</c:if>
...
...
@@ -62,7 +62,10 @@
</div>
<!--/span-->
<div
class=
"span10"
>
<c:forEach
var=
"item"
items=
"
${
model
.
display
.
lineCharts
}
"
varStatus=
"status"
>
<div
style=
"float:left;"
id=
"${item.titles}"
class=
"graph"
></div>
<div
style=
"float:left;"
>
<h5
class=
"text-center text-error"
>
${item.title}
</h5>
<div
id=
"${item.title}"
class=
"graph"
></div>
</div>
</c:forEach>
</div>
<table
class=
"footer"
>
...
...
cat-home/src/test/java/com/dianping/cat/demo/TestABTestBusinessMessage.java
浏览文件 @
a4c443a8
...
...
@@ -17,6 +17,7 @@ public class TestABTestBusinessMessage {
@Test
public
void
test
()
throws
Exception
{
while
(
true
)
{
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
Transaction
t
=
Cat
.
newTransaction
(
"URL"
,
"/index"
);
String
abtest
=
buildAbStr
(
i
);
...
...
@@ -39,7 +40,6 @@ public class TestABTestBusinessMessage {
tree
.
setDomain
(
TuanGou
);
t
.
complete
();
}
for
(
int
i
=
0
;
i
<
500
;
i
++)
{
Transaction
t
=
Cat
.
newTransaction
(
"URL"
,
"/order/submitOrder"
);
String
abtest
=
buildAbStr
(
i
);
...
...
@@ -47,14 +47,15 @@ public class TestABTestBusinessMessage {
Cat
.
logEvent
(
"URL"
,
"ABTest"
,
Event
.
SUCCESS
,
abtest
);
((
DefaultMessageManager
)
Cat
.
getManager
()).
setMetricType
(
abtest
);
Cat
.
logMetricForCount
(
"order"
);
Cat
.
logMetricForDuration
(
"time"
,
500
);
Cat
.
logMetricForSum
(
"payment.success"
,
i
);
DefaultMessageTree
tree
=
(
DefaultMessageTree
)
Cat
.
getManager
().
getThreadLocalMessageTree
();
tree
.
setDomain
(
PayOrder
);
t
.
complete
();
}
Thread
.
sleep
(
1000
);
}
}
...
...
cat-home/src/test/java/com/dianping/cat/demo/TestBusinessMessage.java
浏览文件 @
a4c443a8
...
...
@@ -16,7 +16,6 @@ public class TestBusinessMessage {
@Test
public
void
test
()
throws
Exception
{
while
(
true
)
{
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
Transaction
t
=
Cat
.
newTransaction
(
"URL"
,
"/index"
);
Cat
.
logEvent
(
"RemoteLink"
,
"sina"
,
Event
.
SUCCESS
,
"http://sina.com.cn/"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录