module Familia
Attributes
apiversion[W]
clients[R]
debug[RW]
delim[RW]
dump_method[RW]
load_method[RW]
logger[R]
secret[RW]
uri[R]
Public Class Methods
apiversion(r=nil, &blk)
click to toggle source
# File lib/familia.rb, line 122 def apiversion(r=nil, &blk) if blk.nil? @apiversion = r if r; else tmp = @apiversion @apiversion = r blk.call @apiversion = tmp end @apiversion end
classes(with_redis_objects=false)
click to toggle source
# File lib/familia.rb, line 42 def classes with_redis_objects=false with_redis_objects ? [@classes, RedisObject.classes].flatten : @classes end
connect(uri=nil)
click to toggle source
# File lib/familia.rb, line 84 def connect(uri=nil) uri &&= URI.parse uri if String === uri uri ||= Familia.uri conf = uri.conf conf[:thread_safe] = "true" unless conf.has_key?(:thread_safe) conf[:thread_safe] = conf[:thread_safe].to_s == "true" conf[:logging] = conf[:logging].to_s == "true" if conf.has_key?(:logging) && conf[:logging].to_s == "true" require 'logger' require 'log4r' @logger ||= log :DEBUG, "./familia.log" conf[:logger] = Familia.logger end redis = Redis.new conf Familia.trace :CONNECT, redis, conf.inspect, caller[0..3] if Familia.debug @clients[uri.serverid] = redis end
connected?(uri=nil)
click to toggle source
# File lib/familia.rb, line 107 def connected?(uri=nil) uri &&= URI.parse uri if String === uri @clients.has_key?(uri.serverid) end
debug?()
click to toggle source
# File lib/familia.rb, line 38 def debug?() @debug == true end
default_suffix(a=nil)
click to toggle source
# File lib/familia.rb, line 111 def default_suffix(a=nil) @suffix = a if a; @suffix end
default_suffix=(a)
click to toggle source
# File lib/familia.rb, line 112 def default_suffix=(a) @suffix = a end
included(obj)
click to toggle source
# File lib/familia.rb, line 158 def self.included(obj) obj.send :include, Familia::InstanceMethods obj.send :include, Gibbler::Complex obj.extend Familia::ClassMethods obj.class_zset :instances, :class => obj, :reference => true Familia.classes << obj end
index(r=nil)
click to toggle source
# File lib/familia.rb, line 113 def index(r=nil) @index = r if r; @index end
index=(r)
click to toggle source
# File lib/familia.rb, line 114 def index=(r) @index = r; r end
info(*msg)
click to toggle source
# File lib/familia.rb, line 39 def info *msg STDERR.puts *msg end
join(*r)
click to toggle source
# File lib/familia.rb, line 115 def join(*r) r.join(Familia.delim) end
ld(*msg)
click to toggle source
# File lib/familia.rb, line 45 def ld *msg info *msg if debug? end
log(level, path)
click to toggle source
# File lib/familia.rb, line 78 def log(level, path) logger = Log4r::Logger.new('familia') logger.outputters = Log4r::FileOutputter.new 'familia', :filename => path logger.level = Log4r.const_get(level) logger end
now(n=Time.now)
click to toggle source
# File lib/familia.rb, line 133 def now n=Time.now n.utc.to_i end
qnow(quantum=10.minutes, now=Familia.now)
click to toggle source
A quantized timestamp e.g. 12:32 -> 12:30
# File lib/familia.rb, line 139 def qnow quantum=10.minutes, now=Familia.now rounded = now - (now % quantum) Time.at(rounded).utc.to_i end
reconnect_all!()
click to toggle source
# File lib/familia.rb, line 101 def reconnect_all! Familia.classes.each do |klass| klass.redis.client.reconnect Familia.info "#{klass} ping: #{klass.redis.ping}" if debug? end end
redis(uri=nil)
click to toggle source
A convenience method for returning the appropriate Redis connection. If
uri
is an Integer, we'll treat it as a database number. If
it's a String, we'll treat it as
a full URI (e.g. redis://1.2.3.4/15). Otherwise we'll return the
default connection.
# File lib/familia.rb, line 66 def redis(uri=nil) if Integer === uri tmp = Familia.uri tmp.db = uri uri = tmp elsif String === uri uri &&= URI.parse uri end uri ||= Familia.uri connect(uri) unless @clients[uri.serverid] @clients[uri.serverid] end
rediskey(*args)
click to toggle source
# File lib/familia.rb, line 117 def rediskey *args el = args.flatten.compact el.unshift @apiversion unless @apiversion.nil? el.join(Familia.delim) end
split(r)
click to toggle source
# File lib/familia.rb, line 116 def split(r) r.split(Familia.delim) end
trace(label, redis_client, ident, context=nil)
click to toggle source
# File lib/familia.rb, line 48 def trace label, redis_client, ident, context=nil return unless Familia.debug? info "[%s] %s/%s" % [label, redis_client.uri, ident] if context context = [context].flatten context.reject! { |line| line =~ /lib\/familia/ } info " %s" % context[0..6].join("\n ") end end
uri=(v)
click to toggle source
# File lib/familia.rb, line 57 def uri= v v = URI.parse v unless URI === v @uri = v end