refactor(测试跟踪): 测试跟踪的自动清理报告数据采用批量处理,同时增加服务启动项,针对之前没有删除成功的资源报告进行删除处理
--bug=1034149 --user=宋天阳 [测试跟踪]github#27831 &28186S占用空间太多 https://www.tapd.cn/55049933/s/1451873
This commit is contained in:
parent
d454efb85f
commit
d3e16991d8
|
@ -60,4 +60,10 @@ public interface ExtTestPlanMapper {
|
|||
long countExecutingReportCount(String testPlanId);
|
||||
|
||||
void batchUpdateNode(@Param("request") TestPlanBatchMoveRequest request);
|
||||
|
||||
List<String> selectDeletedTestPlanReportIdsFromApiCaseReport();
|
||||
|
||||
List<String> selectDeletedTestPlanReportIdsFromApiScenarioReport();
|
||||
|
||||
List<String> selectDeletedTestPlanReportIdsFromUiReport();
|
||||
}
|
||||
|
|
|
@ -490,6 +490,21 @@
|
|||
WHERE test_plan_id = #{0}
|
||||
AND status = 'RUNNING'
|
||||
</select>
|
||||
<select id="selectDeletedTestPlanReportIdsFromApiCaseReport" resultType="java.lang.String">
|
||||
SELECT DISTINCT relevance_test_plan_report_id
|
||||
FROM api_definition_exec_result
|
||||
WHERE relevance_test_plan_report_id not in (select id FROM test_plan_report);
|
||||
</select>
|
||||
<select id="selectDeletedTestPlanReportIdsFromApiScenarioReport" resultType="java.lang.String">
|
||||
SELECT DISTINCT relevance_test_plan_report_id
|
||||
FROM api_scenario_report
|
||||
WHERE relevance_test_plan_report_id not in (select id FROM test_plan_report);
|
||||
</select>
|
||||
<select id="selectDeletedTestPlanReportIdsFromUiReport" resultType="java.lang.String">
|
||||
SELECT DISTINCT relevance_test_plan_report_id
|
||||
FROM ui_scenario_report
|
||||
WHERE relevance_test_plan_report_id not in (select id FROM test_plan_report);
|
||||
</select>
|
||||
|
||||
<update id="batchUpdateNode" parameterType="io.metersphere.plan.request.TestPlanBatchMoveRequest">
|
||||
update test_plan set node_id = #{request.nodeId}, node_path = #{request.nodePath}
|
||||
|
|
|
@ -3,14 +3,14 @@ package io.metersphere.listener;
|
|||
import io.metersphere.commons.constants.ScheduleGroup;
|
||||
import io.metersphere.commons.utils.LogUtil;
|
||||
import io.metersphere.commons.utils.RunInterface;
|
||||
import io.metersphere.plan.service.TestPlanReportService;
|
||||
import io.metersphere.service.*;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
@Component
|
||||
public class InitListener implements ApplicationRunner {
|
||||
|
||||
|
@ -28,12 +28,14 @@ public class InitListener implements ApplicationRunner {
|
|||
private PlatformPluginService platformPluginService;
|
||||
@Resource
|
||||
private BaseScheduleService baseScheduleService;
|
||||
@Resource
|
||||
private TestPlanReportService testPlanReportService;
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments applicationArguments) throws Exception {
|
||||
this.initOnceOperate();
|
||||
platformPluginService.loadPlatFormPlugins();
|
||||
|
||||
testPlanReportService.deleteIllegalityResourceReport();
|
||||
baseScheduleService.startEnableSchedules(ScheduleGroup.ISSUE_SYNC);
|
||||
baseScheduleService.startEnableSchedules(ScheduleGroup.TEST_PLAN_TEST);
|
||||
}
|
||||
|
|
|
@ -44,10 +44,7 @@ import org.apache.commons.collections.MapUtils;
|
|||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.session.ExecutorType;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.mybatis.spring.SqlSessionUtils;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
@ -957,93 +954,23 @@ public class TestPlanReportService {
|
|||
}
|
||||
|
||||
private void deleteReportBatch(List<String> reportIds) {
|
||||
int handleCount = 5000;
|
||||
List<String> handleIdList;
|
||||
|
||||
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
|
||||
TestPlanReportMapper planReportMapper = sqlSession.getMapper(TestPlanReportMapper.class);
|
||||
TestPlanReportDataMapper planReportDataMapper = sqlSession.getMapper(TestPlanReportDataMapper.class);
|
||||
TestPlanReportContentMapper planReportContentMapper = sqlSession.getMapper(TestPlanReportContentMapper.class);
|
||||
|
||||
try {
|
||||
while (reportIds.size() > handleCount) {
|
||||
handleIdList = new ArrayList<>(handleCount);
|
||||
List<String> otherIdList = new ArrayList<>();
|
||||
for (int index = 0; index < reportIds.size(); index++) {
|
||||
if (index < handleCount) {
|
||||
handleIdList.add(reportIds.get(index));
|
||||
} else {
|
||||
otherIdList.add(reportIds.get(index));
|
||||
}
|
||||
}
|
||||
|
||||
TestPlanReportExample deleteReportExample = new TestPlanReportExample();
|
||||
deleteReportExample.createCriteria().andIdIn(handleIdList);
|
||||
planReportMapper.deleteByExample(deleteReportExample);
|
||||
|
||||
TestPlanReportDataExample example = new TestPlanReportDataExample();
|
||||
example.createCriteria().andTestPlanReportIdIn(handleIdList);
|
||||
planReportDataMapper.deleteByExample(example);
|
||||
|
||||
TestPlanReportContentExample contentExample = new TestPlanReportContentExample();
|
||||
contentExample.createCriteria().andTestPlanReportIdIn(handleIdList);
|
||||
planReportContentMapper.deleteByExample(contentExample);
|
||||
|
||||
// //删除关联的接口用例报告
|
||||
// ApiDefinitionExecResultExample apiDefinitionExecResultExample = new ApiDefinitionExecResultExample();
|
||||
// apiDefinitionExecResultExample.createCriteria().andRelevanceTestPlanReportIdIn(handleIdList);
|
||||
// batchDefinitionExecResultMapper.deleteByExample(apiDefinitionExecResultExample);
|
||||
//
|
||||
// //删除关联的场景和ui用例报告
|
||||
// ApiScenarioReportExample apiScenarioReportExample = new ApiScenarioReportExample();
|
||||
// apiScenarioReportExample.createCriteria().andRelevanceTestPlanReportIdIn(handleIdList);
|
||||
// batchScenarioReportMapper.deleteByExample(apiScenarioReportExample);
|
||||
//
|
||||
// //删除关联的性能测试用例报告
|
||||
// LoadTestReportExample loadTestReportExample = new LoadTestReportExample();
|
||||
// loadTestReportExample.createCriteria().andRelevanceTestPlanReportIdIn(handleIdList);
|
||||
// batchLoadTestReportMapper.deleteByExample(loadTestReportExample);
|
||||
|
||||
sqlSession.flushStatements();
|
||||
|
||||
reportIds = otherIdList;
|
||||
}
|
||||
|
||||
if (!reportIds.isEmpty()) {
|
||||
TestPlanReportExample deleteReportExample = new TestPlanReportExample();
|
||||
deleteReportExample.createCriteria().andIdIn(reportIds);
|
||||
planReportMapper.deleteByExample(deleteReportExample);
|
||||
testPlanReportMapper.deleteByExample(deleteReportExample);
|
||||
|
||||
|
||||
TestPlanReportDataExample example = new TestPlanReportDataExample();
|
||||
example.createCriteria().andTestPlanReportIdIn(reportIds);
|
||||
planReportDataMapper.deleteByExample(example);
|
||||
testPlanReportDataMapper.deleteByExample(example);
|
||||
|
||||
TestPlanReportContentExample contentExample = new TestPlanReportContentExample();
|
||||
contentExample.createCriteria().andTestPlanReportIdIn(reportIds);
|
||||
planReportContentMapper.deleteByExample(contentExample);
|
||||
testPlanReportContentMapper.deleteByExample(contentExample);
|
||||
|
||||
// //删除关联的接口用例报告
|
||||
// ApiDefinitionExecResultExample apiDefinitionExecResultExample = new ApiDefinitionExecResultExample();
|
||||
// apiDefinitionExecResultExample.createCriteria().andRelevanceTestPlanReportIdIn(reportIds);
|
||||
// batchDefinitionExecResultMapper.deleteByExample(apiDefinitionExecResultExample);
|
||||
//
|
||||
// //删除关联的场景和ui用例报告
|
||||
// ApiScenarioReportExample apiScenarioReportExample = new ApiScenarioReportExample();
|
||||
// apiScenarioReportExample.createCriteria().andRelevanceTestPlanReportIdIn(reportIds);
|
||||
// batchScenarioReportMapper.deleteByExample(apiScenarioReportExample);
|
||||
//
|
||||
// //删除关联的性能测试用例报告
|
||||
// LoadTestReportExample loadTestReportExample = new LoadTestReportExample();
|
||||
// loadTestReportExample.createCriteria().andRelevanceTestPlanReportIdIn(reportIds);
|
||||
// batchLoadTestReportMapper.deleteByExample(loadTestReportExample);
|
||||
|
||||
sqlSession.flushStatements();
|
||||
}
|
||||
} finally {
|
||||
if (sqlSession != null && sqlSessionFactory != null) {
|
||||
SqlSessionUtils.closeSqlSession(sqlSession, sqlSessionFactory);
|
||||
}
|
||||
this.deleteApiCaseReportByTestPlanExecute(reportIds);
|
||||
this.deleteScenarioReportByTestPlanExecute(reportIds);
|
||||
this.deleteUiReportByTestPlanExecute(reportIds);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1615,7 +1542,7 @@ public class TestPlanReportService {
|
|||
List<TestPlanReport> testPlanReports = testPlanReportMapper.selectByExample(example);
|
||||
List<String> ids = testPlanReports.stream().map(TestPlanReport::getId).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(ids)) {
|
||||
deleteReportBatch(ids);
|
||||
BatchProcessingUtil.consumerByStringList(ids, this::deleteReportBatch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1817,4 +1744,14 @@ public class TestPlanReportService {
|
|||
public String selectLastReportByTestPlanId(String testPlanId) {
|
||||
return extTestPlanReportMapper.selectLastReportByTestPlanId(testPlanId);
|
||||
}
|
||||
|
||||
@Async
|
||||
public void deleteIllegalityResourceReport() {
|
||||
List<String> deletedTestPlanReportIds = new ArrayList<>();
|
||||
deletedTestPlanReportIds.addAll(extTestPlanMapper.selectDeletedTestPlanReportIdsFromApiCaseReport());
|
||||
deletedTestPlanReportIds.addAll(extTestPlanMapper.selectDeletedTestPlanReportIdsFromApiScenarioReport());
|
||||
deletedTestPlanReportIds.addAll(extTestPlanMapper.selectDeletedTestPlanReportIdsFromUiReport());
|
||||
deletedTestPlanReportIds = deletedTestPlanReportIds.stream().distinct().toList();
|
||||
BatchProcessingUtil.consumerByStringList(deletedTestPlanReportIds, this::deleteReportBatch);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue