Commit 85d12bd6928f7859742439c4e034cf12803efee2

Authored by Marcin Ciunelis
Committed by Sergey Nartimov
1 parent 2ee7c9db
Exists in master and in 1 other branch production

throttle email notificatiions

app/models/app.rb
@@ -103,6 +103,10 @@ class App @@ -103,6 +103,10 @@ class App
103 end 103 end
104 alias :notify_on_errs? :notify_on_errs 104 alias :notify_on_errs? :notify_on_errs
105 105
  106 + def notifiable?
  107 + notify_on_errs? && notification_recipients.any?
  108 + end
  109 +
106 def notify_on_deploys 110 def notify_on_deploys
107 !(super == false) 111 !(super == false)
108 end 112 end
@@ -185,6 +189,10 @@ class App @@ -185,6 +189,10 @@ class App
185 name <=> other.name 189 name <=> other.name
186 end 190 end
187 191
  192 + def email_at_notices
  193 + Errbit::Config.per_app_email_at_notices ? read_attribute(:email_at_notices) : Errbit::Config.email_at_notices
  194 + end
  195 +
188 protected 196 protected
189 197
190 def store_cached_attributes_on_problems 198 def store_cached_attributes_on_problems
app/models/notice.rb
@@ -94,6 +94,18 @@ class Notice @@ -94,6 +94,18 @@ class Notice
94 backtrace_lines.in_app 94 backtrace_lines.in_app
95 end 95 end
96 96
  97 + def similar_count
  98 + problem.notices_count
  99 + end
  100 +
  101 + def notifiable?
  102 + app.email_at_notices.include?(similar_count)
  103 + end
  104 +
  105 + def should_notify?
  106 + app.notifiable? && notifiable?
  107 + end
  108 +
97 protected 109 protected
98 110
99 def increase_counter_cache 111 def increase_counter_cache
app/models/notice_observer.rb
@@ -7,16 +7,7 @@ class NoticeObserver &lt; Mongoid::Observer @@ -7,16 +7,7 @@ class NoticeObserver &lt; Mongoid::Observer
7 notice.app.notification_service.create_notification(notice.problem) 7 notice.app.notification_service.create_notification(notice.problem)
8 end 8 end
9 9
10 - if notice.app.notification_recipients.any?  
11 - Mailer.err_notification(notice).deliver  
12 - end 10 + Mailer.err_notification(notice).deliver if notice.should_notify?
13 end 11 end
14 12
15 - private  
16 -  
17 - def should_notify? notice  
18 - app = notice.app  
19 - app.notify_on_errs? and (app.notification_recipients.any? or !app.notification_service.nil?) and  
20 - (app.email_at_notices or Errbit::Config.email_at_notices).include?(notice.problem.notices_count)  
21 - end  
22 end 13 end
spec/controllers/apps_controller_spec.rb
@@ -250,6 +250,10 @@ describe AppsController do @@ -250,6 +250,10 @@ describe AppsController do
250 end 250 end
251 251
252 context "changing email_at_notices" do 252 context "changing email_at_notices" do
  253 + before do
  254 + Errbit::Config.per_app_email_at_notices = true
  255 + end
  256 +
253 it "should parse legal csv values" do 257 it "should parse legal csv values" do
254 put :update, :id => @app.id, :app => { :email_at_notices => '1, 4, 7,8, 10' } 258 put :update, :id => @app.id, :app => { :email_at_notices => '1, 4, 7,8, 10' }
255 @app.reload 259 @app.reload