add support for detailStatus of agent

This commit is contained in:
coderfengyun 2013-08-14 17:48:23 +08:00
parent 392fbc4588
commit 20fb4e108e
2 changed files with 75 additions and 32 deletions

View File

@ -1,11 +1,9 @@
package org.bench4q.master.api; package org.bench4q.master.api;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import org.bench4q.master.api.model.AgentBriefModel; import org.bench4q.master.api.model.AgentBriefModel;
import org.bench4q.master.api.model.RunningScriptModel; import org.bench4q.master.api.model.AgentDetailModel;
import org.bench4q.master.api.model.TestPlanModel; import org.bench4q.master.api.model.TestPlanModel;
import org.bench4q.master.api.model.RunTestPlanResultModel; import org.bench4q.master.api.model.RunTestPlanResultModel;
import org.bench4q.master.service.UserService; import org.bench4q.master.service.UserService;
@ -32,36 +30,15 @@ public class TestPlanController extends BaseController {
this.testPlanRunner = testPlanRunner; this.testPlanRunner = testPlanRunner;
} }
@RequestMapping(value = "/runTestPlanWithScriptId", method = RequestMethod.GET)
@ResponseBody
public RunTestPlanResultModel runTestPlanWithScriptId(
@RequestParam int scriptId, @RequestParam int requireLoad) {
// TODO:add the scriptId-requireLoad to taskList, and return a UUID
List<RunningScriptModel> list = new ArrayList<RunningScriptModel>();
if (!this.checkScope(UserService.NORAML_AUTHENTICATION)) {
return _buildTestPlanResponseModel(null);
}
RunningScriptModel model = new RunningScriptModel();
model.setScriptId(scriptId);
model.setRequireLoad(requireLoad);
model.setAgentRunIds(new ArrayList<UUID>());
list.add(model);
TestPlanModel testPlanModel = new TestPlanModel();
testPlanModel.setScriptIdRequireLoads(list);
return _buildTestPlanResponseModel(this.testPlanRunner
.runTestPlanWithModel(testPlanModel));
}
@RequestMapping(value = "/getAgentBriefStatus", method = RequestMethod.GET) @RequestMapping(value = "/getAgentBriefStatus", method = RequestMethod.GET)
@ResponseBody @ResponseBody
public AgentBriefModel getBriefStatusModelFromAgent( public AgentBriefModel getBriefStatusModelFromAgent(
@RequestParam UUID testPlanId, @RequestParam UUID agentRunId) { @RequestParam UUID testPlanId, @RequestParam UUID agentRunId) {
if (this.checkScope(UserService.NORAML_AUTHENTICATION)) { if (!this.checkScope(UserService.NORAML_AUTHENTICATION)) {
return null; return null;
} }
return this.testPlanRunner.getBriefStatusFromAgent(testPlanId, agentRunId); return this.testPlanRunner.getBriefStatusFromAgent(testPlanId,
agentRunId);
} }
@RequestMapping(value = "/runTestPlanWithTestPlanModel", method = RequestMethod.POST) @RequestMapping(value = "/runTestPlanWithTestPlanModel", method = RequestMethod.POST)
@ -88,4 +65,15 @@ public class TestPlanController extends BaseController {
@RequestParam UUID testPlanId) { @RequestParam UUID testPlanId) {
return this.testPlanRunner.get_tasks().get(testPlanId).getResultModel(); return this.testPlanRunner.get_tasks().get(testPlanId).getResultModel();
} }
@RequestMapping(value = "/getAgentDetailStatus", method = RequestMethod.GET)
@ResponseBody
public AgentDetailModel getAgentDetailStatus(@RequestParam UUID testPlanId,
@RequestParam UUID agentRunId) {
if (!this.checkScope(UserService.NORAML_AUTHENTICATION)) {
return null;
}
return this.testPlanRunner.getDetailStatusOfAgent(testPlanId,
agentRunId);
}
} }

View File

