package org.openstack.atlas.usage.thread;
import org.openstack.atlas.atomhopper.exception.AtomHopperMappingException;
import org.openstack.atlas.atomhopper.factory.UsageEntryFactory;
import org.openstack.atlas.atomhopper.factory.UsageEntryFactoryImpl;
import org.openstack.atlas.restclients.atomhopper.AtomHopperClient;
import org.openstack.atlas.restclients.auth.IdentityAuthClient;
import org.openstack.atlas.service.domain.entities.Usage;
import org.openstack.atlas.service.domain.events.repository.AlertRepository;
import org.openstack.atlas.service.domain.events.repository.LoadBalancerEventRepository;
import org.openstack.atlas.service.domain.repository.UsageRepository;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class UsageThread extends AbstractAtomHopperThread {
private UsageEntryFactory usageEntryFactory;
private UsageRepository usageRepository;
public UsageThread(Collection<Usage> usages, AtomHopperClient client, IdentityAuthClient identityAuthClient,
UsageRepository usageRepository,
LoadBalancerEventRepository loadBalancerEventRepository,
AlertRepository alertRepository) {
super(new ArrayList<Usage>(usages), client, identityAuthClient, loadBalancerEventRepository, alertRepository);
this.usageRepository = usageRepository;
this.usageEntryFactory = new UsageEntryFactoryImpl();
}
@Override
public void updatePushedRecords(List<Usage> successfullyPushedRecords) {
if (!successfullyPushedRecords.isEmpty()) {
usageRepository.batchUpdate(successfullyPushedRecords, false);
}
}
@Override
public String getThreadName() {
return this.getClass().getName();
}
@Override
public Map<Object, Object> generateAtomHopperEntry(Usage usage) throws AtomHopperMappingException {
return usageEntryFactory.createEntry(usage);
}
}