fix: 修复性能测试自定义监控显示图表bug (#7187)

fix: 修复性能测试自定义监控显示图表bug
This commit is contained in:
metersphere-bot 2021-10-27 13:51:22 +08:00 committed by GitHub
parent 7194bef971
commit 231d9c4859
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 73 additions and 52 deletions

View File

@ -32,6 +32,7 @@ import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Transactional(rollbackFor = Exception.class)
@ -216,17 +217,29 @@ public class MetricQueryService {
private void getRequest(Monitor monitor, List<MetricDataRequest> list) {
if (CollectionUtils.isNotEmpty(monitor.getMonitorConfig())) {
monitor.getMonitorConfig().forEach(c -> {
if (StringUtils.isBlank(c.getValue())) {
return;
}
MetricDataRequest request = new MetricDataRequest();
String promQL = c.getValue();
request.setPromQL(promQL);
request.setSeriesName(c.getName());
request.setInstance(monitor.getIp() + ":" + monitor.getPort());
list.add(request);
});
List<MonitorItem> collect = monitor.getMonitorConfig().stream()
.filter(c -> StringUtils.isNotBlank(c.getValue())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) {
collect.forEach(c -> {
MetricDataRequest request = new MetricDataRequest();
String promQL = c.getValue();
request.setPromQL(promQL);
request.setSeriesName(c.getName());
request.setInstance(monitor.getIp() + ":" + monitor.getPort());
list.add(request);
});
} else {
Map<String, String> map = MetricQuery.getMetricQueryMap();
Set<String> set = map.keySet();
set.forEach(s -> {
MetricDataRequest request = new MetricDataRequest();
String promQL = map.get(s);
request.setPromQL(promQL);
request.setSeriesName(s);
request.setInstance(monitor.getIp() + ":" + monitor.getPort());
list.add(request);
});
}
} else {
Map<String, String> map = MetricQuery.getMetricQueryMap();
Set<String> set = map.keySet();

View File

@ -4,11 +4,11 @@
<el-col :span="4">
<div>
<el-select v-model="currentInstance" placeholder="" size="small" style="width: 100%"
@change="handleChecked(currentInstance)">
@change="getResource(currentInstance)">
<el-option
v-for="item in instances"
:key="item.ip+item.port"
:value="item.ip+':'+item.port">
v-for="item in instances"
:key="item.ip+item.port"
:value="item.ip+':'+item.port">
{{ item.ip }} {{ item.name }}
</el-option>
</el-select>
@ -35,47 +35,47 @@
<el-row>
<el-col :offset="2" :span="20">
<el-table
:data="tableData"
stripe
border
style="width: 100%">
:data="tableData"
stripe
border
style="width: 100%">
<el-table-column label="Label" align="center">
<el-table-column
prop="label"
label="Label"
sortable>
prop="label"
label="Label"
sortable>
</el-table-column>
</el-table-column>
<el-table-column label="Aggregate" align="center">
<el-table-column
prop="avg"
label="Avg."
width="100"
sortable
prop="avg"
label="Avg."
width="100"
sortable
/>
<el-table-column
prop="min"
label="Min."
width="100"
sortable
prop="min"
label="Min."
width="100"
sortable
/>
<el-table-column
prop="max"
label="Max."
width="100"
sortable
prop="max"
label="Max."
width="100"
sortable
/>
</el-table-column>
<el-table-column label="Range" align="center">
<el-table-column
prop="startTime"
label="Start"
width="160"
prop="startTime"
label="Start"
width="160"
/>
<el-table-column
prop="endTime"
label="End"
width="160"
prop="endTime"
label="End"
width="160"
/>
</el-table-column>
</el-table>
@ -173,20 +173,22 @@ export default {
this.getResource();
},
methods: {
getResource() {
getResource(currentInstance) {
// this.init = true;
if (this.planReportTemplate) {
this.instances = this.planReportTemplate.reportResource;
this.currentInstance = this.instances[0].ip + ":" + this.instances[0].port;
this.currentInstance = currentInstance || this.instances[0].ip + ":" + this.instances[0].port;
this.data = this.planReportTemplate.metricData;
this.totalOption = this.getOption(this.currentInstance);
} else if (this.isShare) {
getSharePerformanceMetricQueryResource(this.shareId, this.id).then(response => {
this.instances = response.data.data;
if (!this.currentInstance) {
this.currentInstance = this.instances[0].ip + ":" + this.instances[0].port;
this.handleChecked(this.currentInstance);
if (currentInstance) {
this.currentInstance = currentInstance;
} else {
this.currentInstance = this.currentInstance || this.instances[0].ip + ":" + this.instances[0].port;
}
this.handleChecked(this.currentInstance);
getSharePerformanceMetricQuery(this.shareId, this.id).then(result => {
if (result) {
this.data = result.data.data;
@ -198,10 +200,12 @@ export default {
} else {
getPerformanceMetricQueryResource(this.id).then(response => {
this.instances = response.data.data;
if (!this.currentInstance) {
this.currentInstance = this.instances[0].ip + ":" + this.instances[0].port;
this.handleChecked(this.currentInstance);
if (currentInstance) {
this.currentInstance = currentInstance;
} else {
this.currentInstance = this.currentInstance || this.instances[0].ip + ":" + this.instances[0].port;
}
this.handleChecked(this.currentInstance);
getPerformanceMetricQuery(this.id).then(result => {
if (result) {
this.data = result.data.data;
@ -219,10 +223,14 @@ export default {
if (curr.monitorConfig) {
this.checkList = [];
this.checkOptions = curr.monitorConfig.filter(mc => mc.value && mc.name)
.map(mc => {
this.checkList.push(mc.name);
return {key: mc.name, label: mc.name,};
});
.map(mc => {
this.checkList.push(mc.name);
return {key: mc.name, label: mc.name,};
});
if (this.checkList.length === 0) {
this.checkList = checkList;
this.checkOptions = checkOptions;
}
} else {
this.checkOptions = checkOptions;
this.checkList = checkList;