35 lines
		
	
	
		
			688 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			35 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
 |