提交 bda27eeb 编写于 作者: D damon.zhu

refactor AbtestStatus

上级 22ab0979
package com.dianping.cat.system.page.abtest;
public enum ABTestEntityStatus {
RUNNING(0), STOPPED(1), READY(2), DISABLED(3),DEFALUT(4);
public static ABTestEntityStatus getByName(String name, ABTestEntityStatus defaultStatus) {
for (ABTestEntityStatus status : ABTestEntityStatus.values()) {
if (status.getName().equalsIgnoreCase(name)) {
return status;
}
}
return defaultStatus;
}
private int m_status;
private static final String[] s_status = { "Running", "Stopped", "Ready", "Disabled", "Default" };
private ABTestEntityStatus(int status) {
m_status = status;
}
public int getStatus() {
return m_status;
}
private String getName() {
return s_status[m_status];
}
}
package com.dianping.cat.system.page.abtest;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
......@@ -8,65 +7,35 @@ import com.dianping.cat.home.dal.abtest.Abtest;
public class ABTestReport {
private static Date s_startTime;
private static Date s_endTime;
static{
Calendar calendar = Calendar.getInstance();
calendar.set(2000, 1, 1);
s_startTime = calendar.getTime();
calendar.set(2100, 1, 1);
s_endTime = calendar.getTime();
}
private Abtest m_entity;
private ABTestEntityStatus m_status;
private AbtestStatus m_status;
private Map<String, String> m_items;
public ABTestReport(Abtest entity){
public ABTestReport(Abtest entity) {
m_entity = entity;
}
public ABTestReport(Abtest entity, Date now) {
m_entity = entity;
if (m_entity.getStartDate() == null) {
m_entity.setStartDate(s_startTime);
}
if (m_entity.getEndDate() == null) {
m_entity.setEndDate(s_endTime);
}
setStatus(now);
// TODO m_items
// TODO m_items setting
}
private void setStatus(Date now) {
if (now.before(m_entity.getStartDate())) {
m_status = ABTestEntityStatus.READY;
} else if (now.before(m_entity.getEndDate())) {
if (m_entity.isDisabled()) {
m_status = ABTestEntityStatus.STOPPED;
} else {
m_status = ABTestEntityStatus.RUNNING;
}
} else {
m_status = ABTestEntityStatus.DISABLED;
}
m_status = AbtestStatus.calculateStatus(m_entity, now);
}
public Abtest getEntity() {
return m_entity;
}
public void setStatus(ABTestEntityStatus status) {
m_status = status;
}
public ABTestEntityStatus getStatus() {
public void setStatus(AbtestStatus status) {
m_status = status;
}
public AbtestStatus getStatus() {
return m_status;
}
......
package com.dianping.cat.system.page.abtest;
import java.util.Calendar;
import java.util.Date;
import com.dianping.cat.home.dal.abtest.Abtest;
public enum AbtestStatus {
CREATED, READY, RUNNING, TERMINATED, SUSPENDED;
private static final int s_deltaTime = -1; // -1 hour
private static final Calendar calendar = Calendar.getInstance();
public static AbtestStatus getByName(String name, AbtestStatus defaultStatus) {
for (AbtestStatus status : AbtestStatus.values()) {
if (status.name().equalsIgnoreCase(name)) {
return status;
}
}
return defaultStatus;
}
public static AbtestStatus calculateStatus(Abtest abtest, Date now) {
if (abtest.isDisabled()) {
return AbtestStatus.SUSPENDED;
} else {
Date startDate = abtest.getStartDate();
Date endDate = abtest.getEndDate();
if (startDate != null) {
calendar.setTime(startDate);
calendar.add(Calendar.HOUR, s_deltaTime);
Date startDelta = calendar.getTime();
if (now.before(startDelta)) {
return AbtestStatus.CREATED;
} else {
if (now.before(startDate)) {
return AbtestStatus.READY;
} else {
if (endDate != null) {
if (now.before(endDate)) {
return AbtestStatus.RUNNING;
} else {
return AbtestStatus.TERMINATED;
}
} else {
return AbtestStatus.RUNNING;
}
}
}
} else {
if (endDate != null) {
if (now.before(endDate)) {
return AbtestStatus.RUNNING;
} else {
return AbtestStatus.TERMINATED;
}
} else {
return AbtestStatus.RUNNING;
}
}
}
}
public String getStatus() {
return name().toLowerCase();
}
}
......@@ -60,7 +60,7 @@ public class Handler implements PageHandler<Context> {
private void renderListView(Model model, Payload payload) {
List<ABTestReport> reports = new ArrayList<ABTestReport>();
List<Abtest> entities = new ArrayList<Abtest>();
ABTestEntityStatus status = ABTestEntityStatus.getByName(payload.getStatus(), ABTestEntityStatus.DEFALUT);
AbtestStatus status = AbtestStatus.getByName(payload.getStatus(), null);
Date now = new Date();
try {
......@@ -70,35 +70,39 @@ public class Handler implements PageHandler<Context> {
}
List<Abtest> filterTests = new ArrayList<Abtest>();
int runningCount = 0, stoppedCount = 0, readyCount = 0, disableCount = 0;
int createdCount = 0, readyCount = 0, runningCount = 0, terminatedCount = 0, suspendedCount = 0;
for (Abtest abtest : entities) {
ABTestReport report = new ABTestReport(abtest, now);
if (report.getStatus() == status) {
if (status != null && report.getStatus() == status) {
filterTests.add(abtest);
}
switch (report.getStatus()) {
case RUNNING:
runningCount++;
break;
case STOPPED:
stoppedCount++;
case CREATED:
createdCount++;
break;
case READY:
readyCount++;
break;
case DISABLED:
disableCount++;
case RUNNING:
runningCount++;
break;
case TERMINATED:
terminatedCount++;
break;
case SUSPENDED:
suspendedCount++;
break;
}
}
model.setCreatedCount(createdCount);
model.setReadyCount(readyCount);
model.setRunningCount(runningCount);
model.setStoppedCount(stoppedCount);
model.setDisabledCount(disableCount);
if (status != ABTestEntityStatus.DEFALUT) {
model.setTerminatedCount(terminatedCount);
model.setSuspendedCount(suspendedCount);
if (status != null) {
entities = filterTests;
}
......
......@@ -3,7 +3,7 @@ package com.dianping.cat.system.page.abtest;
public enum JspFile {
VIEW("/jsp/system/abtest.jsp"),
ALLTESTVIEW("/jsp/system/abtestAllTest.jsp"),
LIST("/jsp/system/abtestAllTest.jsp"),
REPORT("/jsp/system/abtestReport.jsp")
;
......
......@@ -12,7 +12,7 @@ public class JspViewer extends BaseJspViewer<SystemPage, Action, Context, Model>
case VIEW:
return JspFile.VIEW.getPath();
case LIST:
return JspFile.ALLTESTVIEW.getPath();
return JspFile.LIST.getPath();
case REPORT:
return JspFile.REPORT.getPath();
}
......
......@@ -12,21 +12,23 @@ public class Model extends ViewModel<SystemPage, Action, Context> {
private String m_domain;
private Date m_date;
private ABTestEntity m_entity;
private List<ABTestReport> m_reports;
private int m_totalPages;
private int m_runningCount;
private int m_createdCount;
private int m_readyCount;
private int m_stoppedCount;
private int m_disabledCount;
private int m_runningCount;
private int m_terminatedCount;
private int m_suspendedCount;
public Model(Context ctx) {
super(ctx);
}
......@@ -53,59 +55,66 @@ public class Model extends ViewModel<SystemPage, Action, Context> {
}
public ABTestEntity getEntity() {
return m_entity;
}
return m_entity;
}
public void setEntity(ABTestEntity entity) {
m_entity = entity;
}
m_entity = entity;
}
public List<ABTestReport> getReports() {
return m_reports;
}
return m_reports;
}
public void setReports(List<ABTestReport> reports) {
m_reports = reports;
}
m_reports = reports;
}
public int getTotalPages() {
return m_totalPages;
}
return m_totalPages;
}
public void setTotalPages(int totalPages) {
m_totalPages = totalPages;
}
m_totalPages = totalPages;
}
public int getRunningCount() {
return m_runningCount;
}
public int getCreatedCount() {
return m_createdCount;
}
public void setRunningCount(int runningCount) {
m_runningCount = runningCount;
}
public void setCreatedCount(int createdCount) {
m_createdCount = createdCount;
}
public int getReadyCount() {
return m_readyCount;
}
return m_readyCount;
}
public void setReadyCount(int readyCount) {
m_readyCount = readyCount;
}
m_readyCount = readyCount;
}
public int getRunningCount() {
return m_runningCount;
}
public void setRunningCount(int runningCount) {
m_runningCount = runningCount;
}
public int getStoppedCount() {
return m_stoppedCount;
}
public int getTerminatedCount() {
return m_terminatedCount;
}
public void setStoppedCount(int stoppedCount) {
m_stoppedCount = stoppedCount;
}
public void setTerminatedCount(int terminatedCount) {
m_terminatedCount = terminatedCount;
}
public int getDisabledCount() {
return m_disabledCount;
}
public int getSuspendedCount() {
return m_suspendedCount;
}
public void setDisabledCount(int disabledCount) {
m_disabledCount = disabledCount;
}
public void setSuspendedCount(int suspendedCount) {
m_suspendedCount = suspendedCount;
}
}
package com.dianping.cat.system.page.abtest;
import com.dianping.cat.system.SystemPage;
import org.codehaus.plexus.util.StringUtils;
import org.unidal.web.mvc.ActionContext;
import org.unidal.web.mvc.ActionPayload;
import org.unidal.web.mvc.payload.annotation.FieldMeta;
import com.dianping.cat.system.SystemPage;
public class Payload implements ActionPayload<SystemPage, Action> {
private SystemPage m_page;
......@@ -39,10 +38,12 @@ public class Payload implements ActionPayload<SystemPage, Action> {
}
public void setStatus(String status) {
if(StringUtils.isBlank(status)){
m_status = ABTestEntityStatus.DEFALUT.name();
AbtestStatus abstatus = AbtestStatus.getByName(status, null);
if(abstatus != null){
m_status = abstatus.name().toLowerCase();
}else{
m_status = status;
m_status = "all";
}
}
......
<?xml version="1.0" encoding="UTF-8"?>
<entities do-package="com.dianping.cat.home.dal.abtest" gen="true"
alias="a">
<entities do-package="com.dianping.cat.home.dal.abtest" gen="true">
<entity name="abtest" table="abtest" alias="a">
<member name="creation-date" insert-expr="NOW()" />
<member name="modify-date" insert-expr="NOW()" update-expr="NOW()" />
......
......@@ -88,16 +88,10 @@
<ul class="nav nav-list well liHover">
<li class="nav-header">ABTest Status</li>
<li class="divider" />
<li${payload.status eq 'running' ? ' class="selected"' : ''}>
<a href="?op=list&status=running">
<img height="12" width="12" src="${res.img.local['RUNNING_black_small.png']}"> running
<span class="badge statusSpan">${model.runningCount}</span>
</a>
</li>
<li${payload.status eq 'disabled' ? ' class="selected"' : ''}>
<a href="?op=list&status=disabled">
<img height="12" width="12" src="${res.img.local['PAUSED_black_small.png']}"> disabled
<span class="badge statusSpan">${model.disabledCount}</span>
<li${payload.status eq 'created' ? ' class="selected"' : ''}>
<a href="?op=list&status=created">
<img height="12" width="12" src="${res.img.local['CREATED_black_small.png']}"> created
<span class="badge statusSpan">${model.createdCount}</span>
</a>
</li>
<li${payload.status eq 'ready' ? ' class="selected"' : ''}>
......@@ -106,10 +100,22 @@
<span class="badge statusSpan">${model.readyCount}</span>
</a>
</li>
<li${payload.status eq 'stopped' ? ' class="selected"' : ''}>
<a href="?op=list&status=stopped">
<img height="12" width="12" src="${res.img.local['STOPPED_black_small.png']}"> stopped
<span class="badge statusSpan">${model.stoppedCount}</span>
<li${payload.status eq 'running' ? ' class="selected"' : ''}>
<a href="?op=list&status=running">
<img height="12" width="12" src="${res.img.local['RUNNING_black_small.png']}"> running
<span class="badge statusSpan">${model.runningCount}</span>
</a>
</li>
<li${payload.status eq 'terminated' ? ' class="selected"' : ''}>
<a href="?op=list&status=terminated">
<img height="12" width="12" src="${res.img.local['STOPPED_black_small.png']}"> terminated
<span class="badge statusSpan">${model.terminatedCount}</span>
</a>
</li>
<li${payload.status eq 'suspended' ? ' class="selected"' : ''}>
<a href="?op=list&status=suspended">
<img height="12" width="12" src="${res.img.local['PAUSED_black_small.png']}"> suspended
<span class="badge statusSpan">${model.suspendedCount}</span>
</a>
</li>
</ul>
......@@ -120,9 +126,8 @@
<button class="btn" type="button">
<label class="checkbox"> <input id="ckall" type="checkbox"></input></label>
</button>
<button id="btnStart" class="btn" type="button">Start</button>
<button id="btnDisable" class="btn" type="button">Disable</button>
<button id="btnStop" class="btn" type="button">Stop</button>
<button id="btnSuspend" class="btn" type="button">Suspend</button>
<button id="btnResume" class="btn" type="button">Resume</button>
</div>
<table class="table table-striped table-format table-hover" data-provides="rowlink">
......@@ -147,25 +152,30 @@
<td>10%</td>
<td>
<c:choose>
<c:when test="${item.status.status == 0}">
<c:when test="${item.status.status eq 'created'}">
<div>
<img src="${res.img.local['CREATED_colored_big.png']}" />
</div> <small>Created</small>
</c:when>
<c:when test="${item.status.status eq 'running'}">
<div>
<img src="${res.img.local['RUNNING_colored_big.png']}" />
</div> <small>Running</small>
</c:when>
<c:when test="${item.status.status == 1}">
<c:when test="${item.status.status eq 'terminated'}">
<div>
<img src="${res.img.local['STOPPED_colored_big.png']}">
</div> <small>Stopped</small>
</div> <small>Terminated</small>
</c:when>
<c:when test="${item.status.status == 2}">
<c:when test="${item.status.status eq 'ready'}">
<div>
<img src="${res.img.local['READY_colored_big.png']}">
</div> <small>Ready to start</small>
</c:when>
<c:when test="${item.status.status == 3}">
<c:when test="${item.status.status eq 'suspended'}">
<div>
<img src="${res.img.local['PAUSED_colored_big.png']}">
</div> <small>Disabled</small>
</div> <small>Suspended</small>
</c:when>
</c:choose>
</td>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册