Browse Source

Refactoring: Migrated last Delayed::Job classes to ActiveJob.

Thorsten Eckel 4 years ago
parent
commit
5f3a8dc581

+ 0 - 1
.gitlab-ci.yml

@@ -48,4 +48,3 @@ before_script:
   - source /etc/profile.d/rvm.sh
   - bundle install -j $(nproc) --path vendor
   - bundle exec ruby script/build/database_config.rb
-

+ 8 - 9
.rubocop/todo.rspec.yml

@@ -31,6 +31,7 @@ RSpec/ContextWording:
     - 'spec/db/migrate/issue_2345_es_attachment_max_size_in_mb_setting_lower_default_spec.rb'
     - 'spec/db/migrate/issue_2368_add_indices_to_histories_and_tickets_spec.rb'
     - 'spec/db/migrate/issue_2541_fix_notification_email_without_body_spec.rb'
+    - 'spec/jobs/communicate_twitter_job_spec.rb'
     - 'spec/jobs/concerns/has_active_job_lock_spec.rb'
     - 'spec/jobs/concerns/has_collection_update_spec.rb'
     - 'spec/jobs/concerns/has_ticket_create_screen_impact_spec.rb'
@@ -116,7 +117,6 @@ RSpec/ContextWording:
     - 'spec/models/object_manager/attribute/validation/required_spec.rb'
     - 'spec/models/object_manager/attribute/validation_spec.rb'
     - 'spec/models/object_manager/attribute_spec.rb'
-    - 'spec/models/observer/ticket/article/communicate_twitter/background_job_spec.rb'
     - 'spec/models/observer/ticket/article/communicate_twitter_spec.rb'
     - 'spec/models/overview_spec.rb'
     - 'spec/models/role_spec.rb'
@@ -170,7 +170,9 @@ RSpec/ExampleLength:
     - 'spec/db/migrate/issue_2867_footer_header_public_link_spec.rb'
     - 'spec/db/migrate/object_manager_attribute_date_remove_future_past_spec.rb'
     - 'spec/db/migrate/rename_locale_on_users_spec.rb'
+    - 'spec/jobs/communicate_twitter_job_spec.rb'
     - 'spec/jobs/concerns/has_active_job_lock_spec.rb'
+    - 'spec/jobs/migrate_ldap_samaccountname_to_uid_job_spec.rb'
     - 'spec/jobs/ticket_user_ticket_counter_job_spec.rb'
     - 'spec/jobs/user_device_log_job_spec.rb'
     - 'spec/lib/auth/internal_spec.rb'
@@ -209,7 +211,6 @@ RSpec/ExampleLength:
     - 'spec/lib/ldap/group_spec.rb'
     - 'spec/lib/ldap/user_spec.rb'
     - 'spec/lib/ldap_spec.rb'
-    - 'spec/lib/migration_job/ldap_samaccountname_to_uid_spec.rb'
     - 'spec/lib/notification_factory/mailer_spec.rb'
     - 'spec/lib/notification_factory/renderer_spec.rb'
     - 'spec/lib/notification_factory/slack_spec.rb'
@@ -249,7 +250,6 @@ RSpec/ExampleLength:
     - 'spec/models/history_spec.rb'
     - 'spec/models/import_job_spec.rb'
     - 'spec/models/object_manager/attribute_spec.rb'
-    - 'spec/models/observer/ticket/article/communicate_twitter/background_job_spec.rb'
     - 'spec/models/overview_spec.rb'
     - 'spec/models/recent_view_spec.rb'
     - 'spec/models/role_group_spec.rb'
@@ -357,6 +357,7 @@ RSpec/InstanceVariable:
 
 RSpec/LetSetup:
   Exclude:
+    - 'spec/jobs/communicate_twitter_job_spec.rb'
     - 'spec/jobs/ticket_online_notification_seen_job_spec.rb'
     - 'spec/lib/external_credential/google_spec.rb'
     - 'spec/lib/external_credential/office365_spec.rb'
@@ -367,7 +368,6 @@ RSpec/LetSetup:
     - 'spec/models/cti/caller_id_spec.rb'
     - 'spec/models/cti/driver/base_spec.rb'
     - 'spec/models/cti/log_spec.rb'
-    - 'spec/models/observer/ticket/article/communicate_twitter/background_job_spec.rb'
     - 'spec/models/organization_spec.rb'
     - 'spec/models/role_group_spec.rb'
     - 'spec/models/tag_spec.rb'
@@ -431,7 +431,6 @@ RSpec/MessageSpies:
     - 'spec/lib/ldap/guid_spec.rb'
     - 'spec/lib/ldap/user_spec.rb'
     - 'spec/lib/ldap_spec.rb'
-    - 'spec/lib/migration_job/ldap_samaccountname_to_uid_spec.rb'
     - 'spec/lib/sequencer/sequence/import/ldap/users_spec.rb'
     - 'spec/lib/sequencer/unit/common/attribute_mapper_spec.rb'
     - 'spec/lib/sequencer/unit/import/common/mapping/flat_keys_spec.rb'
@@ -468,7 +467,9 @@ RSpec/MultipleExpectations:
     - 'spec/db/migrate/issue_1905_exchange_login_from_remote_id_spec.rb'
     - 'spec/db/migrate/object_manager_attribute_date_remove_future_past_spec.rb'
     - 'spec/db/migrate/rename_locale_on_users_spec.rb'
+    - 'spec/jobs/communicate_twitter_job_spec.rb'
     - 'spec/jobs/concerns/has_active_job_lock_spec.rb'
+    - 'spec/jobs/migrate_ldap_samaccountname_to_uid_job_spec.rb'
     - 'spec/jobs/search_index_job_spec.rb'
     - 'spec/jobs/ticket_user_ticket_counter_job_spec.rb'
     - 'spec/lib/auth/developer_spec.rb'
@@ -505,7 +506,6 @@ RSpec/MultipleExpectations:
     - 'spec/lib/ldap/guid_spec.rb'
     - 'spec/lib/ldap/user_spec.rb'
     - 'spec/lib/ldap_spec.rb'
-    - 'spec/lib/migration_job/ldap_samaccountname_to_uid_spec.rb'
     - 'spec/lib/notification_factory/mailer_spec.rb'
     - 'spec/lib/password_hash_spec.rb'
     - 'spec/lib/secure_mailing/smime_spec.rb'
@@ -538,7 +538,6 @@ RSpec/MultipleExpectations:
     - 'spec/models/object_manager/attribute/validation/backend_spec.rb'
     - 'spec/models/object_manager/attribute/validation_spec.rb'
     - 'spec/models/object_manager/attribute_spec.rb'
-    - 'spec/models/observer/ticket/article/communicate_twitter/background_job_spec.rb'
     - 'spec/models/overview_spec.rb'
     - 'spec/models/scheduler_spec.rb'
     - 'spec/models/smime_certificate_spec.rb'
@@ -613,6 +612,7 @@ RSpec/NamedSubject:
 RSpec/NestedGroups:
   Exclude:
     - 'spec/db/migrate/issue_2541_fix_notification_email_without_body_spec.rb'
+    - 'spec/jobs/communicate_twitter_job_spec.rb'
     - 'spec/jobs/concerns/has_collection_update_spec.rb'
     - 'spec/jobs/concerns/has_ticket_create_screen_impact_spec.rb'
     - 'spec/lib/application_handle_info_spec.rb'
@@ -656,7 +656,6 @@ RSpec/NestedGroups:
     - 'spec/models/object_manager/attribute/validation/required_spec.rb'
     - 'spec/models/object_manager/attribute/validation_spec.rb'
     - 'spec/models/object_manager/attribute_spec.rb'
-    - 'spec/models/observer/ticket/article/communicate_twitter/background_job_spec.rb'
     - 'spec/models/organization_spec.rb'
     - 'spec/models/recent_view_spec.rb'
     - 'spec/models/role_spec.rb'
@@ -727,6 +726,7 @@ RSpec/SubjectStub:
 RSpec/VerifiedDoubles:
   Exclude:
     - 'spec/db/migrate/issue_2460_fix_corrupted_twitter_ids_spec.rb'
+    - 'spec/jobs/communicate_twitter_job_spec.rb'
     - 'spec/lib/auth/ldap_spec.rb'
     - 'spec/lib/external_sync_spec.rb'
     - 'spec/lib/import/zendesk/object_attribute/base_examples.rb'
