dedebd9804a8191038d2351117778bbc2abb0415.svn-base 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package cn.com.goldenwater.dcproj.model;
  2. import cn.com.goldenwater.dcproj.utils.Arith;
  3. import cn.com.goldenwater.dcproj.utils.IpUtils;
  4. import oshi.SystemInfo;
  5. import oshi.hardware.CentralProcessor;
  6. import oshi.hardware.CentralProcessor.TickType;
  7. import oshi.hardware.GlobalMemory;
  8. import oshi.hardware.HardwareAbstractionLayer;
  9. import oshi.software.os.FileSystem;
  10. import oshi.software.os.OSFileStore;
  11. import oshi.software.os.OperatingSystem;
  12. import oshi.util.Util;
  13. import java.net.UnknownHostException;
  14. import java.util.LinkedList;
  15. import java.util.List;
  16. import java.util.Properties;
  17. /**
  18. * 服务器相关信息
  19. *
  20. * @author ruoyi
  21. */
  22. public class Server
  23. {
  24. private static final int OSHI_WAIT_SECOND = 1000;
  25. /**
  26. * CPU相关信息
  27. */
  28. private Cpu cpu = new Cpu();
  29. /**
  30. * 內存相关信息
  31. */
  32. private Mem mem = new Mem();
  33. /**
  34. * JVM相关信息
  35. */
  36. private Jvm jvm = new Jvm();
  37. /**
  38. * 服务器相关信息
  39. */
  40. private Sys sys = new Sys();
  41. /**
  42. * 磁盘相关信息
  43. */
  44. private List<SysFile> sysFiles = new LinkedList<SysFile>();
  45. public Cpu getCpu()
  46. {
  47. return cpu;
  48. }
  49. public void setCpu(Cpu cpu)
  50. {
  51. this.cpu = cpu;
  52. }
  53. public Mem getMem()
  54. {
  55. return mem;
  56. }
  57. public void setMem(Mem mem)
  58. {
  59. this.mem = mem;
  60. }
  61. public Jvm getJvm()
  62. {
  63. return jvm;
  64. }
  65. public void setJvm(Jvm jvm)
  66. {
  67. this.jvm = jvm;
  68. }
  69. public Sys getSys()
  70. {
  71. return sys;
  72. }
  73. public void setSys(Sys sys)
  74. {
  75. this.sys = sys;
  76. }
  77. public List<SysFile> getSysFiles()
  78. {
  79. return sysFiles;
  80. }
  81. public void setSysFiles(List<SysFile> sysFiles)
  82. {
  83. this.sysFiles = sysFiles;
  84. }
  85. public void copyTo() throws Exception
  86. {
  87. SystemInfo si = new SystemInfo();
  88. HardwareAbstractionLayer hal = si.getHardware();
  89. setCpuInfo(hal.getProcessor());
  90. setMemInfo(hal.getMemory());
  91. setSysInfo();
  92. setJvmInfo();
  93. setSysFiles(si.getOperatingSystem());
  94. }
  95. /**
  96. * 设置CPU信息
  97. */
  98. private void setCpuInfo(CentralProcessor processor)
  99. {
  100. // CPU信息
  101. long[] prevTicks = processor.getSystemCpuLoadTicks();
  102. Util.sleep(OSHI_WAIT_SECOND);
  103. long[] ticks = processor.getSystemCpuLoadTicks();
  104. long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
  105. long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
  106. long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
  107. long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
  108. long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
  109. long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
  110. long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
  111. long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
  112. long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
  113. cpu.setCpuNum(processor.getLogicalProcessorCount());
  114. cpu.setTotal(totalCpu);
  115. cpu.setSys(cSys);
  116. cpu.setUsed(user);
  117. cpu.setWait(iowait);
  118. cpu.setFree(idle);
  119. }
  120. /**
  121. * 设置内存信息
  122. */
  123. private void setMemInfo(GlobalMemory memory)
  124. {
  125. mem.setTotal(memory.getTotal());
  126. mem.setUsed(memory.getTotal() - memory.getAvailable());
  127. mem.setFree(memory.getAvailable());
  128. }
  129. /**
  130. * 设置服务器信息
  131. */
  132. private void setSysInfo()
  133. {
  134. Properties props = System.getProperties();
  135. sys.setComputerName(IpUtils.getHostName());
  136. sys.setComputerIp(IpUtils.getHostIp());
  137. sys.setOsName(props.getProperty("os.name"));
  138. sys.setOsArch(props.getProperty("os.arch"));
  139. sys.setUserDir(props.getProperty("user.dir"));
  140. }
  141. /**
  142. * 设置Java虚拟机
  143. */
  144. private void setJvmInfo() throws UnknownHostException
  145. {
  146. Properties props = System.getProperties();
  147. jvm.setTotal(Runtime.getRuntime().totalMemory());
  148. jvm.setMax(Runtime.getRuntime().maxMemory());
  149. jvm.setFree(Runtime.getRuntime().freeMemory());
  150. jvm.setVersion(props.getProperty("java.version"));
  151. jvm.setHome(props.getProperty("java.home"));
  152. }
  153. /**
  154. * 设置磁盘信息
  155. */
  156. private void setSysFiles(OperatingSystem os)
  157. {
  158. FileSystem fileSystem = os.getFileSystem();
  159. List<OSFileStore> fsArray = fileSystem.getFileStores();
  160. for (OSFileStore fs : fsArray)
  161. {
  162. long free = fs.getUsableSpace();
  163. long total = fs.getTotalSpace();
  164. long used = total - free;
  165. SysFile sysFile = new SysFile();
  166. sysFile.setDirName(fs.getMount());
  167. sysFile.setSysTypeName(fs.getType());
  168. sysFile.setTypeName(fs.getName());
  169. sysFile.setTotal(convertFileSize(total));
  170. sysFile.setFree(convertFileSize(free));
  171. sysFile.setUsed(convertFileSize(used));
  172. sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100));
  173. sysFiles.add(sysFile);
  174. }
  175. }
  176. /**
  177. * 字节转换
  178. *
  179. * @param size 字节大小
  180. * @return 转换后值
  181. */
  182. public String convertFileSize(long size)
  183. {
  184. long kb = 1024;
  185. long mb = kb * 1024;
  186. long gb = mb * 1024;
  187. if (size >= gb)
  188. {
  189. return String.format("%.1f GB", (float) size / gb);
  190. }
  191. else if (size >= mb)
  192. {
  193. float f = (float) size / mb;
  194. return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
  195. }
  196. else if (size >= kb)
  197. {
  198. float f = (float) size / kb;
  199. return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
  200. }
  201. else
  202. {
  203. return String.format("%d B", size);
  204. }
  205. }
  206. }