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

Returns a new instance of Redis.



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

def initialize(opts = {})
  @key_prefix = opts[:key_prefix] || 'ablab:1'
  @redis = ::Redis.new(opts)
  @session_duration = opts[:session_duration] || (60 * 30)
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
42
43
44
45
46
# File 'lib/ablab/store/redis.rb', line 39

def conversions(experiment, bucket)
  c, z = nil, nil
  redis.multi do
    c = redis.zcard(key(:conversions, experiment, bucket))
    z = redis.get(key(:'conversions:spool', experiment, bucket))
  end
  (c.value || 0).to_i + (z.value || 0).to_i
end

#counts(experiment, bucket) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ablab/store/redis.rb', line 48

def counts(experiment, bucket)
  v, s, k, x, c, z = nil, nil, nil, nil, nil, nil
  redis.multi do
    v = redis.get(key(:views, experiment, bucket))
    s = redis.zcard(key(:sessions, experiment, bucket))
    k = redis.get(key(:'sessions:spool', experiment, bucket))
    x = redis.get(key(:successes, experiment, bucket))
    c = redis.zcard(key(:conversions, experiment, bucket))
    z = redis.get(key(:'conversions:spool', experiment, bucket))
  end
  {
    views:       (v.value || 0).to_i,
    sessions:    (s.value || 0).to_i + (k.value || 0).to_i,
    successes:   (x.value || 0).to_i,
    conversions: (c.value || 0).to_i + (z.value || 0).to_i
  }
end

#sessions(experiment, bucket) ⇒ Object



26
27
28
29
30
31
32
33
# File 'lib/ablab/store/redis.rb', line 26

def sessions(experiment, bucket)
  s, z = nil, nil
  redis.multi do
    s = redis.zcard(key(:sessions, experiment, bucket))
    z = redis.get(key(:'sessions:spool', experiment, bucket))
  end
  (s.value || 0).to_i + (z.value || 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



18
19
20
# File 'lib/ablab/store/redis.rb', line 18

def track_success!(experiment, bucket, session_id)
  track(experiment, bucket, session_id, :successes, :conversions)
end

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



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

def track_view!(experiment, bucket, session_id)
  track(experiment, bucket, session_id, :views, :sessions)
end

#views(experiment, bucket) ⇒ Object



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

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