一、代码
1.1 MssMachineHardwareService
import cn.hutool.core.util.IdUtil;
import cn.hutool.system.OsInfo;
import cn.hutool.system.SystemUtil;
import cn.hutool.system.oshi.CpuInfo;
import cn.hutool.system.oshi.OshiUtil;
import com.akl.mss.dockAgent.common.utils.basic.StringUtils;
import com.akl.mss.dockAgent.common.utils.thread.pool.ThreadPoolAgent;
import com.akl.mss.dockAgent.mss.constant.MqttSendMethodConstant;
import com.akl.mss.dockAgent.mss.mqtt.MqttGateWay;
import com.akl.mss.dockAgent.mss.mqtt.model.MachineHardware;
import com.akl.mss.dockAgent.mss.service.MssMachineHardwareService;
import com.akl.mss.dockAgent.redis.QuickAccess;
import com.akl.mss.dockAgent.support.service.AgentMachineService;
import com.akl.mss.dockAgent.util.StringUtil;
import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import oshi.hardware.GlobalMemory;
import javax.annotation.Resource;
import java.io.File;
@Slf4j
@Service
public class MssMachineHardwareService{
public MachineHardware hardware() {
MachineHardware hardwareInfo = new MachineHardware();
hardwareInfo.setDockAgentSn(quickAccess.getDockAgentSn());
//系统信息
this.packOsInfo(hardwareInfo);
//CPU信息
this.packCpuInfo(hardwareInfo);
//内存信息
this.packRamInfo(hardwareInfo);
this.packHardwareInfo(hardwareInfo);
return hardwareInfo;
}
/**
* 系统信息
*
* @param hardwareInfo
*/
private void packOsInfo(MachineHardware hardwareInfo) {
try {
OsInfo osInfo = SystemUtil.getOsInfo();
if (osInfo != null) {
hardwareInfo.setOsSystem(osInfo.getName());
}
} catch (Exception e) {
log.error("MssMachineHardwareServiceImpl.packOsInfo error={}", e.getMessage());
}
}
/**
* CPU信息
*
* @param hardwareInfo
*/
private void packCpuInfo(MachineHardware hardwareInfo) {
try {
CpuInfo cpuInfo = OshiUtil.getCpuInfo();
if (cpuInfo != null) {
if (StringUtils.isNotNullOrBlank(cpuInfo.getCpuModel())) {
String cupModel = cpuInfo.getCpuModel().split("\\n")[0];
cupModel = cupModel.replaceAll("\\u0000","");
hardwareInfo.setCupModel(cupModel);
}
hardwareInfo.setCupUsed(cpuInfo.getUsed());
}
} catch (Exception e) {
log.error("MssMachineHardwareServiceImpl.packCpuInfo error={}", e.getMessage());
}
}
/**
* 内存信息
*
* @param hardwareInfo
*/
private void packRamInfo(MachineHardware hardwareInfo) {
try {
GlobalMemory globalMemory = OshiUtil.getMemory();
if (globalMemory != null) {
long totalMemory = globalMemory.getTotal();
// 将总内存大小转换为 GB
double totalMemoryGB = totalMemory / (double) (1024 * 1024 * 1024);
double ramTotal = (int) totalMemoryGB;
hardwareInfo.setRamTotal(ramTotal);
// 获取当前内存使用率
double memoryUsage = 1 - (double) globalMemory.getAvailable() / globalMemory.getTotal();
double ramUsed = (int) (memoryUsage * 100);
hardwareInfo.setRamUsed(ramUsed);
}
} catch (Exception e) {
log.error("MssMachineHardwareServiceImpl.packRamInfo error={}", e.getMessage());
}
}
/**
* 硬盘信息
*
* @param hardwareInfo
*/
private void packHardwareInfo(MachineHardware hardwareInfo) {
try {
File[] roots = File.listRoots();
double hardwareTotal = 0;
double hardwareAvailable = 0;
for (File root : roots) {
long totalSpace = root.getTotalSpace();
long freeSpace = root.getFreeSpace();
double totalSpaceG = totalSpace / (double) (1024 * 1024 * 1024);
double freeSpaceG = freeSpace / (double) (1024 * 1024 * 1024);
hardwareTotal = hardwareTotal + totalSpaceG;
hardwareAvailable = hardwareAvailable + freeSpaceG;
}
hardwareTotal = (int) hardwareTotal;
hardwareAvailable = (int) hardwareAvailable;
hardwareInfo.setHardwareTotal(hardwareTotal);
hardwareInfo.setHardwareAvailable(hardwareAvailable);
} catch (Exception e) {
log.error("MssMachineHardwareServiceImpl.packHardwareInfo error={}", e.getMessage());
}
}
}
1.2 MachineHardware
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MachineHardware {
private String dockAgentSn;
private String osSystem; //操作系统
private String cupModel; //CUP型号
private double cupUsed; //CUP使用率
private double ramTotal; //总内存
private double ramUsed; //内存使用率
private double hardwareTotal;// 硬盘总容量(单位G)
private double hardwareAvailable;//剩余硬盘容量(单位G)
}