From da77305696f2bf676e6d2eb717930805df07a47c Mon Sep 17 00:00:00 2001 From: renovatebot Date: Wed, 22 May 2024 10:32:41 +0200 Subject: [PATCH] Maintenance: Update dependency rubocop-rails to v2.25.0 --- Gemfile.lock | 6 +- app/jobs/active_job_lock_cleanup_job.rb | 2 +- app/jobs/taskbar_cleanup_job.rb | 3 +- app/jobs/upload_cache_cleanup_job.rb | 11 +- app/models/activity_stream.rb | 4 +- app/models/chat.rb | 38 +++--- app/models/chat/session.rb | 2 +- app/models/cti/log.rb | 4 +- app/models/data_privacy_task.rb | 4 +- app/models/http_log.rb | 4 +- app/models/import_job.rb | 19 +-- app/models/online_notification.rb | 6 +- app/models/recent_view.rb | 4 +- app/models/setting.rb | 2 +- app/models/stats_store.rb | 4 +- app/models/ticket.rb | 97 ++++++++------- .../process_delayed_jobs/cleanup_action.rb | 2 +- lib/monitoring_helper/amount_check.rb | 2 +- .../health_checker/data_privacy_task.rb | 2 +- .../health_checker/delayed_job.rb | 2 +- .../health_checker/import_job.rb | 8 +- lib/report/base.rb | 111 ++++++++++-------- lib/session_helper.rb | 22 ++-- .../email_parser/failed_email/delete_old.rb | 2 +- 24 files changed, 197 insertions(+), 164 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9dee52fc18be..1cd3b49c11a5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -464,7 +464,7 @@ GEM rspec-expectations (~> 3.12) rspec-mocks (~> 3.12) rspec-support (~> 3.12) - racc (1.7.3) + racc (1.8.0) rack (2.2.9) rack-attack (6.7.0) rack (>= 1.0, < 4) @@ -514,7 +514,7 @@ GEM ffi (~> 1.0) rchardet (1.8.0) redis (4.8.1) - regexp_parser (2.9.0) + regexp_parser (2.9.2) rexml (3.2.8) strscan (>= 3.0.9) rotp (6.3.0) @@ -567,7 +567,7 @@ GEM rubocop-performance (1.21.0) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rails (2.24.1) + rubocop-rails (2.25.0) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) diff --git a/app/jobs/active_job_lock_cleanup_job.rb b/app/jobs/active_job_lock_cleanup_job.rb index 196efd33f597..2d661f9d045c 100644 --- a/app/jobs/active_job_lock_cleanup_job.rb +++ b/app/jobs/active_job_lock_cleanup_job.rb @@ -4,6 +4,6 @@ class ActiveJobLockCleanupJob < ApplicationJob include HasActiveJobLock def perform(diff = 1.day) - ::ActiveJobLock.where('created_at < ?', Time.zone.now - diff).destroy_all + ::ActiveJobLock.where(created_at: ...diff.ago).destroy_all end end diff --git a/app/jobs/taskbar_cleanup_job.rb b/app/jobs/taskbar_cleanup_job.rb index 918c8fdc0d8a..55e40cb49b27 100644 --- a/app/jobs/taskbar_cleanup_job.rb +++ b/app/jobs/taskbar_cleanup_job.rb @@ -5,8 +5,7 @@ class TaskbarCleanupJob < ApplicationJob def perform Taskbar - .where(app: :mobile) - .where('last_contact < ?', LAST_CONTACT_THRESHOLD.ago) + .where(app: :mobile, last_contact: ...LAST_CONTACT_THRESHOLD.ago) .destroy_all end end diff --git a/app/jobs/upload_cache_cleanup_job.rb b/app/jobs/upload_cache_cleanup_job.rb index b565ef0502ff..3362cf89de2a 100644 --- a/app/jobs/upload_cache_cleanup_job.rb +++ b/app/jobs/upload_cache_cleanup_job.rb @@ -5,9 +5,14 @@ def perform taskbar_form_ids = Taskbar.with_form_id.filter_map(&:persisted_form_id) return if store_object_id.blank? - Store.where(store_object_id: store_object_id).where('created_at < ?', 1.month.ago).where.not(o_id: taskbar_form_ids).find_each do |store| - Store.remove_item(store.id) - end + Store + .where(store_object_id: store_object_id, created_at: ...1.month.ago) + .where.not(o_id: taskbar_form_ids) + .in_batches do |batch| + batch + .pluck(:id) + .each { |elem| Store.remove_item(elem) } + end end private diff --git a/app/models/activity_stream.rb b/app/models/activity_stream.rb index bb900c518a72..ea300dd6f6fd 100644 --- a/app/models/activity_stream.rb +++ b/app/models/activity_stream.rb @@ -125,7 +125,9 @@ def self.list(user, limit) =end def self.cleanup(diff = 3.months) - ActivityStream.where('created_at < ?', Time.zone.now - diff).delete_all + where(created_at: ...diff.ago) + .delete_all + true end diff --git a/app/models/chat.rb b/app/models/chat.rb index 330eb2a6a5b3..7b4711c89328 100644 --- a/app/models/chat.rb +++ b/app/models/chat.rb @@ -557,10 +557,9 @@ def self.broadcast_customer_state_update(chat_id) =end def self.cleanup(diff = 12.months) - Chat::Session.where(state: 'closed').where('updated_at < ?', Time.zone.now - diff).each do |chat_session| - Chat::Message.where(chat_session_id: chat_session.id).delete_all - chat_session.destroy - end + Chat::Session + .where(state: 'closed', updated_at: ...diff.ago) + .each(&:destroy) true end @@ -578,20 +577,25 @@ def self.cleanup(diff = 12.months) =end def self.cleanup_close(diff = 5.minutes) - Chat::Session.where.not(state: 'closed').where('updated_at < ?', Time.zone.now - diff).each do |chat_session| - next if chat_session.recipients_active? + Chat::Session + .where.not(state: 'closed') + .where(updated_at: ...diff.ago) + .each do |chat_session| + next if chat_session.recipients_active? + + chat_session.state = 'closed' + chat_session.save + + message = { + event: 'chat_session_closed', + data: { + session_id: chat_session.session_id, + realname: 'System', + }, + } + chat_session.send_to_recipients(message) + end - chat_session.state = 'closed' - chat_session.save - message = { - event: 'chat_session_closed', - data: { - session_id: chat_session.session_id, - realname: 'System', - }, - } - chat_session.send_to_recipients(message) - end true end diff --git a/app/models/chat/session.rb b/app/models/chat/session.rb index d3a3c975c724..7dd9422a49f0 100644 --- a/app/models/chat/session.rb +++ b/app/models/chat/session.rb @@ -9,7 +9,7 @@ class Chat::Session < ApplicationModel include Chat::Session::Assets # rubocop:disable Rails/InverseOf - has_many :messages, class_name: 'Chat::Message', foreign_key: 'chat_session_id', dependent: :destroy + has_many :messages, class_name: 'Chat::Message', foreign_key: 'chat_session_id', dependent: :delete_all belongs_to :user, class_name: 'User', optional: true belongs_to :chat, class_name: 'Chat' # rubocop:enable Rails/InverseOf diff --git a/app/models/cti/log.rb b/app/models/cti/log.rb index 5c1c6f6a2dbc..9669a5ddd248 100644 --- a/app/models/cti/log.rb +++ b/app/models/cti/log.rb @@ -487,7 +487,9 @@ def push_caller_list_update =end def self.cleanup(diff = 12.months) - Cti::Log.where('created_at < ?', Time.zone.now - diff).delete_all + where(created_at: ...diff.ago) + .delete_all + true end diff --git a/app/models/data_privacy_task.rb b/app/models/data_privacy_task.rb index ed6b0905b9a8..763bcc18ba21 100644 --- a/app/models/data_privacy_task.rb +++ b/app/models/data_privacy_task.rb @@ -27,7 +27,9 @@ def perform end def self.cleanup(diff = 12.months) - where('created_at < ?', diff.ago).destroy_all + where(created_at: ...diff.ago) + .destroy_all + true end diff --git a/app/models/http_log.rb b/app/models/http_log.rb index be942876a2e4..e94a569a463c 100644 --- a/app/models/http_log.rb +++ b/app/models/http_log.rb @@ -20,7 +20,9 @@ class HttpLog < ApplicationModel =end def self.cleanup(diff = 1.month) - HttpLog.where('created_at < ?', Time.zone.now - diff).delete_all + where(created_at: ...diff.ago) + .delete_all + true end diff --git a/app/models/import_job.rb b/app/models/import_job.rb index cd980439bd48..c46c48e28944 100644 --- a/app/models/import_job.rb +++ b/app/models/import_job.rb @@ -179,15 +179,16 @@ def self.cleanup_import_jobs(after) # we need to exclude jobs that were updated at or since we started # cleaning up (via the #reschedule? call) because they might # were started `.delay`-ed and are flagged for restart - ImportJob.running.where('updated_at < ?', after).each do |job| - - job.update!( - finished_at: after, - result: { - error: error - } - ) - end + running + .where(updated_at: ...after) + .each do |job| + job.update!( + finished_at: after, + result: { + error: error + } + ) + end end end end diff --git a/app/models/online_notification.rb b/app/models/online_notification.rb index bcc9850b4313..083efab75b58 100644 --- a/app/models/online_notification.rb +++ b/app/models/online_notification.rb @@ -175,13 +175,11 @@ def self.list_by_object(object_name, o_id) def self.cleanup(max_age = 9.months.ago, max_own_seen = 10.minutes.ago, max_auto_seen = 8.hours.ago) affected_user_ids = [] - OnlineNotification - .where('created_at < ?', max_age) + where(created_at: ...max_age) .tap { |relation| affected_user_ids |= relation.distinct.pluck(:user_id) } .delete_all - OnlineNotification - .where(seen: true) + where(seen: true) .where('(user_id = updated_by_id AND updated_at < :max_own_seen) OR (user_id != updated_by_id AND updated_at < :max_auto_seen)', max_own_seen:, max_auto_seen:) .tap { |relation| affected_user_ids |= relation.distinct.pluck(:user_id) } diff --git a/app/models/recent_view.rb b/app/models/recent_view.rb index 3c6b2b915486..a6316ad709b7 100644 --- a/app/models/recent_view.rb +++ b/app/models/recent_view.rb @@ -99,7 +99,9 @@ def self.access(object, o_id, user) =end def self.cleanup(diff = 3.months) - RecentView.where('created_at < ?', Time.zone.now - diff).delete_all + where(created_at: ...diff.ago) + .delete_all + true end diff --git a/app/models/setting.rb b/app/models/setting.rb index 96587ef6c2ee..fa769e081327 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -128,7 +128,7 @@ def self.load(force = false) base_query = Setting.reorder(:id) settings_query = if @@last_changed_at && @@current.present? - base_query.where('updated_at >= ?', @@last_changed_at) + base_query.where(updated_at: @@last_changed_at..) else base_query end diff --git a/app/models/stats_store.rb b/app/models/stats_store.rb index 4900eb32a84a..65f1be496ac7 100644 --- a/app/models/stats_store.rb +++ b/app/models/stats_store.rb @@ -48,7 +48,9 @@ def self.sync(params) =end def self.cleanup(diff = 12.months) - StatsStore.where('updated_at < ?', Time.zone.now - diff).delete_all + where(updated_at: ...diff.ago) + .delete_all + true end diff --git a/app/models/ticket.rb b/app/models/ticket.rb index 36d5ddb03b1e..ca35582c17a6 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -135,18 +135,16 @@ def self.process_pending next_state_map[state.id] = state.next_state_id end - tickets = where(state_id: next_state_map.keys) - .where('pending_time <= ?', Time.zone.now) - - tickets.find_each(batch_size: 500) do |ticket| - Transaction.execute do - ticket.state_id = next_state_map[ticket.state_id] - ticket.updated_at = Time.zone.now - ticket.updated_by_id = 1 - ticket.save! + where(state_id: next_state_map.keys, pending_time: ..Time.current) + .find_each(batch_size: 500) do |ticket| + Transaction.execute do + ticket.state_id = next_state_map[ticket.state_id] + ticket.updated_at = Time.zone.now + ticket.updated_by_id = 1 + ticket.save! + end + result.push ticket end - result.push ticket - end end # process pending reminder tickets @@ -159,28 +157,26 @@ def self.process_pending reminder_state_map[state.id] = state.next_state_id end - tickets = where(state_id: reminder_state_map.keys) - .where('pending_time <= ?', Time.zone.now) - - tickets.find_each(batch_size: 500) do |ticket| + where(state_id: reminder_state_map.keys, pending_time: ..Time.current) + .find_each(batch_size: 500) do |ticket| - article_id = nil - article = Ticket::Article.last_customer_agent_article(ticket.id) - if article - article_id = article.id - end + article_id = nil + article = Ticket::Article.last_customer_agent_article(ticket.id) + if article + article_id = article.id + end - # send notification - TransactionJob.perform_now( - object: 'Ticket', - type: 'reminder_reached', - object_id: ticket.id, - article_id: article_id, - user_id: 1, - ) + # send notification + TransactionJob.perform_now( + object: 'Ticket', + type: 'reminder_reached', + object_id: ticket.id, + article_id: article_id, + user_id: 1, + ) - result.push ticket - end + result.push ticket + end end result @@ -227,37 +223,38 @@ def self.process_escalation result = [] # fetch all escalated and soon to be escalating tickets - where('escalation_at <= ?', 15.minutes.from_now).find_each(batch_size: 500) do |ticket| + where(escalation_at: ..15.minutes.from_now) + .find_each(batch_size: 500) do |ticket| + article_id = nil + article = Ticket::Article.last_customer_agent_article(ticket.id) + if article + article_id = article.id + end - article_id = nil - article = Ticket::Article.last_customer_agent_article(ticket.id) - if article - article_id = article.id - end + # send escalation + if ticket.escalation_at < Time.zone.now + TransactionJob.perform_now( + object: 'Ticket', + type: 'escalation', + object_id: ticket.id, + article_id: article_id, + user_id: 1, + ) + result.push ticket + next + end - # send escalation - if ticket.escalation_at < Time.zone.now + # check if warning needs to be sent TransactionJob.perform_now( object: 'Ticket', - type: 'escalation', + type: 'escalation_warning', object_id: ticket.id, article_id: article_id, user_id: 1, ) result.push ticket - next end - # check if warning needs to be sent - TransactionJob.perform_now( - object: 'Ticket', - type: 'escalation_warning', - object_id: ticket.id, - article_id: article_id, - user_id: 1, - ) - result.push ticket - end result end diff --git a/lib/background_services/service/process_delayed_jobs/cleanup_action.rb b/lib/background_services/service/process_delayed_jobs/cleanup_action.rb index d59aa418f92a..54d2ec4db591 100644 --- a/lib/background_services/service/process_delayed_jobs/cleanup_action.rb +++ b/lib/background_services/service/process_delayed_jobs/cleanup_action.rb @@ -20,7 +20,7 @@ def self.cleanup_delayed_jobs(after) end private_class_method def self.scope(after) - ::Delayed::Job.where('updated_at < ?', after).where.not(locked_at: nil) + ::Delayed::Job.where(updated_at: ...after).where.not(locked_at: nil) end def initialize(job) diff --git a/lib/monitoring_helper/amount_check.rb b/lib/monitoring_helper/amount_check.rb index 8cae4b393514..9cfde0e6bb62 100644 --- a/lib/monitoring_helper/amount_check.rb +++ b/lib/monitoring_helper/amount_check.rb @@ -69,7 +69,7 @@ def created_at_threshold end def ticket_count - @ticket_count ||= Ticket.where('created_at >= ?', created_at_threshold).count + @ticket_count ||= Ticket.where(created_at: created_at_threshold..).count end def check_single_row(row, value) diff --git a/lib/monitoring_helper/health_checker/data_privacy_task.rb b/lib/monitoring_helper/health_checker/data_privacy_task.rb index 558d0f3636c4..f0e18796e7a0 100644 --- a/lib/monitoring_helper/health_checker/data_privacy_task.rb +++ b/lib/monitoring_helper/health_checker/data_privacy_task.rb @@ -16,7 +16,7 @@ def run_health_check def scope ::DataPrivacyTask .where.not(state: 'completed') - .where('updated_at <= ?', TIMEOUT.ago) + .where(updated_at: ..TIMEOUT.ago) end end end diff --git a/lib/monitoring_helper/health_checker/delayed_job.rb b/lib/monitoring_helper/health_checker/delayed_job.rb index e2adffd33c92..035319ee734f 100644 --- a/lib/monitoring_helper/health_checker/delayed_job.rb +++ b/lib/monitoring_helper/health_checker/delayed_job.rb @@ -59,7 +59,7 @@ def job_name(job) end def total_jobs - total_jobs = Delayed::Job.where('created_at < ?', TOTAL_JOBS_TIMEOUT.ago).count + total_jobs = Delayed::Job.where(created_at: ...TOTAL_JOBS_TIMEOUT.ago).count return if total_jobs <= TOTAL_JOBS_THRESHOLD diff --git a/lib/monitoring_helper/health_checker/import_job.rb b/lib/monitoring_helper/health_checker/import_job.rb index a9b21ef3faa2..1cdfa18f5b7f 100644 --- a/lib/monitoring_helper/health_checker/import_job.rb +++ b/lib/monitoring_helper/health_checker/import_job.rb @@ -22,9 +22,7 @@ def failed_imports def failed_import_job(backend) ::ImportJob - .where(name: backend, dry_run: false) - .where('finished_at >= ?', TIMEOUT.ago) - .limit(1) + .where(name: backend, dry_run: false, finished_at: TIMEOUT.ago..) .first end @@ -46,9 +44,7 @@ def stuck_imports def stuck_import_job(backend) ::ImportJob - .where(name: backend, dry_run: false, finished_at: nil) - .where('updated_at <= ?', TIMEOUT.ago) - .limit(1) + .where(name: backend, dry_run: false, finished_at: nil, updated_at: ..TIMEOUT.ago) .first end diff --git a/lib/report/base.rb b/lib/report/base.rb index cbba63896901..88a43adc94d1 100644 --- a/lib/report/base.rb +++ b/lib/report/base.rb @@ -231,21 +231,26 @@ def self.history(data) # :condition def self.time_average(data) query, bind_params, tables = Ticket.selector2sql(data[:condition]) - ticket_list = Ticket.where('tickets.created_at >= ? AND tickets.created_at <= ?', data[:start], data[:end]) - .where(query, *bind_params).joins(tables) + tickets = 0 time_total = 0 - ticket_list.each do |ticket| - timestamp = ticket[ data[:type].to_sym ] - next if !timestamp - - # puts 'FR:' + first_response.to_s - # puts 'CT:' + ticket.created_at.to_s - diff = timestamp - ticket.created_at - # puts 'DIFF:' + diff.to_s - time_total += diff - tickets += 1 - end + + Ticket + .where(tickets: { created_at: data[:start]..data[:end] }) + .where(query, *bind_params) + .joins(tables) + .each do |ticket| + timestamp = ticket[ data[:type].to_sym ] + next if !timestamp + + # puts 'FR:' + first_response.to_s + # puts 'CT:' + ticket.created_at.to_s + diff = timestamp - ticket.created_at + # puts 'DIFF:' + diff.to_s + time_total += diff + tickets += 1 + end + if time_total.zero? || tickets.zero? tickets = -0.001 else @@ -263,26 +268,31 @@ def self.time_average(data) # :condition def self.time_min(data) query, bind_params, tables = Ticket.selector2sql(data[:condition]) - ticket_list = Ticket.where('tickets.created_at >= ? AND tickets.created_at <= ?', data[:start], data[:end]) - .where(query, *bind_params).joins(tables) + time_min = 0 ticket_ids = [] - ticket_list.each do |ticket| - timestamp = ticket[ data[:type].to_sym ] - next if !timestamp - - ticket_ids.push ticket.id - # puts 'FR:' + first_response.to_s - # puts 'CT:' + ticket.created_at.to_s - diff = timestamp - ticket.created_at - # puts 'DIFF:' + diff.to_s - if !time_min - time_min = diff - end - if diff < time_min - time_min = diff + + Ticket + .where(tickets: { created_at: data[:start]..data[:end] }) + .where(query, *bind_params) + .joins(tables) + .each do |ticket| + timestamp = ticket[ data[:type].to_sym ] + next if !timestamp + + ticket_ids.push ticket.id + # puts 'FR:' + first_response.to_s + # puts 'CT:' + ticket.created_at.to_s + diff = timestamp - ticket.created_at + # puts 'DIFF:' + diff.to_s + if !time_min + time_min = diff + end + if diff < time_min + time_min = diff + end end - end + tickets = if time_min.zero? -0.001 else @@ -300,27 +310,32 @@ def self.time_min(data) # :condition def self.time_max(data) query, bind_params, tables = Ticket.selector2sql(data[:condition]) - ticket_list = Ticket.where('tickets.created_at >= ? AND tickets.created_at <= ?', data[:start], data[:end]) - .where(query, *bind_params).joins(tables) + time_max = 0 ticket_ids = [] - ticket_list.each do |ticket| - timestamp = ticket[ data[:type].to_sym ] - next if !timestamp - - ticket_ids.push ticket.id - # puts "#{data[:type].to_s} - #{timestamp} - #{ticket.inspect}" - # puts 'FR:' + ticket.first_response.to_s - # puts 'CT:' + ticket.created_at.to_s - diff = timestamp - ticket.created_at - # puts 'DIFF:' + diff.to_s - if !time_max - time_max = diff - end - if diff > time_max - time_max = diff + + Ticket + .where(tickets: { created_at: data[:start]..data[:end] }) + .where(query, *bind_params) + .joins(tables) + .each do |ticket| + timestamp = ticket[ data[:type].to_sym ] + next if !timestamp + + ticket_ids.push ticket.id + # puts "#{data[:type].to_s} - #{timestamp} - #{ticket.inspect}" + # puts 'FR:' + ticket.first_response.to_s + # puts 'CT:' + ticket.created_at.to_s + diff = timestamp - ticket.created_at + # puts 'DIFF:' + diff.to_s + if !time_max + time_max = diff + end + if diff > time_max + time_max = diff + end end - end + tickets = if time_max.zero? -0.001 else diff --git a/lib/session_helper.rb b/lib/session_helper.rb index 44cabf298fc8..cbe61da51942 100644 --- a/lib/session_helper.rb +++ b/lib/session_helper.rb @@ -53,7 +53,11 @@ def self.models(user = nil) def self.models_public allowed_user_attributes = %w[firstname lastname email password] - user_attributes = ObjectManager::Object.new('User').attributes(nil, skip_permission: true).select { |attribute| allowed_user_attributes.include?(attribute[:name]) } + + user_attributes = ObjectManager::Object + .new('User') + .attributes(nil, skip_permission: true) + .select { |attribute| allowed_user_attributes.include?(attribute[:name]) } { 'User' => user_attributes, @@ -63,11 +67,14 @@ def self.models_public def self.cleanup_expired # delete temp. sessions - ActiveRecord::SessionStore::Session.where('persistent IS NULL AND updated_at < ?', 2.hours.ago).delete_all + ActiveRecord::SessionStore::Session + .where(persistent: nil, updated_at: ...2.hours.ago) + .delete_all # web sessions not updated the last x days - ActiveRecord::SessionStore::Session.where('updated_at < ?', 60.days.ago).delete_all - + ActiveRecord::SessionStore::Session + .where(updated_at: ...60.days.ago) + .delete_all end def self.get(id) @@ -79,9 +86,8 @@ def self.list(limit = 10_000) end def self.destroy(id) - session = ActiveRecord::SessionStore::Session.find_by(id: id) - return if !session - - session.destroy + ActiveRecord::SessionStore::Session + .find_by(id: id) + &.destroy end end diff --git a/lib/tasks/zammad/email_parser/failed_email/delete_old.rb b/lib/tasks/zammad/email_parser/failed_email/delete_old.rb index a4d5bc3d8be7..2440f985a915 100644 --- a/lib/tasks/zammad/email_parser/failed_email/delete_old.rb +++ b/lib/tasks/zammad/email_parser/failed_email/delete_old.rb @@ -18,7 +18,7 @@ def self.task_handler puts 'Deleting failed emails older than 24 hours.' destroyed = ::FailedEmail - .where('updated_at < ?', 24.hours.ago) + .where(updated_at: ...24.hours.ago) .destroy_all puts "#{destroyed.count} email(s) deleted."