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

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

Introduction

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

Prototype


public Float getUsagePrice() 

Source Link

Document

The usage price of the Reserved Instance, per hour.

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   ww w  . ja va2 s . co 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 www .jav a 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);
}