Project

General

Profile

Download (1.43 KB) Statistics
| Branch: | Tag: | Revision:
module ProxyStatus
class Base
def initialize(proxy, opts = {})
@proxy = proxy
@cache_duration = opts[:cache_duration] || 3.minutes
@cache = opts[:cache].nil? ? true : opts[:cache]
end

def revoke_cache!(subkey = '')
Rails.cache.delete(cache_key + subkey)
end

def cache_key
"proxy_#{proxy.id}/#{self.class.humanized_name}"
end

def self.humanized_name
'Base'
end

# Avoid marshalling @api as it may cause problems when caching https proxies.
def marshal_dump
[@proxy, @cache_duration, @cache]
end

def marshal_load(array)
@proxy, @cache_duration, @cache = array
end

protected

def api_class
"ProxyAPI::#{self.class.humanized_name}".classify.constantize
end

private

attr_reader :proxy, :cache_duration, :cache

def api
@api ||= api_class.new(:url => proxy.url)
rescue NameError => e
raise Foreman::WrappedException.new(e, N_('Unable to initialize ProxyAPI class %s'), "ProxyAPI::#{self.class.humanized_name}")
end

def fetch_proxy_data(subkey = '')
if cache
Rails.cache.fetch(cache_key + subkey, :expires_in => cache_duration) do
yield
end
else
yield
end
rescue *ProxyStatus::CONNECTION_ERRORS => exception
raise ::Foreman::WrappedException.new exception, N_("Unable to connect")
end
end
end
ProxyStatus.status_registry.add(ProxyStatus::Base)
(1-1/6)