package com.intrbiz.bergamot.agent.handler; import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.FileSystemUsage; import org.hyperic.sigar.Humidor; import org.hyperic.sigar.SigarException; import org.hyperic.sigar.SigarProxy; import com.intrbiz.bergamot.model.message.agent.AgentMessage; import com.intrbiz.bergamot.model.message.agent.check.CheckDisk; import com.intrbiz.bergamot.model.message.agent.error.GeneralError; import com.intrbiz.bergamot.model.message.agent.stat.DiskStat; import com.intrbiz.bergamot.model.message.agent.stat.disk.DiskInfo; public class DiskInfoHandler extends AbstractAgentHandler { private SigarProxy sigar = Humidor.getInstance().getSigar(); public DiskInfoHandler() { super(); } @Override public Class<?>[] getMessages() { return new Class[] { CheckDisk.class }; } @Override public AgentMessage handle(AgentMessage request) { try { DiskStat stat = new DiskStat(request); FileSystem[] fileSystems = sigar.getFileSystemList(); for (FileSystem fs : fileSystems) { // TODO: bug in Sigar relating to BTRFS if (fs.getType() == 2 || "btrfs".equalsIgnoreCase(fs.getSysTypeName())) { DiskInfo disk = new DiskInfo(); disk.setMount(fs.getDirName()); disk.setDevice(fs.getDevName()); disk.setType(fs.getSysTypeName()); FileSystemUsage usage = this.sigar.getFileSystemUsage(fs.getDirName()); disk.setSize(usage.getTotal() * 1024L); disk.setAvailable(usage.getFree() * 1024L); disk.setUsed(usage.getUsed() * 1024L); disk.setUsedPercent(usage.getUsePercent() * 100D); stat.getDisks().add(disk); } } return stat; } catch (SigarException e) { return new GeneralError(e.getMessage()); } } }