about summary refs log tree commit diff
path: root/app/workers
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/admin/suspension_worker.rb2
-rw-r--r--app/workers/feed_insert_worker.rb39
-rw-r--r--app/workers/push_update_worker.rb11
-rw-r--r--app/workers/thread_resolve_worker.rb6
4 files changed, 35 insertions, 23 deletions
diff --git a/app/workers/admin/suspension_worker.rb b/app/workers/admin/suspension_worker.rb
index 6338b1130..e41465ccc 100644
--- a/app/workers/admin/suspension_worker.rb
+++ b/app/workers/admin/suspension_worker.rb
@@ -6,6 +6,6 @@ class Admin::SuspensionWorker
   sidekiq_options queue: 'pull'
 
   def perform(account_id, remove_user = false)
-    SuspendAccountService.new.call(Account.find(account_id), remove_user)
+    SuspendAccountService.new.call(Account.find(account_id), remove_user: remove_user)
   end
 end
diff --git a/app/workers/feed_insert_worker.rb b/app/workers/feed_insert_worker.rb
index 65c02d3ef..1ae3c877b 100644
--- a/app/workers/feed_insert_worker.rb
+++ b/app/workers/feed_insert_worker.rb
@@ -3,34 +3,41 @@
 class FeedInsertWorker
   include Sidekiq::Worker
 
-  attr_reader :status, :follower
-
-  def perform(status_id, follower_id)
-    @status = Status.find_by(id: status_id)
-    @follower = Account.find_by(id: follower_id)
+  def perform(status_id, id, type = :home)
+    @type     = type.to_sym
+    @status   = Status.find(status_id)
+
+    case @type
+    when :home
+      @follower = Account.find(id)
+    when :list
+      @list     = List.find(id)
+      @follower = @list.account
+    end
 
     check_and_insert
+  rescue ActiveRecord::RecordNotFound
+    true
   end
 
   private
 
   def check_and_insert
-    if records_available?
-      perform_push unless feed_filtered?
-    else
-      true
-    end
-  end
-
-  def records_available?
-    status.present? && follower.present?
+    perform_push unless feed_filtered?
   end
 
   def feed_filtered?
-    FeedManager.instance.filter?(:home, status, follower.id)
+    # Note: Lists are a variation of home, so the filtering rules
+    # of home apply to both
+    FeedManager.instance.filter?(:home, @status, @follower.id)
   end
 
   def perform_push
-    FeedManager.instance.push(:home, follower, status)
+    case @type
+    when :home
+      FeedManager.instance.push_to_home(@follower, @status)
+    when :list
+      FeedManager.instance.push_to_list(@list, @status)
+    end
   end
 end
diff --git a/app/workers/push_update_worker.rb b/app/workers/push_update_worker.rb
index 697cbd6a6..d76d73d96 100644
--- a/app/workers/push_update_worker.rb
+++ b/app/workers/push_update_worker.rb
@@ -3,12 +3,13 @@
 class PushUpdateWorker
   include Sidekiq::Worker
 
-  def perform(account_id, status_id)
-    account = Account.find(account_id)
-    status  = Status.find(status_id)
-    message = InlineRenderer.render(status, account, :status)
+  def perform(account_id, status_id, timeline_id = nil)
+    account     = Account.find(account_id)
+    status      = Status.find(status_id)
+    message     = InlineRenderer.render(status, account, :status)
+    timeline_id = "timeline:#{account.id}" if timeline_id.nil?
 
-    Redis.current.publish("timeline:#{account.id}", Oj.dump(event: :update, payload: message, queued_at: (Time.now.to_f * 1000.0).to_i))
+    Redis.current.publish(timeline_id, Oj.dump(event: :update, payload: message, queued_at: (Time.now.to_f * 1000.0).to_i))
   rescue ActiveRecord::RecordNotFound
     true
   end
diff --git a/app/workers/thread_resolve_worker.rb b/app/workers/thread_resolve_worker.rb
index 38287e8e6..c18a778d5 100644
--- a/app/workers/thread_resolve_worker.rb
+++ b/app/workers/thread_resolve_worker.rb
@@ -3,7 +3,11 @@
 class ThreadResolveWorker
   include Sidekiq::Worker
 
-  sidekiq_options queue: 'pull', retry: false
+  sidekiq_options queue: 'pull', retry: 3
+
+  sidekiq_retry_in do |count|
+    15 + 10 * (count**4) + rand(10 * (count**4))
+  end
 
   def perform(child_status_id, parent_url)
     child_status  = Status.find(child_status_id)