Skip to content
Extraits de code Groupes Projets
Non vérifiée Valider ed867eca rédigé par Eugen Rochko's avatar Eugen Rochko Validation de GitHub
Parcourir les fichiers

Move e-mail digest task to sidekiq, reduce workload, improve hint (#6252)

parent 08e4c78e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -170,6 +170,10 @@ class User < ApplicationRecord ...@@ -170,6 +170,10 @@ class User < ApplicationRecord
settings.default_privacy || (account.locked? ? 'private' : 'public') settings.default_privacy || (account.locked? ? 'private' : 'public')
end end
def allows_digest_emails?
settings.notification_emails['digest']
end
def token_for_app(a) def token_for_app(a)
return nil if a.nil? || a.owner != self return nil if a.nil? || a.owner != self
Doorkeeper::AccessToken Doorkeeper::AccessToken
......
...@@ -9,7 +9,7 @@ class DigestMailerWorker ...@@ -9,7 +9,7 @@ class DigestMailerWorker
def perform(user_id) def perform(user_id)
@user = User.find(user_id) @user = User.find(user_id)
deliver_digest if user_receives_digest? deliver_digest if @user.allows_digest_emails?
end end
private private
...@@ -18,8 +18,4 @@ class DigestMailerWorker ...@@ -18,8 +18,4 @@ class DigestMailerWorker
NotificationMailer.digest(user.account).deliver_now! NotificationMailer.digest(user.account).deliver_now!
user.touch(:last_emailed_at) user.touch(:last_emailed_at)
end end
def user_receives_digest?
user.settings.notification_emails['digest']
end
end end
# frozen_string_literal: true
require 'sidekiq-scheduler'
class Scheduler::EmailScheduler
include Sidekiq::Worker
def perform
eligible_users.find_each do |user|
next unless user.allows_digest_emails?
DigestMailerWorker.perform_async(user.id)
end
end
private
def eligible_users
User.confirmed
.joins(:account)
.where(accounts: { silenced: false, suspended: false })
.where(disabled: false)
.where('current_sign_in_at < ?', 20.days.ago)
.where('last_emailed_at IS NULL OR last_emailed_at < ?', 20.days.ago)
end
end
...@@ -4,7 +4,7 @@ en: ...@@ -4,7 +4,7 @@ en:
hints: hints:
defaults: defaults:
avatar: PNG, GIF or JPG. At most 2MB. Will be downscaled to 120x120px avatar: PNG, GIF or JPG. At most 2MB. Will be downscaled to 120x120px
digest: Sent after a long period of inactivity with a summary of mentions you've received in your absence digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence
display_name: display_name:
one: <span class="name-counter">1</span> character left one: <span class="name-counter">1</span> character left
other: <span class="name-counter">%{count}</span> characters left other: <span class="name-counter">%{count}</span> characters left
......
...@@ -27,3 +27,6 @@ ...@@ -27,3 +27,6 @@
ip_cleanup_scheduler: ip_cleanup_scheduler:
cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *'
class: Scheduler::IpCleanupScheduler class: Scheduler::IpCleanupScheduler
email_scheduler:
cron: '0 10 * * 2'
class: Scheduler::EmailScheduler
...@@ -171,11 +171,10 @@ namespace :mastodon do ...@@ -171,11 +171,10 @@ namespace :mastodon do
end end
namespace :emails do namespace :emails do
desc 'Send out digest e-mails' desc 'Send out digest e-mails (deprecated)'
task digest: :environment do task digest: :environment do
User.confirmed.joins(:account).where(accounts: { silenced: false, suspended: false }).where('current_sign_in_at < ?', 20.days.ago).find_each do |user| # No-op
DigestMailerWorker.perform_async(user.id) # This task is now executed via sidekiq-scheduler
end
end end
end end
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter