针对方案 1,这种处理从产品角度而言,不可取,且过于粗暴;
且正在任务执行过程中,也确实不应该存在删除 case 的行为;因此综合下来;考虑在原来的操作基础上,点击 停止按钮,真正的进行停止问题修复;
采取方案:
1、进行停止时
2、先 stop 所有的 agent
3、再更新此次性能测试执行 status 为人为取消
服务修改
org.ngrinder.perftest.service.PerfTestService
//最终不可修改状态
private Set<Status> statusSet = ImmutableSet.of(Status.CANCELED,
Status.STOP_BY_ERROR,Status.UNKNOWN,Status.FINISHED);
@Autowired
private AgentManagerService agentManagerService;
@Override
@Transactional
public void stop(User user, Long id) {
PerfTest perfTest = getOne(id);
// If it's not requested by user who started job. It's wrong request.
if (!hasPermission(perfTest, user, Permission.STOP_TEST_OF_OTHER)) {
return;
}
// // If it's not stoppable status.. It's wrong request.
// if (!perfTest.getStatus().isStoppable()) {
// return;
// }
// Just mark cancel on console
// This will be not be effective on cluster mode.
consoleManager.getConsoleUsingPort(perfTest.getPort()).cancel();
perfTest.setStopRequest(true);
perfTest.setStatus(Status.CANCELED);
List<AgentInfo> agents = agentManagerService.getAllVisible();
for(AgentInfo agentInfo : agents){
agentManagerService.stopAgent(agentInfo.getId());
}
//1秒后再更新DB,因为断开Agent连接时,agent会通过socket管道发送当前性能case执行状态,会覆盖status
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
perfTestRepository.save(perfTest);
}
@Transactional
public PerfTest markProgress(PerfTest perfTest, String message) {
checkNotNull(perfTest);
checkNotNull(perfTest.getId(), "perfTest should save Id");
perfTest.setLastProgressMessage(message);
//所有状态更新主入口,在更新前,异常错误、取消,都是最终状态,不可再次更改
PerfTest beforCheckPerfTest = perfTestRepository.findOne(perfTest.getId());
if(statusSet.contains(beforCheckPerfTest.getStatus())){
return beforCheckPerfTest;
}
LOGGER.debug("Progress : Test - {} : {}", perfTest.getId(), message);
return perfTestRepository.saveAndFlush(perfTest);
}
已经按照方案 1 修改的童鞋,也不用大改,只需要在前端文件 list.ftl,把 delete 按钮的展示重新修改原样即可
//默认显示delete按钮
if (deletable == true) {
$("#delete_" + id).show();
} else {
$("#check_" + id).attr("disabled", true);
$("#delete_" + id).hide();
// $("#delete_" + id).show();
}
转载文章时务必注明原作者及原始链接,并注明「发表于 TesterHome 」,并不得对作品进行修改。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。