feat: 优化停止性能测试是否保留报告
This commit is contained in:
parent
2522b83f81
commit
492dca961c
|
@ -102,9 +102,9 @@ public class PerformanceTestController {
|
|||
return performanceTestService.run(request);
|
||||
}
|
||||
|
||||
@GetMapping("stop/{reportId}")
|
||||
public void stopTest(@PathVariable String reportId) {
|
||||
performanceTestService.stopTest(reportId);
|
||||
@GetMapping("stop/{reportId}/{forceStop}")
|
||||
public void stopTest(@PathVariable String reportId, @PathVariable boolean forceStop) {
|
||||
performanceTestService.stopTest(reportId, forceStop);
|
||||
}
|
||||
|
||||
@GetMapping("/file/metadata/{testId}")
|
||||
|
|
|
@ -401,7 +401,19 @@ public class PerformanceTestService {
|
|||
scheduleService.addOrUpdateCronJob(request, PerformanceTestJob.getJobKey(request.getResourceId()), PerformanceTestJob.getTriggerKey(request.getResourceId()), PerformanceTestJob.class);
|
||||
}
|
||||
|
||||
public void stopTest(String reportId) {
|
||||
reportService.deleteReport(reportId);
|
||||
public void stopTest(String reportId, boolean forceStop) {
|
||||
if (forceStop) {
|
||||
reportService.deleteReport(reportId);
|
||||
} else {
|
||||
LoadTestReport loadTestReport = loadTestReportMapper.selectByPrimaryKey(reportId);
|
||||
LoadTestWithBLOBs loadTest = loadTestMapper.selectByPrimaryKey(loadTestReport.getTestId());
|
||||
final Engine engine = EngineFactory.createEngine(loadTest);
|
||||
if (engine == null) {
|
||||
MSException.throwException(String.format("Stop report fail. create engine fail,report ID:%s", reportId));
|
||||
}
|
||||
reportService.stopEngine(loadTest, engine);
|
||||
// 停止测试之后设置报告的状态
|
||||
reportService.updateStatus(reportId, PerformanceTestStatus.Completed.name());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ public class ReportService {
|
|||
loadTestReportMapper.deleteByPrimaryKey(reportId);
|
||||
}
|
||||
|
||||
private void stopEngine(LoadTestWithBLOBs loadTest, Engine engine) {
|
||||
public void stopEngine(LoadTestWithBLOBs loadTest, Engine engine) {
|
||||
engine.stop();
|
||||
loadTest.setStatus(PerformanceTestStatus.Saved.name());
|
||||
loadTestMapper.updateByPrimaryKeySelective(loadTest);
|
||||
|
@ -239,4 +239,11 @@ public class ReportService {
|
|||
public LoadTestReport getReport(String reportId) {
|
||||
return loadTestReportMapper.selectByPrimaryKey(reportId);
|
||||
}
|
||||
|
||||
public void updateStatus(String reportId, String status) {
|
||||
LoadTestReport report = new LoadTestReport();
|
||||
report.setId(reportId);
|
||||
report.setStatus(status);
|
||||
loadTestReportMapper.updateByPrimaryKeySelective(report);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,6 +84,9 @@ public class ReportWebSocket {
|
|||
session.close();
|
||||
break;
|
||||
}
|
||||
if (!session.isOpen()) {
|
||||
return;
|
||||
}
|
||||
if (PerformanceTestStatus.Running.name().equals(report.getStatus())) {
|
||||
session.getBasicRemote().sendText("refresh-" + this.refresh++);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</el-row>
|
||||
<el-row class="ms-report-view-btns">
|
||||
<el-button :disabled="isReadOnly || report.status !== 'Running'" type="primary" plain size="mini"
|
||||
@click="stopTest(reportId)">
|
||||
@click="dialogFormVisible=true">
|
||||
{{$t('report.test_stop_now')}}
|
||||
</el-button>
|
||||
<el-button :disabled="isReadOnly || report.status !== 'Completed'" type="success" plain size="mini"
|
||||
|
@ -62,6 +62,16 @@
|
|||
</el-tabs>
|
||||
|
||||
</el-card>
|
||||
<el-dialog :title="$t('report.test_stop_now_confirm')" :visible.sync="dialogFormVisible" width="30%">
|
||||
<p v-html="$t('report.force_stop_tips')"></p>
|
||||
<p v-html="$t('report.stop_tips')"></p>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="danger" size="small" @click="stopTest(true)">{{$t('report.force_stop_btn')}}
|
||||
</el-button>
|
||||
<el-button type="primary" size="small" @click="stopTest(false)">{{$t('report.stop_btn')}}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</ms-main-container>
|
||||
</ms-container>
|
||||
</template>
|
||||
|
@ -103,7 +113,8 @@
|
|||
title: 'Logging',
|
||||
report: {},
|
||||
isReadOnly: false,
|
||||
websocket: null
|
||||
websocket: null,
|
||||
dialogFormVisible: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
@ -171,18 +182,16 @@
|
|||
this.minutes = '0';
|
||||
this.seconds = '0';
|
||||
},
|
||||
stopTest(reportId) {
|
||||
this.$confirm(this.$t('report.test_stop_now_confirm'), '', {
|
||||
confirmButtonText: this.$t('commons.confirm'),
|
||||
cancelButtonText: this.$t('commons.cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.result = this.$get('/performance/stop/' + reportId, () => {
|
||||
this.$success(this.$t('report.test_stop_success'));
|
||||
stopTest(forceStop) {
|
||||
this.result = this.$get('/performance/stop/' + this.reportId + '/' + forceStop, () => {
|
||||
this.$success(this.$t('report.test_stop_success'));
|
||||
this.$set(this.report, "refresh", Math.random()); // 触发刷新
|
||||
this.$set(this.report, "status", 'Completed');
|
||||
if (forceStop) {
|
||||
this.$router.push('/performance/report/all');
|
||||
})
|
||||
}).catch(() => {
|
||||
});
|
||||
}
|
||||
})
|
||||
this.dialogFormVisible = false;
|
||||
},
|
||||
rerun(testId) {
|
||||
this.$confirm(this.$t('report.test_rerun_confirm'), '', {
|
||||
|
|
|
@ -184,7 +184,6 @@
|
|||
this.testPlan.id = response.data;
|
||||
this.$success(this.$t('commons.save_success'));
|
||||
this.result = this.$post(this.runPath, {id: this.testPlan.id, triggerMode: 'MANUAL'}, (response) => {
|
||||
this.$success(this.$t('load_test.is_running'))
|
||||
let reportId = response.data;
|
||||
this.$router.push({path: '/performance/report/view/' + reportId})
|
||||
})
|
||||
|
|
|
@ -261,7 +261,11 @@ export default {
|
|||
start_status: 'The test is in the beginning state, we will automatically display it on the page after we generate the report!',
|
||||
run_status: 'The test is running, please check the report later!',
|
||||
user_name: 'Creator',
|
||||
project_name: 'Project Name'
|
||||
project_name: 'Project Name',
|
||||
force_stop_tips: '<strong>Terminating</strong> the servers will immediately kill the servers and the JTL files will be lost.',
|
||||
stop_tips: 'A <strong>Graceful shutdown</strong> will archive the JTL files and then stop the servers.',
|
||||
force_stop_btn: 'Terminating',
|
||||
stop_btn: 'Graceful shutdown',
|
||||
},
|
||||
load_test: {
|
||||
operating: 'Operating',
|
||||
|
|
|
@ -260,7 +260,10 @@ export default {
|
|||
run_status: '测试处于运行状态,请稍后查看报告!',
|
||||
user_name: '创建人',
|
||||
project_name: '所属项目',
|
||||
|
||||
force_stop_tips: '<strong>强制停止</strong>测试会立刻结束当前测试并删除报告数据',
|
||||
stop_tips: '<strong>停止</strong>测试会结束当前测试并保留报告数据',
|
||||
force_stop_btn: '强制停止',
|
||||
stop_btn: '停止',
|
||||
},
|
||||
load_test: {
|
||||
operating: '操作',
|
||||
|
|
|
@ -259,7 +259,11 @@ export default {
|
|||
start_status: '測試處於開始狀態, 我們生成報告後會自動展示到頁面上!',
|
||||
run_status: '測試處於運行狀態,請稍後查看報告!',
|
||||
user_name: '創建人',
|
||||
project_name: '所屬項目'
|
||||
project_name: '所屬項目',
|
||||
force_stop_tips: '<strong>強制停止</strong>測試會立刻結束當前測試並刪除報告數據',
|
||||
stop_tips: '<strong>停止</strong>測試會結束當前測試並保留報告數據',
|
||||
force_stop_btn: '強制停止',
|
||||
stop_btn: '停止',
|
||||
},
|
||||
load_test: {
|
||||
operating: '操作',
|
||||
|
|
Loading…
Reference in New Issue