package com.intrbiz.bergamot.agent.handler; import org.hyperic.sigar.Humidor; import org.hyperic.sigar.NetInterfaceConfig; import org.hyperic.sigar.NetInterfaceStat; import org.hyperic.sigar.NetRoute; 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.CheckNetIf; import com.intrbiz.bergamot.model.message.agent.error.GeneralError; import com.intrbiz.bergamot.model.message.agent.stat.NetIfStat; import com.intrbiz.bergamot.model.message.agent.stat.netif.NetIfInfo; import com.intrbiz.bergamot.model.message.agent.stat.netif.NetRouteInfo; public class NetIfInfoHandler extends AbstractAgentHandler { private SigarProxy sigar = Humidor.getInstance().getSigar(); public NetIfInfoHandler() { super(); } @Override public Class<?>[] getMessages() { return new Class[] { CheckNetIf.class }; } @Override public AgentMessage handle(AgentMessage request) { try { NetIfStat stat = new NetIfStat(request); // host name stat.setHostname(this.sigar.getFQDN()); // routes for (NetRoute route : this.sigar.getNetRouteList()) { NetRouteInfo info = new NetRouteInfo(); info.setDestination(route.getDestination()); info.setMask(route.getMask()); info.setGateway(route.getGateway()); info.setInterface(route.getIfname()); info.setMetric(route.getMetric()); info.setMtu(route.getMtu()); stat.getRoutes().add(info); } // interface stats for (String iface : this.sigar.getNetInterfaceList()) { NetIfInfo info = new NetIfInfo(); info.setName(iface); NetInterfaceConfig nic = this.sigar.getNetInterfaceConfig(iface); NetInterfaceStat nis = sigar.getNetInterfaceStat(iface); info.setHwAddress(nic.getHwaddr()); info.setAddress(nic.getAddress()); info.setNetmask(nic.getNetmask()); info.setTxBytes(nis.getTxBytes()); info.setRxBytes(nis.getRxBytes()); stat.getIfaces().add(info); } return stat; } catch (SigarException e) { return new GeneralError(e.getMessage()); } } protected static double round(double d) { return (((double) Math.round(d * 1000)) / 1000D); } }