Class: Ablab::Store::Redis

Inherits:
Object
  • Object
show all
Defined in:
lib/ablab/store/redis.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Redis



8
9
10
11
# File 'lib/ablab/store/redis.rb', line 8

def initialize(opts = {})
  @key_prefix = opts[:key_prefix] || 'ablab'
  @redis = ::Redis.new(opts)
end

Instance Attribute Details

#redisObject (readonly)

Returns the value of attribute redis.



6
7
8
# File 'lib/ablab/store/redis.rb', line 6

def redis
  @redis
end

Instance Method Details

#conversions(experiment, bucket) ⇒ Object



39
40
41
# File 'lib/ablab/store/redis.rb', line 39

def conversions(experiment, bucket)
  (redis.pfcount(key(:conversions, experiment, bucket)) || 0).to_i
end

#counts(experiment, bucket) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/ablab/store/redis.rb', line 43

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) ⇒ Object



31
32
33
# File 'lib/ablab/store/redis.rb', line 31

def sessions(experiment, bucket)
  (redis.pfcount(key(:sessions, experiment, bucket)) || 0).to_i
end

#successes(experiment, bucket) ⇒ Object



35
36
37
# File 'lib/ablab/store/redis.rb', line 35

def successes(experiment, bucket)
  (redis.get(key(:successes, experiment, bucket)) || 0).to_i
end

#track_success!(experiment, bucket, session_id) ⇒ Object



20
21
22
23
24
25
# File 'lib/ablab/store/redis.rb', line 20

def track_success!(experiment, bucket, session_id)
  redis.pipelined do
    redis.incr(key(:successes, experiment, bucket))
    redis.pfadd(key(:conversions, experiment, bucket), session_id)
  end
end

#track_view!(experiment, bucket, session_id) ⇒ Object



13
14
15
16
17
18
# File 'lib/ablab/store/redis.rb', line 13

def track_view!(experiment, bucket, session_id)
  redis.pipelined do
    redis.incr(key(:views, experiment, bucket))
    redis.pfadd(key(:sessions, experiment, bucket), session_id)
  end
end

#views(experiment, bucket) ⇒ Object



27
28
29
# File 'lib/ablab/store/redis.rb', line 27

def views(experiment, bucket)
  (redis.get(key(:views, experiment, bucket)) || 0).to_i
end