提交 2e5c0f0c 编写于 作者: Y yong.you

Merge branch 'biz' of github.com:dianping/cat into biz

......@@ -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
......
......@@ -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>();
......
......@@ -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();
......
......@@ -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,
......
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());
}
}
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;
}
}
......@@ -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")
......
<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
......@@ -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.
先完成此消息的编辑!
想要评论请 注册