package com.intrbiz.bergamot.agent.handler; import org.hyperic.sigar.Cpu; import org.hyperic.sigar.CpuInfo; import org.hyperic.sigar.CpuPerc; 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.CheckCPU; import com.intrbiz.bergamot.model.message.agent.error.GeneralError; import com.intrbiz.bergamot.model.message.agent.stat.CPUStat; import com.intrbiz.bergamot.model.message.agent.stat.cpu.CPUInfo; import com.intrbiz.bergamot.model.message.agent.stat.cpu.CPUTime; import com.intrbiz.bergamot.model.message.agent.stat.cpu.CPUUsage; public class CPUInfoHandler extends AbstractAgentHandler { private SigarProxy sigar = Humidor.getInstance().getSigar(); public CPUInfoHandler() { super(); } @Override public Class<?>[] getMessages() { return new Class[] { CheckCPU.class }; } @Override public AgentMessage handle(AgentMessage request) { try { CPUStat stat = new CPUStat(request); // cpu info CpuInfo[] infos = this.sigar.getCpuInfoList(); stat.setCpuCount(infos.length); for (CpuInfo info : infos) { stat.getInfo().add(toInfo(info)); } // cpu usage % stat.setTotalUsage(toUsage(this.sigar.getCpuPerc())); for (CpuPerc perc : this.sigar.getCpuPercList()) { stat.getUsage().add(toUsage(perc)); } // cpu time stat.setTotalTime(toTime(this.sigar.getCpu())); for (Cpu cpu : this.sigar.getCpuList()) { stat.getTime().add(toTime(cpu)); } // load double[] load = this.sigar.getLoadAverage(); stat.getLoad().add(load[0]); stat.getLoad().add(load[1]); stat.getLoad().add(load[2]); // return stat; } catch (SigarException e) { return new GeneralError(e.getMessage()); } } protected CPUInfo toInfo(CpuInfo info) { CPUInfo ret = new CPUInfo(); ret.setVendor(info.getVendor()); ret.setModel(info.getModel()); ret.setSpeed(info.getMhz()); return ret; } protected CPUUsage toUsage(CpuPerc perc) { CPUUsage ret = new CPUUsage(); ret.setTotal(perc.getCombined()); ret.setSystem(perc.getSys()); ret.setUser(perc.getUser()); ret.setWait(perc.getWait()); return ret; } protected CPUTime toTime(Cpu time) { CPUTime ret = new CPUTime(); ret.setTotal(time.getTotal()); ret.setSystem(time.getSys()); ret.setUser(time.getTotal()); ret.setWait(time.getWait()); return ret; } }