@@ -744,7 +744,6 @@ RSpec/VerifiedDoubles:
     - 'spec/lib/sequencer/unit/import/zendesk/sub_sequence/base_examples.rb'
     - 'spec/lib/sequencer/unit/import/zendesk/ticket/comment/attachment/request_spec.rb'
     - 'spec/lib/sequencer/unit/import/zendesk/ticket/comment/source_based_spec.rb'
-    - 'spec/models/observer/ticket/article/communicate_twitter/background_job_spec.rb'
     - 'spec/models/ticket/number_spec.rb'
 
 RSpec/MultipleMemoizedHelpers:

+ 13 - 13
.rubocop/todo.yml

@@ -75,8 +75,13 @@ Metrics/AbcSize:
     - 'app/controllers/users_controller.rb'
     - 'app/helpers/knowledge_base_rich_text_helper.rb'
     - 'app/jobs/collection_update_job.rb'
+    - 'app/jobs/communicate_facebook_job.rb'
+    - 'app/jobs/communicate_sms_job.rb'
+    - 'app/jobs/communicate_telegram_job.rb'
+    - 'app/jobs/communicate_twitter_job.rb'
     - 'app/jobs/concerns/has_active_job_lock.rb'
     - 'app/jobs/imap_authentication_migration_cleanup_job.rb'
+    - 'app/jobs/migrate_ldap_samaccountname_to_uid_job.rb'
     - 'app/jobs/ticket_article_communicate_email_job.rb'
     - 'app/jobs/ticket_user_ticket_counter_job.rb'
     - 'app/models/activity_stream.rb'
@@ -154,13 +159,9 @@ Metrics/AbcSize:
     - 'app/models/observer/sla/ticket_rebuild_escalation.rb'
     - 'app/models/observer/ticket/article/communicate_email.rb'
     - 'app/models/observer/ticket/article/communicate_facebook.rb'
-    - 'app/models/observer/ticket/article/communicate_facebook/background_job.rb'
     - 'app/models/observer/ticket/article/communicate_sms.rb'
-    - 'app/models/observer/ticket/article/communicate_sms/background_job.rb'
     - 'app/models/observer/ticket/article/communicate_telegram.rb'
-    - 'app/models/observer/ticket/article/communicate_telegram/background_job.rb'
     - 'app/models/observer/ticket/article/communicate_twitter.rb'
-    - 'app/models/observer/ticket/article/communicate_twitter/background_job.rb'
     - 'app/models/observer/ticket/article/fillup_from_email.rb'
     - 'app/models/observer/ticket/article/fillup_from_general.rb'
     - 'app/models/observer/ticket/article/fillup_from_origin_by_id.rb'
@@ -290,7 +291,6 @@ Metrics/AbcSize:
     - 'lib/knowledge_base/menu_item_update_action.rb'
     - 'lib/ldap/group.rb'
     - 'lib/ldap/user.rb'
-    - 'lib/migration_job/ldap_samaccountname_to_uid.rb'
     - 'lib/models.rb'
     - 'lib/notification_factory/mailer.rb'
     - 'lib/notification_factory/renderer.rb'
@@ -486,6 +486,10 @@ Metrics/CyclomaticComplexity:
     - 'app/controllers/user_access_token_controller.rb'
     - 'app/controllers/users_controller.rb'
     - 'app/jobs/collection_update_job.rb'
+    - 'app/jobs/communicate_facebook_job.rb'
+    - 'app/jobs/communicate_sms_job.rb'
+    - 'app/jobs/communicate_telegram_job.rb'
+    - 'app/jobs/communicate_twitter_job.rb'
     - 'app/jobs/ticket_article_communicate_email_job.rb'
     - 'app/jobs/ticket_create_screen_job.rb'
     - 'app/jobs/ticket_user_ticket_counter_job.rb'
@@ -545,12 +549,8 @@ Metrics/CyclomaticComplexity:
     - 'app/models/observer/sla/ticket_rebuild_escalation.rb'
     - 'app/models/observer/ticket/article/communicate_email.rb'
     - 'app/models/observer/ticket/article/communicate_facebook.rb'
