class Ablab::Store::Redis

Attributes

redis[R]

Public Class Methods

new(opts = {}) click to toggle source
# File lib/ablab/store/redis.rb, line 8
def initialize(opts = {})
  @key_prefix = opts[:key_prefix] || 'ablab'
  @redis = ::Redis.new(opts)
end

Public Instance Methods

conversions(experiment, bucket) click to toggle source
# File lib/ablab/store/redis.rb, line 33
def conversions(experiment, bucket)
  (redis.pfcount(key(:conversions, experiment, bucket)) || 0).to_i
end
counts(experiment, bucket) click to toggle source
# File lib/ablab/store/redis.rb, line 37
def counts(experiment, bucket)
  v, s, x, c = nil, nil, nil, nil
  redis.multi do
    v = redis.get(key(:views, experiment, bucket))
    s = redis.pfcount(key(:sessions, experiment, bucket))
    x = redis.get(key(:successes, experiment, bucket))
    c = redis.pfcount(key(:conversions, experiment, bucket))
  end
  {
    views:       (v.value || 0).to_i,
    sessions:    (s.value || 0).to_i,
    successes:   (x.value || 0).to_i,
    conversions: (c.value || 0).to_i
  }
end
sessions(experiment, bucket) click to toggle source
# File lib/ablab/store/redis.rb, line 25
def sessions(experiment, bucket)
  (redis.pfcount(key(:sessions, experiment, bucket)) || 0).to_i
end
successes(experiment, bucket) click to toggle source
# File lib/ablab/store/redis.rb, line 29
def successes(experiment, bucket)
  (redis.get(key(:successes, experiment, bucket)) || 0).to_i
end
track_success!(experiment, bucket, session_id) click to toggle source
# File lib/ablab/store/redis.rb, line 17
def track_success!(experiment, bucket, session_id)
  track(experiment, bucket, session_id, :successes, :conversions)
end
track_view!(experiment, bucket, session_id) click to toggle source
# File lib/ablab/store/redis.rb, line 13
def track_view!(experiment, bucket, session_id)
  track(experiment, bucket, session_id, :views, :sessions)
end
views(experiment, bucket) click to toggle source
# File lib/ablab/store/redis.rb, line 21
def views(experiment, bucket)
  (redis.get(key(:views, experiment, bucket)) || 0).to_i
end

Private Instance Methods

key(type, experiment, bucket) click to toggle source
# File lib/ablab/store/redis.rb, line 53
        def key(type, experiment, bucket)
  "#{@key_prefix}:#{type}:#{experiment}:#{bucket}"
end
track(experiment, bucket, session_id, counter, set) click to toggle source
# File lib/ablab/store/redis.rb, line 57
        def track(experiment, bucket, session_id, counter, set)
  return false if bucket.nil?
  redis.pipelined do
    redis.incr(key(counter, experiment, bucket))
    redis.pfadd(key(set, experiment, bucket), session_id)
  end
end