package org.openstack.atlas.usagerefactor.collection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openstack.atlas.service.domain.entities.Host; import org.openstack.atlas.service.domain.entities.LoadBalancer; import org.openstack.atlas.usagerefactor.SnmpStats; import org.openstack.atlas.usagerefactor.snmp.StingrayUsageClient; import org.openstack.atlas.usagerefactor.snmp.StingrayUsageClientImpl; import org.openstack.atlas.util.snmp.exceptions.StingraySnmpGeneralException; import org.openstack.atlas.util.snmp.exceptions.StingraySnmpObjectNotFoundException; import java.util.concurrent.Callable; public class SnmpStatsCollector implements Callable<SnmpStats> { private final Log LOG = LogFactory.getLog(SnmpStatsCollector.class); public StingrayUsageClient stingrayUsageClient; public Host host; public LoadBalancer loadbalancer; public SnmpStatsCollector(Host host, LoadBalancer lb) { stingrayUsageClient = new StingrayUsageClientImpl(); this.host = host; this.loadbalancer = lb; } public SnmpStatsCollector() { } @Override public SnmpStats call(){ SnmpStats snmpStats = null; try { snmpStats = stingrayUsageClient.getVirtualServerStats(host, loadbalancer); snmpStats = handleNullStatsResponse(snmpStats); } catch (StingraySnmpObjectNotFoundException ex) { String retString = String.format("Request for host %s stats from SNMP server failed. SnmpStats object" + " is not found for host", host.getName()); LOG.info(retString); snmpStats = handleNullStatsResponse(snmpStats); } catch (StingraySnmpGeneralException eg) { String retString = String.format("Request for host %s stats from SNMP server failed. A default SnmpStats will be created.", host.getName()); LOG.info(retString); snmpStats = handleNullStatsResponse(snmpStats); } catch (Exception e) { String retString = String.format("Request for host %s stas from SNMP server failed.", host.getName()); LOG.error(retString, e); snmpStats = handleNullStatsResponse(snmpStats); } if(snmpStats != null) { LOG.info(String.format("Stored snmp stats: %s", snmpStats.toString())); } return snmpStats; } private SnmpStats handleNullStatsResponse(SnmpStats snmpStats){ if (snmpStats == null){ SnmpStats blankSnmpStats = new SnmpStats(); blankSnmpStats.setHostId(host.getId()); blankSnmpStats.setLoadbalancerId(loadbalancer.getId()); return blankSnmpStats; } return snmpStats; } public StingrayUsageClient getStingrayUsageClient() { return stingrayUsageClient; } public void setStingrayUsageClient(StingrayUsageClient stingrayUsageClient) { this.stingrayUsageClient = stingrayUsageClient; } public Host getHost() { return host; } public void setHost(Host host) { this.host = host; } public LoadBalancer getLoadbalancer() { return loadbalancer; } public void setLoadbalancer(LoadBalancer loadbalancer) { this.loadbalancer = loadbalancer; } }