package com.clouck.comparator;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.amazonaws.services.ec2.model.Address;
import com.clouck.model.Event;
import com.clouck.model.EventType;
import com.clouck.model.aws.ec2.Ec2ElasticIP;
@Component
public class Ec2ElasticIPComparator extends AbstractEc2Comparator<Ec2ElasticIP> {
private static final Logger log = LoggerFactory.getLogger(Ec2ElasticIPComparator.class);
@Override
public Event firstScan() {
return createFirstScanEvent(EventType.Ec2_Elastic_Ip_First_Scan);
}
@Override
public Event initialise(Ec2ElasticIP newResource) {
return createEvent(null, newResource, EventType.Ec2_Elastic_Ip_Found);
}
@Override
public Event add(Ec2ElasticIP newResource) {
return createEvent(null, newResource, EventType.Ec2_Elastic_Ip_Allocated);
}
@Override
protected void update(List<Event> result, Ec2ElasticIP oldResource, Ec2ElasticIP newResource) {
Address oldAddress = oldResource.getResource();
Address newAddress = newResource.getResource();
if (oldAddress.getDomain().equals("vpc")) {
if (notEqual(oldAddress.getInstanceId(), newAddress.getInstanceId())) {
if (StringUtils.isEmpty(oldAddress.getInstanceId()) && StringUtils.isNotEmpty(newAddress.getInstanceId())) {
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Associated, newAddress.getInstanceId(), newAddress.getNetworkInterfaceId(), newAddress.getPrivateIpAddress()));
} else if (StringUtils.isNotEmpty(oldAddress.getInstanceId()) && StringUtils.isEmpty(newAddress.getInstanceId())) {
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Disassociated, oldAddress.getInstanceId(), oldAddress.getNetworkInterfaceId(), oldAddress.getPrivateIpAddress()));
} else {
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Disassociated, oldAddress.getInstanceId(), oldAddress.getNetworkInterfaceId(), oldAddress.getPrivateIpAddress()));
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Associated, newAddress.getInstanceId(), newAddress.getNetworkInterfaceId(), newAddress.getPrivateIpAddress()));
}
} else {
if (notEqual(oldAddress.getPrivateIpAddress(), newAddress.getPrivateIpAddress())) {
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Disassociated, oldAddress.getInstanceId(), oldAddress.getNetworkInterfaceId(), oldAddress.getPrivateIpAddress()));
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Associated, newAddress.getInstanceId(), newAddress.getNetworkInterfaceId(), newAddress.getPrivateIpAddress()));
}
}
} else if (oldAddress.getDomain().equals("standard")) {
if (notEqual(oldAddress.getInstanceId(), newAddress.getInstanceId())) {
if (StringUtils.isEmpty(oldAddress.getInstanceId()) && StringUtils.isNotEmpty(newAddress.getInstanceId())) {
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Associated, newAddress.getInstanceId()));
} else if (StringUtils.isNotEmpty(oldAddress.getInstanceId()) && StringUtils.isEmpty(newAddress.getInstanceId())) {
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Disassociated, oldAddress.getInstanceId()));
} else {
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Disassociated, oldAddress.getInstanceId()));
result.add(createEvent(oldResource, newResource, EventType.Ec2_Elastic_Ip_Associated, newAddress.getInstanceId()));
}
}
} else {
log.error("unknown domain:{}", oldAddress.getDomain());
result.add(createEvent(oldResource, newResource, EventType.Unknown));
}
}
@Override
public Event delete(Ec2ElasticIP oldResource) {
return createEvent(oldResource, null, EventType.Ec2_Elastic_Ip_Released);
}
}