Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
1316c23d
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,发现更多精彩内容 >>
提交
1316c23d
编写于
6月 14, 2013
作者:
F
Frankie Wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
abtest code wrapup for further test
上级
3a083392
变更
20
隐藏空白更改
内联
并排
Showing
20 changed file
with
196 addition
and
229 deletion
+196
-229
abtest-sample/pom.xml
abtest-sample/pom.xml
+6
-3
cat-core/src/main/java/com/dianping/cat/abtest/ABTestManager.java
.../src/main/java/com/dianping/cat/abtest/ABTestManager.java
+4
-2
cat-core/src/main/java/com/dianping/cat/abtest/spi/ABTestContext.java
.../main/java/com/dianping/cat/abtest/spi/ABTestContext.java
+1
-1
cat-core/src/main/java/com/dianping/cat/abtest/spi/ABTestEntity.java
...c/main/java/com/dianping/cat/abtest/spi/ABTestEntity.java
+1
-1
cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/ABTestContextManager.java
...ianping/cat/abtest/spi/internal/ABTestContextManager.java
+1
-5
cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestContext.java
...ianping/cat/abtest/spi/internal/DefaultABTestContext.java
+25
-29
cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestContextManager.java
.../cat/abtest/spi/internal/DefaultABTestContextManager.java
+104
-77
cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestEntityManager.java
...g/cat/abtest/spi/internal/DefaultABTestEntityManager.java
+8
-7
cat-core/src/main/java/com/dianping/cat/build/ABTestComponentConfigurator.java
...a/com/dianping/cat/build/ABTestComponentConfigurator.java
+5
-5
cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java
.../dianping/cat/message/internal/DefaultMessageManager.java
+14
-10
cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageProducer.java
...dianping/cat/message/internal/DefaultMessageProducer.java
+1
-3
cat-core/src/main/java/com/dianping/cat/message/spi/MessageTree.java
...c/main/java/com/dianping/cat/message/spi/MessageTree.java
+0
-4
cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessageTree.java
...dianping/cat/message/spi/internal/DefaultMessageTree.java
+0
-12
cat-core/src/main/java/com/dianping/cat/servlet/CatFilter.java
...ore/src/main/java/com/dianping/cat/servlet/CatFilter.java
+10
-10
cat-core/src/main/resources/META-INF/plexus/components.xml
cat-core/src/main/resources/META-INF/plexus/components.xml
+3
-0
cat-core/src/test/java/com/dianping/cat/abtest/demo/roundrobin/ABTestServerConfigurator.java
.../cat/abtest/demo/roundrobin/ABTestServerConfigurator.java
+0
-32
cat-core/src/test/resources/com/dianping/cat/abtest/demo/roundrobin/ABTestServer.xml
.../com/dianping/cat/abtest/demo/roundrobin/ABTestServer.xml
+0
-13
cat-home/pom.xml
cat-home/pom.xml
+1
-1
cat-home/src/main/java/com/dianping/cat/system/alarm/threshold/ThresholdRuleManager.java
...ping/cat/system/alarm/threshold/ThresholdRuleManager.java
+11
-14
pom.xml
pom.xml
+1
-0
未找到文件。
abtest-sample/pom.xml
浏览文件 @
1316c23d
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
>
<parent>
<groupId>
com.dianping.cat
</groupId>
<artifactId>
parent
</artifactId>
<version>
0.6.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.dianping.cat
</groupId>
<artifactId>
abtest-sample
</artifactId>
<packaging>
war
</packaging>
<version>
0.0.1-SNAPSHOT
</version>
<name>
abtest-sample Maven Webapp
</name>
<name>
ABTest Sample
</name>
<url>
http://maven.apache.org
</url>
<dependencies>
<dependency>
<groupId>
com.dianping.cat
</groupId>
<artifactId>
cat-core
</artifactId>
<version>
0.5.2.10
</version>
</dependency>
<dependency>
<groupId>
junit
</groupId>
...
...
cat-core/src/main/java/com/dianping/cat/abtest/ABTestManager.java
浏览文件 @
1316c23d
...
...
@@ -44,13 +44,15 @@ public final class ABTestManager {
}
}
public
static
void
onRequestBegin
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
public
static
void
onRequestBegin
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
initialize
();
s_contextManager
.
onRequestBegin
(
request
,
response
);
s_contextManager
.
onRequestBegin
(
request
,
response
);
}
public
static
void
onRequestEnd
()
{
initialize
();
s_contextManager
.
onRequestEnd
();
}
}
cat-core/src/main/java/com/dianping/cat/abtest/spi/ABTestContext.java
浏览文件 @
1316c23d
...
...
@@ -4,7 +4,7 @@ import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse
;
public
interface
ABTestContext
{
public
final
String
DEFAULT_GROUP
=
"
default
"
;
public
final
String
DEFAULT_GROUP
=
""
;
public
ABTestEntity
getEntity
();
...
...
cat-core/src/main/java/com/dianping/cat/abtest/spi/ABTestEntity.java
浏览文件 @
1316c23d
...
...
@@ -102,7 +102,7 @@ public class ABTestEntity {
}
public
boolean
isEligible
(
Date
date
)
{
if
(
m_run
.
getDisabled
()
!=
null
&&
m_run
.
get
Disabled
())
{
if
(
m_run
.
is
Disabled
())
{
return
false
;
}
...
...
cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/ABTestContextManager.java
浏览文件 @
1316c23d
package
com.dianping.cat.abtest.spi.internal
;
import
java.util.List
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
...
...
@@ -11,9 +9,7 @@ import com.dianping.cat.abtest.spi.ABTestContext;
public
interface
ABTestContextManager
{
public
ABTestContext
getContext
(
ABTestName
testName
);
public
List
<
ABTestContext
>
getContexts
();
public
void
onRequestBegin
(
HttpServletRequest
request
,
HttpServletResponse
response
);
public
void
onRequestBegin
(
HttpServletRequest
request
,
HttpServletResponse
response
);
public
void
onRequestEnd
();
}
cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestContext.java
浏览文件 @
1316c23d
...
...
@@ -18,28 +18,41 @@ public class DefaultABTestContext implements ABTestContext {
private
ABTestEntity
m_entity
;
private
HttpServletRequest
m_request
;
private
HttpServletResponse
m_response
;
private
ABTestGroupStrategy
m_groupStrategy
;
private
boolean
m_
initializ
ed
;
private
boolean
m_
appli
ed
;
public
DefaultABTestContext
(
ABTestEntity
entity
)
{
m_entity
=
entity
;
}
@Override
public
ABTestEntity
getEntity
()
{
return
m_entity
;
}
@Override
public
String
getGroupName
()
{
if
(!
m_initialized
)
{
initialize
(
new
Date
());
}
initialize
(
new
Date
());
return
m_groupName
;
}
@Override
public
HttpServletRequest
getHttpServletRequest
()
{
return
m_request
;
}
@Override
public
HttpServletResponse
getHttpServletResponse
()
{
return
m_response
;
}
public
void
initialize
(
Date
timestamp
)
{
if
(!
m_
initializ
ed
)
{
if
(!
m_
appli
ed
)
{
if
(
m_entity
.
isEligible
(
timestamp
))
{
Transaction
t
=
Cat
.
newTransaction
(
"GroupStrategy"
,
m_entity
.
getGroupStrategyName
());
...
...
@@ -53,9 +66,9 @@ public class DefaultABTestContext implements ABTestContext {
}
finally
{
t
.
complete
();
}
}
m_initialized
=
true
;
m_applied
=
true
;
}
}
}
...
...
@@ -64,29 +77,12 @@ public class DefaultABTestContext implements ABTestContext {
m_groupName
=
groupName
;
}
public
void
setup
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
m_request
=
request
;
m_response
=
response
;
}
@Override
public
HttpServletRequest
getHttpServletRequest
()
{
return
m_request
;
}
@Override
public
HttpServletResponse
getHttpServletResponse
()
{
return
m_response
;
}
@Override
public
ABTestEntity
getEntity
()
{
return
m_entity
;
}
public
void
setGroupStrategy
(
ABTestGroupStrategy
groupStrategy
)
{
m_groupStrategy
=
groupStrategy
;
}
public
void
setup
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
m_request
=
request
;
m_response
=
response
;
}
}
cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestContextManager.java
浏览文件 @
1316c23d
package
com.dianping.cat.abtest.spi.internal
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
javax.servlet.http.Cookie
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.unidal.helper.Splitters
;
import
org.unidal.lookup.ContainerHolder
;
import
org.unidal.lookup.annotation.Inject
;
...
...
@@ -16,11 +17,18 @@ import com.dianping.cat.abtest.ABTestName;
import
com.dianping.cat.abtest.spi.ABTestContext
;
import
com.dianping.cat.abtest.spi.ABTestEntity
;
import
com.dianping.cat.abtest.spi.ABTestGroupStrategy
;
import
com.dianping.cat.message.internal.DefaultMessageManager
;
import
com.dianping.cat.message.spi.MessageManager
;
public
class
DefaultABTestContextManager
extends
ContainerHolder
implements
ABTestContextManager
{
private
static
final
String
ABTEST_COOKIE_NAME
=
"ab"
;
@Inject
private
ABTestEntityManager
m_entityManager
;
@Inject
private
MessageManager
m_messageManager
;
private
InheritableThreadLocal
<
Entry
>
m_threadLocal
=
new
InheritableThreadLocal
<
Entry
>()
{
@Override
protected
Entry
initialValue
()
{
...
...
@@ -31,114 +39,133 @@ public class DefaultABTestContextManager extends ContainerHolder implements ABTe
@Override
public
ABTestContext
getContext
(
ABTestName
testName
)
{
Entry
entry
=
m_threadLocal
.
get
();
Map
<
String
,
DefaultABTestContext
>
map
=
entry
.
getContextMap
();
String
name
=
testName
.
getValue
();
DefaultABTestContext
ctx
=
map
.
get
(
name
);
if
(
ctx
==
null
)
{
ABTestEntity
entity
=
m_entityManager
.
getEntity
(
testName
);
ctx
=
createContext
(
entity
,
entry
.
getHttpServletRequest
(),
entry
.
getHttpServletResponse
());
map
.
put
(
name
,
ctx
);
}
ABTestEntity
entity
=
m_entityManager
.
getEntity
(
testName
);
return
ctx
;
return
entry
.
getContext
(
entity
)
;
}
private
DefaultABTestContext
createContext
(
ABTestEntity
entity
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
DefaultABTestContext
ctx
=
new
DefaultABTestContext
(
entity
);
if
(!
entity
.
isDisabled
())
{
ABTestGroupStrategy
groupStrategy
=
entity
.
getGroupStrategy
();
@Override
public
void
onRequestBegin
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
Entry
entry
=
m_threadLocal
.
get
();
ctx
.
setup
(
request
,
response
);
ctx
.
setGroupStrategy
(
groupStrategy
);
}
entry
.
setup
(
request
,
response
);
}
return
ctx
;
@Override
public
void
onRequestEnd
()
{
m_threadLocal
.
remove
();
}
public
List
<
ABTestContext
>
getContexts
()
{
List
<
ABTestContext
>
ctxList
=
m_threadLocal
.
get
().
getContextList
(
);
class
Entry
{
private
Map
<
String
,
ABTestContext
>
m_map
=
new
HashMap
<
String
,
ABTestContext
>(
4
);
if
(
ctxList
==
null
)
{
ctxList
=
new
ArrayList
<
ABTestContext
>(
4
);
private
ABTestContext
createContext
(
ABTestEntity
entity
)
{
DefaultABTestContext
ctx
=
new
DefaultABTestContext
(
entity
);
List
<
ABTestEntity
>
entities
=
m_entityManager
.
getEntityList
();
Map
<
String
,
DefaultABTestContext
>
ctxMap
=
m_threadLocal
.
get
().
getContextMap
();
Date
now
=
new
Date
();
if
(!
entity
.
isDisabled
())
{
ABTestGroupStrategy
groupStrategy
=
entity
.
getGroupStrategy
();
for
(
ABTestEntity
entity
:
entities
)
{
Entry
entry
=
m_threadLocal
.
get
();
String
name
=
entity
.
getName
();
DefaultABTestContext
ctx
=
ctxMap
.
get
(
name
);
ctx
.
setGroupStrategy
(
groupStrategy
);
}
if
(
ctx
==
null
)
{
ctx
=
createContext
(
entity
,
entry
.
getHttpServletRequest
(),
entry
.
getHttpServletResponse
());
return
ctx
;
}
ctxMap
.
put
(
name
,
ctx
);
}
public
ABTestContext
getContext
(
ABTestEntity
entity
)
{
String
name
=
entity
.
getName
();
ABTestContext
ctx
=
m_map
.
get
(
name
);
ctx
.
initialize
(
now
);
ctxList
.
add
(
ctx
);
if
(
ctx
==
null
)
{
ctx
=
createContext
(
entity
);
m_map
.
put
(
name
,
ctx
);
}
m_threadLocal
.
get
().
setContextList
(
ctxList
);
return
ctx
;
}
return
ctxList
;
}
private
Map
<
String
,
String
>
getGroupsFromCookie
(
HttpServletRequest
request
)
{
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
Cookie
[]
cookies
=
request
.
getCookies
();
@Override
public
void
onRequestEnd
()
{
m_threadLocal
.
remove
();
}
if
(
cookies
!=
null
)
{
for
(
Cookie
cookie
:
cookies
)
{
if
(
ABTEST_COOKIE_NAME
.
equals
(
cookie
.
getName
()))
{
String
value
=
cookie
.
getValue
();
List
<
String
>
parts
=
Splitters
.
by
(
','
).
noEmptyItem
().
trim
().
split
(
value
);
@Override
public
void
onRequestBegin
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
Entry
entry
=
m_threadLocal
.
get
();
for
(
String
part
:
parts
)
{
int
pos
=
part
.
indexOf
(
':'
);
entry
.
setup
(
request
,
response
);
if
(
pos
>
0
)
{
map
.
put
(
part
.
substring
(
0
,
pos
),
part
.
substring
(
pos
+
1
));
}
}
}
}
}
Map
<
String
,
DefaultABTestContext
>
map
=
entry
.
getContextMap
();
for
(
DefaultABTestContext
ctx
:
map
.
values
())
{
ctx
.
setup
(
request
,
response
);
return
map
;
}
}
static
class
Entry
{
private
Map
<
String
,
DefaultABTestContext
>
m_map
=
new
HashMap
<
String
,
DefaultABTestContext
>(
4
);
private
String
setGroupsToCookie
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Map
<
String
,
String
>
result
)
{
StringBuilder
sb
=
new
StringBuilder
(
64
);
boolean
first
=
true
;
private
List
<
ABTestContext
>
m_list
;
for
(
Map
.
Entry
<
String
,
String
>
e
:
result
.
entrySet
())
{
if
(
first
)
{
first
=
false
;
}
else
{
sb
.
append
(
','
);
}
private
HttpServletRequest
m_request
;
private
HttpServletResponse
m_response
;
sb
.
append
(
e
.
getKey
()).
append
(
':'
).
append
(
e
.
getValue
());
}
public
Map
<
String
,
DefaultABTestContext
>
getContextMap
()
{
return
m_map
;
}
String
value
=
sb
.
toString
();
Cookie
cookie
=
new
Cookie
(
ABTEST_COOKIE_NAME
,
value
)
;
String
server
=
request
.
getServerName
();
public
void
setup
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
m_request
=
request
;
m_response
=
response
;
}
if
(
server
.
endsWith
(
".dianping.com"
))
{
cookie
.
setDomain
(
".dianping.com"
);
}
else
if
(
server
.
endsWith
(
".51ping.com"
))
{
cookie
.
setDomain
(
".51ping.com"
);
}
else
{
cookie
.
setDomain
(
server
);
}
public
HttpServletResponse
getHttpServletResponse
()
{
return
m_response
;
}
cookie
.
setMaxAge
(
30
*
24
*
60
*
60
);
// 30 days expiration
cookie
.
setPath
(
"/"
);
public
void
setContextList
(
List
<
ABTestContext
>
ctxList
)
{
m_list
=
ctxList
;
response
.
addCookie
(
cookie
);
return
value
;
}
public
List
<
ABTestContext
>
getContextList
()
{
return
m_list
;
}
public
void
setup
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
List
<
ABTestEntity
>
activeEntities
=
m_entityManager
.
getEntityList
();
Map
<
String
,
String
>
map
=
getGroupsFromCookie
(
request
);
Map
<
String
,
String
>
result
=
new
HashMap
<
String
,
String
>();
for
(
ABTestEntity
entity
:
activeEntities
)
{
DefaultABTestContext
ctx
=
(
DefaultABTestContext
)
getContext
(
entity
);
String
key
=
String
.
valueOf
(
ctx
.
getEntity
().
getRun
().
getId
());
String
value
=
map
.
get
(
key
);
if
(
value
==
null
)
{
ctx
.
setup
(
request
,
response
);
ctx
.
initialize
(
new
Date
());
String
groupName
=
ctx
.
getGroupName
();
if
(
groupName
!=
null
&&
groupName
.
length
()
>
0
)
{
result
.
put
(
key
,
groupName
);
}
}
else
{
result
.
put
(
key
,
value
);
}
}
public
HttpServletRequest
getHttpServletRequest
()
{
return
m_request
;
String
value
=
setGroupsToCookie
(
request
,
response
,
result
);
((
DefaultMessageManager
)
m_messageManager
).
setMetricType
(
value
)
;
}
}
}
cat-core/src/main/java/com/dianping/cat/abtest/spi/internal/DefaultABTestEntityManager.java
浏览文件 @
1316c23d
...
...
@@ -13,26 +13,25 @@ import com.dianping.cat.abtest.ABTestName;
import
com.dianping.cat.abtest.repository.ABTestEntityRepository
;
import
com.dianping.cat.abtest.spi.ABTestEntity
;
import
com.dianping.cat.abtest.spi.ABTestGroupStrategy
;
import
com.dianping.cat.message.Message
;
public
class
DefaultABTestEntityManager
extends
ContainerHolder
implements
ABTestEntityManager
,
Initializable
{
@Inject
private
ABTestEntityRepository
m_repository
;
@Override
public
ABTestEntity
getEntity
(
ABTestName
name
)
{
ABTestEntity
entity
=
m_repository
.
getEntities
().
get
(
name
.
getValue
());
String
id
=
name
.
getValue
();
ABTestEntity
entity
=
m_repository
.
getEntities
().
get
(
id
);
if
(
entity
==
null
)
{
entity
=
new
ABTestEntity
();
entity
.
setName
(
name
.
getValue
()
);
entity
.
setName
(
id
);
entity
.
setDisabled
(
true
);
m_repository
.
getEntities
().
put
(
name
.
getValue
()
,
entity
);
m_repository
.
getEntities
().
put
(
id
,
entity
);
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"name "
).
append
(
name
.
getValue
()).
append
(
" doesn't exsit"
);
Cat
.
getProducer
().
logEvent
(
"ABTest"
,
"abtest-miss"
,
sb
.
toString
(),
""
);
Cat
.
getProducer
().
logEvent
(
"ABTestDisabled"
,
id
,
Message
.
SUCCESS
,
null
);
}
return
entity
;
...
...
@@ -40,9 +39,11 @@ public class DefaultABTestEntityManager extends ContainerHolder implements ABTes
public
List
<
ABTestEntity
>
getEntityList
()
{
List
<
ABTestEntity
>
entitiesList
=
new
ArrayList
<
ABTestEntity
>();
for
(
ABTestEntity
entity
:
m_repository
.
getEntities
().
values
())
{
entitiesList
.
add
(
entity
);
}
return
entitiesList
;
}
...
...
cat-core/src/main/java/com/dianping/cat/build/ABTestComponentConfigurator.java
浏览文件 @
1316c23d
...
...
@@ -13,6 +13,7 @@ import com.dianping.cat.abtest.spi.internal.ABTestEntityManager;
import
com.dianping.cat.abtest.spi.internal.DefaultABTestContextManager
;
import
com.dianping.cat.abtest.spi.internal.DefaultABTestEntityManager
;
import
com.dianping.cat.configuration.ClientConfigManager
;
import
com.dianping.cat.message.spi.MessageManager
;
class
ABTestComponentConfigurator
extends
AbstractResourceConfigurator
{
@Override
...
...
@@ -20,15 +21,14 @@ class ABTestComponentConfigurator extends AbstractResourceConfigurator {
List
<
Component
>
all
=
new
ArrayList
<
Component
>();
all
.
add
(
C
(
ABTestContextManager
.
class
,
DefaultABTestContextManager
.
class
)
//
.
req
(
ABTestEntityManager
.
class
));
.
req
(
ABTestEntityManager
.
class
,
MessageManager
.
class
));
all
.
add
(
C
(
ABTestEntityRepository
.
class
,
HttpABTestEntityRepository
.
class
)
//
.
req
(
ClientConfigManager
.
class
)
.
config
(
E
(
"refreshTimeInSeconds"
).
value
(
"60"
)));
.
req
(
ClientConfigManager
.
class
).
config
(
E
(
"refreshTimeInSeconds"
).
value
(
"60"
)));
all
.
add
(
C
(
ABTestEntityManager
.
class
,
DefaultABTestEntityManager
.
class
)
//
.
req
(
ABTestEntityRepository
.
class
));
.
req
(
ABTestEntityRepository
.
class
));
return
all
;
}
}
cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java
浏览文件 @
1316c23d
...
...
@@ -34,18 +34,14 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan
@Inject
private
MessageStatistics
m_statistics
;
private
MessageIdFactory
m_factory
;
// we don't use static modifier since MessageManager is a singleton actually
private
ThreadLocal
<
Context
>
m_context
=
new
ThreadLocal
<
Context
>();
private
long
m_throttleTimes
=
0
;
private
InheritableThreadLocal
<
String
>
m_inheritableContext
=
new
InheritableThreadLocal
<
String
>()
;
// we don't use static modifier since MessageManager is a singleton in
// production actually
private
ThreadLocal
<
Context
>
m_context
=
new
ThreadLocal
<
Context
>()
{
@Override
protected
Context
initialValue
()
{
return
null
;
}
};
private
MessageIdFactory
m_factory
;
private
long
m_throttleTimes
;
private
Domain
m_domain
;
...
...
@@ -110,6 +106,10 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan
return
null
;
}
public
String
getMetricType
()
{
return
m_inheritableContext
.
get
();
}
@Override
public
Transaction
getPeekTransaction
()
{
Context
ctx
=
getContext
();
...
...
@@ -176,6 +176,10 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan
m_context
.
remove
();
}
public
void
setMetricType
(
String
metricType
)
{
m_inheritableContext
.
set
(
metricType
);
}
@Override
public
void
setup
()
{
Context
ctx
;
...
...
cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageProducer.java
浏览文件 @
1316c23d
...
...
@@ -12,7 +12,6 @@ import com.dianping.cat.message.MessageProducer;
import
com.dianping.cat.message.Metric
;
import
com.dianping.cat.message.Transaction
;
import
com.dianping.cat.message.spi.MessageManager
;
import
com.dianping.cat.message.spi.MessageTree
;
public
class
DefaultMessageProducer
implements
MessageProducer
{
@Inject
...
...
@@ -74,8 +73,7 @@ public class DefaultMessageProducer implements MessageProducer {
@Override
public
void
logMetric
(
String
name
,
String
status
,
String
nameValuePairs
)
{
MessageTree
tree
=
m_manager
.
getThreadLocalMessageTree
();
String
type
=
tree
==
null
?
null
:
tree
.
getMetricType
();
String
type
=
((
DefaultMessageManager
)
m_manager
).
getMetricType
();
Metric
event
=
newMetric
(
type
,
name
);
if
(
nameValuePairs
!=
null
&&
nameValuePairs
.
length
()
>
0
)
{
...
...
cat-core/src/main/java/com/dianping/cat/message/spi/MessageTree.java
浏览文件 @
1316c23d
...
...
@@ -15,8 +15,6 @@ public interface MessageTree extends Cloneable {
public
String
getMessageId
();
public
String
getMetricType
();
public
String
getParentMessageId
();
public
String
getRootMessageId
();
...
...
@@ -39,8 +37,6 @@ public interface MessageTree extends Cloneable {
public
void
setMessageId
(
String
messageId
);
public
void
setMetricType
(
String
metricType
);
public
void
setParentMessageId
(
String
parentMessageId
);
public
void
setRootMessageId
(
String
rootMessageId
);
...
...
cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessageTree.java
浏览文件 @
1316c23d
...
...
@@ -34,8 +34,6 @@ public class DefaultMessageTree implements MessageTree {
private
String
m_threadName
;
private
String
m_metricType
;
@Override
public
DefaultMessageTree
copy
()
{
DefaultMessageTree
tree
=
new
DefaultMessageTree
();
...
...
@@ -84,11 +82,6 @@ public class DefaultMessageTree implements MessageTree {
return
m_messageId
;
}
@Override
public
String
getMetricType
()
{
return
m_metricType
;
}
@Override
public
String
getParentMessageId
()
{
return
m_parentMessageId
;
...
...
@@ -150,11 +143,6 @@ public class DefaultMessageTree implements MessageTree {
}
}
@Override
public
void
setMetricType
(
String
metricType
)
{
m_metricType
=
metricType
;
}
@Override
public
void
setParentMessageId
(
String
parentMessageId
)
{
if
(
parentMessageId
!=
null
&&
parentMessageId
.
length
()
>
0
)
{
...
...
cat-core/src/main/java/com/dianping/cat/servlet/CatFilter.java
浏览文件 @
1316c23d
...
...
@@ -26,27 +26,28 @@ public class CatFilter implements Filter {
}
@Override
public
void
doFilter
(
ServletRequest
request
,
ServletResponse
response
,
FilterChain
chain
)
throws
IOException
,
ServletException
{
public
void
doFilter
(
ServletRequest
request
,
ServletResponse
response
,
FilterChain
chain
)
throws
IOException
,
ServletException
{
HttpServletRequest
req
=
(
HttpServletRequest
)
request
;
HttpServletResponse
res
p
=
(
HttpServletResponse
)
response
;
boolean
isRoot
=
!
Cat
.
getManager
().
hasContext
();
HttpServletResponse
res
=
(
HttpServletResponse
)
response
;
boolean
top
=
!
Cat
.
getManager
().
hasContext
();
if
(
isRoot
)
{
if
(
top
)
{
String
sessionToken
=
getSessionIdFromCookie
(
req
);
Cat
.
setup
(
sessionToken
);
}
MessageProducer
cat
=
Cat
.
getProducer
();
Transaction
t
=
null
;
if
(
isRoot
)
{
if
(
top
)
{
t
=
Cat
.
newTransaction
(
getTypeName
(),
getOriginalUrl
(
request
));
ABTestManager
.
onRequestBegin
(
req
,
res
);
logRequestClientInfo
(
cat
,
req
);
ABTestManager
.
onRequestBegin
(
req
,
resp
);
}
else
{
t
=
Cat
.
newTransaction
(
getTypeName
()
+
".Forward"
,
getOriginalUrl
(
request
));
}
}
logRequestPayload
(
cat
,
req
);
...
...
@@ -77,7 +78,7 @@ public class CatFilter implements Filter {
throw
e
;
}
finally
{
t
.
complete
();
if
(
isRoot
)
{
if
(
top
)
{
Cat
.
reset
();
ABTestManager
.
onRequestEnd
();
}
...
...
@@ -152,4 +153,3 @@ public class CatFilter implements Filter {
cat
.
logEvent
(
getTypeName
(),
CatConstants
.
NAME_PAYLOAD
,
Event
.
SUCCESS
,
sb
.
toString
());
}
}
cat-core/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
1316c23d
...
...
@@ -262,6 +262,9 @@
<requirement>
<role>
com.dianping.cat.abtest.spi.internal.ABTestEntityManager
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.message.spi.MessageManager
</role>
</requirement>
</requirements>
</component>
<component>
...
...
cat-core/src/test/java/com/dianping/cat/abtest/demo/roundrobin/ABTestServerConfigurator.java
已删除
100644 → 0
浏览文件 @
3a083392
package
com.dianping.cat.abtest.demo.roundrobin
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.unidal.lookup.configuration.AbstractResourceConfigurator
;
import
org.unidal.lookup.configuration.Component
;
import
com.dianping.cat.abtest.spi.internal.ABTestContextManager
;
import
com.dianping.cat.abtest.spi.internal.ABTestEntityManager
;
import
com.dianping.cat.abtest.spi.internal.DefaultABTestContextManager
;
public
class
ABTestServerConfigurator
extends
AbstractResourceConfigurator
{
@Override
public
List
<
Component
>
defineComponents
()
{
List
<
Component
>
all
=
new
ArrayList
<
Component
>();
all
.
add
(
C
(
ABTestContextManager
.
class
,
DefaultABTestContextManager
.
class
)
//
.
req
(
ABTestEntityManager
.
class
));
return
all
;
}
@Override
protected
Class
<?>
getTestClass
()
{
return
ABTestServer
.
class
;
}
public
static
void
main
(
String
[]
args
)
{
generatePlexusComponentsXmlFile
(
new
ABTestServerConfigurator
());
}
}
cat-core/src/test/resources/com/dianping/cat/abtest/demo/roundrobin/ABTestServer.xml
已删除
100644 → 0
浏览文件 @
3a083392
<plexus>
<components>
<component>
<role>
com.dianping.cat.abtest.spi.internal.ABTestContextManager
</role>
<implementation>
com.dianping.cat.abtest.spi.internal.DefaultABTestContextManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.cat.abtest.spi.internal.ABTestEntityManager
</role>
</requirement>
</requirements>
</component>
</components>
</plexus>
cat-home/pom.xml
浏览文件 @
1316c23d
...
...
@@ -159,7 +159,7 @@
<plugin>
<groupId>
org.unidal.maven.plugins
</groupId>
<artifactId>
codegen-maven-plugin
</artifactId>
<version>
2.0.
6
</version>
<version>
2.0.
5
</version>
<executions>
<execution>
<id>
generate plexus component descriptor
</id>
...
...
cat-home/src/main/java/com/dianping/cat/system/alarm/threshold/ThresholdRuleManager.java
浏览文件 @
1316c23d
...
...
@@ -10,6 +10,7 @@ import java.util.Set;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable
;
import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException
;
import
org.unidal.dal.jdbc.DalNotFoundException
;
import
org.unidal.helper.Threads
;
import
org.unidal.helper.Threads.Task
;
import
org.unidal.lookup.annotation.Inject
;
...
...
@@ -130,8 +131,7 @@ public class ThresholdRuleManager implements Initializable {
String
content
=
alarmTemplate
.
getContent
();
ThresholdTemplate
baseTemplate
=
DefaultSaxParser
.
parse
(
content
);
List
<
AlarmRule
>
exceptionRules
=
m_alarmRuleDao
.
findAllAlarmRuleByTemplateId
(
templateId
,
AlarmRuleEntity
.
READSET_FULL
);
List
<
AlarmRule
>
exceptionRules
=
m_alarmRuleDao
.
findAllAlarmRuleByTemplateId
(
templateId
,
AlarmRuleEntity
.
READSET_FULL
);
for
(
AlarmRule
rule
:
exceptionRules
)
{
m_exceptionModifyTimes
.
put
(
rule
.
getId
(),
rule
.
getModifyDate
());
...
...
@@ -146,7 +146,8 @@ public class ThresholdRuleManager implements Initializable {
Cat
.
logError
(
e
);
}
}
}
catch
(
DalNotFoundException
e
)
{
// ignore it
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
...
...
@@ -160,8 +161,7 @@ public class ThresholdRuleManager implements Initializable {
String
content
=
alarmTemplate
.
getContent
();
ThresholdTemplate
baseTemplate
=
DefaultSaxParser
.
parse
(
content
);
List
<
AlarmRule
>
serviceRules
=
m_alarmRuleDao
.
findAllAlarmRuleByTemplateId
(
templateId
,
AlarmRuleEntity
.
READSET_FULL
);
List
<
AlarmRule
>
serviceRules
=
m_alarmRuleDao
.
findAllAlarmRuleByTemplateId
(
templateId
,
AlarmRuleEntity
.
READSET_FULL
);
for
(
AlarmRule
rule
:
serviceRules
)
{
m_serviceModifyTimes
.
put
(
rule
.
getId
(),
rule
.
getModifyDate
());
...
...
@@ -176,7 +176,8 @@ public class ThresholdRuleManager implements Initializable {
Cat
.
logError
(
e
);
}
}
}
catch
(
DalNotFoundException
e
)
{
// ignore it
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
...
...
@@ -214,14 +215,12 @@ public class ThresholdRuleManager implements Initializable {
private
void
refreshExceptionRules
()
{
synchronized
(
m_exceptionRules
)
{
try
{
AlarmTemplate
alarmTemplate
=
m_alarmTemplateDao
.
findAlarmTemplateByName
(
"exception"
,
AlarmTemplateEntity
.
READSET_FULL
);
AlarmTemplate
alarmTemplate
=
m_alarmTemplateDao
.
findAlarmTemplateByName
(
"exception"
,
AlarmTemplateEntity
.
READSET_FULL
);
int
templateId
=
alarmTemplate
.
getId
();
String
content
=
alarmTemplate
.
getContent
();
ThresholdTemplate
baseTemplate
=
DefaultSaxParser
.
parse
(
content
);
List
<
AlarmRule
>
exceptionRules
=
m_alarmRuleDao
.
findAllAlarmRuleByTemplateId
(
templateId
,
AlarmRuleEntity
.
READSET_FULL
);
List
<
AlarmRule
>
exceptionRules
=
m_alarmRuleDao
.
findAllAlarmRuleByTemplateId
(
templateId
,
AlarmRuleEntity
.
READSET_FULL
);
Set
<
Integer
>
allIds
=
new
HashSet
<
Integer
>();
for
(
AlarmRule
alarmRule
:
exceptionRules
)
{
...
...
@@ -284,13 +283,11 @@ public class ThresholdRuleManager implements Initializable {
private
void
refreshServiceRules
()
{
synchronized
(
m_serviceRules
)
{
try
{
AlarmTemplate
alarmTemplate
=
m_alarmTemplateDao
.
findAlarmTemplateByName
(
"service"
,
AlarmTemplateEntity
.
READSET_FULL
);
AlarmTemplate
alarmTemplate
=
m_alarmTemplateDao
.
findAlarmTemplateByName
(
"service"
,
AlarmTemplateEntity
.
READSET_FULL
);
int
templateId
=
alarmTemplate
.
getId
();
String
content
=
alarmTemplate
.
getContent
();
ThresholdTemplate
baseTemplate
=
DefaultSaxParser
.
parse
(
content
);
List
<
AlarmRule
>
serviceRules
=
m_alarmRuleDao
.
findAllAlarmRuleByTemplateId
(
templateId
,
AlarmRuleEntity
.
READSET_FULL
);
List
<
AlarmRule
>
serviceRules
=
m_alarmRuleDao
.
findAllAlarmRuleByTemplateId
(
templateId
,
AlarmRuleEntity
.
READSET_FULL
);
Set
<
Integer
>
allIds
=
new
HashSet
<
Integer
>();
for
(
AlarmRule
alarmRule
:
serviceRules
)
{
...
...
pom.xml
浏览文件 @
1316c23d
...
...
@@ -14,6 +14,7 @@
<module>
cat-hadoop
</module>
<module>
cat-consumer-advanced
</module>
<module>
cat-home
</module>
<module>
abtest-sample
</module>
</modules>
<dependencyManagement>
<dependencies>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录