Create Redisable#redis (#9633)
* Create Redisable * Use #redis instead of Redis.current
This commit is contained in:
		@@ -4,6 +4,8 @@ class ActivityTracker
 | 
			
		||||
  EXPIRE_AFTER = 90.days.seconds
 | 
			
		||||
 | 
			
		||||
  class << self
 | 
			
		||||
    include Redisable
 | 
			
		||||
 | 
			
		||||
    def increment(prefix)
 | 
			
		||||
      key = [prefix, current_week].join(':')
 | 
			
		||||
 | 
			
		||||
@@ -20,10 +22,6 @@ class ActivityTracker
 | 
			
		||||
 | 
			
		||||
    private
 | 
			
		||||
 | 
			
		||||
    def redis
 | 
			
		||||
      Redis.current
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def current_week
 | 
			
		||||
      Time.zone.today.cweek
 | 
			
		||||
    end
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
 | 
			
		||||
class ActivityPub::Activity
 | 
			
		||||
  include JsonLdHelper
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  def initialize(json, account, **options)
 | 
			
		||||
    @json    = json
 | 
			
		||||
@@ -70,10 +71,6 @@ class ActivityPub::Activity
 | 
			
		||||
    @object_uri ||= value_or_id(@object)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def distribute(status)
 | 
			
		||||
    crawl_links(status)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ require 'singleton'
 | 
			
		||||
 | 
			
		||||
class FeedManager
 | 
			
		||||
  include Singleton
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  MAX_ITEMS = 400
 | 
			
		||||
 | 
			
		||||
@@ -35,7 +36,7 @@ class FeedManager
 | 
			
		||||
 | 
			
		||||
  def unpush_from_home(account, status)
 | 
			
		||||
    return false unless remove_from_feed(:home, account.id, status)
 | 
			
		||||
    Redis.current.publish("timeline:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s))
 | 
			
		||||
    redis.publish("timeline:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s))
 | 
			
		||||
    true
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +54,7 @@ class FeedManager
 | 
			
		||||
 | 
			
		||||
  def unpush_from_list(list, status)
 | 
			
		||||
    return false unless remove_from_feed(:list, list.id, status)
 | 
			
		||||
    Redis.current.publish("timeline:list:#{list.id}", Oj.dump(event: :delete, payload: status.id.to_s))
 | 
			
		||||
    redis.publish("timeline:list:#{list.id}", Oj.dump(event: :delete, payload: status.id.to_s))
 | 
			
		||||
    true
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@@ -142,10 +143,6 @@ class FeedManager
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def push_update_required?(timeline_id)
 | 
			
		||||
    redis.exists("subscribed:#{timeline_id}")
 | 
			
		||||
  end
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class OStatus::Activity::Base
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  def initialize(xml, account = nil, **options)
 | 
			
		||||
    @xml     = xml
 | 
			
		||||
    @account = account
 | 
			
		||||
@@ -66,8 +68,4 @@ class OStatus::Activity::Base
 | 
			
		||||
      Status.find_by(uri: uri)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,8 @@ class PotentialFriendshipTracker
 | 
			
		||||
  }.freeze
 | 
			
		||||
 | 
			
		||||
  class << self
 | 
			
		||||
    include Redisable
 | 
			
		||||
 | 
			
		||||
    def record(account_id, target_account_id, action)
 | 
			
		||||
      return if account_id == target_account_id
 | 
			
		||||
 | 
			
		||||
@@ -31,11 +33,5 @@ class PotentialFriendshipTracker
 | 
			
		||||
      return [] if account_ids.empty?
 | 
			
		||||
      Account.searchable.where(id: account_ids)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    private
 | 
			
		||||
 | 
			
		||||
    def redis
 | 
			
		||||
      Redis.current
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								app/models/concerns/redisable.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								app/models/concerns/redisable.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
module Redisable
 | 
			
		||||
  extend ActiveSupport::Concern
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class Feed
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  def initialize(type, id)
 | 
			
		||||
    @type = type
 | 
			
		||||
    @id   = id
 | 
			
		||||
@@ -27,8 +29,4 @@ class Feed
 | 
			
		||||
  def key
 | 
			
		||||
    FeedManager.instance.key(@type, @id)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,8 @@ class TrendingTags
 | 
			
		||||
  THRESHOLD            = 5
 | 
			
		||||
 | 
			
		||||
  class << self
 | 
			
		||||
    include Redisable
 | 
			
		||||
 | 
			
		||||
    def record_use!(tag, account, at_time = Time.now.utc)
 | 
			
		||||
      return if disallowed_hashtags.include?(tag.name) || account.silenced? || account.bot?
 | 
			
		||||
 | 
			
		||||
@@ -59,9 +61,5 @@ class TrendingTags
 | 
			
		||||
      @disallowed_hashtags = @disallowed_hashtags.split(' ') if @disallowed_hashtags.is_a? String
 | 
			
		||||
      @disallowed_hashtags = @disallowed_hashtags.map(&:downcase)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def redis
 | 
			
		||||
      Redis.current
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
 | 
			
		||||
class BatchedRemoveStatusService < BaseService
 | 
			
		||||
  include StreamEntryRenderer
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  # Delete given statuses and reblogs of them
 | 
			
		||||
  # Dispatch PuSH updates of the deleted statuses, but only local ones
 | 
			
		||||
@@ -109,10 +110,6 @@ class BatchedRemoveStatusService < BaseService
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def build_xml(stream_entry)
 | 
			
		||||
    return @activity_xml[stream_entry.id] if @activity_xml.key?(stream_entry.id)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class FollowService < BaseService
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  # Follow a remote user, notify remote user about the follow
 | 
			
		||||
  # @param [Account] source_account From which to follow
 | 
			
		||||
  # @param [String, Account] uri User URI to follow in the form of username@domain (or account record)
 | 
			
		||||
@@ -67,10 +69,6 @@ class FollowService < BaseService
 | 
			
		||||
    follow
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def build_follow_request_xml(follow_request)
 | 
			
		||||
    OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.follow_request_salmon(follow_request))
 | 
			
		||||
  end
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class PostStatusService < BaseService
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  MIN_SCHEDULE_OFFSET = 5.minutes.freeze
 | 
			
		||||
 | 
			
		||||
  # Post a text status update, fetch and notify remote users mentioned
 | 
			
		||||
@@ -110,10 +112,6 @@ class PostStatusService < BaseService
 | 
			
		||||
    ProcessHashtagsService.new
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def scheduled?
 | 
			
		||||
    @scheduled_at.present?
 | 
			
		||||
  end
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
 | 
			
		||||
class RemoveStatusService < BaseService
 | 
			
		||||
  include StreamEntryRenderer
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  def call(status, **options)
 | 
			
		||||
    @payload      = Oj.dump(event: :delete, payload: status.id.to_s)
 | 
			
		||||
@@ -55,7 +56,7 @@ class RemoveStatusService < BaseService
 | 
			
		||||
 | 
			
		||||
  def remove_from_affected
 | 
			
		||||
    @mentions.map(&:account).select(&:local?).each do |account|
 | 
			
		||||
      Redis.current.publish("timeline:#{account.id}", @payload)
 | 
			
		||||
      redis.publish("timeline:#{account.id}", @payload)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@@ -133,26 +134,22 @@ class RemoveStatusService < BaseService
 | 
			
		||||
    return unless @status.public_visibility?
 | 
			
		||||
 | 
			
		||||
    @tags.each do |hashtag|
 | 
			
		||||
      Redis.current.publish("timeline:hashtag:#{hashtag}", @payload)
 | 
			
		||||
      Redis.current.publish("timeline:hashtag:#{hashtag}:local", @payload) if @status.local?
 | 
			
		||||
      redis.publish("timeline:hashtag:#{hashtag}", @payload)
 | 
			
		||||
      redis.publish("timeline:hashtag:#{hashtag}:local", @payload) if @status.local?
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def remove_from_public
 | 
			
		||||
    return unless @status.public_visibility?
 | 
			
		||||
 | 
			
		||||
    Redis.current.publish('timeline:public', @payload)
 | 
			
		||||
    Redis.current.publish('timeline:public:local', @payload) if @status.local?
 | 
			
		||||
    redis.publish('timeline:public', @payload)
 | 
			
		||||
    redis.publish('timeline:public:local', @payload) if @status.local?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def remove_from_media
 | 
			
		||||
    return unless @status.public_visibility?
 | 
			
		||||
 | 
			
		||||
    Redis.current.publish('timeline:public:media', @payload)
 | 
			
		||||
    Redis.current.publish('timeline:public:local:media', @payload) if @status.local?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
    redis.publish('timeline:public:media', @payload)
 | 
			
		||||
    redis.publish('timeline:public:local:media', @payload) if @status.local?
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
 | 
			
		||||
class Scheduler::FeedCleanupScheduler
 | 
			
		||||
  include Sidekiq::Worker
 | 
			
		||||
  include Redisable
 | 
			
		||||
 | 
			
		||||
  sidekiq_options unique: :until_executed, retry: 0
 | 
			
		||||
 | 
			
		||||
@@ -57,8 +58,4 @@ class Scheduler::FeedCleanupScheduler
 | 
			
		||||
  def feed_manager
 | 
			
		||||
    FeedManager.instance
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def redis
 | 
			
		||||
    Redis.current
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user