class Qiniu::HostManager

Public Class Methods

new(config) click to toggle source
# File lib/qiniu/host_manager.rb, line 8
def initialize(config)
  @config = config
  @mutex = Mutex.new
  @hosts = {}
end

Public Instance Methods

fetch_host(bucket, opts = {}) click to toggle source
# File lib/qiniu/host_manager.rb, line 24
def fetch_host(bucket, opts = {})
  if !multi_region_support?
    "#{extract_protocol(opts)}://iovip.qbox.me"
  elsif bucket
    hosts(bucket)[extract_protocol(opts)]['io'][0] rescue "#{extract_protocol(opts)}://iovip.qbox.me"
  else
    raise BucketIsMissing, 'HostManager#fetch_host: bucket is required when multi_region is enabled'
  end
end
global(bucket, opts = {}) click to toggle source
# File lib/qiniu/host_manager.rb, line 42
def global(bucket, opts = {})
  if multi_region_support?
    !!hosts(bucket)['global']
  else
    raise 'HostManager#global: multi_region must be enabled'
  end
end
up_host(bucket, opts = {}) click to toggle source
# File lib/qiniu/host_manager.rb, line 14
def up_host(bucket, opts = {})
  if !multi_region_support?
    "#{extract_protocol(opts)}://up.qiniu.com"
  elsif bucket
    hosts(bucket)[extract_protocol(opts)]['up'][0] rescue "#{extract_protocol(opts)}://up.qiniu.com"
  else
    raise BucketIsMissing, 'HostManager#up_host: bucket is required when multi_region is enabled'
  end
end
up_hosts(bucket, opts = {}) click to toggle source
# File lib/qiniu/host_manager.rb, line 34
def up_hosts(bucket, opts = {})
  if multi_region_support?
    hosts(bucket)[extract_protocol(opts)]['up']
  else
    raise 'HostManager#up_hosts: multi_region must be enabled'
  end
end

Private Instance Methods

delete_host(bucket) click to toggle source
# File lib/qiniu/host_manager.rb, line 98
def delete_host(bucket)
  @mutex.synchronize do
    @hosts.delete(bucket)
  end
end
extract_protocol(opts) click to toggle source
# File lib/qiniu/host_manager.rb, line 52
def extract_protocol(opts)
  (opts[:protocol] || @config[:protocol]).to_s
end
host_expired?(host) click to toggle source
# File lib/qiniu/host_manager.rb, line 82
def host_expired?(host)
  host[:time] + host['ttl'] < Time.now
end
hosts(bucket) click to toggle source
# File lib/qiniu/host_manager.rb, line 60
def hosts(bucket)
  host = read_host(bucket)
  if host
    if host_expired?(host)
      delete_host(bucket)
    else
      return host
    end
  end
  url = @config[:uc_host] + '/v1/query?' + HTTP.generate_query_string(ak: @config[:access_key], bucket: bucket)
  status, body = HTTP.api_get(url)
  if HTTP.is_response_ok?(status)
    Utils.debug("Query #{bucket} hosts Success: #{body}")
    host = body.merge(:time => Time.now)
    write_host(bucket, host)
    host
  else
    Utils.debug("Query #{bucket} hosts Error: #{body}")
    raise "Host query is failed"
  end
end
multi_region_support?() click to toggle source
# File lib/qiniu/host_manager.rb, line 56
def multi_region_support?
  @config[:multi_region]
end
read_host(bucket) click to toggle source
# File lib/qiniu/host_manager.rb, line 86
def read_host(bucket)
  @mutex.synchronize do
    @hosts[bucket]
  end
end
write_host(bucket, host) click to toggle source
# File lib/qiniu/host_manager.rb, line 92
def write_host(bucket, host)
  @mutex.synchronize do
    @hosts[bucket] = host
  end
end