34 lines
688 B
Ruby
34 lines
688 B
Ruby
module Gitlab
|
|
class UserActivities
|
|
include Enumerable
|
|
|
|
KEY = 'users:activities'.freeze
|
|
BATCH_SIZE = 500
|
|
|
|
def self.record(key, time = Time.now)
|
|
Gitlab::Redis::SharedState.with do |redis|
|
|
redis.hset(KEY, key, time.to_i)
|
|
end
|
|
end
|
|
|
|
def delete(*keys)
|
|
Gitlab::Redis::SharedState.with do |redis|
|
|
redis.hdel(KEY, keys)
|
|
end
|
|
end
|
|
|
|
def each
|
|
cursor = 0
|
|
loop do
|
|
cursor, pairs =
|
|
Gitlab::Redis::SharedState.with do |redis|
|
|
redis.hscan(KEY, cursor, count: BATCH_SIZE)
|
|
end
|
|
|
|
Hash[pairs].each { |pair| yield pair }
|
|
|
|
break if cursor == '0'
|
|
end
|
|
end
|
|
end
|
|
end
|