/*
*
* Copyright 2013 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.netflix.ice.tag;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.netflix.ice.processor.Ec2InstanceReservationPrice;
import com.netflix.ice.processor.Ec2InstanceReservationPrice.ReservationUtilization.*;
import java.util.List;
import java.util.concurrent.ConcurrentMap;
public class Operation extends Tag {
protected int seq = Integer.MAX_VALUE;
private Operation (String name) {
super(name);
}
private static ConcurrentMap<String, Operation> operations = Maps.newConcurrentMap();
public static final ReservationOperation ondemandInstances = new ReservationOperation("OndemandInstances", 0);
public static final ReservationOperation reservedInstances = new ReservationOperation("ReservedInstances", 1);
public static final ReservationOperation reservedInstancesLight = new ReservationOperation("ReservedInstancesLight", 2);
public static final ReservationOperation bonusReservedInstancesLight = new ReservationOperation("BonusReservedInstancesLight", 3);
public static final ReservationOperation borrowedInstancesLight = new ReservationOperation("BorrowedInstancesLight", 4);
public static final ReservationOperation lentInstancesLight = new ReservationOperation("LentInstancesLight", 5);
public static final ReservationOperation unusedInstancesLight = new ReservationOperation("UnusedInstancesLight", 6);
public static final ReservationOperation upfrontAmortizedLight = new ReservationOperation("UpfrontAmortizedLight", 7);
public static final ReservationOperation reservedInstancesMedium = new ReservationOperation("ReservedInstancesMedium", 8);
public static final ReservationOperation bonusReservedInstancesMedium = new ReservationOperation("BonusReservedInstancesMedium", 9);
public static final ReservationOperation borrowedInstancesMedium = new ReservationOperation("BorrowedInstancesMedium", 10);
public static final ReservationOperation lentInstancesMedium = new ReservationOperation("LentInstancesMedium", 11);
public static final ReservationOperation unusedInstancesMedium = new ReservationOperation("UnusedInstancesMedium", 12);
public static final ReservationOperation upfrontAmortizedMedium = new ReservationOperation("UpfrontAmortizedMedium", 13);
public static final ReservationOperation reservedInstancesHeavy = new ReservationOperation("ReservedInstancesHeavy", 14);
public static final ReservationOperation bonusReservedInstancesHeavy = new ReservationOperation("BonusReservedInstancesHeavy", 15);
public static final ReservationOperation borrowedInstancesHeavy = new ReservationOperation("BorrowedInstancesHeavy", 16);
public static final ReservationOperation lentInstancesHeavy = new ReservationOperation("LentInstancesHeavy", 17);
public static final ReservationOperation unusedInstancesHeavy = new ReservationOperation("UnusedInstancesHeavy", 18);
public static final ReservationOperation upfrontAmortizedHeavy = new ReservationOperation("UpfrontAmortizedHeavy", 19);
public static final ReservationOperation reservedInstancesFixed = new ReservationOperation("ReservedInstancesFixed", 20);
public static final ReservationOperation bonusReservedInstancesFixed = new ReservationOperation("BonusReservedInstancesFixed", 21);
public static final ReservationOperation borrowedInstancesFixed = new ReservationOperation("BorrowedInstancesFixed", 22);
public static final ReservationOperation lentInstancesFixed = new ReservationOperation("LentInstancesFixed", 23);
public static final ReservationOperation unusedInstancesFixed = new ReservationOperation("UnusedInstancesFixed", 24);
public static final ReservationOperation upfrontAmortizedFixed = new ReservationOperation("UpfrontAmortizedFixed", 25);
public static ReservationOperation getReservedInstances(Ec2InstanceReservationPrice.ReservationUtilization utilization) {
switch (utilization) {
case FIXED: return reservedInstancesFixed;
case HEAVY: return reservedInstancesHeavy;
case MEDIUM: return reservedInstancesMedium;
case LIGHT: return reservedInstancesLight;
default: throw new RuntimeException("Unknown ReservationUtilization " + utilization);
}
}
public static ReservationOperation getBonusReservedInstances(Ec2InstanceReservationPrice.ReservationUtilization utilization) {
switch (utilization) {
case FIXED: return bonusReservedInstancesFixed;
case HEAVY: return bonusReservedInstancesHeavy;
case MEDIUM: return bonusReservedInstancesMedium;
case LIGHT: return bonusReservedInstancesLight;
default: throw new RuntimeException("Unknown ReservationUtilization " + utilization);
}
}
public static ReservationOperation getBorrowedInstances(Ec2InstanceReservationPrice.ReservationUtilization utilization) {
switch (utilization) {
case FIXED: return borrowedInstancesFixed;
case HEAVY: return borrowedInstancesHeavy;
case MEDIUM: return borrowedInstancesMedium;
case LIGHT: return borrowedInstancesLight;
default: throw new RuntimeException("Unknown ReservationUtilization " + utilization);
}
}
public static List<ReservationOperation> getLentInstances() {
return Lists.newArrayList(lentInstancesFixed, lentInstancesHeavy, lentInstancesMedium, lentInstancesLight);
}
public static ReservationOperation getLentInstances(Ec2InstanceReservationPrice.ReservationUtilization utilization) {
switch (utilization) {
case FIXED: return lentInstancesFixed;
case HEAVY: return lentInstancesHeavy;
case MEDIUM: return lentInstancesMedium;
case LIGHT: return lentInstancesLight;
default: throw new RuntimeException("Unknown ReservationUtilization " + utilization);
}
}
public static ReservationOperation getUnusedInstances(Ec2InstanceReservationPrice.ReservationUtilization utilization) {
switch (utilization) {
case FIXED: return unusedInstancesFixed;
case HEAVY: return unusedInstancesHeavy;
case MEDIUM: return unusedInstancesMedium;
case LIGHT: return unusedInstancesLight;
default: throw new RuntimeException("Unknown ReservationUtilization " + utilization);
}
}
public static ReservationOperation getUpfrontAmortized(Ec2InstanceReservationPrice.ReservationUtilization utilization) {
switch (utilization) {
case FIXED: return upfrontAmortizedFixed;
case HEAVY: return upfrontAmortizedHeavy;
case MEDIUM: return upfrontAmortizedMedium;
case LIGHT: return upfrontAmortizedLight;
default: throw new RuntimeException("Unknown ReservationUtilization " + utilization);
}
}
public static Operation getOperation(String name) {
Operation operation = operations.get(name);
if (operation == null) {
operations.putIfAbsent(name, new Operation(name));
operation = operations.get(name);
}
return operation;
}
public static List<Operation> getOperations(List<String> names) {
List<Operation> result = Lists.newArrayList();
for (String name: names)
result.add(operations.get(name));
return result;
}
public static class ReservationOperation extends Operation {
private ReservationOperation(String name, int seq) {
super(name);
this.seq = seq;
operations.put(name, this);
}
}
@Override
public int compareTo(Tag t) {
if (t instanceof Operation) {
Operation o = (Operation)t;
int result = this.seq - o.seq;
return result == 0 ? this.name.compareTo(t.name) : result;
}
else
return super.compareTo(t);
}
}