@ -18,6 +18,7 @@ import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller; import javax.xml.bind.Unmarshaller;
import org.bench4q.master.api.model.AgentBriefModel; import org.bench4q.master.api.model.AgentBriefModel;
import org.bench4q.master.api.model.AgentDetailModel;
import org.bench4q.master.api.model.RunTestPlanResultModel; import org.bench4q.master.api.model.RunTestPlanResultModel;
import org.bench4q.master.api.model.RunningScriptModel; import org.bench4q.master.api.model.RunningScriptModel;
import org.bench4q.master.api.model.TestPlanModel; import org.bench4q.master.api.model.TestPlanModel;
@ -27,6 +28,7 @@ import org.bench4q.master.communication.HttpRequester.HttpResponse;
import org.bench4q.master.communication.agent.RunScenarioModel; import org.bench4q.master.communication.agent.RunScenarioModel;
import org.bench4q.master.communication.agent.RunScenarioResultModel; import org.bench4q.master.communication.agent.RunScenarioResultModel;
import org.bench4q.master.communication.agent.TestBriefStatusModel; import org.bench4q.master.communication.agent.TestBriefStatusModel;
import org.bench4q.master.communication.agent.TestDetailStatusModel;
import org.bench4q.master.entity.db.Agent; import org.bench4q.master.entity.db.Agent;
import org.bench4q.master.service.AgentService; import org.bench4q.master.service.AgentService;
import org.bench4q.master.service.ScriptService; import org.bench4q.master.service.ScriptService;
@ -88,7 +90,7 @@ public class TestPlanRunner {
hostNameAndLoad.getHostName() + ":" + TestPlanRunner.port hostNameAndLoad.getHostName() + ":" + TestPlanRunner.port
+ "/test/brief/" + runId, null, null); + "/test/brief/" + runId, null, null);
briefStatusModel = this.extractTestBriefStatusModel(httpResponse briefStatusModel = this._extractTestBriefStatusModel(httpResponse
.getContent()); .getContent());
result = this.makeAgentBriefModel(briefStatusModel); result = this.makeAgentBriefModel(briefStatusModel);
@ -108,7 +110,7 @@ public class TestPlanRunner {
} }
} }
private TestBriefStatusModel extractTestBriefStatusModel(String content) private TestBriefStatusModel _extractTestBriefStatusModel(String content)
throws JAXBException { throws JAXBException {
TestBriefStatusModel resultModel = new TestBriefStatusModel(); TestBriefStatusModel resultModel = new TestBriefStatusModel();
Unmarshaller ummarshaller = JAXBContext.newInstance( Unmarshaller ummarshaller = JAXBContext.newInstance(
@ -181,7 +183,7 @@ public class TestPlanRunner {
} }
} }
public RunningScriptModel runTestWithRunScenarioModel( private RunningScriptModel runTestWithRunScenarioModel(
RunScenarioModel runScenarioModel, int requireLoad, int scriptId, RunScenarioModel runScenarioModel, int requireLoad, int scriptId,
UUID testPlanId) throws JAXBException { UUID testPlanId) throws JAXBException {
// TODO: is it needed to be synchronized, but i think it is; // TODO: is it needed to be synchronized, but i think it is;
@ -209,7 +211,7 @@ public class TestPlanRunner {
this.getAgentService().getLoadFromAgent(agent.getHostName(), min); this.getAgentService().getLoadFromAgent(agent.getHostName(), min);
runScenarioResultModel = this._sendScriptContentToAgent( runScenarioResultModel = this._sendScriptContentToAgent(
agent.getHostName(), agent.getPort(), agent.getHostName(), agent.getPort(),
this.marshalRunScenarioModelToString(runScenarioModel)); this._marshalRunScenarioModelToString(runScenarioModel));
// this.runningAgentInfo.addToRunIdHostLoadMap(runScenarioResultModel // this.runningAgentInfo.addToRunIdHostLoadMap(runScenarioResultModel
// .getRunId(), new HostNameAndLoad(agent.getHostName(), min)); // .getRunId(), new HostNameAndLoad(agent.getHostName(), min));
@ -269,7 +271,7 @@ public class TestPlanRunner {
: remainLoadByStart; : remainLoadByStart;
} }
public String marshalRunScenarioModelToString( private String _marshalRunScenarioModelToString(
RunScenarioModel runScenarioModel) throws JAXBException { RunScenarioModel runScenarioModel) throws JAXBException {
Marshaller marshaller; Marshaller marshaller;
marshaller = JAXBContext.newInstance(runScenarioModel.getClass()) marshaller = JAXBContext.newInstance(runScenarioModel.getClass())
@ -289,4 +291,57 @@ public class TestPlanRunner {
.unmarshal(new ByteArrayInputStream(responseContent.getBytes())); .unmarshal(new ByteArrayInputStream(responseContent.getBytes()));
return resultModel; return resultModel;
} }
public AgentDetailModel getDetailStatusOfAgent(UUID testPlanId,
UUID agentRunId) {
AgentDetailModel result = new AgentDetailModel();
TestDetailStatusModel detailStatusModel = new TestDetailStatusModel();
try {
HostNameAndLoad hostNameAndLoad = this._tasks.get(testPlanId)
.getHostNameAndLoadFromRunningAgentInfo(agentRunId);
if (hostNameAndLoad == null) {
return null;
}
HttpResponse httpResponse = this.httpRequester.sendGet(
hostNameAndLoad.getHostName() + ":" + TestPlanRunner.port
+ "/test/detail/" + agentRunId, null, null);
detailStatusModel = this._extractDetailStatusModel(httpResponse
.getContent());
result = this._makeAgentDetailModel(detailStatusModel);
if (result.isFinish()) {
this.agentService.backLoadToAgent(
hostNameAndLoad.getHostName(),
hostNameAndLoad.getLoad());
}
return result;
} catch (IOException e) {
e.printStackTrace();
return result;
} catch (JAXBException e) {
e.printStackTrace();
return result;
}
}
private TestDetailStatusModel _extractDetailStatusModel(String content)
throws JAXBException {
TestDetailStatusModel result = new TestDetailStatusModel();
Unmarshaller unmarshaller = JAXBContext.newInstance(result.getClass())
.createUnmarshaller();
result = (TestDetailStatusModel) unmarshaller
.unmarshal(new ByteArrayInputStream(content.getBytes()));
return result;
}
private AgentDetailModel _makeAgentDetailModel(
TestDetailStatusModel detailStatusModel) {
AgentDetailModel result = new AgentDetailModel();
result.setTestStatusModel(detailStatusModel);
result.setFinish(detailStatusModel.getFinishedCount() == detailStatusModel
.getTotalCount());
return result;
}
} }