提交 60f337ef 编写于 作者: A ainilife

refactor cat-core according to the change of abtest model

上级 9ebf6bf3
......@@ -2,60 +2,64 @@ package com.dianping.cat.abtest.spi;
import java.util.Date;
import com.dianping.cat.abtest.model.entity.Entity;
import com.dianping.cat.abtest.model.entity.GroupStrategy;
import com.dianping.cat.abtest.model.entity.Case;
import com.dianping.cat.abtest.model.entity.Run;
public class ABTestEntity {
private Entity m_entity;
private Case m_case;
private ABTestGroupStrategy m_groupStrategy;
private Run m_run;
private ABTestGroupStrategy m_groupStrategy;
public ABTestEntity() {
m_entity = new Entity();
m_entity.setDisabled(true);
m_case = new Case();
m_run = new Run();
m_run.setDisabled(true);
}
public ABTestEntity(Entity entity) {
m_entity = entity;
public ABTestEntity(Case _case, Run run) {
m_case = _case;
m_run = run;
}
public String getGroupStrategyName() {
return m_entity.getGroupStrategy() != null ? m_entity.getGroupStrategy().getName() : null;
return m_case.getGroupStrategy() != null ? m_case.getGroupStrategy() : null;
}
public String getGroupStrategyConfiguration() {
return m_entity.getGroupStrategy() != null ? m_entity.getGroupStrategy().getConfiguration() : null;
return m_run.getGroupStrategyConfiguration() != null ? m_run.getGroupStrategyConfiguration() : null;
}
public int getId() {
return m_entity.getId();
return m_case.getId();
}
public String getName() {
return m_entity.getName();
return m_case.getName();
}
public Date getEndDate() {
return m_entity.getEndDate();
}
return m_run.getEndDate();
}
public Date getStartDate() {
return m_entity.getStartDate();
}
return m_run.getStartDate();
}
public boolean isEligible(Date date) {
if (m_entity.getDisabled() != null && m_entity.getDisabled()) {
if (m_run.getDisabled() != null && m_run.getDisabled()) {
return false;
}
Date startDate = m_entity.getStartDate();
Date startDate = m_run.getStartDate();
if (startDate != null) {
if (date.before(startDate)) {
return false;
}
}
Date endDate = m_entity.getEndDate();
Date endDate = m_run.getEndDate();
if (endDate != null) {
if (date.after(endDate)) {
return false;
......@@ -66,33 +70,27 @@ public class ABTestEntity {
}
public boolean isDisabled() {
return m_entity.isDisabled();
return m_run.isDisabled();
}
public void setDisabled(boolean disabled) {
m_entity.setDisabled(disabled);
m_run.setDisabled(disabled);
}
public void setGroupStrategyName(String groupStrategy) {
if (m_entity.getGroupStrategy() == null) {
m_entity.setGroupStrategy(new GroupStrategy());
}
m_entity.getGroupStrategy().setName(groupStrategy);
m_case.setGroupStrategy(groupStrategy);
}
public void setGroupStrategyConfiguration(String groupStrategyConfiguration) {
if (m_entity.getGroupStrategy() == null) {
m_entity.setGroupStrategy(new GroupStrategy());
}
m_entity.getGroupStrategy().setConfiguration(groupStrategyConfiguration);
m_run.setGroupStrategyConfiguration(groupStrategyConfiguration);
}
public void setId(int id) {
m_entity.setId(id);
m_case.setId(id);
}
public void setName(String name) {
m_entity.setName(name);
m_case.setName(name);
}
public ABTestGroupStrategy getGroupStrategy() {
......
......@@ -12,8 +12,9 @@ import org.unidal.lookup.ContainerHolder;
import com.dianping.cat.Cat;
import com.dianping.cat.abtest.ABTestId;
import com.dianping.cat.abtest.model.entity.Abtest;
import com.dianping.cat.abtest.model.entity.Entity;
import com.dianping.cat.abtest.model.entity.AbtestModel;
import com.dianping.cat.abtest.model.entity.Case;
import com.dianping.cat.abtest.model.entity.Run;
import com.dianping.cat.abtest.model.transform.BaseVisitor;
import com.dianping.cat.abtest.model.transform.DefaultSaxParser;
import com.dianping.cat.abtest.spi.ABTestEntity;
......@@ -48,7 +49,7 @@ public class DefaultABTestEntityManager extends ContainerHolder implements ABTes
public void initialize() throws InitializationException {
try {
InputStream in = getClass().getResourceAsStream("abtest.xml");
Abtest abtest = DefaultSaxParser.parse(in);
AbtestModel abtest = DefaultSaxParser.parse(in);
ABTestVisitor visitor = new ABTestVisitor(m_entities, m_entityList);
abtest.accept(visitor);
......@@ -60,8 +61,7 @@ public class DefaultABTestEntityManager extends ContainerHolder implements ABTes
entity.setGroupStrategy(groupStrategy);
} catch (Exception e) {
Cat.logError(e);
//TODO un-comment the following line later!
//entity.setDisabled(true);
entity.setDisabled(true);
}
}
} catch (Exception e) {
......@@ -80,11 +80,13 @@ public class DefaultABTestEntityManager extends ContainerHolder implements ABTes
}
@Override
public void visitEntity(Entity entity) {
ABTestEntity abTestEntity = new ABTestEntity(entity);
public void visitCase(Case _case) {
for (Run run : _case.getRuns()) {
ABTestEntity abTestEntity = new ABTestEntity(_case, run);
m_entities.put(abTestEntity.getId(), abTestEntity);
m_entityList.add(abTestEntity);
m_entities.put(abTestEntity.getId(), abTestEntity);
m_entityList.add(abTestEntity);
}
}
}
......
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity name="abtest" root="true">
<entity-ref name="entity" type="list" names="entities" />
<entity name="abtest-model" root="true">
<entity-ref name="case" type="list" names="cases" />
</entity>
<entity name="entity">
<entity name="case">
<attribute name="id" value-type="int" />
<attribute name="name" value-type="String" />
<attribute name="created-date" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<attribute name="last-modified-date" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<element name="description" value-type="String" />
<element name="owner" value-type="String" />
<element name="group-strategy" value-type="String" />
<element name="domain" value-type="String" type="list" names="domains" />
<entity-ref name="run" type="list" names="runs" xml-indent="true" />
</entity>
<entity name="run">
<attribute name="id" value-type="int" />
<attribute name="start-date" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<attribute name="end-date" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<attribute name="disabled" value-type="boolean" />
<element name="description" value-type="String" />
<element name="creator" value-type="String" />
<element name="domain" value-type="String" type="list" names="domains" />
<entity-ref name="group-strategy" />
</entity>
<entity name="group-strategy">
<attribute name="name" value-type="String" />
<element name="configuration" value-type="String" />
<element name="group-strategy-configuration" value-type="String" />
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<model model-package="com.dianping.cat.abtest.model" enable-sax-parser="true" enable-base-visitor="true">
<entity name="abtest" root="true">
<entity-ref name="entity" type="map" names="entities" />
<entity name="case">
<attribute name="id" value-type="int" key="true" primitive="true"/>
<element name="domain" value-type="String" type="set" names="domains" />
</entity>
<entity name="entity">
<entity name="run">
<attribute name="id" value-type="int" key="true" primitive="true"/>
<element name="domain" value-type="String" type="set" names="domains" />
</entity>
......
......@@ -6,14 +6,14 @@ import java.io.InputStream;
import org.junit.Test;
import org.xml.sax.SAXException;
import com.dianping.cat.abtest.model.entity.Abtest;
import com.dianping.cat.abtest.model.entity.AbtestModel;
import com.dianping.cat.abtest.model.transform.DefaultSaxParser;
public class AbtestModelTest {
@Test
public void test() throws SAXException, IOException {
InputStream in = getClass().getResourceAsStream("abtest.xml");
Abtest abtest = DefaultSaxParser.parse(in);
AbtestModel abtest = DefaultSaxParser.parse(in);
System.out.println(abtest);
}
......
<abtest>
<entity id="1001" name="Mock1" start-date="2013-04-10 17:00:00" end-date="2013-12-30 18:00:00" disabled="false">
<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>
<group-strategy name="roundrobin">
<configuration><![CDATA[This is the configuration]]></configuration>
</group-strategy>
<domain>Cat</domain>
<owner>hao.zhu@dianping.com,kezhu.wu@dianping.com</owner>
<group-strategy>roundrobin</group-strategy>
<domain>TuanGouApi</domain>
<domain>TuanGouWeb</domain>
</entity>
<entity id="1002" name="Mock2" start-date="2013-04-11 17:00:00" disabled="true">
</entity>
<entity id="1003" name="Mock3" start-date="2013-12-30 17:00:00" disabled="false">
</entity>
<entity id="1004" name="Mock4" end-date="2013-04-03 18:00:00" disabled="false">
</entity>
<entity id="1005" name="Mock5" start-date="2013-04-11 17:00:00" disabled="true">
</entity>
<entity id="1006" name="Mock6" start-date="2013-12-30 17:00:00" disabled="false">
</entity>
<entity id="1007" name="Mock7" end-date="2013-04-03 18:00:00" disabled="false">
</entity>
<entity id="1008" name="Mock8" start-date="2013-04-11 17:00:00" disabled="true">
</entity>
<entity id="1009" name="Mock9" start-date="2013-12-30 17:00:00" disabled="false">
</entity>
<entity id="1010" name="Mock10" end-date="2013-04-03 18:00:00" disabled="false">
</entity>
<entity id="1011" name="Mock11" start-date="2013-04-11 17:00:00" disabled="true">
</entity>
<entity id="1012" name="Mock12" start-date="2013-12-30 17:00:00" disabled="false">
</entity>
<entity id="1013" name="Mock13" end-date="2013-04-03 18:00:00" disabled="false">
</entity>
<entity id="1014" name="Mock14" start-date="2013-12-30 17:00:00" disabled="false">
</entity>
<entity id="1015" name="Mock15" end-date="2013-04-03 18:00:00" disabled="false">
</entity>
<entity id="1016" name="Mock16" start-date="2013-04-11 17:00:00" disabled="true">
</entity>
<entity id="1017" name="Mock17" start-date="2013-12-30 17:00:00" disabled="false">
</entity>
</abtest>
\ No newline at end of file
<domain>TuanGouRemote</domain>
<runs>
<run id="1" start-date="2013-04-10 17:00:00" end-date="2013-12-30 18:00:00" disabled="false">
<creator>hao.zhu@dianping.com</creator>
<domain>TuanGouWeb</domain>
<domain>TuanGouRemote</domain>
<group-strategy-configuration><![CDATA[This is the configuration]]></group-strategy-configuration>
</run>
<run />
</runs>
</case>
<case />
</abtest-model>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册