提交 847d7a57 编写于 作者: S shiziyuan9527 提交者: 刘瑞斌

refactor(性能测试): 运行时默认监控资源池

上级 cb652f43
...@@ -18,4 +18,9 @@ public class MetricQueryController { ...@@ -18,4 +18,9 @@ public class MetricQueryController {
public List<MetricData> queryMetric(@PathVariable("id") String reportId) { public List<MetricData> queryMetric(@PathVariable("id") String reportId) {
return metricService.queryMetric(reportId); return metricService.queryMetric(reportId);
} }
@GetMapping("/query/resource/{id}")
public List<String> queryReportResource(@PathVariable("id") String reportId) {
return metricService.queryReportResource(reportId);
}
} }
...@@ -7,17 +7,21 @@ import com.alibaba.fastjson.JSONObject; ...@@ -7,17 +7,21 @@ import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.client.utils.StringUtils; import com.alibaba.nacos.client.utils.StringUtils;
import io.metersphere.base.domain.LoadTestReportWithBLOBs; import io.metersphere.base.domain.LoadTestReportWithBLOBs;
import io.metersphere.base.domain.LoadTestWithBLOBs; import io.metersphere.base.domain.LoadTestWithBLOBs;
import io.metersphere.base.domain.TestResource;
import io.metersphere.base.mapper.LoadTestMapper; import io.metersphere.base.mapper.LoadTestMapper;
import io.metersphere.base.mapper.LoadTestReportMapper; import io.metersphere.base.mapper.LoadTestReportMapper;
import io.metersphere.base.mapper.ext.ExtLoadTestReportMapper;
import io.metersphere.commons.exception.MSException; import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.utils.DateUtils; import io.metersphere.commons.utils.DateUtils;
import io.metersphere.commons.utils.LogUtil; import io.metersphere.commons.utils.LogUtil;
import io.metersphere.dto.NodeDTO;
import io.metersphere.performance.base.ReportTimeInfo; import io.metersphere.performance.base.ReportTimeInfo;
import io.metersphere.performance.controller.request.MetricDataRequest; import io.metersphere.performance.controller.request.MetricDataRequest;
import io.metersphere.performance.controller.request.MetricQuery; import io.metersphere.performance.controller.request.MetricQuery;
import io.metersphere.performance.controller.request.MetricRequest; import io.metersphere.performance.controller.request.MetricRequest;
import io.metersphere.performance.dto.MetricData; import io.metersphere.performance.dto.MetricData;
import io.metersphere.performance.dto.Monitor; import io.metersphere.performance.dto.Monitor;
import io.metersphere.service.TestResourceService;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -43,6 +47,10 @@ public class MetricQueryService { ...@@ -43,6 +47,10 @@ public class MetricQueryService {
private LoadTestMapper loadTestMapper; private LoadTestMapper loadTestMapper;
@Resource @Resource
private ReportService reportService; private ReportService reportService;
@Resource
private ExtLoadTestReportMapper extLoadTestReportMapper;
@Resource
private TestResourceService testResourceService;
public List<MetricData> queryMetricData(MetricRequest metricRequest) { public List<MetricData> queryMetricData(MetricRequest metricRequest) {
...@@ -140,9 +148,22 @@ public class MetricQueryService { ...@@ -140,9 +148,22 @@ public class MetricQueryService {
} }
public List<MetricData> queryMetric(String reportId) { public List<MetricData> queryMetric(String reportId) {
List<String> instances = new ArrayList<>();
LoadTestReportWithBLOBs report = loadTestReportMapper.selectByPrimaryKey(reportId); LoadTestReportWithBLOBs report = loadTestReportMapper.selectByPrimaryKey(reportId);
String testId = report.getTestId(); String testId = report.getTestId();
LoadTestWithBLOBs loadTestWithBLOBs = loadTestMapper.selectByPrimaryKey(testId); LoadTestWithBLOBs loadTestWithBLOBs = loadTestMapper.selectByPrimaryKey(testId);
String poolId = loadTestWithBLOBs.getTestResourcePoolId();
List<TestResource> resourceList = testResourceService.getTestResourceList(poolId);
// 默认监控资源池下的节点
if (CollectionUtils.isNotEmpty(resourceList)) {
resourceList.forEach(resource -> {
NodeDTO dto = JSON.parseObject(resource.getConfiguration(), NodeDTO.class);
if (StringUtils.isNotBlank(dto.getIp())) {
int port = dto.getMonitorPort() == null ? 9100 : dto.getMonitorPort();
instances.add(dto.getIp() + ":" + port);
}
});
}
String advancedConfiguration = loadTestWithBLOBs.getAdvancedConfiguration(); String advancedConfiguration = loadTestWithBLOBs.getAdvancedConfiguration();
JSONObject jsonObject = JSON.parseObject(advancedConfiguration); JSONObject jsonObject = JSON.parseObject(advancedConfiguration);
JSONArray monitorParams = jsonObject.getJSONArray("monitorParams"); JSONArray monitorParams = jsonObject.getJSONArray("monitorParams");
...@@ -150,12 +171,19 @@ public class MetricQueryService { ...@@ -150,12 +171,19 @@ public class MetricQueryService {
return new ArrayList<>(); return new ArrayList<>();
} }
List<MetricDataRequest> list = new ArrayList<>(); List<MetricDataRequest> list = new ArrayList<>();
// 加入高级设置中的监控配置
for (int i = 0; i < monitorParams.size(); i++) { for (int i = 0; i < monitorParams.size(); i++) {
Monitor monitor = monitorParams.getObject(i, Monitor.class); Monitor monitor = monitorParams.getObject(i, Monitor.class);
String instance = monitor.getIp() + ":" + monitor.getPort(); String instance = monitor.getIp() + ":" + monitor.getPort();
getRequest(instance, list); if (!instances.contains(instance)) {
instances.add(instance);
}
} }
instances.forEach(instance -> {
getRequest(instance, list);
});
ReportTimeInfo reportTimeInfo = reportService.getReportTimeInfo(reportId); ReportTimeInfo reportTimeInfo = reportService.getReportTimeInfo(reportId);
MetricRequest metricRequest = new MetricRequest(); MetricRequest metricRequest = new MetricRequest();
metricRequest.setMetricDataQueries(list); metricRequest.setMetricDataQueries(list);
...@@ -185,4 +213,47 @@ public class MetricQueryService { ...@@ -185,4 +213,47 @@ public class MetricQueryService {
list.add(request); list.add(request);
}); });
} }
public List<String> queryReportResource(String reportId) {
List<String> result = new ArrayList<>();
List<String> resourceIdAndIndexes = extLoadTestReportMapper.selectResourceId(reportId);
resourceIdAndIndexes.forEach(resourceIdAndIndex -> {
String[] split = org.apache.commons.lang3.StringUtils.split(resourceIdAndIndex, "_");
String resourceId = split[0];
TestResource testResource = testResourceService.getTestResource(resourceId);
if (testResource == null) {
return;
}
String configuration = testResource.getConfiguration();
if (org.apache.commons.lang3.StringUtils.isBlank(configuration)) {
return;
}
NodeDTO dto = JSON.parseObject(configuration, NodeDTO.class);
if (StringUtils.isNotBlank(dto.getIp())) {
Integer monitorPort = dto.getMonitorPort();
int port = monitorPort == null ? 9100 : monitorPort;
result.add(dto.getIp() + ":" + port);
}
});
LoadTestReportWithBLOBs report = loadTestReportMapper.selectByPrimaryKey(reportId);
String testId = report.getTestId();
LoadTestWithBLOBs loadTestWithBLOBs = loadTestMapper.selectByPrimaryKey(testId);
String advancedConfiguration = loadTestWithBLOBs.getAdvancedConfiguration();
JSONObject jsonObject = JSON.parseObject(advancedConfiguration);
JSONArray monitorParams = jsonObject.getJSONArray("monitorParams");
if (monitorParams == null) {
return result;
}
for (int i = 0; i < monitorParams.size(); i++) {
Monitor monitor = monitorParams.getObject(i, Monitor.class);
String instance = monitor.getIp() + ":" + monitor.getPort();
if (!result.contains(instance)) {
result.add(instance);
}
}
return result;
}
} }
package io.metersphere.performance.service; package io.metersphere.performance.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.metersphere.base.domain.*; import io.metersphere.base.domain.*;
import io.metersphere.base.mapper.*; import io.metersphere.base.mapper.*;
import io.metersphere.base.mapper.ext.ExtLoadTestMapper; import io.metersphere.base.mapper.ext.ExtLoadTestMapper;
...@@ -19,13 +17,10 @@ import io.metersphere.controller.request.QueryScheduleRequest; ...@@ -19,13 +17,10 @@ import io.metersphere.controller.request.QueryScheduleRequest;
import io.metersphere.controller.request.ScheduleRequest; import io.metersphere.controller.request.ScheduleRequest;
import io.metersphere.dto.DashboardTestDTO; import io.metersphere.dto.DashboardTestDTO;
import io.metersphere.dto.LoadTestDTO; import io.metersphere.dto.LoadTestDTO;
import io.metersphere.dto.NodeDTO;
import io.metersphere.dto.ScheduleDao; import io.metersphere.dto.ScheduleDao;
import io.metersphere.i18n.Translator; import io.metersphere.i18n.Translator;
import io.metersphere.job.sechedule.PerformanceTestJob; import io.metersphere.job.sechedule.PerformanceTestJob;
import io.metersphere.performance.base.MonitorStatus;
import io.metersphere.performance.dto.LoadTestExportJmx; import io.metersphere.performance.dto.LoadTestExportJmx;
import io.metersphere.performance.dto.Monitor;
import io.metersphere.performance.engine.Engine; import io.metersphere.performance.engine.Engine;
import io.metersphere.performance.engine.EngineFactory; import io.metersphere.performance.engine.EngineFactory;
import io.metersphere.performance.engine.producer.LoadTestProducer; import io.metersphere.performance.engine.producer.LoadTestProducer;
...@@ -49,7 +44,6 @@ import java.nio.charset.StandardCharsets; ...@@ -49,7 +44,6 @@ import java.nio.charset.StandardCharsets;
import java.time.Instant; import java.time.Instant;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -87,8 +81,6 @@ public class PerformanceTestService { ...@@ -87,8 +81,6 @@ public class PerformanceTestService {
private TestResourcePoolMapper testResourcePoolMapper; private TestResourcePoolMapper testResourcePoolMapper;
@Resource @Resource
private LoadTestProducer loadTestProducer; private LoadTestProducer loadTestProducer;
@Resource
private TestResourceMapper testResourceMapper;
public List<LoadTestDTO> list(QueryTestPlanRequest request) { public List<LoadTestDTO> list(QueryTestPlanRequest request) {
request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders())); request.setOrders(ServiceUtils.getDefaultOrder(request.getOrders()));
...@@ -212,36 +204,6 @@ public class PerformanceTestService { ...@@ -212,36 +204,6 @@ public class PerformanceTestService {
} }
final LoadTestWithBLOBs loadTest = new LoadTestWithBLOBs(); final LoadTestWithBLOBs loadTest = new LoadTestWithBLOBs();
String poolId = request.getTestResourcePoolId();
TestResourceExample testResourceExample = new TestResourceExample();
testResourceExample.createCriteria().andTestResourcePoolIdEqualTo(poolId);
List<TestResource> testResources = testResourceMapper.selectByExampleWithBLOBs(testResourceExample);
String advancedConfiguration = request.getAdvancedConfiguration();
JSONObject jsonObject = JSON.parseObject(advancedConfiguration);
List<Monitor> list = new ArrayList<>();
if (!CollectionUtils.isEmpty(testResources)) {
AtomicInteger index = new AtomicInteger(1);
testResources.forEach(testResource -> {
String configuration = testResource.getConfiguration();
NodeDTO nodeDTO = JSON.parseObject(configuration, NodeDTO.class);
Monitor monitor = new Monitor();
monitor.setName("名称" + index.getAndIncrement());
monitor.setDescription("默认生成");
monitor.setIp(nodeDTO.getIp());
monitor.setPort(9100);
monitor.setMonitorStatus(MonitorStatus.NORMAL.name());
list.add(monitor);
});
}
if (!CollectionUtils.isEmpty(list)) {
jsonObject.put("monitorParams", list);
}
advancedConfiguration = JSON.toJSONString(jsonObject);
loadTest.setUserId(SessionUtils.getUser().getId()); loadTest.setUserId(SessionUtils.getUser().getId());
loadTest.setId(UUID.randomUUID().toString()); loadTest.setId(UUID.randomUUID().toString());
loadTest.setName(request.getName()); loadTest.setName(request.getName());
...@@ -250,7 +212,7 @@ public class PerformanceTestService { ...@@ -250,7 +212,7 @@ public class PerformanceTestService {
loadTest.setUpdateTime(System.currentTimeMillis()); loadTest.setUpdateTime(System.currentTimeMillis());
loadTest.setTestResourcePoolId(request.getTestResourcePoolId()); loadTest.setTestResourcePoolId(request.getTestResourcePoolId());
loadTest.setLoadConfiguration(request.getLoadConfiguration()); loadTest.setLoadConfiguration(request.getLoadConfiguration());
loadTest.setAdvancedConfiguration(advancedConfiguration); loadTest.setAdvancedConfiguration(request.getAdvancedConfiguration());
loadTest.setStatus(PerformanceTestStatus.Saved.name()); loadTest.setStatus(PerformanceTestStatus.Saved.name());
loadTest.setNum(getNextNum(request.getProjectId())); loadTest.setNum(getNextNum(request.getProjectId()));
loadTestMapper.insert(loadTest); loadTestMapper.insert(loadTest);
......
<template> <template>
<div v-loading="result.loading"> <div v-loading="result.loading">
<el-tabs type="border-card" :stretch="true"> <el-tabs type="border-card" :stretch="true">
<el-tab-pane v-for="item in instances" :key="item" :label="item" class="logging-content"> <el-tab-pane v-for="(item,index) in instances" :key="index" :label="item" class="logging-content">
<el-row> <el-row>
<el-col :span="10" :offset="2"> <el-col :span="10" :offset="2">
<ms-chart ref="chart1" :options="getCpuOption(item)" :autoresize="true"></ms-chart> <ms-chart ref="chart1" :options="getCpuOption(item)" :autoresize="true"></ms-chart>
...@@ -38,8 +38,6 @@ export default { ...@@ -38,8 +38,6 @@ export default {
components: {MsChart}, components: {MsChart},
data() { data() {
return { return {
resource: [],
logContent: [],
result: {}, result: {},
id: '', id: '',
loading: false, loading: false,
...@@ -47,15 +45,19 @@ export default { ...@@ -47,15 +45,19 @@ export default {
data: [] data: []
} }
}, },
created() {
this.data = [];
this.instances = [];
},
methods: { methods: {
getResource() { getResource() {
this.result = this.$get("/metric/query/resource/" + this.report.id, data => {
this.instances = data.data;
})
this.$get("/metric/query/" + this.report.id, result => { this.$get("/metric/query/" + this.report.id, result => {
if (result) { if (result) {
let data = result.data; this.data = result.data;
this.data = data;
let set = new Set()
data.map(d => set.add(d.instance));
this.instances = Array.from(set);
} }
}); });
}, },
...@@ -241,7 +243,7 @@ export default { ...@@ -241,7 +243,7 @@ export default {
if (status === "Completed" || status === "Running") { if (status === "Completed" || status === "Running") {
this.getResource(); this.getResource();
} else { } else {
this.resource = []; this.instances = [];
} }
}, },
deep: true deep: true
......
...@@ -12,16 +12,6 @@ ...@@ -12,16 +12,6 @@
<el-form-item :label="$t('commons.name')" prop="name"> <el-form-item :label="$t('commons.name')" prop="name">
<el-input v-model="form.name" autocomplete="off"/> <el-input v-model="form.name" autocomplete="off"/>
</el-form-item> </el-form-item>
<el-form-item label="所属环境">
<el-select v-model="form.environmentId" placeholder="选择所属环境" @change="change">
<el-option
v-for="item in environments"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<h4 style="margin-left: 80px;">监控配置</h4> <h4 style="margin-left: 80px;">监控配置</h4>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
...@@ -74,12 +64,6 @@ export default { ...@@ -74,12 +64,6 @@ export default {
dialogVisible: false, dialogVisible: false,
rule: {}, rule: {},
index: '', index: '',
monitorList: [
{
indicator: '',
expression: '',
}
]
} }
}, },
methods: { methods: {
...@@ -112,8 +96,6 @@ export default { ...@@ -112,8 +96,6 @@ export default {
create() { create() {
this.$refs.monitorForm.validate(valid => { this.$refs.monitorForm.validate(valid => {
if (valid) { if (valid) {
this.form.loadTestId = this.testId;
this.form.authStatus = CONFIG_TYPE.NOT;
this.form.monitorStatus = CONFIG_TYPE.NOT; this.form.monitorStatus = CONFIG_TYPE.NOT;
this.list.push(this.form); this.list.push(this.form);
this.$emit("update:list", this.list); this.$emit("update:list", this.list);
...@@ -123,10 +105,6 @@ export default { ...@@ -123,10 +105,6 @@ export default {
}) })
this.dialogVisible = false; this.dialogVisible = false;
}, },
change(data) {
let env = this.environments.find(env => env.id === data);
this.form.environmentName = env ? env.name : "";
}
} }
} }
</script> </script>
......
...@@ -163,11 +163,11 @@ ...@@ -163,11 +163,11 @@
prop="name" prop="name"
label="名称"> label="名称">
</el-table-column> </el-table-column>
<el-table-column <!-- <el-table-column-->
align="center" <!-- align="center"-->
prop="environmentName" <!-- prop="environmentName"-->
label="所属环境"> <!-- label="所属环境">-->
</el-table-column> <!-- </el-table-column>-->
<!-- <el-table-column--> <!-- <el-table-column-->
<!-- align="center"--> <!-- align="center"-->
<!-- prop="authStatus"--> <!-- prop="authStatus"-->
...@@ -242,7 +242,6 @@ export default { ...@@ -242,7 +242,6 @@ export default {
if (this.testId) { if (this.testId) {
this.getAdvancedConfig(); this.getAdvancedConfig();
} }
this.getEnv();
}, },
computed: { computed: {
envName(id) { envName(id) {
...@@ -372,14 +371,6 @@ export default { ...@@ -372,14 +371,6 @@ export default {
refreshStatus() { refreshStatus() {
}, },
getEnv() {
let projectId = this.$store.state.projectId;
this.result = this.$get('/api/environment/list/' + projectId, response => {
if (response) {
this.environments = response.data;
}
});
},
} }
} }
</script> </script>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册