Example usage for com.amazonaws.services.ec2.model ReservedInstances getFixedPrice

List of usage examples for com.amazonaws.services.ec2.model ReservedInstances getFixedPrice

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2.model ReservedInstances getFixedPrice.

Prototype


public Float getFixedPrice() 

Source Link

Document

The purchase price of the Reserved Instance.

Usage

From source file:com.netflix.ice.basic.BasicReservationService.java

License:Apache License

public void updateEc2Reservations(Map<String, ReservedInstances> reservationsFromApi) {
    Map<ReservationUtilization, Map<TagGroup, List<Reservation>>> reservationMap = Maps.newTreeMap();
    for (ReservationUtilization utilization : ReservationUtilization.values()) {
        reservationMap.put(utilization, Maps.<TagGroup, List<Reservation>>newHashMap());
    }//from  w  w w.j  av a2s . c  o  m

    for (String key : reservationsFromApi.keySet()) {
        ReservedInstances reservedInstances = reservationsFromApi.get(key);
        if (reservedInstances.getInstanceCount() <= 0)
            continue;

        String accountId = key.substring(0, key.indexOf(","));
        Account account = config.accountService.getAccountById(accountId);
        Zone zone = Zone.getZone(reservedInstances.getAvailabilityZone());
        if (zone == null)
            logger.error(
                    "Not able to find zone for reserved instances " + reservedInstances.getAvailabilityZone());

        ReservationUtilization utilization = ReservationUtilization.get(reservedInstances.getOfferingType());
        long endTime = Math.min(reservedInstances.getEnd().getTime(),
                reservedInstances.getStart().getTime() + reservedInstances.getDuration() * 1000);
        if (endTime <= config.startDate.getMillis())
            continue;
        Reservation reservation = new Reservation(reservedInstances.getInstanceCount(),
                reservedInstances.getStart().getTime(), endTime, utilization, reservedInstances.getFixedPrice(),
                reservedInstances.getUsagePrice());

        String osStr = reservedInstances.getProductDescription();
        InstanceOs os = InstanceOs.withDescription(osStr);

        UsageType usageType = UsageType.getUsageType(reservedInstances.getInstanceType() + os.usageType,
                "hours");

        TagGroup reservationKey = new TagGroup(account, zone.region, zone, Product.ec2_instance,
                Operation.getReservedInstances(utilization), usageType, null);

        List<Reservation> reservations = reservationMap.get(utilization).get(reservationKey);
        if (reservations == null) {
            reservationMap.get(utilization).put(reservationKey, Lists.<Reservation>newArrayList(reservation));
        } else {
            reservations.add(reservation);
        }
    }

    this.reservations = reservationMap;
}

From source file:com.netflix.ice.processor.ReservationCapacityPoller.java

License:Apache License

