springboot-OSHI

OSHI is a free JNA-based (native) Operating System and Hardware Information library for Java. It does not require the installation of any additional native libraries and aims to provide a cross-platform implementation to retrieve system information, such as OS version, processes, memory and CPU usage, disks and partitions, devices, sensors, etc.

https://github.com/oshi/oshi

springboot添加依赖

1、oshi依赖

 
                com.github.oshi
                oshi-core
                5.2.2
           

2020.08.05 最新版本为5.2.2 

springboot版本为2.1.0.RELEASE 

springboot-OSHI_第1张图片

···在springboot2.1.0.RELEASE 中默认JNA的版本是4.5.2,而我用的oshi版本是5.2.2
需要指定最新的


    net.java.dev.jna
    jna
    5.6.0


    net.java.dev.jna
    jna-platform
    5.6.0

 

测试代码:

public class ServerCollectController {

	
	protected Logger logger = LoggerFactory.getLogger(ServerCollectController.class);
	 static List oshi = new ArrayList<>();
	    @RequestMapping(value = "/test", method = RequestMethod.GET)
	    @ApiOperation("获取文件系统信息列表")
	    public ServiceResult test() {
	    	oshi.clear();
	    	 SystemInfo si = new SystemInfo();

	         HardwareAbstractionLayer hal = si.getHardware();
	         OperatingSystem os = si.getOperatingSystem();

	         printOperatingSystem(os);

	         logger.info("Checking computer system...");
	         printComputerSystem(hal.getComputerSystem());

	         logger.info("Checking Processor...");
	         printProcessor(hal.getProcessor());

	         logger.info("Checking Memory...");
	         printMemory(hal.getMemory());

	         logger.info("Checking CPU...");
	         printCpu(hal.getProcessor());

	         logger.info("Checking Processes...");
	         printProcesses(os, hal.getMemory());

	         logger.info("Checking Services...");
	         printServices(os);

	         logger.info("Checking Sensors...");
	         printSensors(hal.getSensors());

	         logger.info("Checking Power sources...");
	         printPowerSources(hal.getPowerSources());

	         logger.info("Checking Disks...");
	         printDisks(hal.getDiskStores());

	         logger.info("Checking File System...");
	         printFileSystem(os.getFileSystem());

	         logger.info("Checking Network interfaces...");
	         printNetworkInterfaces(hal.getNetworkIFs());

	         logger.info("Checking Network parameters...");
	         printNetworkParameters(os.getNetworkParams());

	         logger.info("Checking IP statistics...");
	         printInternetProtocolStats(os.getInternetProtocolStats());

	         logger.info("Checking Displays...");
	         printDisplays(hal.getDisplays());

	         logger.info("Checking USB Devices...");
	         printUsbDevices(hal.getUsbDevices(true));

	         logger.info("Checking Sound Cards...");
	         printSoundCards(hal.getSoundCards());

	         logger.info("Checking Graphics Cards...");
	         printGraphicsCards(hal.getGraphicsCards());

	         StringBuilder output = new StringBuilder();
	         for (int i = 0; i < oshi.size(); i++) {
	             output.append(oshi.get(i));
	             if (oshi.get(i) != null && !oshi.get(i).endsWith("\n")) {
	                 output.append('\n');
	             }
	         }
	         logger.info("Printing Operating System and Hardware Info:{}{}", '\n', output);		 
	    	return null;
	 }
	    
	    
	    
	    private static void printOperatingSystem(final OperatingSystem os) {
	        oshi.add(String.valueOf(os));
	        oshi.add("Booted: " + Instant.ofEpochSecond(os.getSystemBootTime()));
	        oshi.add("Uptime: " + FormatUtil.formatElapsedSecs(os.getSystemUptime()));
	        oshi.add("Running with" + (os.isElevated() ? "" : "out") + " elevated permissions.");
	        oshi.add("Sessions:");
	        for (OSSession s : os.getSessions()) {
	            oshi.add(" " + s.toString());
	        }
	    }

	    private static void printComputerSystem(final ComputerSystem computerSystem) {
	        oshi.add("System: " + computerSystem.toString());
	        oshi.add(" Firmware: " + computerSystem.getFirmware().toString());
	        oshi.add(" Baseboard: " + computerSystem.getBaseboard().toString());
	    }

	    private static void printProcessor(CentralProcessor processor) {
	        oshi.add(processor.toString());
	    }

	    private static void printMemory(GlobalMemory memory) {
	        oshi.add("Physical Memory: \n " + memory.toString());
	        VirtualMemory vm = memory.getVirtualMemory();
	        oshi.add("Virtual Memory: \n " + vm.toString());
	        List pmList = memory.getPhysicalMemory();
	        if (!pmList.isEmpty()) {
	            oshi.add("Physical Memory: ");
	            for (PhysicalMemory pm : pmList) {
	                oshi.add(" " + pm.toString());
	            }
	        }
	    }

	    private static void printCpu(CentralProcessor processor) {
	        oshi.add("Context Switches/Interrupts: " + processor.getContextSwitches() + " / " + processor.getInterrupts());

	        long[] prevTicks = processor.getSystemCpuLoadTicks();
	        long[][] prevProcTicks = processor.getProcessorCpuLoadTicks();
	        oshi.add("CPU, IOWait, and IRQ ticks @ 0 sec:" + Arrays.toString(prevTicks));
	        // Wait a second...
	        Util.sleep(1000);
	        long[] ticks = processor.getSystemCpuLoadTicks();
	        oshi.add("CPU, IOWait, and IRQ ticks @ 1 sec:" + Arrays.toString(ticks));
	        long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
	        long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
	        long sys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
	        long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
	        long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
	        long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
	        long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
	        long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
	        long totalCpu = user + nice + sys + idle + iowait + irq + softirq + steal;

	        oshi.add(String.format(
	                "User: %.1f%% Nice: %.1f%% System: %.1f%% Idle: %.1f%% IOwait: %.1f%% IRQ: %.1f%% SoftIRQ: %.1f%% Steal: %.1f%%",
	                100d * user / totalCpu, 100d * nice / totalCpu, 100d * sys / totalCpu, 100d * idle / totalCpu,
	                100d * iowait / totalCpu, 100d * irq / totalCpu, 100d * softirq / totalCpu, 100d * steal / totalCpu));
	        oshi.add(String.format("CPU load: %.1f%%", processor.getSystemCpuLoadBetweenTicks(prevTicks) * 100));
	        double[] loadAverage = processor.getSystemLoadAverage(3);
	        oshi.add("CPU load averages:" + (loadAverage[0] < 0 ? " N/A" : String.format(" %.2f", loadAverage[0]))
	                + (loadAverage[1] < 0 ? " N/A" : String.format(" %.2f", loadAverage[1]))
	                + (loadAverage[2] < 0 ? " N/A" : String.format(" %.2f", loadAverage[2])));
	        // per core CPU
	        StringBuilder procCpu = new StringBuilder("CPU load per processor:");
	        double[] load = processor.getProcessorCpuLoadBetweenTicks(prevProcTicks);
	        for (double avg : load) {
	            procCpu.append(String.format(" %.1f%%", avg * 100));
	        }
	        oshi.add(procCpu.toString());
	        long freq = processor.getProcessorIdentifier().getVendorFreq();
	        if (freq > 0) {
	            oshi.add("Vendor Frequency: " + FormatUtil.formatHertz(freq));
	        }
	        freq = processor.getMaxFreq();
	        if (freq > 0) {
	            oshi.add("Max Frequency: " + FormatUtil.formatHertz(freq));
	        }
	        long[] freqs = processor.getCurrentFreq();
	        if (freqs[0] > 0) {
	            StringBuilder sb = new StringBuilder("Current Frequencies: ");
	            for (int i = 0; i < freqs.length; i++) {
	                if (i > 0) {
	                    sb.append(", ");
	                }
	                sb.append(FormatUtil.formatHertz(freqs[i]));
	            }
	            oshi.add(sb.toString());
	        }
	    }

	    private static void printProcesses(OperatingSystem os, GlobalMemory memory) {
	        OSProcess myProc = os.getProcess(os.getProcessId());
	        oshi.add(
	                "My PID: " + myProc.getProcessID() + " with affinity " + Long.toBinaryString(myProc.getAffinityMask()));
	        oshi.add("Processes: " + os.getProcessCount() + ", Threads: " + os.getThreadCount());
	        // Sort by highest CPU
	        List procs = os.getProcesses(5, ProcessSort.CPU);
	        oshi.add("   PID  %CPU %MEM       VSZ       RSS Name");
	        for (int i = 0; i < procs.size() && i < 5; i++) {
	            OSProcess p = procs.get(i);
	            oshi.add(String.format(" %5d %5.1f %4.1f %9s %9s %s", p.getProcessID(),
	                    100d * (p.getKernelTime() + p.getUserTime()) / p.getUpTime(),
	                    100d * p.getResidentSetSize() / memory.getTotal(), FormatUtil.formatBytes(p.getVirtualSize()),
	                    FormatUtil.formatBytes(p.getResidentSetSize()), p.getName()));
	        }
	    }

	    private static void printServices(OperatingSystem os) {
	        oshi.add("Services: ");
	        oshi.add("   PID   State   Name");
	        // DO 5 each of running and stopped
	        int i = 0;
	        for (OSService s : os.getServices()) {
	            if (s.getState().equals(OSService.State.RUNNING) && i++ < 5) {
	                oshi.add(String.format(" %5d  %7s  %s", s.getProcessID(), s.getState(), s.getName()));
	            }
	        }
	        i = 0;
	        for (OSService s : os.getServices()) {
	            if (s.getState().equals(OSService.State.STOPPED) && i++ < 5) {
	                oshi.add(String.format(" %5d  %7s  %s", s.getProcessID(), s.getState(), s.getName()));
	            }
	        }
	    }

	    private static void printSensors(Sensors sensors) {
	        oshi.add("Sensors: " + sensors.toString());
	    }

	    private static void printPowerSources(List list) {
	        StringBuilder sb = new StringBuilder("Power Sources: ");
	        if (list.isEmpty()) {
	            sb.append("Unknown");
	        }
	        for (PowerSource powerSource : list) {
	            sb.append("\n ").append(powerSource.toString());
	        }
	        oshi.add(sb.toString());
	    }

	    private static void printDisks(List list) {
	        oshi.add("Disks:");
	        for (HWDiskStore disk : list) {
	            oshi.add(" " + disk.toString());

	            List partitions = disk.getPartitions();
	            for (HWPartition part : partitions) {
	                oshi.add(" |-- " + part.toString());
	            }
	        }

	    }

	    private static void printFileSystem(FileSystem fileSystem) {
	        oshi.add("File System:");

	        oshi.add(String.format(" File Descriptors: %d/%d", fileSystem.getOpenFileDescriptors(),
	                fileSystem.getMaxFileDescriptors()));

	        for (OSFileStore fs : fileSystem.getFileStores()) {
	            long usable = fs.getUsableSpace();
	            long total = fs.getTotalSpace();
	            oshi.add(String.format(
	                    " %s (%s) [%s] %s of %s free (%.1f%%), %s of %s files free (%.1f%%) is %s "
	                            + (fs.getLogicalVolume() != null && fs.getLogicalVolume().length() > 0 ? "[%s]" : "%s")
	                            + " and is mounted at %s",
	                    fs.getName(), fs.getDescription().isEmpty() ? "file system" : fs.getDescription(), fs.getType(),
	                    FormatUtil.formatBytes(usable), FormatUtil.formatBytes(fs.getTotalSpace()), 100d * usable / total,
	                    FormatUtil.formatValue(fs.getFreeInodes(), ""), FormatUtil.formatValue(fs.getTotalInodes(), ""),
	                    100d * fs.getFreeInodes() / fs.getTotalInodes(), fs.getVolume(), fs.getLogicalVolume(),
	                    fs.getMount()));
	        }
	    }

	    private static void printNetworkInterfaces(List list) {
	        StringBuilder sb = new StringBuilder("Network Interfaces:");
	        if (list.isEmpty()) {
	            sb.append(" Unknown");
	        } else {
	            for (NetworkIF net : list) {
	                sb.append("\n ").append(net.toString());
	            }
	        }
	        oshi.add(sb.toString());
	    }

	    private static void printNetworkParameters(NetworkParams networkParams) {
	        oshi.add("Network parameters:\n " + networkParams.toString());
	    }

	    private static void printInternetProtocolStats(InternetProtocolStats ip) {
	        oshi.add("Internet Protocol statistics:");
	        oshi.add(" TCPv4: " + ip.getTCPv4Stats());
	        oshi.add(" TCPv6: " + ip.getTCPv6Stats());
	        oshi.add(" UDPv4: " + ip.getUDPv4Stats());
	        oshi.add(" UDPv6: " + ip.getUDPv6Stats());
	    }

	    private static void printDisplays(List list) {
	        oshi.add("Displays:");
	        int i = 0;
	        for (Display display : list) {
	            oshi.add(" Display " + i + ":");
	            oshi.add(String.valueOf(display));
	            i++;
	        }
	    }

	    private static void printUsbDevices(List list) {
	        oshi.add("USB Devices:");
	        for (UsbDevice usbDevice : list) {
	            oshi.add(String.valueOf(usbDevice));
	        }
	    }

	    private static void printSoundCards(List list) {
	        oshi.add("Sound Cards:");
	        for (SoundCard card : list) {
	            oshi.add(" " + String.valueOf(card));
	        }
	    }

	    private static void printGraphicsCards(List list) {
	        oshi.add("Graphics Cards:");
	        if (list.isEmpty()) {
	            oshi.add(" None detected.");
	        } else {
	            for (GraphicsCard card : list) {
	                oshi.add(" " + String.valueOf(card));
	            }
	        }
	    }
	    

}

 

 


    cn.hutool
    hutool-all
    5.3.10
 

对oshi的进一步封装。https://www.hutool.cn/   该版本oshi为5.2.0

 

https://ruoyi.vip/ 开源地址

你可能感兴趣的:(springboot-OSHI)