mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-30 18:47:51 +00:00 
			
		
		
		
	chore: Use find_each instead of .all.each (#6975)
- Enable the rubocop Rails/FindEach - Replace the .all.each with .find_each This should let us avoid potential memory usage. Motivation from the speedshop newsletter by Nate Berkopec ref: https://www.rubyinrails.com/2017/11/16/use-find-each-instead-of-all-each-in-rails/ ref: https://linear.app/chatwoot/issue/CW-1480/chore-run-all-sidekiq-jobs-async
This commit is contained in:
		| @@ -71,6 +71,10 @@ Rails/ApplicationController: | |||||||
|     - 'app/controllers/platform_controller.rb' |     - 'app/controllers/platform_controller.rb' | ||||||
|     - 'app/controllers/public_controller.rb' |     - 'app/controllers/public_controller.rb' | ||||||
|     - 'app/controllers/survey/responses_controller.rb' |     - 'app/controllers/survey/responses_controller.rb' | ||||||
|  | Rails/FindEach: | ||||||
|  |   Enabled: true | ||||||
|  |   Include:  | ||||||
|  |     - 'app/**/*.rb' | ||||||
| Rails/CompactBlank: | Rails/CompactBlank: | ||||||
|   Enabled: false |   Enabled: false | ||||||
| Rails/EnvironmentVariableAccess: | Rails/EnvironmentVariableAccess: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ class Account::ConversationsResolutionSchedulerJob < ApplicationJob | |||||||
|   queue_as :scheduled_jobs |   queue_as :scheduled_jobs | ||||||
|  |  | ||||||
|   def perform |   def perform | ||||||
|     Account.where.not(auto_resolve_duration: nil).all.each do |account| |     Account.where.not(auto_resolve_duration: nil).all.find_each(batch_size: 100) do |account| | ||||||
|       Conversations::ResolutionJob.perform_later(account: account) |       Conversations::ResolutionJob.perform_later(account: account) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|   | |||||||
| @@ -2,6 +2,6 @@ class Conversations::ReopenSnoozedConversationsJob < ApplicationJob | |||||||
|   queue_as :low |   queue_as :low | ||||||
|  |  | ||||||
|   def perform |   def perform | ||||||
|     Conversation.where(status: :snoozed).where(snoozed_until: 3.days.ago..Time.current).all.each(&:open!) |     Conversation.where(status: :snoozed).where(snoozed_until: 3.days.ago..Time.current).all.find_each(batch_size: 100, &:open!) | ||||||
|   end |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ class Inboxes::FetchImapEmailInboxesJob < ApplicationJob | |||||||
|   queue_as :low |   queue_as :low | ||||||
|  |  | ||||||
|   def perform |   def perform | ||||||
|     Inbox.where(channel_type: 'Channel::Email').all.each do |inbox| |     Inbox.where(channel_type: 'Channel::Email').all.find_each(batch_size: 100) do |inbox| | ||||||
|       ::Inboxes::FetchImapEmailsJob.perform_later(inbox.channel) if inbox.channel.imap_enabled |       ::Inboxes::FetchImapEmailsJob.perform_later(inbox.channel) if inbox.channel.imap_enabled | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ class Migration::UpdateFirstResponseTimeInReportingEventsJob < ApplicationJob | |||||||
|  |  | ||||||
|   def perform(account) |   def perform(account) | ||||||
|     get_conversations_with_bot_handoffs(account) |     get_conversations_with_bot_handoffs(account) | ||||||
|     account.reporting_events.where(name: 'first_response').each do |event| |     account.reporting_events.where(name: 'first_response').find_each do |event| | ||||||
|       conversation = event.conversation |       conversation = event.conversation | ||||||
|  |  | ||||||
|       # if the conversation has a bot handoff event, we don't need to update the response_time |       # if the conversation has a bot handoff event, we don't need to update the response_time | ||||||
|   | |||||||
| @@ -3,7 +3,8 @@ class TriggerScheduledItemsJob < ApplicationJob | |||||||
|  |  | ||||||
|   def perform |   def perform | ||||||
|     # trigger the scheduled campaign jobs |     # trigger the scheduled campaign jobs | ||||||
|     Campaign.where(campaign_type: :one_off, campaign_status: :active).where(scheduled_at: 3.days.ago..Time.current).all.each do |campaign| |     Campaign.where(campaign_type: :one_off, | ||||||
|  |                    campaign_status: :active).where(scheduled_at: 3.days.ago..Time.current).all.find_each(batch_size: 100) do |campaign| | ||||||
|       Campaigns::TriggerOneoffCampaignJob.perform_later(campaign) |       Campaigns::TriggerOneoffCampaignJob.perform_later(campaign) | ||||||
|     end |     end | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ RSpec.describe 'Api::V1::Accounts::BulkActionsController', type: :request do | |||||||
|     create(:conversation, account_id: account.id, status: :open, team_id: team_1.id) |     create(:conversation, account_id: account.id, status: :open, team_id: team_1.id) | ||||||
|     create(:conversation, account_id: account.id, status: :open) |     create(:conversation, account_id: account.id, status: :open) | ||||||
|     create(:conversation, account_id: account.id, status: :open) |     create(:conversation, account_id: account.id, status: :open) | ||||||
|     Conversation.all.each do |conversation| |     Conversation.all.find_each do |conversation| | ||||||
|       create(:inbox_member, inbox: conversation.inbox, user: agent_1) |       create(:inbox_member, inbox: conversation.inbox, user: agent_1) | ||||||
|       create(:inbox_member, inbox: conversation.inbox, user: agent_2) |       create(:inbox_member, inbox: conversation.inbox, user: agent_2) | ||||||
|     end |     end | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ RSpec.describe BulkActionsJob, type: :job do | |||||||
|   let!(:conversation_3) { create(:conversation, account_id: account.id, status: :open) } |   let!(:conversation_3) { create(:conversation, account_id: account.id, status: :open) } | ||||||
|  |  | ||||||
|   before do |   before do | ||||||
|     Conversation.all.each do |conversation| |     Conversation.all.find_each do |conversation| | ||||||
|       create(:inbox_member, inbox: conversation.inbox, user: agent) |       create(:inbox_member, inbox: conversation.inbox, user: agent) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|   | |||||||
| @@ -15,10 +15,6 @@ RSpec.describe Inboxes::FetchImapEmailInboxesJob, type: :job do | |||||||
|  |  | ||||||
|   context 'when called' do |   context 'when called' do | ||||||
|     it 'fetch all the email channels' do |     it 'fetch all the email channels' do | ||||||
|       imap_email_inboxes = double |  | ||||||
|       allow(imap_email_inboxes).to receive(:all).and_return([email_inbox]) |  | ||||||
|       allow(Inbox).to receive(:where).and_return(imap_email_inboxes) |  | ||||||
|  |  | ||||||
|       expect(Inboxes::FetchImapEmailsJob).to receive(:perform_later).with(imap_email_channel).once |       expect(Inboxes::FetchImapEmailsJob).to receive(:perform_later).with(imap_email_channel).once | ||||||
|  |  | ||||||
|       described_class.perform_now |       described_class.perform_now | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sojan Jose
					Sojan Jose