Merge remote-tracking branch 'origin/master'

This commit is contained in:
wenyann 2020-08-21 16:37:51 +08:00
commit 001e275a83
12 changed files with 51 additions and 22 deletions

View File

@ -14,6 +14,7 @@ import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RequestMapping("testresourcepool")
@ -56,5 +57,11 @@ public class TestResourcePoolController {
return testResourcePoolService.listValidResourcePools();
}
@GetMapping("list/quota/valid")
@RequiresRoles(value = {RoleConstants.TEST_MANAGER, RoleConstants.TEST_USER, RoleConstants.TEST_VIEWER}, logical = Logical.OR)
public List<TestResourcePool> listValidQuotaResourcePools() {
return testResourcePoolService.listValidQuotaResourcePools();
}
}

View File

@ -34,8 +34,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
@ -44,6 +42,8 @@ import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
@Service
@Transactional(rollbackFor = Exception.class)
public class PerformanceTestService {
@ -131,7 +131,7 @@ public class PerformanceTestService {
throw new IllegalArgumentException(Translator.get("file_cannot_be_null"));
}
checkQuota(request);
checkQuota(request, true);
final LoadTestWithBLOBs loadTest = saveLoadTest(request);
files.forEach(file -> {
@ -168,6 +168,7 @@ public class PerformanceTestService {
}
public String edit(EditTestPlanRequest request, List<MultipartFile> files) {
checkQuota(request, false);
//
LoadTestWithBLOBs loadTest = loadTestMapper.selectByPrimaryKey(request.getId());
if (loadTest == null) {
@ -363,7 +364,7 @@ public class PerformanceTestService {
}
public void copy(SaveTestPlanRequest request) {
checkQuota(request);
checkQuota(request, true);
// copy test
LoadTestWithBLOBs copy = loadTestMapper.selectByPrimaryKey(request.getId());
copy.setId(UUID.randomUUID().toString());
@ -441,10 +442,10 @@ public class PerformanceTestService {
return schedules;
}
private void checkQuota(SaveTestPlanRequest request) {
private void checkQuota(TestPlanRequest request, boolean create) {
QuotaService quotaService = CommonBeanFactory.getBean(QuotaService.class);
if (quotaService != null) {
quotaService.checkLoadTestQuota(request);
quotaService.checkLoadTestQuota(request, create);
}
}
}

View File

@ -1,10 +1,14 @@
package io.metersphere.service;
import io.metersphere.track.request.testplan.SaveTestPlanRequest;
import io.metersphere.track.request.testplan.TestPlanRequest;
import java.util.Set;
public interface QuotaService {
void checkAPITestQuota();
void checkLoadTestQuota(SaveTestPlanRequest request);
void checkLoadTestQuota(TestPlanRequest request, boolean checkPerformance);
Set<String> getQuotaResourcePools();
}

View File

@ -1,5 +1,8 @@
package io.metersphere.service;
import static io.metersphere.commons.constants.ResourceStatusEnum.INVALID;
import static io.metersphere.commons.constants.ResourceStatusEnum.VALID;
import com.alibaba.fastjson.JSON;
import io.metersphere.base.domain.*;
import io.metersphere.base.mapper.LoadTestMapper;
@ -7,6 +10,7 @@ import io.metersphere.base.mapper.TestResourceMapper;
import io.metersphere.base.mapper.TestResourcePoolMapper;
import io.metersphere.commons.constants.ResourceStatusEnum;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.utils.CommonBeanFactory;
import io.metersphere.commons.utils.LogUtil;
import io.metersphere.controller.request.resourcepool.QueryResourcePoolRequest;
import io.metersphere.dto.NodeDTO;
@ -21,15 +25,14 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import static io.metersphere.commons.constants.ResourceStatusEnum.INVALID;
import static io.metersphere.commons.constants.ResourceStatusEnum.VALID;
import javax.annotation.Resource;
/**
* @author dongbin
@ -243,4 +246,19 @@ public class TestResourcePoolService {
return testResourcePoolMapper.selectByExample(example);
}
public List<TestResourcePool> listValidQuotaResourcePools() {
return filterQuota(listValidResourcePools());
}
private List<TestResourcePool> filterQuota(List<TestResourcePool> list) {
QuotaService quotaService = CommonBeanFactory.getBean(QuotaService.class);
if (quotaService != null) {
Set<String> pools = quotaService.getQuotaResourcePools();
if (!pools.isEmpty()) {
return list.stream().filter(pool -> pools.contains(pool.getId())).collect(Collectors.toList());
}
}
return list;
}
}

@ -1 +1 @@
Subproject commit defbf12ffac99eef6a026b87491090f2263b769d
Subproject commit ecb30d83c575c6ed14adb1a1ebea389730f410a9

View File

@ -166,7 +166,7 @@
},
methods: {
getResourcePools() {
this.result = this.$get('/testresourcepool/list/all/valid', response => {
this.result = this.$get('/testresourcepool/list/quota/valid', response => {
this.resourcePools = response.data;
// null
if (response.data.filter(p => p.id === this.resourcePool).length === 0) {

View File

@ -208,7 +208,7 @@
<el-col :span="20" :offset="1" class="issues-edit">
<el-table border class="adjust-table" :data="issues" style="width: 100%">
<el-table-column prop="id" :label="$t('test_track.issue.id')" show-overflow-tooltip/>
<el-table-column prop="title" :label="$t('test_track.issue.title')"/>
<el-table-column prop="title" :label="$t('test_track.issue.title')" show-overflow-tooltip/>
<el-table-column prop="description" :label="$t('test_track.issue.description')">
<template v-slot:default="scope">
<el-popover
@ -218,9 +218,7 @@
>
<ckeditor :editor="editor" disabled
v-model="scope.row.description"/>
<!-- <span v-html="scope.row.description"/>-->
<!-- <span slot="reference">{{scope.row.description}}</span>-->
<el-button slot="reference" type="text">预览</el-button>
<el-button slot="reference" type="text">{{$t('test_track.issue.preview')}}</el-button>
</el-popover>
</template>
</el-table-column>

View File

@ -113,7 +113,7 @@
trigger="hover">
<el-table border class="adjust-table" :data="scope.row.issuesContent" style="width: 100%">
<!-- <el-table-column prop="id" label="缺陷ID" show-overflow-tooltip/>-->
<el-table-column prop="title" :label="$t('test_track.issue.title')"/>
<el-table-column prop="title" :label="$t('test_track.issue.title')" show-overflow-tooltip/>
<el-table-column prop="description" :label="$t('test_track.issue.description')">
<template v-slot:default="scope">
<el-popover
@ -123,9 +123,7 @@
>
<ckeditor :editor="editor" disabled
v-model="scope.row.description"/>
<!-- <span v-html="scope.row.description"/>-->
<!-- <span slot="reference">{{scope.row.description}}</span>-->
<el-button slot="reference" type="text">预览</el-button>
<el-button slot="reference" type="text">{{$t('test_track.issue.preview')}}</el-button>
</el-popover>
</template>
</el-table-column>

@ -1 +1 @@
Subproject commit 06fc0a321a9886419be5c607ddaa6b40efb5179b
Subproject commit 390943d21e7d0196e0d7d5faa66f0131cb631614

View File

@ -730,6 +730,7 @@ export default {
close: "Close",
title_description_required: "Title and description are required",
close_success: "Closed successfully",
preview: "Preview"
}
},
test_resource_pool: {

View File

@ -733,6 +733,7 @@ export default {
close: "关闭缺陷",
title_description_required: "标题和描述必填",
close_success: "关闭成功",
preview: "预览"
}
},
test_resource_pool: {

View File

@ -730,6 +730,7 @@ export default {
close: "關閉缺陷",
title_description_required: "標題和描述必填",
close_success: "關閉成功",
preview: "預覽"
}
},
test_resource_pool: {