Class: WhoIsOnline::Tracker
- Inherits:
-
Object
- Object
- WhoIsOnline::Tracker
- Defined in:
- lib/whoisonline/tracker.rb
Instance Method Summary collapse
- #count ⇒ Object
-
#initialize(configuration, redis_store) ⇒ Tracker
constructor
A new instance of Tracker.
- #offline(user) ⇒ Object
- #online?(user) ⇒ Boolean
- #track(user) ⇒ Object
- #user_ids ⇒ Object
- #users(model_class) ⇒ Object
Constructor Details
#initialize(configuration, redis_store) ⇒ Tracker
Returns a new instance of Tracker.
5 6 7 8 9 |
# File 'lib/whoisonline/tracker.rb', line 5 def initialize(configuration, redis_store) @configuration = configuration @redis_store = redis_store @last_write_by_user = Concurrent::Hash.new end |
Instance Method Details
#count ⇒ Object
38 39 40 |
# File 'lib/whoisonline/tracker.rb', line 38 def count user_ids.size end |
#offline(user) ⇒ Object
22 23 24 25 26 27 28 29 |
# File 'lib/whoisonline/tracker.rb', line 22 def offline(user) uid = extract_id(user) return unless uid key = presence_key(uid) @redis_store.delete_presence(key) @last_write_by_user.delete(uid) end |
#online?(user) ⇒ Boolean
31 32 33 34 35 36 |
# File 'lib/whoisonline/tracker.rb', line 31 def online?(user) uid = extract_id(user) return false unless uid @redis_store.exists?(presence_key(uid)) end |
#track(user) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/whoisonline/tracker.rb', line 11 def track(user) uid = extract_id(user) return unless uid return if throttled?(uid) key = presence_key(uid) now = Time.now.to_i result = @redis_store.write_presence(key, now, ttl_seconds) @last_write_by_user[uid] = Time.now if result end |
#user_ids ⇒ Object
42 43 44 45 |
# File 'lib/whoisonline/tracker.rb', line 42 def user_ids keys = @redis_store.scan_keys(match: "#{@configuration.namespace}:*") keys.lazy.map { |key| key.split(":").last }.to_a end |
#users(model_class) ⇒ Object
47 48 49 |
# File 'lib/whoisonline/tracker.rb', line 47 def users(model_class) model_class.where(id: user_ids) end |