|
@ -5,11 +5,14 @@ import cn.hutool.core.util.ObjectUtil; |
|
|
import cn.hutool.core.util.StrUtil; |
|
|
import cn.hutool.core.util.StrUtil; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
|
|
|
import com.inscloudtech.common.constant.CacheConstants; |
|
|
|
|
|
import com.inscloudtech.common.constant.CacheNames; |
|
|
import com.inscloudtech.common.exception.ServiceException; |
|
|
import com.inscloudtech.common.exception.ServiceException; |
|
|
import com.inscloudtech.common.helper.LoginHelper; |
|
|
import com.inscloudtech.common.helper.LoginHelper; |
|
|
import com.inscloudtech.common.utils.file.FileUploadUtils; |
|
|
import com.inscloudtech.common.utils.file.FileUploadUtils; |
|
|
import com.inscloudtech.functional.domain.CpuInfo; |
|
|
import com.inscloudtech.functional.domain.CpuInfo; |
|
|
import com.inscloudtech.functional.domain.TestReport; |
|
|
import com.inscloudtech.functional.domain.TestReport; |
|
|
|
|
|
import com.inscloudtech.functional.domain.vo.TestReportVo; |
|
|
import com.inscloudtech.functional.mapper.CpuInfoMapper; |
|
|
import com.inscloudtech.functional.mapper.CpuInfoMapper; |
|
|
import com.inscloudtech.functional.mapper.TestReportMapper; |
|
|
import com.inscloudtech.functional.mapper.TestReportMapper; |
|
|
import com.inscloudtech.functional.service.CpuInfoService; |
|
|
import com.inscloudtech.functional.service.CpuInfoService; |
|
@ -17,6 +20,11 @@ import com.inscloudtech.functional.service.TestReportService; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
|
import java.util.HashMap; |
|
|
|
|
|
import java.util.List; |
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* |
|
|
* |
|
|
* @author zfcf |
|
|
* @author zfcf |
|
@ -25,6 +33,15 @@ import org.springframework.web.multipart.MultipartFile; |
|
|
@Service |
|
|
@Service |
|
|
public class TestReportServiceImpl extends ServiceImpl<TestReportMapper, TestReport> implements TestReportService { |
|
|
public class TestReportServiceImpl extends ServiceImpl<TestReportMapper, TestReport> implements TestReportService { |
|
|
|
|
|
|
|
|
|
|
|
private final static Map<String,String> REPORT_OPTION = new HashMap(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String[] apiErrorRate = {"char", "varchar", "nvarchar", "varchar2"}; |
|
|
|
|
|
|
|
|
|
|
|
static { |
|
|
|
|
|
// REPORT_OPTION.put() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void check(String reportName) { |
|
|
public void check(String reportName) { |
|
|
TestReport dbObj = baseMapper.selectOne(new LambdaQueryWrapper<TestReport>().eq(TestReport::getReportName, reportName).eq(TestReport::getCreateBy, LoginHelper.getUserId())); |
|
|
TestReport dbObj = baseMapper.selectOne(new LambdaQueryWrapper<TestReport>().eq(TestReport::getReportName, reportName).eq(TestReport::getCreateBy, LoginHelper.getUserId())); |
|
@ -33,4 +50,198 @@ public class TestReportServiceImpl extends ServiceImpl<TestReportMapper, TestRep |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 框架稳定性-jmeter-聚合报告-错误率 |
|
|
|
|
|
* 通常,错误率低于1%可能被认为是较好的性能,错误率在1%-5%之间可能需要进一步调查和优化, |
|
|
|
|
|
* 而错误率超过5%可能需要立即解决。重要的是要根据具体的业务场景和性能目标来评估错误率是否可接受。 |
|
|
|
|
|
*/ |
|
|
|
|
|
String getApiErrorRateResult(String apiErrorRate){ |
|
|
|
|
|
String result = ""; |
|
|
|
|
|
switch (apiErrorRate){ |
|
|
|
|
|
case "0"://错误率低于1% |
|
|
|
|
|
result = "较好"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "1"://错误率低于1%-5% |
|
|
|
|
|
result = "需优化"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "2"://错误率超过5% |
|
|
|
|
|
result = "需立即解决"; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* cpu性能-gips |
|
|
|
|
|
* 并且得到了每秒100,000次的性能,这可能意味着CPU在单核性能上表现良好。如果多核性能达到了每秒1,000,000次, |
|
|
|
|
|
* 这可能表明CPU在多线程应用中具有很好的性能。 |
|
|
|
|
|
*/ |
|
|
|
|
|
String getCpuResultXn(String apiErrorRate){ |
|
|
|
|
|
String result = ""; |
|
|
|
|
|
switch (apiErrorRate){ |
|
|
|
|
|
case "0"://多核性能达到了每秒1,000,000次 |
|
|
|
|
|
result = "优秀"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "1"://每秒100,000次的性能 |
|
|
|
|
|
result = "良好"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "2"://小于每秒100,000次的性能 |
|
|
|
|
|
result = "差"; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* cpu温度 |
|
|
|
|
|
然而,可以提供一些一般性的指导原则。对于台式机CPU,通常认为在空载或轻负载条件下,CPU温度保持在40°C到60°C之间是理想的。在重负载条件下,CPU温度上升至60°C到80°C可能是可以接受的,但长时间运行在高温度下可能会影响CPU的寿命和性能。 |
|
|
|
|
|
对于笔记本电脑CPU,由于空间限制和散热挑战,温度通常会较高。在空载或轻负载条件下,CPU温度在50°C到70°C之间可能是常见的,而在重负载条件下,温度可能会上升至70°C到90°C。一些高性能的笔记本电脑可能会采用更先进的散热技术,使得CPU在重负载下的温度保持在80°C以下。 |
|
|
|
|
|
*/ |
|
|
|
|
|
String getCpuResultTemperature(String temperature){ |
|
|
|
|
|
String result = ""; |
|
|
|
|
|
switch (temperature){ |
|
|
|
|
|
case "0"://40°C到60°C |
|
|
|
|
|
result = "理想"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "1"://60°C到80°C |
|
|
|
|
|
result = "可以接受,但长时间运行在高温度下可能会影响CPU的寿命和性能"; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 内存的大小对于计算机的性能有着重要影响,不同的使用场景和需求会导致对内存大小的不同要求。以下是一些关于内存大小优化的通用指南: |
|
|
|
|
|
* |
|
|
|
|
|
* 日常办公和多任务处理:对于大多数日常办公任务和多任务处理,8GB内存已经可以提供良好的性能。如果使用较为复杂的数据处理软件或者同时运行多个应用程序,16GB内存可能更为合适。 |
|
|
|
|
|
* |
|
|
|
|
|
* 图形设计和视频编辑:这类工作通常需要较大的内存来处理大量的数据和图形。32GB内存可能是一个更好的选择,以确保流畅的性能。 |
|
|
|
|
|
* |
|
|
|
|
|
* 科学计算和大数据分析:这些领域通常需要大量的内存来处理复杂的数据集和计算。64GB或更大的内存可能是必要的。 |
|
|
|
|
|
* |
|
|
|
|
|
* 游戏:现代游戏对内存的需求也在不断提高,特别是那些需要大量图形渲染和复杂场景的游戏。一般而言,16GB内存可以满足大多数游戏的需求,但一些大型游戏或高分辨率模组可能需要32GB或更多。 |
|
|
|
|
|
* |
|
|
|
|
|
* 服务器和虚拟化:服务器和虚拟化环境通常需要更多的内存来支持多个并发任务和虚拟机的运行。至少32GB内存是常见的起点,而高端服务器可能会有数百GB甚至更多。 |
|
|
|
|
|
* |
|
|
|
|
|
* 嵌入式设备和移动设备:这些设备通常有较小的内存容量,因为它们需要更小的体积和更高的能效。例如,智能手机和平板电脑可能会有4GB或8GB内存。 |
|
|
|
|
|
* |
|
|
|
|
|
* 总的来说,内存的大小应该根据您的具体需求和使用场景来决定。更大的内存可以提供更流畅的多任务处理能力和更好的性能,但也会增加成本和能耗。因此,优化内存大小需要在性能、成本和能效之间找到平衡。 |
|
|
|
|
|
*/ |
|
|
|
|
|
String getMemorySizeResult(String temperature){ |
|
|
|
|
|
String result = ""; |
|
|
|
|
|
switch (temperature){ |
|
|
|
|
|
case "0"://8GB~16GB |
|
|
|
|
|
result = "对于大多数日常办公任务和多任务处理,8GB内存已经可以提供良好的性能。"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "1"://32G |
|
|
|
|
|
result = "这类工作通常需要较大的内存来处理大量的数据和图形。32GB内存可能是一个更好的选择,以确保流畅的性能。"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "2"://32G |
|
|
|
|
|
result = "这些领域通常需要大量的内存来处理复杂的数据集和计算。64GB或更大的内存可能是必要的。"; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 硬盘的读写速度是衡量其性能的重要指标之一。不同的使用场景对硬盘速度的需求不同。以下是一些关于硬盘读写速度优化的通用指南: |
|
|
|
|
|
* 1. **日常办公和互联网应用**:对于大多数日常办公任务和互联网应用,如网页浏览、文档编辑、轻量级多媒体使用等,硬盘的读写速度通常在50MB/s到150MB/s之间可能已经足够满足需求。 |
|
|
|
|
|
* 2. **照片和视频编辑**:对于需要处理较大文件的照片和视频编辑工作,较快的硬盘速度(例如,读写速度在200MB/s到300MB/s之间)可以提供更流畅的体验,因为它们可以更快地访问和保存大型文件。 |
|
|
|
|
|
* 3. **游戏**:现代游戏可能会受益于更高的硬盘读写速度,特别是在加载游戏世界、纹理和模组时。读写速度在300MB/s到500MB/s之间的硬盘可以提供更快的游戏体验。 |
|
|
|
|
|
* 4. **服务器和数据中心**:服务器和数据中心通常需要更高的硬盘读写速度来处理大量的并发请求和数据传输。读写速度在500MB/s到1000MB/s或更高的硬盘可能更为合适。 |
|
|
|
|
|
* 5. **固态硬盘(SSD)**:固态硬盘的读写速度通常远高于机械硬盘。对于SSD,读写速度在500MB/s到2000MB/s之间通常被认为是优秀的,而顶级的SSD甚至可以提供超过3000MB/s的读写速度。 |
|
|
|
|
|
* 6. **混合硬盘(SSHD)**:混合硬盘结合了固态硬盘和机械硬盘的优势。它们通常有一个较快的固态部分用于频繁访问的数据,而较大的机械部分用于存储容量。对于混合硬盘,固态部分的读写速度在100MB/s到500MB/s之间可能是一个合理的期望。 |
|
|
|
|
|
* 需要注意的是,硬盘的实际性能不仅取决于其标称的读写速度,还受到其他因素的影响,如接口类型(如SATA III、NVMe over PCIe)、硬盘控制器、主机控制器接口(HCI)速度、队列深度(QD)和系统总线带宽等。此外,硬盘的持续读写速度和随机读写速度(IOPS)也是衡量其性能的重要指标。 |
|
|
|
|
|
* 在选择硬盘时,应该根据您的具体需求和使用场景来考虑所需的读写速度。对于大多数消费者和企业用户,中等速度的硬盘(如500MB/s到1000MB/s)通常可以提供良好的性能。对于需要处理大量高速数据的专业用户和数据中心,可能需要更高速度的硬盘。 |
|
|
|
|
|
* @param temperature |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
String getDiskReadAndWriteSpeedResult(String temperature){ |
|
|
|
|
|
String result = ""; |
|
|
|
|
|
switch (temperature){ |
|
|
|
|
|
case "0"://8GB~16GB |
|
|
|
|
|
result = "对于大多数日常办公任务和多任务处理,8GB内存已经可以提供良好的性能。"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "1"://32G |
|
|
|
|
|
result = "这类工作通常需要较大的内存来处理大量的数据和图形。32GB内存可能是一个更好的选择,以确保流畅的性能。"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "2"://32G |
|
|
|
|
|
result = "这些领域通常需要大量的内存来处理复杂的数据集和计算。64GB或更大的内存可能是必要的。"; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 网络速度的优劣取决于多种因素,包括用户的需求、网络技术、网络拥堵程度、服务提供商的服务质量等。以下是一些关于网络速度优化的通用指南: |
|
|
|
|
|
* 1. **家庭和小型企业网络**:对于家庭和小型企业用户,网络速度通常在10Mbps到100Mbps之间被认为是较好的。这可以满足大多数日常使用需求,包括网页浏览、视频流媒体播放、在线游戏和远程工作。 |
|
|
|
|
|
* 2. **中等企业网络**:对于中型企业,网络速度可能在100Mbps到1000Mbps(或更高)之间被认为是优的。这样的速度可以支持更多的用户同时连接,以及更高速度的数据传输和应用程序运行。 |
|
|
|
|
|
* 3. **大型企业和数据中心**:对于大型企业和服务提供商,网络速度可能需要达到1Gbps(千兆每秒)或更高。这样可以满足大量用户的高并发需求,以及支持高速的数据中心服务和高性能计算。 |
|
|
|
|
|
* 4. **互联网服务提供商(ISP)**:互联网服务提供商提供的网络速度可以从几十Mbps到几个Gbps不等。这些速度取决于ISP的基础设施和技术能力。 |
|
|
|
|
|
* 5. **移动网络**:移动网络的速度因运营商、地区和网络技术(如4G、5G)而异。一般来说,4G网络的速度在10Mbps到100Mbps之间,而5G网络则可以提供更高的速度,有时可以达到1Gbps以上。 |
|
|
|
|
|
* 需要注意的是,网络速度不仅仅是一个简单的数字,实际的用户体验还受到网络延迟(Latency)、丢包率(Packet Loss)和网络拥塞(Network Congestion)等因素的影响。因此,即使网络速度很快,如果延迟高或丢包率严重,用户体验也可能不佳。 |
|
|
|
|
|
* 此外,网络速度也受到用户所在位置和服务提供商覆盖范围的限制。在选择网络服务时,应该考虑这些因素,并选择最适合自己需求的网络计划。 |
|
|
|
|
|
* @param temperature |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
String getNetSpeedResult(String temperature){ |
|
|
|
|
|
String result = ""; |
|
|
|
|
|
switch (temperature){ |
|
|
|
|
|
case "0"://8GB~16GB |
|
|
|
|
|
result = "对于大多数日常办公任务和多任务处理,8GB内存已经可以提供良好的性能。"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "1"://32G |
|
|
|
|
|
result = "这类工作通常需要较大的内存来处理大量的数据和图形。32GB内存可能是一个更好的选择,以确保流畅的性能。"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "2"://32G |
|
|
|
|
|
result = "这些领域通常需要大量的内存来处理复杂的数据集和计算。64GB或更大的内存可能是必要的。"; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* OWASP ZAP(Zed Attack Proxy)扫描出多少高严重性(High Severity)漏洞算优秀并没有一个固定的标准,因为这取决于多种因素,包括应用程序的复杂性、攻击面、安全措施的实施情况以及扫描的全面性。然而,可以提供一些一般性的指导原则来评估ZAP扫描结果的质量。 |
|
|
|
|
|
* 1. **漏洞密度**:一个应用程序发现的漏洞数量(尤其是高严重性漏洞的数量)可以作为其安全状况的一个指标。通常,发现的漏洞越少,尤其是在高严重性类别中,可能表明应用程序的安全性越好。 |
|
|
|
|
|
* 2. **漏洞修复**:ZAP提供了每个漏洞的修复建议。如果ZAP能够提供有效的修复建议,并且这些建议能够被应用开发者或安全团队采纳并修复,那么这本身就是扫描结果的一个优势。 |
|
|
|
|
|
* 3. **合规性和标准**:如果应用程序需要遵守特定的安全标准或法规(如PCI DSS、GDPR等),那么扫描结果应该符合这些要求。高严重性漏洞的数量在这种情况下可能是一个关键指标。 |
|
|
|
|
|
* 4. **扫描策略**:ZAP提供了多种扫描策略,包括快速扫描、全面扫描等。扫描的策略和设置也会影响发现的漏洞数量。一个全面的扫描可能会发现更多的漏洞。 |
|
|
|
|
|
* 5. **应用的性质**:不同的应用程序有不同的安全需求。例如,一个面向公众的电子商务网站可能需要更高的安全性,而一个内部使用的简单应用可能安全性要求较低。 |
|
|
|
|
|
* 综合考虑以上因素,通常认为如果在一次ZAP扫描中高严重性漏洞的数量少于5个,且这些漏洞都能被迅速修复,那么可以认为扫描结果是优秀的。如果高严重性漏洞的数量超过10个,那么可能需要进一步的深入分析和改进应用程序的安全措施。 |
|
|
|
|
|
* 重要的是,应该将扫描结果视为一个持续改进的过程的一部分,而不是仅仅关注漏洞的数量。即使是发现了高严重性漏洞,只要能够及时修复并从中学习,提高未来的安全性,那么这个过程就是成功的。 |
|
|
|
|
|
* @param temperature |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
String getFlawCountResult(String temperature){ |
|
|
|
|
|
String result = ""; |
|
|
|
|
|
switch (temperature){ |
|
|
|
|
|
case "0"://8GB~16GB |
|
|
|
|
|
result = "对于大多数日常办公任务和多任务处理,8GB内存已经可以提供良好的性能。"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "1"://32G |
|
|
|
|
|
result = "这类工作通常需要较大的内存来处理大量的数据和图形。32GB内存可能是一个更好的选择,以确保流畅的性能。"; |
|
|
|
|
|
break; |
|
|
|
|
|
case "2"://32G |
|
|
|
|
|
result = "这些领域通常需要大量的内存来处理复杂的数据集和计算。64GB或更大的内存可能是必要的。"; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void add(TestReportVo vo) { |
|
|
|
|
|
getApiErrorRateResult(vo.getApiErrorRate()); |
|
|
|
|
|
getCpuResultXn(vo.getGips()); |
|
|
|
|
|
getCpuResultTemperature(vo.getTemperature()); |
|
|
|
|
|
getMemorySizeResult(vo.getMemorySize()); |
|
|
|
|
|
getDiskReadAndWriteSpeedResult(vo.getDiskReadAndWriteSpeed()); |
|
|
|
|
|
getNetSpeedResult(vo.getNetSpeed()); |
|
|
|
|
|
getFlawCountResult(vo.getFlawCount()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |