diff --git a/eladmin-monitor/README.md b/eladmin-monitor/README.md index 1e2b3087..b646a2f6 100644 --- a/eladmin-monitor/README.md +++ b/eladmin-monitor/README.md @@ -25,8 +25,6 @@ | 码云 | https://gitee.com/elunez/eladmin | https://gitee.com/elunez/eladmin-qt | #### 使用说明 -- Window服务器:请将eladmin\eladmin-monitor\src\main\resources目录下的sigar-x86-winnt.dll或者sigar-amd64-winnt.dll 放到C:\Windows\System32或者java的bin目录下 -- Linux服务器:请将eladmin\eladmin-monitor\src\main\resources目录下的libsigar-x86-linux.so或者libsigar-amd64-linux.so 放到/usr/lib或者java的bin目录下 - 将打包好的eladmin-monitor-2.2.jar 放到服务器上,执行 nohup java -jar eladmin-monitor-2.2.jar & 即可 #### 项目捐赠 diff --git a/eladmin-monitor/pom.xml b/eladmin-monitor/pom.xml index 3620af3d..8e57dd82 100644 --- a/eladmin-monitor/pom.xml +++ b/eladmin-monitor/pom.xml @@ -19,6 +19,8 @@ UTF-8 + + 5.5.0 @@ -26,11 +28,11 @@ org.springframework.boot spring-boot-starter-web - + - org.hyperic - sigar - 1.6.5.132 + com.github.oshi + oshi-core + 4.4.2 junit @@ -73,9 +75,6 @@ true src/main/resources - - sigar-lib/** - diff --git a/eladmin-monitor/src/main/java/me/zhengjie/res/ServerMonitorController.java b/eladmin-monitor/src/main/java/me/zhengjie/res/ServerMonitorController.java index db355873..fe1b927d 100644 --- a/eladmin-monitor/src/main/java/me/zhengjie/res/ServerMonitorController.java +++ b/eladmin-monitor/src/main/java/me/zhengjie/res/ServerMonitorController.java @@ -1,17 +1,23 @@ package me.zhengjie.res; -import org.hyperic.sigar.CpuInfo; -import org.hyperic.sigar.FileSystem; -import org.hyperic.sigar.FileSystemUsage; -import org.hyperic.sigar.Sigar; + import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import oshi.SystemInfo; +import oshi.hardware.CentralProcessor; +import oshi.hardware.GlobalMemory; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.hardware.VirtualMemory; +import oshi.software.os.OSFileStore; +import oshi.software.os.OperatingSystem; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; /** * @author Zhang houying @@ -21,41 +27,42 @@ import java.util.Map; @RequestMapping("/api/serverMonitor") public class ServerMonitorController { - private Sigar sigar = new Sigar(); - private static final double GB = 1024*1024*1024.00; - @GetMapping - public ResponseEntity getServerInfo(){ - Map resultMap = new HashMap<>(8); - try { - CpuInfo[] infoList = sigar.getCpuInfoList(); - resultMap.put("cpuRate",sigar.getCpuPerc().getCombined()); - resultMap.put("cpuCore",infoList.length); - resultMap.put("memTotal",sigar.getMem().getTotal()/GB); - resultMap.put("memUsed",sigar.getMem().getUsed()/GB); - FileSystem[] fsArray = sigar.getFileSystemList(); - double diskTotal = 0; - double diskUsed = 0; - for (FileSystem fileSystem : fsArray) { - try { - FileSystemUsage usage = null; - usage = sigar.getFileSystemUsage(fileSystem.getDirName()); - // 本地硬盘 - if (fileSystem.getType() == 2) { - diskTotal += usage.getTotal() / GB * 1024; - diskUsed += usage.getUsed() / GB * 1024; - } - } catch (Exception ignored) { - } - } - resultMap.put("diskTotal",diskTotal); - resultMap.put("diskUsed",diskUsed); - resultMap.put("swapTotal",sigar.getSwap().getTotal()/GB); - resultMap.put("swapUsed",sigar.getSwap().getUsed()/GB); - } catch (Exception e) { - e.printStackTrace(); - } - return new ResponseEntity<>(resultMap, HttpStatus.OK); + private static final double GB = 1024 * 1024 * 1024.00; + + @GetMapping + public ResponseEntity getServerInfo() { + Map resultMap = new HashMap<>(8); + try { + SystemInfo si = new SystemInfo(); + HardwareAbstractionLayer hal = si.getHardware(); + CentralProcessor processor = hal.getProcessor(); + long[] prevTicks = processor.getSystemCpuLoadTicks(); + TimeUnit.SECONDS.sleep(1); + resultMap.put("cpuRate", processor.getSystemCpuLoadBetweenTicks(prevTicks)); + resultMap.put("cpuCore", processor.getLogicalProcessorCount()); + GlobalMemory memory = hal.getMemory(); + resultMap.put("memTotal", memory.getTotal() / GB); + resultMap.put("memUsed", (memory.getTotal() - memory.getAvailable()) / GB); + double diskTotal = 0; + double diskUsable = 0; + OperatingSystem os = si.getOperatingSystem(); + OSFileStore[] fsArray = os.getFileSystem().getFileStores(); + for (OSFileStore fs : fsArray) { + long usable = fs.getUsableSpace(); + long total = fs.getTotalSpace(); + diskTotal += total / GB; + diskUsable += usable / GB; + } + resultMap.put("diskTotal", diskTotal); + resultMap.put("diskUsed", diskTotal - diskUsable); + VirtualMemory vm = memory.getVirtualMemory(); + resultMap.put("swapTotal", vm.getSwapTotal() / GB); + resultMap.put("swapUsed", vm.getSwapUsed() / GB); + } catch (Exception e) { + e.printStackTrace(); + } + return new ResponseEntity<>(resultMap, HttpStatus.OK); } } diff --git a/eladmin-monitor/src/main/java/me/zhengjie/utils/SigarUtil.java b/eladmin-monitor/src/main/java/me/zhengjie/utils/SigarUtil.java deleted file mode 100644 index 388379d9..00000000 --- a/eladmin-monitor/src/main/java/me/zhengjie/utils/SigarUtil.java +++ /dev/null @@ -1,279 +0,0 @@ -package me.zhengjie.utils; - -import org.hyperic.sigar.*; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Map; -import java.util.Properties; - -/** - * @author ZhangHouYing - * @date 2019-11-03 15:04 - */ -public class SigarUtil { - - public static void main(String[] args) { - try { - // System信息,从jvm获取 - property(); - System.out.println("----------------------------------"); - // cpu信息 - cpu(); - System.out.println("----------------------------------"); - // 内存信息 - memory(); - System.out.println("----------------------------------"); - // 操作系统信息 - os(); - System.out.println("----------------------------------"); - // 用户信息 - who(); - System.out.println("----------------------------------"); - // 文件系统信息 - file(); - System.out.println("----------------------------------"); - // 网络信息 - net(); - System.out.println("----------------------------------"); - // 以太网信息 - ethernet(); - System.out.println("----------------------------------"); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - private static void property() throws UnknownHostException { - Runtime r = Runtime.getRuntime(); - Properties props = System.getProperties(); - InetAddress addr; - addr = InetAddress.getLocalHost(); - String ip = addr.getHostAddress(); - Map map = System.getenv(); - // 获取用户名 - String userName = map.get("USERNAME"); - // 获取计算机名 - String computerName = map.get("COMPUTERNAME"); - // 获取计算机域名 - String userDomain = map.get("USERDOMAIN"); - System.out.println("用户名: " + userName); - System.out.println("计算机名: " + computerName); - System.out.println("计算机域名: " + userDomain); - System.out.println("本地ip地址: " + ip); - System.out.println("本地主机名: " + addr.getHostName()); - System.out.println("JVM可以使用的总内存: " + r.totalMemory()); - System.out.println("JVM可以使用的剩余内存: " + r.freeMemory()); - System.out.println("JVM可以使用的处理器个数: " + r.availableProcessors()); - System.out.println("Java的运行环境版本: " + props.getProperty("java.version")); - System.out.println("Java的运行环境供应商: " + props.getProperty("java.vendor")); - System.out.println("Java供应商的URL: " + props.getProperty("java.vendor.url")); - System.out.println("Java的安装路径: " + props.getProperty("java.home")); - System.out.println("Java的虚拟机规范版本: " + props.getProperty("java.vm.specification.version")); - System.out.println("Java的虚拟机规范供应商: " + props.getProperty("java.vm.specification.vendor")); - System.out.println("Java的虚拟机规范名称: " + props.getProperty("java.vm.specification.name")); - System.out.println("Java的虚拟机实现版本: " + props.getProperty("java.vm.version")); - System.out.println("Java的虚拟机实现供应商: " + props.getProperty("java.vm.vendor")); - System.out.println("Java的虚拟机实现名称: " + props.getProperty("java.vm.name")); - System.out.println("Java运行时环境规范版本: " + props.getProperty("java.specification.version")); - System.out.println("Java运行时环境规范供应商: " + props.getProperty("java.specification.vender")); - System.out.println("Java运行时环境规范名称: " + props.getProperty("java.specification.name")); - System.out.println("Java的类格式版本号: " + props.getProperty("java.class.version")); - System.out.println("Java的类路径: " + props.getProperty("java.class.path")); - System.out.println("加载库时搜索的路径列表: " + props.getProperty("java.library.path")); - System.out.println("默认的临时文件路径: " + props.getProperty("java.io.tmpdir")); - System.out.println("一个或多个扩展目录的路径: " + props.getProperty("java.ext.dirs")); - System.out.println("操作系统的名称: " + props.getProperty("os.name")); - System.out.println("操作系统的构架: " + props.getProperty("os.arch")); - System.out.println("操作系统的版本: " + props.getProperty("os.version")); - System.out.println("文件分隔符: " + props.getProperty("file.separator")); - System.out.println("路径分隔符: " + props.getProperty("path.separator")); - System.out.println("行分隔符: " + props.getProperty("line.separator")); - System.out.println("用户的账户名称: " + props.getProperty("user.name")); - System.out.println("用户的主目录: " + props.getProperty("user.home")); - System.out.println("用户的当前工作目录: " + props.getProperty("user.dir")); - } - - private static void memory() throws SigarException { - Sigar sigar = new Sigar(); - Mem mem = sigar.getMem(); - // 内存总量 - System.out.println("内存总量: " + mem.getTotal() / 1024L + "K av"); - // 当前内存使用量 - System.out.println("当前内存使用量: " + mem.getUsed() / 1024L + "K used"); - // 当前内存剩余量 - System.out.println("当前内存剩余量: " + mem.getFree() / 1024L + "K free"); - Swap swap = sigar.getSwap(); - // 交换区总量 - System.out.println("交换区总量: " + swap.getTotal() / 1024L + "K av"); - // 当前交换区使用量 - System.out.println("当前交换区使用量: " + swap.getUsed() / 1024L + "K used"); - // 当前交换区剩余量 - System.out.println("当前交换区剩余量: " + swap.getFree() / 1024L + "K free"); - } - - private static void cpu() throws SigarException { - Sigar sigar = new Sigar(); - CpuInfo[] infos = sigar.getCpuInfoList(); - CpuPerc[] cpuList; - - System.out.println("cpu 总量参数情况:" + sigar.getCpu()); - System.out.println("cpu 总百分比情况:" + sigar.getCpuPerc()); - - cpuList = sigar.getCpuPercList(); - // 不管是单块CPU还是多CPU都适用 - for (int i = 0; i < infos.length; i++) { - CpuInfo info = infos[i]; - System.out.println("第" + (i + 1) + "块CPU信息"); - // CPU的总量MHz - System.out.println("CPU的总量MHz: " + info.getMhz()); - // 获得CPU的卖主,如:Intel - System.out.println("CPU生产商: " + info.getVendor()); - // 获得CPU的类别 - System.out.println("CPU类别: " + info.getModel()); - // 缓冲存储器数量 - System.out.println("CPU缓存数量: " + info.getCacheSize()); - printCpuPerc(cpuList[i]); - } - } - - private static void printCpuPerc(CpuPerc cpu) { - System.out.println("CPU用户使用率: " + CpuPerc.format(cpu.getUser())); - System.out.println("CPU系统使用率: " + CpuPerc.format(cpu.getSys())); - System.out.println("CPU当前等待率: " + CpuPerc.format(cpu.getWait())); - System.out.println("CPU当前错误率: " + CpuPerc.format(cpu.getNice())); - System.out.println("CPU当前空闲率: " + CpuPerc.format(cpu.getIdle())); - System.out.println("CPU总的使用率: " + CpuPerc.format(cpu.getCombined())); - } - - private static void os() { - OperatingSystem os = OperatingSystem.getInstance(); - // 操作系统内核类型如: 386、486、586等x86 - System.out.println("操作系统: " + os.getArch()); - System.out.println("操作系统CpuEndian(): " + os.getCpuEndian()); - System.out.println("操作系统DataModel(): " + os.getDataModel()); - // 系统描述 - System.out.println("操作系统的描述: " + os.getDescription()); - // 操作系统类型 - System.out.println("OS.getName(): " + os.getName()); - System.out.println("OS.getPatchLevel(): " + os.getPatchLevel()); - // 操作系统的卖主 - System.out.println("操作系统的卖主: " + os.getVendor()); - // 卖主名称 - System.out.println("操作系统的卖主名: " + os.getVendorCodeName()); - // 操作系统名称 - System.out.println("操作系统名称: " + os.getVendorName()); - // 操作系统卖主类型 - System.out.println("操作系统卖主类型: " + os.getVendorVersion()); - // 操作系统的版本号 - System.out.println("操作系统的版本号: " + os.getVersion()); - } - - private static void who() throws SigarException { - Sigar sigar = new Sigar(); - Who[] whos = sigar.getWhoList(); - if (whos != null && whos.length > 0) { - for (Who who : whos) { - System.out.println("用户控制台: " + who.getDevice()); - System.out.println("用户host: " + who.getHost()); - // 当前系统进程表中的用户名 - System.out.println("当前系统进程表中的用户名: " + who.getUser()); - } - } - } - - private static void file() throws Exception { - Sigar sigar = new Sigar(); - FileSystem[] fsList = sigar.getFileSystemList(); - for (int i = 0; i < fsList.length; i++) { - System.out.println("分区的盘符名称" + i); - FileSystem fs = fsList[i]; - // 分区的盘符名称 - System.out.println("盘符名称: " + fs.getDevName()); - // 分区的盘符名称 - System.out.println("盘符路径: " + fs.getDirName()); - System.out.println("盘符标志: " + fs.getFlags()); - // 文件系统类型,比如 FAT32、NTFS - System.out.println("盘符类型: " + fs.getSysTypeName()); - // 文件系统类型名,比如本地硬盘、光驱、网络文件系统等 - System.out.println("盘符类型名: " + fs.getTypeName()); - // 文件系统类型 - System.out.println("盘符文件系统类型: " + fs.getType()); - FileSystemUsage usage; - usage = sigar.getFileSystemUsage(fs.getDirName()); - switch (fs.getType()) { - // TYPE_UNKNOWN :未知 - case 0: break; - // TYPE_NONE - case 1: break; - // TYPE_LOCAL_DISK : 本地硬盘 - case 2: - // 文件系统总大小 - System.out.println(fs.getDevName() + "总大小: " + usage.getTotal() + "KB"); - // 文件系统剩余大小 - System.out.println(fs.getDevName() + "剩余大小: " + usage.getFree() + "KB"); - // 文件系统可用大小 - System.out.println(fs.getDevName() + "可用大小: " + usage.getAvail() + "KB"); - // 文件系统已经使用量 - System.out.println(fs.getDevName() + "已经使用量: " + usage.getUsed() + "KB"); - double usePercent = usage.getUsePercent() * 100D; - // 文件系统资源的利用率 - System.out.println(fs.getDevName() + "资源的利用率: " + usePercent + "%"); - break; - // TYPE_NETWORK :网络 - case 3: break; - // TYPE_RAM_DISK :闪存 - case 4: break; - // TYPE_CD_ROM :光驱 - case 5: break; - // TYPE_SWAP :页面交换 - case 6: break; - default: break; - } - System.out.println(fs.getDevName() + "读出:" + usage.getDiskReads()); - System.out.println(fs.getDevName() + "写入:" + usage.getDiskWrites()); - } - } - - private static void net() throws Exception { - Sigar sigar = new Sigar(); - String[] ifNames = sigar.getNetInterfaceList(); - for (String name : ifNames) { - NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name); - System.out.println("网络设备名: " + name); - System.out.println("IP地址: " + ifconfig.getAddress()); - System.out.println("子网掩码: " + ifconfig.getNetmask()); - if ((ifconfig.getFlags() & 1L) <= 0L) { - System.out.println("!IFF_UP...skipping getNetInterfaceStat"); - continue; - } - NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name); - System.out.println(name + "接收的总包裹数:" + ifstat.getRxPackets()); - System.out.println(name + "发送的总包裹数:" + ifstat.getTxPackets()); - System.out.println(name + "接收到的总字节数:" + ifstat.getRxBytes()); - System.out.println(name + "发送的总字节数:" + ifstat.getTxBytes()); - System.out.println(name + "接收到的错误包数:" + ifstat.getRxErrors()); - System.out.println(name + "发送数据包时的错误数:" + ifstat.getTxErrors()); - System.out.println(name + "接收时丢弃的包数:" + ifstat.getRxDropped()); - System.out.println(name + "发送时丢弃的包数:" + ifstat.getTxDropped()); - } - } - - private static void ethernet() throws SigarException { - Sigar sigar; - sigar = new Sigar(); - String[] ifAces = sigar.getNetInterfaceList(); - for (String ifAce : ifAces) { - NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(ifAce); - if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) || (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0 - || NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())) { - continue; - } - System.out.println(cfg.getName() + "IP地址:" + cfg.getAddress()); - System.out.println(cfg.getName() + "网关广播地址:" + cfg.getBroadcast()); - System.out.println(cfg.getName() + "网卡MAC地址:" + cfg.getHwaddr()); - System.out.println(cfg.getName() + "子网掩码:" + cfg.getNetmask()); - System.out.println(cfg.getName() + "网卡描述信息:" + cfg.getDescription()); - System.out.println(cfg.getName() + "网卡类型" + cfg.getType()); - } - } -} diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-freebsd-6.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-freebsd-6.so deleted file mode 100644 index 3e94f0d2..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-freebsd-6.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-linux.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-linux.so deleted file mode 100644 index 5a2e4c24..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-linux.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-solaris.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-solaris.so deleted file mode 100644 index 6396482a..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-amd64-solaris.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ia64-hpux-11.sl b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ia64-hpux-11.sl deleted file mode 100644 index d92ea4a9..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ia64-hpux-11.sl and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ia64-linux.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ia64-linux.so deleted file mode 100644 index 2bd2fc8e..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ia64-linux.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-pa-hpux-11.sl b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-pa-hpux-11.sl deleted file mode 100644 index 0dfd8a11..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-pa-hpux-11.sl and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc-aix-5.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc-aix-5.so deleted file mode 100644 index 7d4b5199..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc-aix-5.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc-linux.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc-linux.so deleted file mode 100644 index 4394b1b0..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc-linux.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc64-aix-5.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc64-aix-5.so deleted file mode 100644 index 35fd8288..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc64-aix-5.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc64-linux.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc64-linux.so deleted file mode 100644 index a1ba2529..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-ppc64-linux.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-s390x-linux.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-s390x-linux.so deleted file mode 100644 index c275f4ac..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-s390x-linux.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-sparc-solaris.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-sparc-solaris.so deleted file mode 100644 index aa847d2b..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-sparc-solaris.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-sparc64-solaris.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-sparc64-solaris.so deleted file mode 100644 index 6c4fe809..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-sparc64-solaris.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-universal-macosx.dylib b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-universal-macosx.dylib deleted file mode 100644 index 27ab1071..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-universal-macosx.dylib and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-universal64-macosx.dylib b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-universal64-macosx.dylib deleted file mode 100644 index 0c721fec..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-universal64-macosx.dylib and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-freebsd-5.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-freebsd-5.so deleted file mode 100644 index 8c50c611..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-freebsd-5.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-freebsd-6.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-freebsd-6.so deleted file mode 100644 index f0800274..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-freebsd-6.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-linux.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-linux.so deleted file mode 100644 index a0b64edd..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-linux.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-solaris.so b/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-solaris.so deleted file mode 100644 index c6452e56..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-solaris.so and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/sigar-amd64-winnt.dll b/eladmin-monitor/src/main/resources/sigar-lib/sigar-amd64-winnt.dll deleted file mode 100644 index 1ec8a035..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/sigar-amd64-winnt.dll and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/sigar-x86-winnt.dll b/eladmin-monitor/src/main/resources/sigar-lib/sigar-x86-winnt.dll deleted file mode 100644 index 6afdc016..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/sigar-x86-winnt.dll and /dev/null differ diff --git a/eladmin-monitor/src/main/resources/sigar-lib/sigar-x86-winnt.lib b/eladmin-monitor/src/main/resources/sigar-lib/sigar-x86-winnt.lib deleted file mode 100644 index 04924a1f..00000000 Binary files a/eladmin-monitor/src/main/resources/sigar-lib/sigar-x86-winnt.lib and /dev/null differ diff --git a/eladmin-monitor/src/test/java/me/zhengjie/SystemInfoTest.java b/eladmin-monitor/src/test/java/me/zhengjie/SystemInfoTest.java new file mode 100644 index 00000000..996fa8fb --- /dev/null +++ b/eladmin-monitor/src/test/java/me/zhengjie/SystemInfoTest.java @@ -0,0 +1,364 @@ +/** + * MIT License + *

+ * Copyright (c) 2010 - 2020 The OSHI Project Contributors: https://github.com/oshi/oshi/graphs/contributors + *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + *

+ * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.zhengjie; + +import static org.junit.Assert.assertFalse; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import oshi.PlatformEnum; +import oshi.SystemInfo; +import oshi.hardware.CentralProcessor; +import oshi.hardware.CentralProcessor.TickType; +import oshi.hardware.ComputerSystem; +import oshi.hardware.Display; +import oshi.hardware.GlobalMemory; +import oshi.hardware.HWDiskStore; +import oshi.hardware.HWPartition; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.hardware.NetworkIF; +import oshi.hardware.PhysicalMemory; +import oshi.hardware.PowerSource; +import oshi.hardware.Sensors; +import oshi.hardware.SoundCard; +import oshi.hardware.UsbDevice; +import oshi.hardware.VirtualMemory; +import oshi.software.os.FileSystem; +import oshi.software.os.NetworkParams; +import oshi.software.os.OSFileStore; +import oshi.software.os.OSProcess; +import oshi.software.os.OSService; +import oshi.software.os.OperatingSystem; +import oshi.software.os.OperatingSystem.ProcessSort; +import oshi.util.FormatUtil; +import oshi.util.Util; + +/** + * A demonstration of access to many of OSHI's capabilities + */ +public class SystemInfoTest { + + private static final Logger logger = LoggerFactory.getLogger(SystemInfoTest.class); + + static List oshi = new ArrayList<>(); + + /** + * Test that this platform is implemented.. + */ + @Test + public void testPlatformEnum() { + assertFalse(PlatformEnum.UNKNOWN.equals(SystemInfo.getCurrentPlatformEnum())); + // Exercise the main method + main(null); + } + + /** + * The main method, demonstrating use of classes. + * + * @param args the arguments (unused) + */ + public static void main(String[] args) { + logger.info("Initializing System..."); + 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()); + + // hardware: displays + logger.info("Checking Displays..."); + printDisplays(hal.getDisplays()); + + // hardware: USB devices + logger.info("Checking USB Devices..."); + printUsbDevices(hal.getUsbDevices(true)); + + logger.info("Checking Sound Cards..."); + printSoundCards(hal.getSoundCards()); + + 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); + } + + 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."); + } + + 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("Memory: \n " + memory.toString()); + VirtualMemory vm = memory.getVirtualMemory(); + oshi.add("Swap: \n " + vm.toString()); + PhysicalMemory[] pmArray = memory.getPhysicalMemory(); + if (pmArray.length > 0) { + oshi.add("Physical Memory: "); + for (PhysicalMemory pm : pmArray) { + 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) { + oshi.add("My PID: " + os.getProcessId() + " with affinity " + + Long.toBinaryString(os.getProcessAffinityMask(os.getProcessId()))); + oshi.add("Processes: " + os.getProcessCount() + ", Threads: " + os.getThreadCount()); + // Sort by highest CPU + List procs = Arrays.asList(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(PowerSource[] powerSources) { + StringBuilder sb = new StringBuilder("Power Sources: "); + if (powerSources.length == 0) { + sb.append("Unknown"); + } + for (PowerSource powerSource : powerSources) { + sb.append("\n ").append(powerSource.toString()); + } + oshi.add(sb.toString()); + } + + private static void printDisks(HWDiskStore[] diskStores) { + oshi.add("Disks:"); + for (HWDiskStore disk : diskStores) { + oshi.add(" " + disk.toString()); + + HWPartition[] 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())); + + OSFileStore[] fsArray = fileSystem.getFileStores(); + for (OSFileStore fs : fsArray) { + 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(NetworkIF[] networkIFs) { + StringBuilder sb = new StringBuilder("Network Interfaces:"); + if (networkIFs.length == 0) { + sb.append(" Unknown"); + } + for (NetworkIF net : networkIFs) { + 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 printDisplays(Display[] displays) { + oshi.add("Displays:"); + int i = 0; + for (Display display : displays) { + oshi.add(" Display " + i + ":"); + oshi.add(String.valueOf(display)); + i++; + } + } + + private static void printUsbDevices(UsbDevice[] usbDevices) { + oshi.add("USB Devices:"); + for (UsbDevice usbDevice : usbDevices) { + oshi.add(String.valueOf(usbDevice)); + } + } + + private static void printSoundCards(SoundCard[] cards) { + oshi.add("Sound Cards:"); + for (SoundCard card : cards) { + oshi.add(" " + String.valueOf(card)); + } + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java index 4a3a942b..479eae26 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java @@ -44,7 +44,7 @@ public class ServerServiceImpl implements ServerService { try { server.setState("1"); String url = String.format("http://%s:%d/api/serverMonitor",server.getAddress(),server.getPort()); - String res = HttpUtil.get(url,1000); + String res = HttpUtil.get(url,3000); JSONObject obj = JSONObject.parseObject(res); server.setCpuRate(obj.getDouble("cpuRate")); server.setCpuCore(obj.getInteger("cpuCore"));