@Override
protected void poll() throws Exception {
    ProcessorConfig config = ProcessorConfig.getInstance();

    // read from s3 if not exists
    File file = new File(config.localDir, "reservation_capacity.txt");

    if (!file.exists()) {
        logger.info("downloading " + file + "...");
        AwsUtils.downloadFileIfNotExist(config.workS3BucketName, config.workS3BucketPrefix, file);
        logger.info("downloaded " + file);
    }/*from  w  ww . ja  va  2 s.c o m*/

    // read from file
    Map<String, ReservedInstances> reservations = Maps.newTreeMap();
    if (file.exists()) {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(file));
            String line;

            while ((line = reader.readLine()) != null) {
                String[] tokens = line.split(",");
                String accountId = tokens[0];
                String region = tokens[1];
                String reservationId = tokens[2];
                String zone = tokens[3];
                Long start = Long.parseLong(tokens[4]);
                long duration = Long.parseLong(tokens[5]);
                String instanceType = tokens[6];
                String productDescription = tokens[7];
                int instanceCount = Integer.parseInt(tokens[8]);
                String offeringType = tokens[9];
                String state = tokens[10];
                Long end = tokens.length > 11 ? Long.parseLong(tokens[11]) : null;
                float fixedPrice = tokens.length > 12 ? Float.parseFloat(tokens[12]) : 0;
                float usagePrice = tokens.length > 13 ? Float.parseFloat(tokens[13]) : 0;

                ReservedInstances reservation = new ReservedInstances().withAvailabilityZone(zone)
                        .withStart(new Date(start)).withDuration(duration).withInstanceType(instanceType)
                        .withProductDescription(productDescription).withInstanceCount(instanceCount)
                        .withOfferingType(offeringType).withState(state).withFixedPrice(fixedPrice)
                        .withUsagePrice(usagePrice);
                if (end != null)
                    reservation.setEnd(new Date(end));
                else
                    reservation.setEnd(new Date(start + duration * 1000));

                reservations.put(accountId + "," + region + "," + reservationId, reservation);
            }
        } catch (Exception e) {
            logger.error("error in reading " + file, e);
        } finally {
            if (reader != null)
                try {
                    reader.close();
                } catch (Exception e) {
                }
        }
    }
    logger.info("read " + reservations.size() + " reservations.");

    for (Account account : config.accountService.getReservationAccounts().keySet()) {
        try {
            AmazonEC2Client ec2Client;
            String assumeRole = config.accountService.getReservationAccessRoles().get(account);
            if (assumeRole != null) {
                String externalId = config.accountService.getReservationAccessExternalIds().get(account);
                final Credentials credentials = AwsUtils.getAssumedCredentials(account.id, assumeRole,
                        externalId);
                ec2Client = new AmazonEC2Client(new AWSSessionCredentials() {
                    public String getAWSAccessKeyId() {
                        return credentials.getAccessKeyId();
                    }

                    public String getAWSSecretKey() {
                        return credentials.getSecretAccessKey();
                    }

                    public String getSessionToken() {
                        return credentials.getSessionToken();
                    }
                });
            } else
                ec2Client = new AmazonEC2Client(AwsUtils.awsCredentialsProvider.getCredentials(),
                        AwsUtils.clientConfig);

            for (Region region : Region.getAllRegions()) {

                ec2Client.setEndpoint("ec2." + region.name + ".amazonaws.com");

                try {
                    DescribeReservedInstancesResult result = ec2Client.describeReservedInstances();
                    for (ReservedInstances reservation : result.getReservedInstances()) {
                        String key = account.id + "," + region.name + ","
                                + reservation.getReservedInstancesId();
                        reservations.put(key, reservation);
                        if (reservation.getEnd() == null)
                            reservation.setEnd(new Date(
                                    reservation.getStart().getTime() + reservation.getDuration() * 1000L));
                        if (reservation.getFixedPrice() == null)
                            reservation.setFixedPrice(0f);
                        if (reservation.getUsagePrice() == null)
                            reservation.setUsagePrice(0f);
                    }
                } catch (Exception e) {
                    logger.error("error in describeReservedInstances for " + region.name + " " + account.name,
                            e);
                }
            }

            ec2Client.shutdown();
        } catch (Exception e) {
            logger.error("Error in describeReservedInstances for " + account.name, e);
        }
    }

    config.reservationService.updateEc2Reservations(reservations);
    updatedConfig = true;

    // archive to disk
    BufferedWriter writer = null;
    try {
        writer = new BufferedWriter(new FileWriter(file));
        for (String key : reservations.keySet()) {
            ReservedInstances reservation = reservations.get(key);
            String[] line = new String[] { key, reservation.getAvailabilityZone(),
                    reservation.getStart().getTime() + "", reservation.getDuration().toString(),
                    reservation.getInstanceType(), reservation.getProductDescription(),
                    reservation.getInstanceCount().toString(), reservation.getOfferingType(),
                    reservation.getState(), reservation.getEnd().getTime() + "",
                    reservation.getFixedPrice() + "", reservation.getUsagePrice() + "", };
            writer.write(StringUtils.join(line, ","));
            writer.newLine();
        }
    } catch (Exception e) {
        logger.error("", e);
    } finally {
        if (writer != null)
            try {
                writer.close();
            } catch (Exception e) {
            }
    }
    logger.info("archived " + reservations.size() + " reservations.");

    // archive to s3
    logger.info("uploading " + file + "...");
    AwsUtils.upload(config.workS3BucketName, config.workS3BucketPrefix, config.localDir, file.getName());
    logger.info("uploaded " + file);
}