scouter.agent.netio.request.handle.DiskPerf Maven / Gradle / Ivy
package scouter.agent.netio.request.handle;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemMap;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.NfsFileSystem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.SigarProxy;
import org.hyperic.sigar.SigarProxyCache;
import scouter.agent.netio.request.anotation.RequestHandler;
import scouter.lang.pack.MapPack;
import scouter.lang.pack.Pack;
import scouter.lang.value.ListValue;
import scouter.net.RequestCmd;
import scouter.util.FormatUtil;
public class DiskPerf {
public void output(FileSystem fs) throws SigarException {
//
// ArrayList items = new ArrayList();
//
// items.add(fs.getDevName());
// items.add(formatSize(total));
// items.add(formatSize(used));
// items.add(formatSize(avail));
// items.add(usePct);
// items.add(fs.getDirName());
// items.add(fs.getSysTypeName() + "/" + fs.getTypeName());
}
@RequestHandler(RequestCmd.HOST_DISK_USAGE)
public Pack usage(Pack param) {
MapPack pack = new MapPack();
ListValue deviceList = pack.newList("Device");
ListValue totalList = pack.newList("Total");
ListValue usedList = pack.newList("Used");
ListValue freeList = pack.newList("Free");
ListValue pctList = pack.newList("Pct");
ListValue typeList = pack.newList("Type");
ListValue mountList = pack.newList("Mount");
try {
Sigar sigar = new Sigar();
SigarProxy proxy = SigarProxyCache.newInstance(sigar);
//FileSystemMap mounts = proxy.getFileSystemMap();
FileSystem[] fslist = proxy.getFileSystemList();
for (int i = 0; i < fslist.length; i++) {
long used, avail, total;
float pct;
FileSystem fs = fslist[i];
try {
FileSystemUsage usage;
if (fs instanceof NfsFileSystem) {
NfsFileSystem nfs = (NfsFileSystem) fs;
if (!nfs.ping()) {
continue;
}
}
usage = sigar.getFileSystemUsage(fs.getDirName());
used = usage.getTotal() - usage.getFree();
avail = usage.getAvail();
total = usage.getTotal();
pct = (float) (usage.getUsePercent() * 100);
totalList.add(total*1024);
usedList.add(used*1024);
freeList.add(avail*1024);
pctList.add(pct);
typeList.add(fs.getSysTypeName() + "/" + fs.getTypeName());
deviceList.add(fs.getDevName());
mountList.add(fs.getDirName());
} catch (SigarException e) {
used = avail = total = 0;
pct = 0;
}
}
} catch (Exception e) {
}
return pack;
}
public static void main(String[] args) {
new DiskPerf().usage(null);
}
}