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 103 end
104 104 alias :notify_on_errs? :notify_on_errs
105 105  
  106 + def notifiable?
  107 + notify_on_errs? && notification_recipients.any?
  108 + end
  109 +
106 110 def notify_on_deploys
107 111 !(super == false)
108 112 end
... ... @@ -185,6 +189,10 @@ class App
185 189 name <=> other.name
186 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 196 protected
189 197  
190 198 def store_cached_attributes_on_problems
... ...
app/models/notice.rb
... ... @@ -94,6 +94,18 @@ class Notice
94 94 backtrace_lines.in_app
95 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 109 protected
98 110  
99 111 def increase_counter_cache
... ...
app/models/notice_observer.rb
... ... @@ -7,16 +7,7 @@ class NoticeObserver &lt; Mongoid::Observer
7 7 notice.app.notification_service.create_notification(notice.problem)
8 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 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 13 end
... ...
spec/controllers/apps_controller_spec.rb
... ... @@ -250,6 +250,10 @@ describe AppsController do
250 250 end
251 251  
252 252 context "changing email_at_notices" do
  253 + before do
  254 + Errbit::Config.per_app_email_at_notices = true
  255 + end
  256 +
253 257 it "should parse legal csv values" do
254 258 put :update, :id => @app.id, :app => { :email_at_notices => '1, 4, 7,8, 10' }
255 259 @app.reload
... ...