-    - 'app/models/observer/ticket/article/communicate_facebook/background_job.rb'
     - 'app/models/observer/ticket/article/communicate_sms.rb'
-    - 'app/models/observer/ticket/article/communicate_sms/background_job.rb'
-    - 'app/models/observer/ticket/article/communicate_telegram/background_job.rb'
     - 'app/models/observer/ticket/article/communicate_twitter.rb'
-    - 'app/models/observer/ticket/article/communicate_twitter/background_job.rb'
     - 'app/models/observer/ticket/article/fillup_from_email.rb'
     - 'app/models/observer/ticket/article/fillup_from_general.rb'
     - 'app/models/observer/ticket/article/fillup_from_origin_by_id.rb'
@@ -720,6 +720,10 @@ Metrics/PerceivedComplexity:
     - 'app/controllers/time_accountings_controller.rb'
     - 'app/controllers/users_controller.rb'
     - 'app/jobs/collection_update_job.rb'
+    - 'app/jobs/communicate_facebook_job.rb'
+    - 'app/jobs/communicate_sms_job.rb'
+    - 'app/jobs/communicate_telegram_job.rb'
+    - 'app/jobs/communicate_twitter_job.rb'
     - 'app/jobs/ticket_article_communicate_email_job.rb'
     - 'app/models/activity_stream/assets.rb'
     - 'app/models/application_model/can_assets.rb'
@@ -775,12 +779,8 @@ Metrics/PerceivedComplexity:
     - 'app/models/observer/sla/ticket_rebuild_escalation.rb'
     - 'app/models/observer/ticket/article/communicate_email.rb'
     - 'app/models/observer/ticket/article/communicate_facebook.rb'
-    - 'app/models/observer/ticket/article/communicate_facebook/background_job.rb'
     - 'app/models/observer/ticket/article/communicate_sms.rb'
-    - 'app/models/observer/ticket/article/communicate_sms/background_job.rb'
-    - 'app/models/observer/ticket/article/communicate_telegram/background_job.rb'
     - 'app/models/observer/ticket/article/communicate_twitter.rb'
-    - 'app/models/observer/ticket/article/communicate_twitter/background_job.rb'
     - 'app/models/observer/ticket/article/fillup_from_email.rb'
     - 'app/models/observer/ticket/article/fillup_from_general.rb'
     - 'app/models/observer/ticket/article/fillup_from_origin_by_id.rb'

+ 1 - 1
app/controllers/concerns/integration/import_job_base.rb

@@ -22,7 +22,7 @@ module Integration::ImportJobBase
   def job_start_create
     if !ImportJob.exists?(name: backend, finished_at: nil)
       job = ImportJob.create(name: backend)
