package org.runtime;
import org.hyperic.sigar.*;
import java.util.Date;
import static org.rx.core.Contract.toJsonString;
public final class SystemRuntime {
public static String formatSize(long size) {
return Sigar.formatSize(size);
}
public static SystemStatusProperty getProperty() throws Exception {
Sigar sigar = new Sigar();
SystemStatusProperty status = new SystemStatusProperty();
status.setDate(new Date());
CpuInfo cpuInfo = sigar.getCpuInfoList()[0];
status.setCpuInfo(String.format("%s %s @ %s Threads", cpuInfo.getVendor(), cpuInfo.getModel(), cpuInfo.getTotalCores()));
status.setCpuCombined(sigar.getCpuPerc().getCombined());
status.setCpuCombinedPercent(CpuPerc.format(status.getCpuCombined()));
Mem mem = sigar.getMem();
status.setMemoryTotal(mem.getTotal());
status.setMemoryUsed(mem.getActualUsed());
org.hyperic.sigar.Sigar.formatSize()
// org.hyperic.sigar.CpuPerc.format()
long used = 0, total = 0, read = 0, write = 0;
for (FileSystem fileSystem : sigar.getFileSystemList()) {
switch (fileSystem.getType()) {
case FileSystem.TYPE_LOCAL_DISK:
case FileSystem.TYPE_RAM_DISK:
FileSystemUsage usage = sigar.getFileSystemUsage(fileSystem.getDirName());
used += usage.getUsed();
total += usage.getTotal();
read += usage.getDiskReads();
write += usage.getDiskWrites();
break;
}
}
status.setDiskUsed(used);
status.setDiskTotal(total);
status.setDiskReadBytes(read);
status.setDiskWriteBytes(write);
NetInterfaceStat netStatLast = find(sigar);
if (netStatLast != null) {
Thread.sleep(1000);
NetInterfaceStat netStatCurrent = find(new Sigar());
if (netStatCurrent != null) {
status.setNetInBytes(netStatCurrent.getRxBytes() - netStatLast.getRxBytes());
status.setNetOutBytes(netStatCurrent.getTxBytes() - netStatLast.getTxBytes());
}
}
sigar.close();
System.out.println(toJsonString(status));
return status;
}
private static NetInterfaceStat find(Sigar sigar) throws SigarException {
NetInterfaceStat netStat = null;
for (String netName : sigar.getNetInterfaceList()) {
NetInterfaceConfig netConfig = sigar.getNetInterfaceConfig(netName);
if ((netConfig.getFlags() & 1L) <= 0L) {
// System.out.println("!IFF_UP...skipping getNetInterfaceStat");
continue;
}
if (NetFlags.LOOPBACK_ADDRESS.equals(netConfig.getAddress())
|| (netConfig.getFlags() & NetFlags.IFF_LOOPBACK) != 0
|| NetFlags.NULL_HWADDR.equals(netConfig.getHwaddr())) {
continue;
}
// if (NetFlags.ANY_ADDR.equals(netConfig.getAddress())) {
// continue;
// }
// System.out.println("netConfig:" + JSON.toJSONString(netConfig));
netStat = sigar.getNetInterfaceStat(netName);
break;
// System.out.println("netStat:" + JSON.toJSONString(netStat));
// System.out.println(Sigar.formatSize(netStat.getRxBytes()));
// System.out.println();
}
return netStat;
}
}
package org.runtime;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class SystemStatusProperty implements Serializable {
private Date date;
private String cpuInfo;
private double cpuCombined;
private String cpuCombinedPercent;
private long memoryUsed;
private long memoryTotal;
private long diskUsed;
private long diskTotal;
private long diskReadBytes;
private long diskWriteBytes;
private long netInBytes;
private long netOutBytes;
}