Fix sidekiq cron SendRecapEmails job scheduling creation (#442)

This commit is contained in:
Riccardo Graziosi
2024-11-25 18:56:24 +01:00
committed by GitHub
parent 9b57df60a4
commit 87b267998b
6 changed files with 35 additions and 30 deletions

View File

@@ -32,7 +32,7 @@ class InvitationsController < ApplicationController
)
)
InvitationMailer.invite(invitation: invitation, subject: subject, body: body_with_link).deliver_now
InvitationMailer.invite(invitation: invitation, subject: subject, body: body_with_link).deliver_later
num_invitations_sent += 1
end

View File

@@ -3,10 +3,11 @@ class SendRecapEmails < ActiveJob::Base
def perform(*args)
# Fix times to 15:00 UTC
time_now = Time.now.utc.change(hour: args[0], min: 0, sec: 0)
one_day_ago = 1.day.ago.utc.change(hour: args[0], min: 0, sec: 0)
one_week_ago = 1.week.ago.utc.change(hour: args[0], min: 0, sec: 0)
one_month_ago = 1.month.ago.utc.change(hour: args[0], min: 0, sec: 0)
hour = 15
time_now = Time.now.utc.change(hour: hour, min: 0, sec: 0)
one_day_ago = 1.day.ago.utc.change(hour: hour, min: 0, sec: 0)
one_week_ago = 1.week.ago.utc.change(hour: hour, min: 0, sec: 0)
one_month_ago = 1.month.ago.utc.change(hour: hour, min: 0, sec: 0)
# Get tenants with active subscriptions
tbs = TenantBilling.unscoped.all

View File

@@ -77,7 +77,9 @@
</small>
</div>
<% else %>
<p>You have to <a href="https://docs.astuto.io/deploy-with-sidekiq">enable Sidekiq</a> to receive recap notifications.</p>
<% if not Rails.application.multi_tenancy? %>
<p>You have to <a href="https://docs.astuto.io/deploy-with-sidekiq">enable Sidekiq</a> to receive recap notifications.</p>
<% end %>
<% end %>
<hr />

View File

@@ -1,6 +1,6 @@
if ENV["ACTIVE_JOB_BACKEND"] == "sidekiq"
if ENV['ACTIVE_JOB_BACKEND'] == 'sidekiq'
Sidekiq.configure_server do |config|
redis_url = ENV["REDIS_URL"].dup
redis_url = ENV['REDIS_URL'].dup
redis_url.insert(8, ":#{ENV['REDIS_PASSWORD']}@")
config.logger.level = Rails.env.production? ? Logger::INFO : Logger::DEBUG
@@ -8,10 +8,33 @@ if ENV["ACTIVE_JOB_BACKEND"] == "sidekiq"
end
Sidekiq.configure_client do |config|
redis_url = ENV["REDIS_URL"].dup
redis_url = ENV['REDIS_URL'].dup
redis_url.insert(8, ":#{ENV['REDIS_PASSWORD']}@")
config.logger.level = Rails.env.production? ? Logger::INFO : Logger::DEBUG
config.redis = { url: redis_url }
end
# Sidekiq Cron
if ENV['IS_SIDEKIQ'] == 'true'
Sidekiq::Cron.configure do |config|
# config.cron_schedule_file doesn't work for some reason
# so we have to create the cron jobs manually
unless Sidekiq::Cron::Job.find('SendRecapEmails')
cron_expression = '0 15 * * *' # Every day at 15:00
# cron_expression = '*/30 * * * * *' # Every 30 seconds (for testing)
Sidekiq::Cron::Job.create(name: 'SendRecapEmails Job', cron: cron_expression, class: 'SendRecapEmails')
end
config.cron_poll_interval = Rails.env.production? ? 30 : 15
config.cron_history_size = 50
config.default_namespace = 'default'
config.natural_cron_parsing_mode = :strict
# Handles the case when the Sidekiq process was down for a while and the cron job should have run (set to 10 minutes, i.e. 600 seconds)
# This could happen during the deployment of a new version of the application
config.reschedule_grace_period = 600
end
end
end

View File

@@ -1,12 +0,0 @@
Sidekiq::Cron.configure do |config|
config.cron_schedule_file = 'config/sidekiq_cron_schedule.yml'
config.cron_poll_interval = 30
config.cron_history_size = 50
config.default_namespace = 'default'
config.natural_cron_parsing_mode = :strict
# Handles the case when the Sidekiq process was down for a while and the cron job should have run (set to 10 minutes, i.e. 600 seconds)
# This could happen during the deployment of a new version of the application
config.reschedule_grace_period = 600
end

View File

@@ -1,9 +0,0 @@
# For crontab syntax, see https://crontab.guru/
send_recap_emails:
cron: "0 15 * * *" # At 15:00 every day
# cron: "*/30 * * * * *" # Execute every 30 seconds (for testing purposes)
class: "SendRecapEmails"
queue: default
args:
hour: 15 # This should be in sync with the "cron" time