All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.elastisys.scale.cloudpool.aws.commons.predicates.SpotRequestPredicates Maven / Gradle / Ivy

There is a newer version: 5.2.3
Show newest version
package com.elastisys.scale.cloudpool.aws.commons.predicates;

import java.util.Arrays;
import java.util.List;

import com.amazonaws.services.ec2.model.SpotInstanceRequest;
import com.amazonaws.services.ec2.model.SpotInstanceState;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;

/**
 * {@link Predicate}s relating to AWS EC2 spot instance requests.
 */
public class SpotRequestPredicates {

	/** The range of permissible states a {@link SpotInstanceRequest} can be in. */
	private static final ImmutableList VALID_STATES = ImmutableList.of(
			SpotInstanceState.Active.toString(),
			SpotInstanceState.Cancelled.toString(),
			SpotInstanceState.Closed.toString(),
			SpotInstanceState.Failed.toString(),
			SpotInstanceState.Open.toString());

	/**
	 * Returns a {@link Predicate} that indicates if a
	 * {@link SpotInstanceRequest} is in any of a set of
	 * {@link SpotInstanceState}s.
	 *
	 * @param states
	 * @return
	 */
	public static Predicate inAnyOfStates(
			final String... states) {
		// validate states
		for (String state : states) {
			Preconditions.checkArgument(VALID_STATES.contains(state),
					"unrecognized spot instance request state '%s'", state);
		}
		return new Predicate() {
			@Override
			public boolean apply(SpotInstanceRequest spotRequest) {
				return Arrays.asList(states).contains(spotRequest.getState());
			}
		};
	}

	/**
	 * Returns a {@link Predicate} that returns true if every spot
	 * instance request in a collection of spot instance requests is in a given
	 * set of {@link SpotInstanceState}s.
	 *
	 * @param states
	 *            The acceptable states.
	 * @return
	 */
	public static Predicate> allInAnyOfStates(
			final String... states) {
		// validate states
		for (String state : states) {
			Preconditions.checkArgument(VALID_STATES.contains(state),
					"unrecognized spot instance request state '%s'", state);
		}
		final List expectedStates = ImmutableList.copyOf(states);
		return new Predicate>() {
			@Override
			public boolean apply(List spotRequests) {
				for (SpotInstanceRequest request : spotRequests) {
					if (!expectedStates.contains(request.getState())) {
						return false;
					}
				}
				return true;
			}
		};
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy