package org.openstack.atlas.usage.jobs; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openstack.atlas.jobs.AbstractJob; import org.openstack.atlas.service.domain.entities.AccountUsage; import org.openstack.atlas.service.domain.entities.JobName; import org.openstack.atlas.service.domain.entities.VirtualIpType; import org.openstack.atlas.service.domain.repository.AccountUsageRepository; import org.openstack.atlas.service.domain.repository.LoadBalancerRepository; import org.openstack.atlas.service.domain.repository.VirtualIpRepository; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Calendar; import java.util.List; @Component public class AccountUsagePoller extends AbstractJob { private final Log LOG = LogFactory.getLog(AccountUsagePoller.class); @Autowired private LoadBalancerRepository loadBalancerRepository; @Autowired private AccountUsageRepository accountUsageRepository; @Autowired private VirtualIpRepository virtualIpRepository; @Override public Log getLogger() { return LOG; } @Override public JobName getJobName() { return JobName.ACCOUNT_USAGE_POLLER; } @Override public void setup(JobExecutionContext jobExecutionContext) throws JobExecutionException { } @Override public void run() throws Exception { List<Integer> accountIds = loadBalancerRepository.getAllAccountIds(); for (Integer accountId : accountIds) { LOG.debug(String.format("Creating account usage entry for account '%d'...", accountId)); createAccountUsageEntry(accountId); LOG.debug(String.format("Account usage entry successfully created for account '%d'.", accountId)); } } @Override public void cleanup() { } private void createAccountUsageEntry(Integer accountId) { AccountUsage usage = new AccountUsage(); usage.setAccountId(accountId); usage.setNumLoadBalancers(loadBalancerRepository.getNumNonDeletedLoadBalancersForAccount(accountId)); usage.setNumPublicVips(virtualIpRepository.getNumUniqueVipsForAccount(accountId, VirtualIpType.PUBLIC)); usage.setNumServicenetVips(virtualIpRepository.getNumUniqueVipsForAccount(accountId, VirtualIpType.SERVICENET)); usage.setStartTime(Calendar.getInstance()); accountUsageRepository.save(usage); } }