class RedisCloudAutoUpgrade

See README.md for details

Configuration part

Constants

Configuration
IllegalConfiguration
VERSION

Attributes

config[R]

Public Class Methods

new() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 17
def initialize
  @config = Configuration.new
end

Public Instance Methods

configure(config) click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 21
def configure(config)
  @config.configure config
  self
end
current_redis_cloud_plan() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 26
def current_redis_cloud_plan
  @__current_redis_cloud_plan ||=
    HerokuAPI.current_redis_cloud_plan(**heroku_params)
end
current_redis_mem_usage() click to toggle source

Memoize from lab42_core gem?

# File lib/redis_cloud_auto_upgrade.rb, line 32
def current_redis_mem_usage
  return @__current_redis_mem_usage__ if @__current_redis_mem_usage__
  redis_instance = config.redis_instance || Redis.current
  @__current_redis_mem_usage__ = redis_instance.info['used_memory'].to_i
end
needs_to_upgrade?() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 38
def needs_to_upgrade?
  !(current_redis_mem_usage < currently_available_memory * config.treshhold)
end
potential_upgrade!() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 42
def potential_upgrade!
  raise IllegalConfiguration, config.errors_human_readable unless config.valid?
  do_potential_upgrade!
end

Private Instance Methods

currently_available_memory() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 51
def currently_available_memory
  @__currently_available_memory__ ||=
    HerokuAPI.currently_available_memory(
      **config.only(:heroku_api_key, :heroku_app_name)
    )
end
do_potential_upgrade!() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 58
def do_potential_upgrade!
  if needs_to_upgrade?
    do_upgrade!
    true
  else
    info_no_upgrade
    false
  end
end
do_upgrade!() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 68
def do_upgrade!
  old_plan = current_redis_cloud_plan
  new_plan = HerokuAPI.upgrade_plan!(
    **config.only(:heroku_api_key, :heroku_app_name)
  )
  log_upgrade old_plan, new_plan
  config.on_upgrade.call(update_data(old_plan, new_plan)) if config.on_upgrade
end
heroku_params() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 86
def heroku_params
  @__heroku_params__ ||=
    config.only(:heroku_api_key, :heroku_app_name)
end
info(str) click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 91
def info(str)
  return unless config.logger
  config.logger.info([self.class.name, str].join(' '))
end
info_no_upgrade() click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 96
def info_no_upgrade
  msg = format(
    'no upgrade needed %s mem usage %dMB or %d%%, treshhold: %d%%, current plan: %s',
    config.heroku_app_name,
    current_redis_mem_usage_megab,
    current_redis_mem_usage_percent,
    treshhold_in_percent,
    current_redis_cloud_plan
  )
  info msg
end
log_upgrade(old_plan, new_plan) click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 77
  def log_upgrade(old_plan, new_plan)
    info <<-EOS
upgraded RedisCloud plan for app: #{config.heroku_app_name}
mem usage was approximately #{current_redis_mem_usage / 1_000_000}MB
old_plan was #{old_plan}
new_plan is #{new_plan}
EOS
  end
update_data(old_plan, new_plan) click to toggle source
# File lib/redis_cloud_auto_upgrade.rb, line 108
def update_data(old_plan, new_plan)
  OpenStruct.new(
    old_plan: old_plan,
    new_plan: new_plan,
    upgraded_at: Time.now,
    mem_usage: current_redis_mem_usage,
    mem_usage_in_percent: current_redis_mem_usage_percent,
    treshhold_in_percent: treshhold_in_percent
  )
end