Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
2e5c0f0c
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,体验更适合开发者的 AI 搜索 >>
提交
2e5c0f0c
编写于
11月 25, 2013
作者:
Y
yong.you
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'biz' of github.com:dianping/cat into biz
上级
3fab2d75
5d86d1d6
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
176 addition
and
20 deletion
+176
-20
README.md
README.md
+2
-1
cat-client/src/main/java/com/dianping/cat/abtest/repository/HttpABTestEntityRepository.java
...ing/cat/abtest/repository/HttpABTestEntityRepository.java
+1
-1
cat-client/src/main/java/com/dianping/cat/abtest/spi/ABTestEntity.java
...c/main/java/com/dianping/cat/abtest/spi/ABTestEntity.java
+4
-17
cat-client/src/test/java/com/dianping/cat/AllTests.java
cat-client/src/test/java/com/dianping/cat/AllTests.java
+6
-0
cat-client/src/test/java/com/dianping/cat/abtest/repository/ABTestRepositoryTest.java
.../dianping/cat/abtest/repository/ABTestRepositoryTest.java
+34
-0
cat-client/src/test/java/com/dianping/cat/abtest/repository/FieldInjecterTest.java
...com/dianping/cat/abtest/repository/FieldInjecterTest.java
+49
-0
cat-client/src/test/java/com/dianping/cat/abtest/spi/internal/ABTestContextTest.java
...m/dianping/cat/abtest/spi/internal/ABTestContextTest.java
+35
-1
cat-client/src/test/resources/com/dianping/cat/abtest/repository/abtest.xml
...t/resources/com/dianping/cat/abtest/repository/abtest.xml
+35
-0
pom.xml
pom.xml
+10
-0
未找到文件。
README.md
浏览文件 @
2e5c0f0c
...
...
@@ -11,7 +11,7 @@ CAT主要通过以下几种埋点类型收集信息:
Requirements
---------------------
*
Java 6
*
Maven
*
Maven
3
*
MySQL
Quick Started
...
...
@@ -20,6 +20,7 @@ Quick Started
mvn clean install
#####2、配置CAT的环境
mvn cat:install
Note:需要对/data/appdatas/cat和/data/applogs/cat有读写权限
#####3、(Optional)如果安装了hadoop集群,需到/data/appdatas/cat/server.xml中配置对应hadoop信息。将localmode设置为false,默认情况下,CAT在开发模式(localmode=true)下工作。
#####4、运行CAT
cd cat-home;mvn jetty:run
...
...
cat-client/src/main/java/com/dianping/cat/abtest/repository/HttpABTestEntityRepository.java
浏览文件 @
2e5c0f0c
...
...
@@ -140,7 +140,7 @@ public class HttpABTestEntityRepository extends ContainerHolder implements ABTes
public
void
shutdown
()
{
}
class
ABTestVisitor
extends
BaseVisitor
{
public
class
ABTestVisitor
extends
BaseVisitor
{
private
String
m_domain
;
private
Map
<
String
,
ABTestEntity
>
m_entities
=
new
HashMap
<
String
,
ABTestEntity
>();
...
...
cat-client/src/main/java/com/dianping/cat/abtest/spi/ABTestEntity.java
浏览文件 @
2e5c0f0c
...
...
@@ -6,7 +6,6 @@ import java.util.List;
import
javax.script.Invocable
;
import
com.dianping.cat.abtest.model.entity.Case
;
import
com.dianping.cat.abtest.model.entity.Condition
;
import
com.dianping.cat.abtest.model.entity.ConversionRule
;
import
com.dianping.cat.abtest.model.entity.GroupstrategyDescriptor
;
import
com.dianping.cat.abtest.model.entity.Run
;
...
...
@@ -37,26 +36,10 @@ public class ABTestEntity {
m_groupStrategy
.
apply
(
context
);
}
public
List
<
Condition
>
getConditions
()
{
return
m_run
.
getConditions
()
!=
null
?
m_run
.
getConditions
()
:
null
;
}
public
String
getConditionsFragement
()
{
return
m_run
.
getConditionsFragement
();
}
public
List
<
ConversionRule
>
getConversionRules
()
{
return
m_run
.
getConversionRules
();
}
public
Date
getEndDate
()
{
return
m_run
.
getEndDate
();
}
public
ABTestGroupStrategy
getGroupStrategy
()
{
return
m_groupStrategy
;
}
public
GroupstrategyDescriptor
getGroupStrategyDescriptor
()
{
return
m_run
.
getGroupstrategyDescriptor
()
!=
null
?
m_run
.
getGroupstrategyDescriptor
()
:
null
;
}
...
...
@@ -64,6 +47,10 @@ public class ABTestEntity {
public
String
getGroupStrategyName
()
{
return
m_groupStrategyName
!=
null
?
m_groupStrategyName
:
null
;
}
public
ABTestGroupStrategy
getGroupStrategy
(){
return
m_groupStrategy
;
}
public
int
getId
()
{
return
m_run
.
getId
();
...
...
cat-client/src/test/java/com/dianping/cat/AllTests.java
浏览文件 @
2e5c0f0c
...
...
@@ -4,6 +4,8 @@ import org.junit.runner.RunWith;
import
org.junit.runners.Suite
;
import
org.junit.runners.Suite.SuiteClasses
;
import
com.dianping.cat.abtest.repository.ABTestRepositoryTest
;
import
com.dianping.cat.abtest.repository.FieldInjecterTest
;
import
com.dianping.cat.abtest.spi.internal.ABTestCodecTest
;
import
com.dianping.cat.abtest.spi.internal.ABTestContextTest
;
import
com.dianping.cat.abtest.spi.internal.ABTestEntityManagerTest
;
...
...
@@ -38,6 +40,10 @@ ABTestEntityManagerTest.class,
ABTestContextTest
.
class
,
FieldInjecterTest
.
class
,
ABTestRepositoryTest
.
class
,
EventTest
.
class
,
HeartbeatTest
.
class
,
...
...
cat-client/src/test/java/com/dianping/cat/abtest/repository/ABTestRepositoryTest.java
0 → 100644
浏览文件 @
2e5c0f0c
package
com.dianping.cat.abtest.repository
;
import
java.util.Map
;
import
junit.framework.Assert
;
import
org.junit.Test
;
import
org.unidal.helper.Files
;
import
org.unidal.lookup.ComponentTestCase
;
import
com.dianping.cat.abtest.model.entity.AbtestModel
;
import
com.dianping.cat.abtest.model.transform.DefaultSaxParser
;
import
com.dianping.cat.abtest.repository.HttpABTestEntityRepository.ABTestVisitor
;
import
com.dianping.cat.abtest.spi.ABTestEntity
;
public
class
ABTestRepositoryTest
extends
ComponentTestCase
{
@Test
public
void
testVisitor
()
throws
Exception
{
HttpABTestEntityRepository
repository
=
(
HttpABTestEntityRepository
)
lookup
(
ABTestEntityRepository
.
class
);
String
content
=
Files
.
forIO
().
readFrom
(
getClass
().
getResourceAsStream
(
"abtest.xml"
),
"utf-8"
);
ABTestVisitor
visitor
=
repository
.
new
ABTestVisitor
(
"TuanGouWeb"
);
AbtestModel
abtest
=
DefaultSaxParser
.
parse
(
content
);
visitor
.
visitAbtestModel
(
abtest
);
Map
<
String
,
ABTestEntity
>
entities
=
visitor
.
getEntities
();
ABTestEntity
mock
=
entities
.
get
(
"mock"
);
Assert
.
assertEquals
(
1
,
entities
.
size
());
Assert
.
assertNotNull
(
mock
.
getInvocable
());
Assert
.
assertNotNull
(
mock
.
getGroupStrategy
());
}
}
cat-client/src/test/java/com/dianping/cat/abtest/repository/FieldInjecterTest.java
0 → 100644
浏览文件 @
2e5c0f0c
package
com.dianping.cat.abtest.repository
;
import
junit.framework.Assert
;
import
org.junit.Test
;
import
com.dianping.cat.abtest.model.entity.Field
;
import
com.dianping.cat.abtest.model.entity.GroupstrategyDescriptor
;
import
com.dianping.cat.abtest.spi.internal.ABTestContextTest.MockGroupStrategy
;
public
class
FieldInjecterTest
{
@Test
public
void
testInject
()
throws
Exception
{
MockGroupStrategy
strategy
=
new
MockGroupStrategy
();
GroupstrategyDescriptor
descriptor
=
new
GroupstrategyDescriptor
();
descriptor
.
getFields
().
add
(
addField
(
"a"
,
"String"
,
"abc"
));
descriptor
.
getFields
().
add
(
addField
(
"b"
,
"int"
,
"1"
));
descriptor
.
getFields
().
add
(
addField
(
"c"
,
"boolean"
,
"true"
));
descriptor
.
getFields
().
add
(
addField
(
"d"
,
"long"
,
"123"
));
descriptor
.
getFields
().
add
(
addField
(
"e"
,
"double"
,
"0.01"
));
descriptor
.
getFields
().
add
(
addField
(
"f"
,
"float"
,
"1.0f"
));
FieldInjecter
inject
=
new
FieldInjecter
();
inject
.
inject
(
strategy
,
descriptor
);
Assert
.
assertEquals
(
"abc"
,
strategy
.
getA
());
Assert
.
assertEquals
(
1
,
strategy
.
getB
());
Assert
.
assertEquals
(
true
,
strategy
.
isC
());
Assert
.
assertEquals
(
123L
,
strategy
.
getD
());
Assert
.
assertEquals
(
0.01
,
strategy
.
getE
());
Assert
.
assertEquals
(
1.0f
,
strategy
.
getF
());
}
public
Field
addField
(
String
name
,
String
type
,
String
value
)
{
Field
field
=
new
Field
();
field
.
setType
(
type
);
field
.
setModifierName
(
name
);
field
.
setValue
(
value
);
return
field
;
}
}
cat-client/src/test/java/com/dianping/cat/abtest/spi/internal/ABTestContextTest.java
浏览文件 @
2e5c0f0c
...
...
@@ -105,7 +105,18 @@ public class ABTestContextTest extends ComponentTestCase {
return
conversionRules
;
}
class
MockGroupStrategy
implements
ABTestGroupStrategy
{
public
static
class
MockGroupStrategy
implements
ABTestGroupStrategy
{
private
String
a
;
private
int
b
;
private
boolean
c
;
private
long
d
;
private
double
e
;
private
float
f
;
@Override
public
void
init
()
{
...
...
@@ -117,6 +128,29 @@ public class ABTestContextTest extends ComponentTestCase {
ctx
.
setGroupName
(
"A"
);
}
public
String
getA
()
{
return
a
;
}
public
int
getB
()
{
return
b
;
}
public
boolean
isC
()
{
return
c
;
}
public
long
getD
()
{
return
d
;
}
public
double
getE
()
{
return
e
;
}
public
float
getF
()
{
return
f
;
}
}
@SuppressWarnings
(
"rawtypes"
)
...
...
cat-client/src/test/resources/com/dianping/cat/abtest/repository/abtest.xml
0 → 100644
浏览文件 @
2e5c0f0c
<abtest-model>
<case
id=
"1001"
name=
"mock"
created-date=
"2013-04-10 17:00:00"
last-modified-date=
"2013-04-10 17:00:00"
>
<description>
This is a mock ABTest for test
</description>
<owner>
hao.zhu@dianping.com,kezhu.wu@dianping.com
</owner>
<group-strategy>
OneVariationStrategy
</group-strategy>
<domain>
TuanGouApi
</domain>
<domain>
TuanGouWeb
</domain>
<domain>
TuanGouRemote
</domain>
<runs>
<run
id=
"1"
start-date=
"2013-04-10 17:00:00"
end-date=
"2013-12-30 18:00:00"
created-date=
"2013-04-10 17:00:00"
last-modified-date=
"2013-04-10 17:00:00"
disabled=
"false"
>
<creator>
hao.zhu@dianping.com
</creator>
<domain>
TuanGouWeb
</domain>
<domain>
TuanGouRemote
</domain>
<conditions-fragement>
public boolean isEligible(Object object) { return true; }
</conditions-fragement>
<conversion-rules>
<conversion-rule
name=
"Goal-1"
>
<![CDATA[This is value]]>
</conversion-rule>
<conversion-rule
name=
"Goal-2"
>
<![CDATA[This is value]]>
</conversion-rule>
<conversion-rule
name=
"Goal-3"
>
<![CDATA[This is value]]>
</conversion-rule>
</conversion-rules>
<conditions>
<condition
name=
"url"
seq=
"1"
operator=
"and"
comparator=
"1"
>
<![CDATA[This is value]]>
</condition>
<condition
name=
"url"
seq=
"1"
operator=
"and"
comparator=
"1"
>
<![CDATA[This is value]]>
</condition>
</conditions>
<groupstrategy-descriptor
name=
"OneVariationStrategy"
className=
"TrafficDistributionGroupStrategy"
fullyQualifiedName=
"com.dianping.cat.abtest.spi.internal.groupstrategy.TrafficDistributionGroupStrategy"
>
<fields>
<field
name=
"Control"
type=
"int"
input-type=
"input"
modifier-name=
"m_percentControl"
>
50
</field>
<field
name=
"Variation-A"
type=
"int"
input-type=
"input"
modifier-name=
"m_percentA"
>
50
</field>
</fields>
</groupstrategy-descriptor>
</run>
<run
/>
</runs>
</case>
<case/>
</abtest-model>
\ No newline at end of file
pom.xml
浏览文件 @
2e5c0f0c
...
...
@@ -183,12 +183,22 @@ org.eclipse.jdt.core.compiler.compliance=1.6
</plugins>
</build>
<repositories>
<repository>
<id>
central
</id>
<name>
Maven2 Central Repository
</name>
<layout>
default
</layout>
<url>
http://repo1.maven.org/maven2
</url>
</repository>
<repository>
<id>
cat.repo
</id>
<url>
https://raw.github.com/dianping/cat/mvn-repo
</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>
central
</id>
<url>
http://repo1.maven.org/maven2
</url>
</pluginRepository>
<pluginRepository>
<id>
cat.repo
</id>
<url>
https://raw.github.com/dianping/cat/mvn-repo
</url>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录