From a0ceee96bd1f740c45be96c82698807fda0a9545 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 26 Jun 2023 15:23:59 +0200 Subject: [PATCH] amelioration(email.resume_hebdomadaire): envoie le mail a 4h du matin sur une periode de 3h tech( Co-authored-by: Colin Darie --- app/jobs/cron/weekly_overview_job.rb | 7 ++----- app/services/mail_rate_limiter.rb | 4 ++-- spec/lib/mail_rate_limiter_spec.rb | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/app/jobs/cron/weekly_overview_job.rb b/app/jobs/cron/weekly_overview_job.rb index f8857d759..45408c58d 100644 --- a/app/jobs/cron/weekly_overview_job.rb +++ b/app/jobs/cron/weekly_overview_job.rb @@ -1,16 +1,13 @@ class Cron::WeeklyOverviewJob < Cron::CronJob - self.schedule_expression = "every monday at 7 am" + self.schedule_expression = "every monday at 4 am" def perform # Feature flipped to avoid mails in staging due to unprocessed dossier return unless Rails.application.config.ds_weekly_overview Instructeur.find_each do |instructeur| - # NOTE: it's not exactly accurate because rate limit is not shared between jobs processes - Dolist::API.sleep_until_limit_reset if Dolist::API.near_rate_limit? - # mailer won't send anything if overview if empty - InstructeurMailer.last_week_overview(instructeur)&.deliver_later + InstructeurMailer.last_week_overview(instructeur)&.deliver_later(wait: rand(0..3.hours)) end end end diff --git a/app/services/mail_rate_limiter.rb b/app/services/mail_rate_limiter.rb index 67cf6d4b1..7e5a929b3 100644 --- a/app/services/mail_rate_limiter.rb +++ b/app/services/mail_rate_limiter.rb @@ -23,10 +23,10 @@ class MailRateLimiter end def current_window_expired? - @current_window[:started_at] + @window <= Time.zone.now.utc + (@current_window[:started_at] + @window).past? end def current_window_full? - @current_window[:sent] == @limit + @current_window[:sent] >= @limit end end diff --git a/spec/lib/mail_rate_limiter_spec.rb b/spec/lib/mail_rate_limiter_spec.rb index b1b4d5e10..26418eafd 100644 --- a/spec/lib/mail_rate_limiter_spec.rb +++ b/spec/lib/mail_rate_limiter_spec.rb @@ -17,7 +17,7 @@ describe MailRateLimiter do it 'renews current_window when it expires' do rate_limiter.send_with_delay(mail) - Timecop.travel(window + 1.second) do + travel_to(Time.current + window + 1.second) do rate_limiter.send_with_delay(mail) expect(rate_limiter.current_window[:sent]).to eq(1) end