use of com.amazonaws.services.ec2.model.DescribeSpotPriceHistoryRequest in project herd by FINRAOS.
the class Ec2DaoImpl method getLatestSpotPrices.
/**
* This implementation uses DescribeSpotPriceHistory API which returns the latest spot price history for the specified AZ and instance types. This method
* then filters the returned list to only contain the latest spot price for each instance type.
*/
@Override
public List<SpotPrice> getLatestSpotPrices(String availabilityZone, Collection<String> instanceTypes, Collection<String> productDescriptions, AwsParamsDto awsParamsDto) {
AmazonEC2Client ec2Client = getEc2Client(awsParamsDto);
DescribeSpotPriceHistoryRequest describeSpotPriceHistoryRequest = new DescribeSpotPriceHistoryRequest();
describeSpotPriceHistoryRequest.setAvailabilityZone(availabilityZone);
describeSpotPriceHistoryRequest.setInstanceTypes(instanceTypes);
describeSpotPriceHistoryRequest.setProductDescriptions(productDescriptions);
DescribeSpotPriceHistoryResult describeSpotPriceHistoryResult = ec2Operations.describeSpotPriceHistory(ec2Client, describeSpotPriceHistoryRequest);
List<SpotPrice> spotPrices = new ArrayList<>();
Set<String> instanceTypesFound = new HashSet<>();
for (SpotPrice spotPriceHistoryEntry : describeSpotPriceHistoryResult.getSpotPriceHistory()) {
if (instanceTypesFound.add(spotPriceHistoryEntry.getInstanceType())) {
spotPrices.add(spotPriceHistoryEntry);
}
}
return spotPrices;
}
use of com.amazonaws.services.ec2.model.DescribeSpotPriceHistoryRequest in project herd by FINRAOS.
the class MockEc2OperationsImpl method describeSpotPriceHistory.
@Override
public DescribeSpotPriceHistoryResult describeSpotPriceHistory(AmazonEC2Client ec2Client, DescribeSpotPriceHistoryRequest describeSpotPriceHistoryRequest) {
List<SpotPrice> spotPriceHistories = new ArrayList<>();
String requestedAvailabilityZone = describeSpotPriceHistoryRequest.getAvailabilityZone();
// Get availability zones to search for
Set<MockAvailabilityZone> requestedAvailabilityZones = new HashSet<>();
// If requested zone is specified, get and add
if (requestedAvailabilityZone != null) {
requestedAvailabilityZones.add(mockAvailabilityZones.get(requestedAvailabilityZone));
} else // If requested zone is not specified, add all
{
requestedAvailabilityZones.addAll(mockAvailabilityZones.values());
}
// Get instance types to search for
List<String> requestedInstanceTypes = describeSpotPriceHistoryRequest.getInstanceTypes();
// If not specified, add all instance types
if (requestedInstanceTypes.isEmpty()) {
requestedInstanceTypes.addAll(mockInstanceTypes);
}
// search for price for all AZ and instance types requested
for (MockAvailabilityZone mockAvailabilityZone : requestedAvailabilityZones) {
for (String requestedInstanceType : requestedInstanceTypes) {
MockSpotPrice mockSpotPrice = mockAvailabilityZone.getSpotPrices().get(requestedInstanceType);
if (mockSpotPrice != null) {
spotPriceHistories.add(mockSpotPrice.toAwsObject());
}
}
}
DescribeSpotPriceHistoryResult describeSpotPriceHistoryResult = new DescribeSpotPriceHistoryResult();
describeSpotPriceHistoryResult.setSpotPriceHistory(spotPriceHistories);
return describeSpotPriceHistoryResult;
}
Aggregations