in src/main/java/com/amazon/jenkins/ec2fleet/FleetStateStats.java [82:124]
public static FleetStateStats readClusterState(final AmazonEC2 ec2, final String fleetId, final String label) {
String token = null;
final Set<String> instances = new HashSet<>();
do {
final DescribeSpotFleetInstancesRequest request = new DescribeSpotFleetInstancesRequest();
request.setSpotFleetRequestId(fleetId);
request.setNextToken(token);
final DescribeSpotFleetInstancesResult res = ec2.describeSpotFleetInstances(request);
for (final ActiveInstance instance : res.getActiveInstances()) {
instances.add(instance.getInstanceId());
}
token = res.getNextToken();
} while (token != null);
final DescribeSpotFleetRequestsRequest request = new DescribeSpotFleetRequestsRequest();
request.setSpotFleetRequestIds(Collections.singleton(fleetId));
final DescribeSpotFleetRequestsResult fleet = ec2.describeSpotFleetRequests(request);
if (fleet.getSpotFleetRequestConfigs().isEmpty())
throw new IllegalStateException("Fleet " + fleetId + " can't be described");
final SpotFleetRequestConfig fleetConfig = fleet.getSpotFleetRequestConfigs().get(0);
final SpotFleetRequestConfigData fleetRequestConfig = fleetConfig.getSpotFleetRequestConfig();
// Index configured instance types by weight:
final Map<String, Double> instanceTypeWeights = new HashMap<>();
for (SpotFleetLaunchSpecification launchSpecification : fleetRequestConfig.getLaunchSpecifications()) {
final String instanceType = launchSpecification.getInstanceType();
if (instanceType == null) continue;
final Double instanceWeight = launchSpecification.getWeightedCapacity();
final Double existingWeight = instanceTypeWeights.get(instanceType);
if (instanceWeight == null || (existingWeight != null && existingWeight > instanceWeight)) {
continue;
}
instanceTypeWeights.put(instanceType, instanceWeight);
}
return new FleetStateStats(fleetId,
fleetRequestConfig.getTargetCapacity(),
fleetConfig.getSpotFleetRequestState(), instances,
instanceTypeWeights);
}