add limit flag to MonitorMain
add Observer to testplan for stopping
This commit is contained in:
parent
743e71c969
commit
d186075beb
|
@ -131,7 +131,7 @@ public class Monitor {
|
||||||
hostName, port);
|
hostName, port);
|
||||||
System.out.println(MarshalHelper.tryMarshal(monitorMain));
|
System.out.println(MarshalHelper.tryMarshal(monitorMain));
|
||||||
//tell test plan has to stop itself
|
//tell test plan has to stop itself
|
||||||
testPlan.setHasToStop(monitorMain.isFinished());
|
testPlan.setHasToStop(monitorMain.isTouchLimit());
|
||||||
List<MonitorResult> monitorResults = this.getTestPlanFactory()
|
List<MonitorResult> monitorResults = this.getTestPlanFactory()
|
||||||
.createMonitorResultListWithOutId(monitorMain, testPlan,
|
.createMonitorResultListWithOutId(monitorMain, testPlan,
|
||||||
this, sampeTime);
|
this, sampeTime);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.bench4q.master.domain.entity;
|
package org.bench4q.master.domain.entity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -25,8 +26,8 @@ import javax.persistence.Transient;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.bench4q.master.domain.IAggregate;
|
import org.bench4q.master.domain.IAggregate;
|
||||||
import org.bench4q.master.domain.repository.TestPlanRepository;
|
import org.bench4q.master.domain.repository.TestPlanRepository;
|
||||||
import org.bench4q.master.domain.service.TestPlanEngine;
|
|
||||||
import org.bench4q.master.domain.service.TestResultSave;
|
import org.bench4q.master.domain.service.TestResultSave;
|
||||||
|
import org.bench4q.master.domain.valueobject.limitation.TestPlanObserver;
|
||||||
import org.bench4q.master.domain.valueobject.transaction.impl.TestPlanLoadApplication;
|
import org.bench4q.master.domain.valueobject.transaction.impl.TestPlanLoadApplication;
|
||||||
import org.bench4q.share.enums.master.TestPlanStatus;
|
import org.bench4q.share.enums.master.TestPlanStatus;
|
||||||
import org.bench4q.share.helper.MarshalHelper;
|
import org.bench4q.share.helper.MarshalHelper;
|
||||||
|
@ -49,9 +50,9 @@ public class TestPlan implements IAggregate {
|
||||||
private Set<Monitor> monitors;
|
private Set<Monitor> monitors;
|
||||||
private TestResultSave testResultSave;
|
private TestResultSave testResultSave;
|
||||||
private TestPlanRepository repository;
|
private TestPlanRepository repository;
|
||||||
private TestPlanEngine testPlanEngine;
|
|
||||||
private boolean hasToStop;
|
private boolean hasToStop;
|
||||||
private LimitModel limitModel;
|
private LimitModel limitModel;
|
||||||
|
private List<TestPlanObserver> observers = new ArrayList<TestPlanObserver>();
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
@ -288,7 +289,7 @@ public class TestPlan implements IAggregate {
|
||||||
getTestResultSave().update(TestPlan.this,
|
getTestResultSave().update(TestPlan.this,
|
||||||
collectResult(new Date()));
|
collectResult(new Date()));
|
||||||
if(isHasToStop()){
|
if(isHasToStop()){
|
||||||
testPlanEngine.stop(UUID.fromString(testPlanRunId));
|
submitToObserver();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 0, this.getSampleCycleInSeconds(), TimeUnit.SECONDS);
|
}, 0, this.getSampleCycleInSeconds(), TimeUnit.SECONDS);
|
||||||
|
@ -348,22 +349,23 @@ public class TestPlan implements IAggregate {
|
||||||
this.hasToStop = hasToStop;
|
this.hasToStop = hasToStop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transient
|
|
||||||
public TestPlanEngine getTestPlanEngine() {
|
|
||||||
return testPlanEngine;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTestPlanEngine(TestPlanEngine testPlanEngine) {
|
|
||||||
this.testPlanEngine = testPlanEngine;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
public LimitModel getLimitModel() {
|
public LimitModel getLimitModel() {
|
||||||
return limitModel;
|
return limitModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitModel(LimitModel limitModel) {
|
public void setLimitModel(LimitModel limitModel) {
|
||||||
limitModel = limitModel;
|
this.limitModel = limitModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addObserver(TestPlanObserver testPlanObserver){
|
||||||
|
observers.add(testPlanObserver);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void submitToObserver(){
|
||||||
|
UUID testPlanIdUuid = UUID.fromString(testPlanRunId);
|
||||||
|
for(TestPlanObserver testPlanObserver: observers){
|
||||||
|
testPlanObserver.processStop(testPlanIdUuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.bench4q.master.domain.entity.TestPlanScriptResult;
|
||||||
import org.bench4q.master.domain.entity.User;
|
import org.bench4q.master.domain.entity.User;
|
||||||
import org.bench4q.master.domain.repository.TestPlanRepository;
|
import org.bench4q.master.domain.repository.TestPlanRepository;
|
||||||
import org.bench4q.master.domain.service.ScriptService;
|
import org.bench4q.master.domain.service.ScriptService;
|
||||||
import org.bench4q.master.domain.service.TestPlanEngine;
|
|
||||||
import org.bench4q.master.domain.service.TestResultSave;
|
import org.bench4q.master.domain.service.TestResultSave;
|
||||||
import org.bench4q.master.domain.valueobject.transaction.TransactionFactory;
|
import org.bench4q.master.domain.valueobject.transaction.TransactionFactory;
|
||||||
import org.bench4q.master.exception.ExceptionLog;
|
import org.bench4q.master.exception.ExceptionLog;
|
||||||
|
@ -103,7 +102,7 @@ public class TestPlanFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
public TestPlan createATestPlanWithoutId(TestPlanModel testPlanModel,
|
public TestPlan createATestPlanWithoutId(TestPlanModel testPlanModel,
|
||||||
User user, UUID runId, TestPlanEngine testPlanEngine) throws IllegalParameterException {
|
User user, UUID runId) throws IllegalParameterException {
|
||||||
this.logger.info("testPlanName:" + testPlanModel.getName());
|
this.logger.info("testPlanName:" + testPlanModel.getName());
|
||||||
TestPlan result = new TestPlan();
|
TestPlan result = new TestPlan();
|
||||||
result.setCreateDateTime(new Date());
|
result.setCreateDateTime(new Date());
|
||||||
|
@ -143,7 +142,6 @@ public class TestPlanFactory {
|
||||||
monitors.add(monitorInBusiness);
|
monitors.add(monitorInBusiness);
|
||||||
}
|
}
|
||||||
result.setMonitors(monitors);
|
result.setMonitors(monitors);
|
||||||
result.setTestPlanEngine(testPlanEngine);
|
|
||||||
result.setLimitModel(testPlanModel.getLimitModel());
|
result.setLimitModel(testPlanModel.getLimitModel());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -283,7 +281,9 @@ public class TestPlanFactory {
|
||||||
List<MonitorResult> monitorResults = new LinkedList<MonitorResult>();
|
List<MonitorResult> monitorResults = new LinkedList<MonitorResult>();
|
||||||
|
|
||||||
Field[] fields = monitorMain.getClass().getDeclaredFields();
|
Field[] fields = monitorMain.getClass().getDeclaredFields();
|
||||||
|
|
||||||
for (int i = 0; i < fields.length; i++) {
|
for (int i = 0; i < fields.length; i++) {
|
||||||
|
if(fields[i].getAnnotation(MonitorMain.Transient.class) != null) continue;
|
||||||
MonitorResult monitorResult = new MonitorResult();
|
MonitorResult monitorResult = new MonitorResult();
|
||||||
monitorResult.setTestPlanDB(testPlan);
|
monitorResult.setTestPlanDB(testPlan);
|
||||||
monitorResult.setMonitor(monitor);
|
monitorResult.setMonitor(monitor);
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.bench4q.master.domain.entity.TestPlan;
|
||||||
import org.bench4q.master.domain.entity.User;
|
import org.bench4q.master.domain.entity.User;
|
||||||
import org.bench4q.master.domain.factory.TestPlanFactory;
|
import org.bench4q.master.domain.factory.TestPlanFactory;
|
||||||
import org.bench4q.master.domain.repository.TestPlanRepository;
|
import org.bench4q.master.domain.repository.TestPlanRepository;
|
||||||
|
import org.bench4q.master.domain.valueobject.limitation.TestPlanObserver;
|
||||||
import org.bench4q.master.domain.valueobject.schedulscript.TaskCompleteCallback;
|
import org.bench4q.master.domain.valueobject.schedulscript.TaskCompleteCallback;
|
||||||
import org.bench4q.master.exception.ExceptionUtils.IllegalParameterException;
|
import org.bench4q.master.exception.ExceptionUtils.IllegalParameterException;
|
||||||
import org.bench4q.master.infrastructure.highavailable.CurrentLoadObserver;
|
import org.bench4q.master.infrastructure.highavailable.CurrentLoadObserver;
|
||||||
|
@ -30,7 +31,7 @@ import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class TestPlanEngine implements TaskCompleteCallback,
|
public class TestPlanEngine implements TaskCompleteCallback,
|
||||||
CurrentLoadObserver {
|
CurrentLoadObserver, TestPlanObserver {
|
||||||
private HighAvailablePool haPool;
|
private HighAvailablePool haPool;
|
||||||
private TestPlanRepository testPlanRepository;
|
private TestPlanRepository testPlanRepository;
|
||||||
private TestPlanFactory testPlanFactory;
|
private TestPlanFactory testPlanFactory;
|
||||||
|
@ -126,7 +127,7 @@ public class TestPlanEngine implements TaskCompleteCallback,
|
||||||
final User user, final UUID testPlanRunId)
|
final User user, final UUID testPlanRunId)
|
||||||
throws IllegalParameterException {
|
throws IllegalParameterException {
|
||||||
TestPlan testPlan = this.getTestPlanFactory().createATestPlanWithoutId(
|
TestPlan testPlan = this.getTestPlanFactory().createATestPlanWithoutId(
|
||||||
testPlanBusinessModel, user, testPlanRunId, this);
|
testPlanBusinessModel, user, testPlanRunId);
|
||||||
Logger.getLogger(TestPlanService.class).info(
|
Logger.getLogger(TestPlanService.class).info(
|
||||||
"test plan name:" + testPlan.getName());
|
"test plan name:" + testPlan.getName());
|
||||||
return this.getTestPlanRepository().attach(testPlan);
|
return this.getTestPlanRepository().attach(testPlan);
|
||||||
|
@ -198,4 +199,8 @@ public class TestPlanEngine implements TaskCompleteCallback,
|
||||||
public void executePendingTestPlan() {
|
public void executePendingTestPlan() {
|
||||||
pickATestPlan();
|
pickATestPlan();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void processStop(final UUID testPlanId) {
|
||||||
|
this.stop(testPlanId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
package org.bench4q.master.domain.valueobject.limitation;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
|
public interface TestPlanObserver{
|
||||||
|
|
||||||
|
public abstract void processStop(final UUID testPlanId);
|
||||||
|
}
|
|
@ -29,6 +29,9 @@ public class MonitorMain extends SampleModel {
|
||||||
private NetworkInterfaceModel networkInterfaceModel;
|
private NetworkInterfaceModel networkInterfaceModel;
|
||||||
@XmlElement(name = "process_info")
|
@XmlElement(name = "process_info")
|
||||||
private ProcessModel processModel;
|
private ProcessModel processModel;
|
||||||
|
@XmlElement(name = "touch_limit")
|
||||||
|
private boolean isTouchLimit;
|
||||||
|
|
||||||
private SimpleDateFormat dateFormat = new SimpleDateFormat(
|
private SimpleDateFormat dateFormat = new SimpleDateFormat(
|
||||||
"yyyy-MM-dd-HH-mm-ss");
|
"yyyy-MM-dd-HH-mm-ss");
|
||||||
|
|
||||||
|
@ -76,4 +79,12 @@ public class MonitorMain extends SampleModel {
|
||||||
NetworkInterfaceModel networkInterfaceModel) {
|
NetworkInterfaceModel networkInterfaceModel) {
|
||||||
this.networkInterfaceModel = networkInterfaceModel;
|
this.networkInterfaceModel = networkInterfaceModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isTouchLimit() {
|
||||||
|
return isTouchLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTouchLimit(boolean isTouchLimit) {
|
||||||
|
this.isTouchLimit = isTouchLimit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.bench4q.share.models.monitor;
|
package org.bench4q.share.models.monitor;
|
||||||
|
|
||||||
|
import java.beans.Transient;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.xml.bind.annotation.XmlType;
|
||||||
|
@ -19,6 +21,8 @@ public class MonitorMain extends SampleModel{
|
||||||
private NetworkInterfaceModel networkInterfaceModel;
|
private NetworkInterfaceModel networkInterfaceModel;
|
||||||
|
|
||||||
private ProcessModel processModel;
|
private ProcessModel processModel;
|
||||||
|
|
||||||
|
private boolean isTouchLimit;
|
||||||
|
|
||||||
public MonitorMain() {
|
public MonitorMain() {
|
||||||
|
|
||||||
|
@ -63,4 +67,16 @@ public class MonitorMain extends SampleModel{
|
||||||
public void setProcessModel(ProcessModel processModel) {
|
public void setProcessModel(ProcessModel processModel) {
|
||||||
this.processModel = processModel;
|
this.processModel = processModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MonitorMain.Transient
|
||||||
|
@XmlElement(name = "touch_limit")
|
||||||
|
public boolean isTouchLimit() {
|
||||||
|
return isTouchLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTouchLimit(boolean isTouchLimit) {
|
||||||
|
this.isTouchLimit = isTouchLimit;
|
||||||
|
}
|
||||||
|
public @interface Transient{}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue