class Aws::RiKanjoo::Rds

Attributes

instance_type[R]
region[R]
ri_util[R]

Public Class Methods

new(region, instance_type, ri_util, multiaz) click to toggle source
# File lib/aws/rikanjo/rds.rb, line 6
def initialize(region, instance_type, ri_util, multiaz)
  @region         = region
  @instance_type  = "db.#{instance_type}"
  @ri_util        = ri_util
  @rdbms          = 'mysql'
  @current_price_url  = "http://a0.awsstatic.com/pricing/1/rds/#{@rdbms}"
  @previous_price_url = "http://a0.awsstatic.com/pricing/1/rds/#{@rdbms}/previous-generation"
  @multiaz        = multiaz
end

Public Instance Methods

convert_region(region) click to toggle source
# File lib/aws/rikanjo/rds.rb, line 105
def convert_region(region)
  # not same om region
  case region
  when 'us-east-1'      then 'us-east'
  when 'us-west-1'      then 'us-west'
  when 'us-west-2'      then 'us-west-2'
  when 'eu-west-1'      then 'eu-ireland'
  when 'ap-southeast-1' then 'apac-sin'
  when 'ap-northeast-1' then 'apac-tokyo'
  when 'ap-southeast-2' then 'apac-syd'
  when 'sa-east-1'      then 'sa-east-1'
  end
end
om_price_file() click to toggle source
# File lib/aws/rikanjo/rds.rb, line 84
def om_price_file
  return (@multiaz) ? "pricing-multiAZ-deployments.min.js" : "pricing-standard-deployments.min.js"
end
om_price_from_contents(contents) click to toggle source
# File lib/aws/rikanjo/rds.rb, line 16
def om_price_from_contents(contents)
  region = convert_region(@region)

  # parse
  json = parse_contents(contents)

  # select 'region' and 'instance_type'
  json['config']['regions'].each do |r|
    # r = {"region"=>"us-east", "instanceTypes"=>[{"type"=>"generalCurrentGen", ...
    next unless r['region'] == region
    r['types'].each do |type|
      # type = {"type"=>"generalCurrentGen", "sizes"=>[{"size"=>"m3.medium", "vCPU"=>"1" ...
      type['tiers'].each do |i|
        next unless i['name'] == @instance_type

        return { hr_price: i['prices']['USD'] }
      end
    end
  end

  abort("[rds][#{region}][#{@instance_type}] Not found om-price?")
end
parse_contents(data) click to toggle source
# File lib/aws/rikanjo/rds.rb, line 100
def parse_contents(data)
  data = data.gsub("/*\n * This file is intended for use only on aws.amazon.com. We do not guarantee its availability or accuracy.\n *\n * Copyright 2014 Amazon.com, Inc. or its affiliates. All rights reserved.\n */\ncallback({",'{').gsub("\);", '').gsub(/([a-zA-Z]+):/, '"\1":')
  return Yajl::Parser.parse(data)
end
previous_generation_type() click to toggle source
# File lib/aws/rikanjo/rds.rb, line 92
def previous_generation_type
  case @instance_type
  when /^db.(c1|m2|cc2\.8xlarge|cr1\.8xlarge|hi1\.4xlarge|cg1\.4xlarge)/ then true
  when /^db.m1/ then (@instance_type == 'db.m1.small') ? false : true
  else false
  end
end
price_url() click to toggle source
# File lib/aws/rikanjo/rds.rb, line 80
def price_url
  return (self.previous_generation_type) ? @previous_price_url : @current_price_url
end
ri_price_file() click to toggle source
# File lib/aws/rikanjo/rds.rb, line 88
def ri_price_file
  return "pricing-#{@ri_util}-utilization-reserved-instances.min.js"
end
ri_price_from_contents(contents) click to toggle source
# File lib/aws/rikanjo/rds.rb, line 39
def ri_price_from_contents(contents)
  region = convert_region(@region)
  mtype  = (@multiaz) ? 'Multi-AZ' : 'Single-AZ'

  # parse
  json = parse_contents(contents)

  ri_info = nil

  json['config']['regions'].each do |r|
    next unless r['region'] == region

    r['instanceTypes'].each do |type|
      next unless type['type'] =~ /#{mtype}/

      type['tiers'].each do |i|
        next unless i['size'] == @instance_type

        ri_info = ri_info ||= {}
        i['valueColumns'].each do |y|
          # beauty
          y['name'].gsub!(/^year/, 'yr')
          y['prices']['USD'].gsub!(/,/, '')

          case y['name']
          when 'yrTerm1'
            ri_info[@ri_util] = { upfront: y['prices']['USD'] }
          when 'yrTerm1Hourly'
            ri_info[@ri_util].store(:hr_price, y['prices']['USD'])
          end
        end

      end
    end
  end

  abort("[rds][#{region}][#{@instance_type}] Not found ri-price?") unless ri_info

  return ri_info
end