mirror of
				https://github.com/discourse/discourse.git
				synced 2025-02-25 18:55:32 -06:00 
			
		
		
		
	DEV: clear last seen cache consistently
Previously in some cases the test suite could fail due to a bad entry in redis from previous tests This ensures the correct cache is expired when needed Additionally improves performance of the redis check
This commit is contained in:
		@@ -727,13 +727,26 @@ class User < ActiveRecord::Base
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def update_last_seen!(now = Time.zone.now)
 | 
			
		||||
  def last_seen_redis_key(now)
 | 
			
		||||
    now_date = now.to_date
 | 
			
		||||
    # Only update last seen once every minute
 | 
			
		||||
    redis_key = "user:#{id}:#{now_date}"
 | 
			
		||||
    return unless Discourse.redis.setnx(redis_key, "1")
 | 
			
		||||
    "user:#{id}:#{now_date}"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def clear_last_seen_cache!(now = Time.zone.now)
 | 
			
		||||
    Discourse.redis.del(last_seen_redis_key(now))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def update_last_seen!(now = Time.zone.now)
 | 
			
		||||
    redis_key = last_seen_redis_key(now)
 | 
			
		||||
 | 
			
		||||
    if SiteSetting.active_user_rate_limit_secs > 0
 | 
			
		||||
      return if !Discourse.redis.set(
 | 
			
		||||
        redis_key, "1",
 | 
			
		||||
        nx: true,
 | 
			
		||||
        ex: SiteSetting.active_user_rate_limit_secs
 | 
			
		||||
      )
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    Discourse.redis.expire(redis_key, SiteSetting.active_user_rate_limit_secs)
 | 
			
		||||
    update_previous_visit(now)
 | 
			
		||||
    # using update_column to avoid the AR transaction
 | 
			
		||||
    update_column(:last_seen_at, now)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user