package com.clouck.comparator;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.amazonaws.services.ec2.model.SpotInstanceRequest;
import com.clouck.model.Event;
import com.clouck.model.EventType;
import com.clouck.model.aws.ec2.Ec2SpotInstanceRequest;
@Component
public class Ec2SpotInstanceRequestComparator extends AbstractEc2Comparator<Ec2SpotInstanceRequest> {
private static final Logger log = LoggerFactory.getLogger(Ec2SpotInstanceRequestComparator.class);
@Override
public Event firstScan() {
return createFirstScanEvent(EventType.Ec2_Spot_Instance_Request_First_Scan);
}
@Override
public Event initialise(Ec2SpotInstanceRequest newResource) {
return createEvent(null, newResource, EventType.Ec2_Spot_Instance_Request_Found);
}
@Override
public Event add(Ec2SpotInstanceRequest newResource) {
return createEvent(null, newResource, EventType.Ec2_Spot_Instance_Request_Created);
}
@Override
public Event delete(Ec2SpotInstanceRequest oldResource) {
return createEvent(oldResource, null, EventType.Ec2_Spot_Instance_Request_Cancelled);
}
@Override
protected void update(List<Event> result, Ec2SpotInstanceRequest oldResource, Ec2SpotInstanceRequest newResource) {
SpotInstanceRequest oldReq = oldResource.getResource();
SpotInstanceRequest newReq = newResource.getResource();
if (notEqual(oldReq.getState(), newReq.getState())) {
switch (newReq.getState()) {
case "open":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Created));
break;
case "active":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Active));
break;
case "closed":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Closed));
break;
case "failed":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Failed));
break;
default:
log.error("not handled state:" + newReq.getState());
result.add(createEvent(oldResource, newResource, EventType.Unknown));
}
}
if (notEqual(oldReq.getStatus().getCode(), newReq.getStatus().getCode())) {
switch (newReq.getStatus().getCode()) {
case "pending-fulfillment":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Pending_Fulfillment));
case "price-too-low":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Price_Too_Low));
break;
case "fulfilled":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Fulfilled));
break;
case "instance-terminated-by-price":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Fulfilled));
break;
case "instance-terminated-no-capacity":
result.add(createEvent(oldResource, newResource, EventType.Ec2_Spot_Instance_Request_Instance_Terminated_No_Capacity));
break;
default:
log.error("not handled status code:" + newReq.getStatus().getCode());
result.add(createEvent(oldResource, newResource, EventType.Unknown));
}
}
}
}