package com.intrbiz.bergamot.agent.handler;
import org.hyperic.sigar.Humidor;
import org.hyperic.sigar.Mem;
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.CheckMem;
import com.intrbiz.bergamot.model.message.agent.error.GeneralError;
import com.intrbiz.bergamot.model.message.agent.stat.MemStat;
public class MemInfoHandler extends AbstractAgentHandler
{
private SigarProxy sigar = Humidor.getInstance().getSigar();
public MemInfoHandler()
{
super();
}
@Override
public Class<?>[] getMessages()
{
return new Class[] {
CheckMem.class
};
}
@Override
public AgentMessage handle(AgentMessage request)
{
try
{
MemStat stat = new MemStat(request);
Mem mem = this.sigar.getMem();
stat.setRam(mem.getRam());
stat.setTotalMemory(mem.getTotal());
stat.setActualFreeMemory(mem.getActualFree());
stat.setActualUsedMemory(mem.getActualUsed());
stat.setFreeMemory(mem.getFree());
stat.setUsedMemory(mem.getUsed());
stat.setFreeMemoryPercentage(round(mem.getFreePercent()));
stat.setUsedMemoryPercentage(round(mem.getUsedPercent()));
return stat;
}
catch (SigarException e)
{
return new GeneralError(e.getMessage());
}
}
protected static double round(double d)
{
return (((double) Math.round(d * 1000)) / 1000D);
}
}