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