summaryrefslogtreecommitdiff
path: root/app/workers
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2018-03-30 14:05:20 +0100
committerSean McGivern <sean@gitlab.com>2018-03-30 14:55:05 +0100
commit2db218f8bf186c509c927ce3e9d0502fee4f8349 (patch)
tree8290216f729e4d5d376986720b5f730eb16e4141 /app/workers
parent5ab75649f3ea00b64cb63e7e5283100c6b70cfb5 (diff)
downloadgitlab-ce-2db218f8bf186c509c927ce3e9d0502fee4f8349.tar.gz
Send emails for issues due tomorrow
Also, refactor the mail sending slightly: instead of one worker sending all emails, create a worker per project with issues due, which will send all emails for that project.
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/all_queues.yml4
-rw-r--r--app/workers/concerns/mail_scheduler_queue.rb7
-rw-r--r--app/workers/issue_due_scheduler_worker.rb10
-rw-r--r--app/workers/issue_due_worker.rb10
-rw-r--r--app/workers/mail_scheduler/issue_due_worker.rb14
5 files changed, 34 insertions, 11 deletions
diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml
index ef445055f6e..9aea3bad27b 100644
--- a/app/workers/all_queues.yml
+++ b/app/workers/all_queues.yml
@@ -18,7 +18,7 @@
- cronjob:stuck_import_jobs
- cronjob:stuck_merge_jobs
- cronjob:trending_projects
-- cronjob:issue_due
+- cronjob:issue_due_scheduler
- gcp_cluster:cluster_install_app
- gcp_cluster:cluster_provision
@@ -40,6 +40,8 @@
- github_importer:github_import_stage_import_pull_requests
- github_importer:github_import_stage_import_repository
+- mail_scheduler:mail_scheduler_issue_due
+
- object_storage_upload
- object_storage:object_storage_background_move
- object_storage:object_storage_migrate_uploads
diff --git a/app/workers/concerns/mail_scheduler_queue.rb b/app/workers/concerns/mail_scheduler_queue.rb
new file mode 100644
index 00000000000..9df55ad9522
--- /dev/null
+++ b/app/workers/concerns/mail_scheduler_queue.rb
@@ -0,0 +1,7 @@
+module MailSchedulerQueue
+ extend ActiveSupport::Concern
+
+ included do
+ queue_namespace :mail_scheduler
+ end
+end
diff --git a/app/workers/issue_due_scheduler_worker.rb b/app/workers/issue_due_scheduler_worker.rb
new file mode 100644
index 00000000000..9c06304bff6
--- /dev/null
+++ b/app/workers/issue_due_scheduler_worker.rb
@@ -0,0 +1,10 @@
+class IssueDueSchedulerWorker
+ include ApplicationWorker
+ include CronjobQueue
+
+ def perform
+ Issue.opened.due_tomorrow.group(:project_id).pluck(:project_id).each do |project_id|
+ MailScheduler::IssueDueWorker.perform_async(project_id)
+ end
+ end
+end
diff --git a/app/workers/issue_due_worker.rb b/app/workers/issue_due_worker.rb
deleted file mode 100644
index 90d2cc09f1b..00000000000
--- a/app/workers/issue_due_worker.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-class IssueDueWorker
- include ApplicationWorker
- include CronjobQueue
-
- def perform
- Issue.where(due_date: Date.today).find_each do |issue|
- NotificationService.new.issue_due_email(issue)
- end
- end
-end
diff --git a/app/workers/mail_scheduler/issue_due_worker.rb b/app/workers/mail_scheduler/issue_due_worker.rb
new file mode 100644
index 00000000000..b06079d68ca
--- /dev/null
+++ b/app/workers/mail_scheduler/issue_due_worker.rb
@@ -0,0 +1,14 @@
+module MailScheduler
+ class IssueDueWorker
+ include ApplicationWorker
+ include MailSchedulerQueue
+
+ def perform(project_id)
+ notification_service = NotificationService.new
+
+ Issue.opened.due_tomorrow.in_projects(project_id).preload(:project).find_each do |issue|
+ notification_service.issue_due(issue)
+ end
+ end
+ end
+end