From 92bbfef2dfab8b5533a20d21ce763d9a1b8cafac Mon Sep 17 00:00:00 2001 From: Yuki Date: Mon, 27 Jul 2015 12:29:56 +0530 Subject: [PATCH 1/5] Moved ask all + ask group to worker, validates user_id for ask person now --- app/controllers/ajax/question_controller.rb | 17 ++++++++------- app/workers/deletion_worker.rb | 2 +- app/workers/question_worker.rb | 23 +++++++++++++++++++++ app/workers/share_worker.rb | 4 ++-- config/sidekiq.yml | 1 + 5 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 app/workers/question_worker.rb diff --git a/app/controllers/ajax/question_controller.rb b/app/controllers/ajax/question_controller.rb index c07305d2..5e80696e 100644 --- a/app/controllers/ajax/question_controller.rb +++ b/app/controllers/ajax/question_controller.rb @@ -55,16 +55,12 @@ class Ajax::QuestionController < ApplicationController if params[:rcpt] == 'followers' unless current_user.nil? - current_user.followers.each do |f| - Inbox.create!(user_id: f.id, question_id: question.id, new: true) - end + QuestionWorker.perform_async params[:rcpt], current_user.id, question.id end elsif params[:rcpt].start_with? 'grp:' unless current_user.nil? - begin - current_user.groups.find_by_name!(params[:rcpt].sub 'grp:', '').members.each do |m| - Inbox.create!(user_id: m.user.id, question_id: question.id, new: true) - end + current_user.groups.find_by_name!(params[:rcpt].sub 'grp:', '') + QuestionWorker.perform_async params[:rcpt], current_user.id, question.id rescue ActiveRecord::RecordNotFound @status = :not_found @message = I18n.t('messages.question.create.not_found') @@ -73,6 +69,13 @@ class Ajax::QuestionController < ApplicationController end end else + if User.find(params[:rcpt]).nil? + @status = :not_found + @message = I18n.t('messages.question.create.not_found') + @success = false + return + end + Inbox.create!(user_id: params[:rcpt], question_id: question.id, new: true) end diff --git a/app/workers/deletion_worker.rb b/app/workers/deletion_worker.rb index 5ddaf186..5b5475a2 100644 --- a/app/workers/deletion_worker.rb +++ b/app/workers/deletion_worker.rb @@ -1,7 +1,7 @@ class DeletionWorker include Sidekiq::Worker - sidekiq_options queue: :deletion + sidekiq_options queue: :deletion, retry: false # @param resource_id [Integer] user id passed from Devise def perform(resource_id) diff --git a/app/workers/question_worker.rb b/app/workers/question_worker.rb new file mode 100644 index 00000000..25157045 --- /dev/null +++ b/app/workers/question_worker.rb @@ -0,0 +1,23 @@ +class QuestionWorker + include Sidekiq::Worker + + sidekiq_options queue: :question, retry: false + + # @param resource_id [Integer] user id passed from Devise + def perform(rcpt, user_id, question_id) + begin + user = User.find(user_id) + if params[:rcpt].start_with? 'grp:' + user.followers.each do |f| + Inbox.create!(user_id: fid, question_id: question_id, new: true) + end + else + current_user.groups.find_by_name!(params[:rcpt].sub 'grp:', '').members.each do |m| + Inbox.create!(user_id: m.user.id, question_id: question.id, new: true) + end + end + rescue => e + Rails.logger.error "failed to answer question: #{e.message}" + end + end +end diff --git a/app/workers/share_worker.rb b/app/workers/share_worker.rb index e607919b..8c670e6f 100644 --- a/app/workers/share_worker.rb +++ b/app/workers/share_worker.rb @@ -1,7 +1,7 @@ class ShareWorker include Sidekiq::Worker - sidekiq_options queue: :share + sidekiq_options queue: :share, retry: false # @param user_id [Integer] the user id # @param answer_id [Integer] the user id @@ -15,4 +15,4 @@ class ShareWorker end end end -end \ No newline at end of file +end diff --git a/config/sidekiq.yml b/config/sidekiq.yml index a099c62f..50db074a 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -11,3 +11,4 @@ production: - mailer - deletion - rollbar + - question From 26a517a6504ebc9076da855bb729e48fb805e33c Mon Sep 17 00:00:00 2001 From: Yuki Date: Mon, 27 Jul 2015 12:42:12 +0530 Subject: [PATCH 2/5] Fixes, workers now output to sidekiq, not rails --- app/controllers/ajax/question_controller.rb | 1 + app/workers/deletion_worker.rb | 2 +- app/workers/question_worker.rb | 16 +++++++++------- app/workers/share_worker.rb | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/controllers/ajax/question_controller.rb b/app/controllers/ajax/question_controller.rb index 5e80696e..17f61a53 100644 --- a/app/controllers/ajax/question_controller.rb +++ b/app/controllers/ajax/question_controller.rb @@ -59,6 +59,7 @@ class Ajax::QuestionController < ApplicationController end elsif params[:rcpt].start_with? 'grp:' unless current_user.nil? + begin current_user.groups.find_by_name!(params[:rcpt].sub 'grp:', '') QuestionWorker.perform_async params[:rcpt], current_user.id, question.id rescue ActiveRecord::RecordNotFound diff --git a/app/workers/deletion_worker.rb b/app/workers/deletion_worker.rb index 5b5475a2..9949c9c8 100644 --- a/app/workers/deletion_worker.rb +++ b/app/workers/deletion_worker.rb @@ -8,7 +8,7 @@ class DeletionWorker begin User.find(resource_id).destroy! rescue => e - Rails.logger.error "failed to delete user: #{e.message}" + logger.error "failed to delete user: #{e.message}" end end end diff --git a/app/workers/question_worker.rb b/app/workers/question_worker.rb index 25157045..f2a75e89 100644 --- a/app/workers/question_worker.rb +++ b/app/workers/question_worker.rb @@ -3,21 +3,23 @@ class QuestionWorker sidekiq_options queue: :question, retry: false - # @param resource_id [Integer] user id passed from Devise + # @param rcpt [Integer] string recipient + # @param user_id [Integer] user id passed from Devise + # @param question_id [Integer] newly created question id def perform(rcpt, user_id, question_id) begin user = User.find(user_id) - if params[:rcpt].start_with? 'grp:' + if rcpt == 'followers' user.followers.each do |f| - Inbox.create!(user_id: fid, question_id: question_id, new: true) + Inbox.create(user_id: fid, question_id: question_id, new: true) end - else - current_user.groups.find_by_name!(params[:rcpt].sub 'grp:', '').members.each do |m| - Inbox.create!(user_id: m.user.id, question_id: question.id, new: true) + elsif rcpt.start_with? 'grp:' + current_user.groups.find_by_name!(rcpt.sub 'grp:', '').members.each do |m| + Inbox.create(user_id: m.user.id, question_id: question.id, new: true) end end rescue => e - Rails.logger.error "failed to answer question: #{e.message}" + logger.error "failed to ask question: #{e.message}" end end end diff --git a/app/workers/share_worker.rb b/app/workers/share_worker.rb index 8c670e6f..8f678562 100644 --- a/app/workers/share_worker.rb +++ b/app/workers/share_worker.rb @@ -11,7 +11,7 @@ class ShareWorker begin service.post(Answer.find(answer_id)) if services.include? service.provider rescue => e - Rails.logger.error "failed to post answer #{answer_id} to #{service.provider} for user #{user_id}: #{e.message}" + logger.error "failed to post answer #{answer_id} to #{service.provider} for user #{user_id}: #{e.message}" end end end From bde8b6497782dd9994baad10e073b9bab5bf779c Mon Sep 17 00:00:00 2001 From: Yuki Date: Mon, 27 Jul 2015 12:48:10 +0530 Subject: [PATCH 3/5] error -> info (maybe .warn?) --- app/workers/deletion_worker.rb | 2 +- app/workers/question_worker.rb | 2 +- app/workers/share_worker.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/workers/deletion_worker.rb b/app/workers/deletion_worker.rb index 9949c9c8..bd98371f 100644 --- a/app/workers/deletion_worker.rb +++ b/app/workers/deletion_worker.rb @@ -8,7 +8,7 @@ class DeletionWorker begin User.find(resource_id).destroy! rescue => e - logger.error "failed to delete user: #{e.message}" + logger.info "failed to delete user: #{e.message}" end end end diff --git a/app/workers/question_worker.rb b/app/workers/question_worker.rb index f2a75e89..248e342a 100644 --- a/app/workers/question_worker.rb +++ b/app/workers/question_worker.rb @@ -19,7 +19,7 @@ class QuestionWorker end end rescue => e - logger.error "failed to ask question: #{e.message}" + logger.info "failed to ask question: #{e.message}" end end end diff --git a/app/workers/share_worker.rb b/app/workers/share_worker.rb index 8f678562..0bc57799 100644 --- a/app/workers/share_worker.rb +++ b/app/workers/share_worker.rb @@ -11,7 +11,7 @@ class ShareWorker begin service.post(Answer.find(answer_id)) if services.include? service.provider rescue => e - logger.error "failed to post answer #{answer_id} to #{service.provider} for user #{user_id}: #{e.message}" + logger.info "failed to post answer #{answer_id} to #{service.provider} for user #{user_id}: #{e.message}" end end end From c846b963a46ceaf14618aa642490f7fb5ffaada8 Mon Sep 17 00:00:00 2001 From: Yuki Date: Mon, 27 Jul 2015 13:12:00 +0530 Subject: [PATCH 4/5] more fixes --- app/workers/question_worker.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/workers/question_worker.rb b/app/workers/question_worker.rb index 248e342a..15ecb6b5 100644 --- a/app/workers/question_worker.rb +++ b/app/workers/question_worker.rb @@ -3,7 +3,7 @@ class QuestionWorker sidekiq_options queue: :question, retry: false - # @param rcpt [Integer] string recipient + # @param rcpt [String] recipient # @param user_id [Integer] user id passed from Devise # @param question_id [Integer] newly created question id def perform(rcpt, user_id, question_id) @@ -11,12 +11,14 @@ class QuestionWorker user = User.find(user_id) if rcpt == 'followers' user.followers.each do |f| - Inbox.create(user_id: fid, question_id: question_id, new: true) + Inbox.create!(user_id: f.id, question_id: question_id, new: true) end elsif rcpt.start_with? 'grp:' - current_user.groups.find_by_name!(rcpt.sub 'grp:', '').members.each do |m| - Inbox.create(user_id: m.user.id, question_id: question.id, new: true) + user.groups.find_by_name!(rcpt.sub 'grp:', '').members.each do |m| + Inbox.create!(user_id: m.user.id, question_id: question_id, new: true) end + else + logger.info "unknown rcpt #{rcpt}" end rescue => e logger.info "failed to ask question: #{e.message}" From 97ad1285fe275c4dabe762a552814a9832b7b904 Mon Sep 17 00:00:00 2001 From: Yuki Date: Mon, 27 Jul 2015 13:16:26 +0530 Subject: [PATCH 5/5] don't break loops --- app/workers/question_worker.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/workers/question_worker.rb b/app/workers/question_worker.rb index 15ecb6b5..98a614c8 100644 --- a/app/workers/question_worker.rb +++ b/app/workers/question_worker.rb @@ -11,11 +11,11 @@ class QuestionWorker user = User.find(user_id) if rcpt == 'followers' user.followers.each do |f| - Inbox.create!(user_id: f.id, question_id: question_id, new: true) + Inbox.create(user_id: f.id, question_id: question_id, new: true) end elsif rcpt.start_with? 'grp:' user.groups.find_by_name!(rcpt.sub 'grp:', '').members.each do |m| - Inbox.create!(user_id: m.user.id, question_id: question_id, new: true) + Inbox.create(user_id: m.user.id, question_id: question_id, new: true) end else logger.info "unknown rcpt #{rcpt}"