-      job.delay.start
+      AsyncImportJob.perform_later(job)
     end
     render json: {
       result: 'ok',

+ 1 - 1
app/controllers/import_otrs_controller.rb

@@ -115,7 +115,7 @@ class ImportOtrsController < ApplicationController
     end
 
     # start migration
-    Import::OTRS.delay.start_bg
+    AsyncOtrsImportJob.perform_later
 
     render json: {
       result: 'ok',

+ 1 - 1
app/controllers/import_zendesk_controller.rb

@@ -98,7 +98,7 @@ class ImportZendeskController < ApplicationController
     Setting.set('import_backend', 'zendesk')
 
     job = ImportJob.create(name: 'Import::Zendesk')
-    job.delay.start
+    AsyncImportJob.perform_later(job)
 
     render json: {
       result: 'ok',

+ 5 - 0
app/jobs/async_import_job.rb

@@ -0,0 +1,5 @@
+class AsyncImportJob < ApplicationJob
+  def perform(import_job)
+    import_job.start
+  end
+end

+ 5 - 0
app/jobs/async_otrs_import_job.rb

@@ -0,0 +1,5 @@
+class AsyncOtrsImportJob < ApplicationJob
+  def perform
+    Import::OTRS.start_bg
+  end
+end

+ 34 - 0
app/jobs/chat_leave_job.rb

@@ -0,0 +1,34 @@
+class ChatLeaveJob < ApplicationJob
+  def perform(chat_session_id, client_id, session)
+
+    # check if customer has permanently left the conversation
+    chat_session = Chat::Session.find_by(id: chat_session_id)
+    return if !chat_session
+    return if chat_session.recipients_active?
+
+    chat_session.state = 'closed'
+    chat_session.save
+
+    realname = 'Anonymous'
+
+    # if it is a agent session, use the realname if the agent for close message
+    if session && session['id'] && chat_session.user_id
+      agent_user = chat_session.agent_user
+      if agent_user[:name]
+        realname = agent_user[:name]
+      end
+    end
+
+    # notify participants
+    message = {
+      event: 'chat_session_left',
+      data:  {
+        realname:   realname,
+        session_id: chat_session.session_id,
+      },
+    }
+    chat_session.send_to_recipients(message, client_id)
+
+    Chat.broadcast_agent_state_update([chat_session.chat_id])
+  end
+end

+ 94 - 0
app/jobs/communicate_facebook_job.rb

@@ -0,0 +1,94 @@
+class CommunicateFacebookJob < ApplicationJob
+
+  retry_on StandardError, attempts: 4, wait: lambda { |executions|
+    executions * 120.seconds
+  }
+
+  def perform(article_id)
+    article = Ticket::Article.find(article_id)
+
+    # set retry count
+    article.preferences['delivery_retry'] ||= 0
+    article.preferences['delivery_retry'] += 1
+
+    ticket = Ticket.lookup(id: article.ticket_id)
+    log_error(article, "Can't find ticket.preferences for Ticket.find(#{article.ticket_id})") if !ticket.preferences
+    log_error(article, "Can't find ticket.preferences['channel_id'] for Ticket.find(#{article.ticket_id})") if !ticket.preferences['channel_id']
+    channel = Channel.lookup(id: ticket.preferences['channel_id'])
+    log_error(article, "Channel.find(#{channel.id}) isn't a twitter channel!") if !channel.options[:adapter].match?(/\Afacebook/i)
+
+    # check source object id
+    if !ticket.preferences['channel_fb_object_id']
+      log_error(article, "fb object id is missing in ticket.preferences['channel_fb_object_id'] for Ticket.find(#{ticket.id})")
+    end
+
+    # fill in_reply_to
+    if article.in_reply_to.blank?
+      article.in_reply_to = ticket.articles.first.message_id
+    end
+
+    begin
+      facebook = Channel::Driver::Facebook.new
+      post     = facebook.send(
+        channel.options,
+        ticket.preferences[:channel_fb_object_id],
+        {
+          type:        article.type.name,
+          to:          article.to,
+          body:        article.body,
+          in_reply_to: article.in_reply_to,
+        }
+      )
+    rescue => e
+      log_error(article, e.message)
+      return
+    end
+
+    if !post
+      log_error(article, 'Got no post!')
+      return
+    end
+
+    # fill article with post info
+    article.from       = post['from']['name']
+    article.message_id = post['id']
+
+    # set delivery status
+    article.preferences['delivery_status_message'] = nil
+    article.preferences['delivery_status'] = 'success'
+    article.preferences['delivery_status_date'] = Time.zone.now
+
+    article.save!
+
+    Rails.logger.info "Send facebook to: '#{article.to}' (from #{article.from})"
+
+    article
+  end
+
+  def log_error(local_record, message)
+    local_record.preferences['delivery_status'] = 'fail'
+    local_record.preferences['delivery_status_message'] = message.encode!('UTF-8', 'UTF-8', invalid: :replace, replace: '?')
+    local_record.preferences['delivery_status_date'] = Time.zone.now
+    local_record.save
+    Rails.logger.error message
+
+    if local_record.preferences['delivery_retry'] > 3
+      Ticket::Article.create(
+        ticket_id:     local_record.ticket_id,
+        content_type:  'text/plain',
+        body:          "Unable to send post: #{message}",
+        internal:      true,
+        sender:        Ticket::Article::Sender.find_by(name: 'System'),
+        type:          Ticket::Article::Type.find_by(name: 'note'),
+        preferences:   {
+          delivery_article_id_related: local_record.id,
+          delivery_message:            true,
+        },
+        updated_by_id: 1,
+        created_by_id: 1,
+      )
+    end
+
+    raise message
+  end
+end

Some files were not shown because too many files changed in this diff