package org.openstack.atlas.service.domain.services.impl; import org.openstack.atlas.service.domain.exceptions.EntityNotFoundException; import org.openstack.atlas.service.domain.services.UsageRefactorService; import org.openstack.atlas.service.domain.usage.entities.LoadBalancerHostUsage; import org.openstack.atlas.service.domain.usage.entities.LoadBalancerMergedHostUsage; import org.springframework.stereotype.Service; import java.util.*; @Service public class UsageRefactorServiceImpl extends BaseService implements UsageRefactorService { @Override public void createUsageEvent(LoadBalancerHostUsage loadBalancerHostUsage) { hostUsageRefactorRepository.create(loadBalancerHostUsage); } @Override public LoadBalancerHostUsage getLastRecordForLbIdAndHostId(int lbId, int hostId) { return hostUsageRefactorRepository.getMostRecentUsageRecordForLbIdAndHostId(lbId, hostId); } @Override public LoadBalancerMergedHostUsage getLastRecordForLbId(int lbId) throws EntityNotFoundException { return loadBalancerMergedHostUsageRepository.getMostRecentRecordForLoadBalancer(lbId); } @Override public Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> getAllLoadBalancerHostUsages() { List<LoadBalancerHostUsage> lbHostUsages = hostUsageRefactorRepository.getAllLoadBalancerHostUsageRecords(true); return listToMap(lbHostUsages); } @Override public Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> getRecordsAfterTimeInclusive(Calendar time) { List<LoadBalancerHostUsage> lbHostUsages = hostUsageRefactorRepository.getRecordsAfterTimeInclusive(time, true); LOG.info(String.format("Retrieved %d records greater than or equal to time: %s", lbHostUsages.size(), time.getTime().toString())); return listToMap(lbHostUsages); } @Override public Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> getRecordsBeforeTimeInclusive(Calendar time) { List<LoadBalancerHostUsage> lbHostUsages = hostUsageRefactorRepository.getRecordsBeforeTimeInclusive(time, true); LOG.info(String.format("Retrieved %d records less than or equal to time: %s", lbHostUsages.size(), time.getTime().toString())); return listToMap(lbHostUsages); } @Override public void batchCreateLoadBalancerHostUsages(Collection<LoadBalancerHostUsage> usages) { hostUsageRefactorRepository.batchCreate(usages); } @Override public void deleteOldLoadBalancerHostUsages(Calendar deleteTimeMarker, Collection<Integer> lbsToExclude, Long maxId) { hostUsageRefactorRepository.deleteOldHostUsage(deleteTimeMarker, lbsToExclude, maxId); } @Override public void batchCreateLoadBalancerMergedHostUsages(Collection<LoadBalancerMergedHostUsage> usages) { loadBalancerMergedHostUsageRepository.batchCreate(usages); } @Override public void batchDeleteLoadBalancerMergedHostUsages(Collection<LoadBalancerMergedHostUsage> usages) { loadBalancerMergedHostUsageRepository.batchDelete(usages); } private Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> listToMap(List<LoadBalancerHostUsage> lbHostUsages) { Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> lbMap = new HashMap<Integer, Map<Integer, List<LoadBalancerHostUsage>>>(); for (LoadBalancerHostUsage lbHostUsage : lbHostUsages) { if (!lbMap.containsKey(lbHostUsage.getLoadbalancerId())){ lbMap.put(lbHostUsage.getLoadbalancerId(), new HashMap<Integer, List<LoadBalancerHostUsage>>()); } if (!lbMap.get(lbHostUsage.getLoadbalancerId()).containsKey(lbHostUsage.getHostId())) { lbMap.get(lbHostUsage.getLoadbalancerId()).put(lbHostUsage.getHostId(), new ArrayList<LoadBalancerHostUsage>()); } lbMap.get(lbHostUsage.getLoadbalancerId()).get(lbHostUsage.getHostId()).add(lbHostUsage); } return lbMap; } }