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.SnmpUsage; 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 SnmpUsageCollector implements Callable<SnmpUsage> { private final Log LOG = LogFactory.getLog(SnmpUsageCollector.class); public StingrayUsageClient stingrayUsageClient; public Host host; public LoadBalancer loadbalancer; public SnmpUsageCollector(Host host, LoadBalancer lb) { stingrayUsageClient = new StingrayUsageClientImpl(); this.host = host; this.loadbalancer = lb; } public SnmpUsageCollector() { } @Override public SnmpUsage call(){ SnmpUsage snmpusage = null; try { snmpusage = stingrayUsageClient.getVirtualServerUsage(host, loadbalancer); snmpusage = handleNullUsageResponse(snmpusage); } catch (StingraySnmpObjectNotFoundException ex) { String retString = String.format("Request for host %s usage from SNMP server failed. SnmpUsage Object" + " is Not found for host", host.getName()); LOG.info(retString); snmpusage = handleNullUsageResponse(snmpusage); } catch (StingraySnmpGeneralException eg) { String retString = String.format("Request for host %s usage from SNMP server failed. A default SnmpUsage will be created.", host.getName()); LOG.info(retString); snmpusage = handleNullUsageResponse(snmpusage); } catch (Exception e) { String retString = String.format("Request for host %s usage from SNMP server failed.", host.getName()); LOG.error(retString, e); snmpusage = handleNullUsageResponse(snmpusage); } if(snmpusage != null) { LOG.info(String.format("Stored snmp usage: %s", snmpusage.toString())); } return snmpusage; } private SnmpUsage handleNullUsageResponse(SnmpUsage snmpusage){ if (snmpusage == null){ SnmpUsage blankSnmpUsage = new SnmpUsage(); blankSnmpUsage.setHostId(host.getId()); blankSnmpUsage.setLoadbalancerId(loadbalancer.getId()); return blankSnmpUsage; } return snmpusage; } 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; } }