Commit d005c47ec4d42e60e02f64c1187d920a991b448c

Authored by Matt Gauger
1 parent e87d6766
Exists in master and in 1 other branch production

Add Notice Observer

app/models/notice.rb
... ... @@ -23,7 +23,6 @@ class Notice
23 23 )
24 24  
25 25 after_create :increase_counter_cache, :cache_attributes_on_problem, :unresolve_problem
26   - after_create :deliver_notification, :if => :should_notify?
27 26 before_save :sanitize
28 27 before_destroy :decrease_counter_cache, :remove_cached_attributes_from_problem
29 28  
... ... @@ -92,10 +91,6 @@ class Notice
92 91 request['session'] || {}
93 92 end
94 93  
95   - def deliver_notification
96   - Mailer.err_notification(self).deliver
97   - end
98   -
99 94 # Backtrace containing only files from the app itself (ignore gems)
100 95 def app_backtrace
101 96 backtrace.select { |l| l && l['file'] && l['file'].include?("[PROJECT_ROOT]") }
... ... @@ -103,10 +98,6 @@ class Notice
103 98  
104 99 protected
105 100  
106   - def should_notify?
107   - app.notify_on_errs? && (Errbit::Config.per_app_email_at_notices && app.email_at_notices || Errbit::Config.email_at_notices).include?(problem.notices_count) && app.notification_recipients.any?
108   - end
109   -
110 101 def increase_counter_cache
111 102 problem.inc(:notices_count, 1)
112 103 end
... ...
app/models/notice_observer.rb 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +class NoticeObserver < Mongoid::Observer
  2 + observe :notice
  3 +
  4 + def after_create notice
  5 + return unless should_notify? notice
  6 +
  7 + Mailer.err_notification(notice).deliver
  8 + end
  9 +
  10 + private
  11 +
  12 + def should_notify? notice
  13 + app = notice.app
  14 + app.notify_on_errs? &&
  15 + (Errbit::Config.per_app_email_at_notices && app.email_at_notices || Errbit::Config.email_at_notices).include?(notice.problem.notices_count) &&
  16 + app.notification_recipients.any?
  17 + end
  18 +
  19 +end
... ...
config/application.rb
... ... @@ -52,7 +52,7 @@ module Errbit
52 52 config.mongoid.preload_models = true
53 53  
54 54 # Set up observers
55   - config.mongoid.observers = :deploy_observer
  55 + config.mongoid.observers = :deploy_observer, :notice_observer
56 56  
57 57 # Configure the default encoding used in templates for Ruby 1.9.
58 58 config.encoding = "utf-8"
... ...
spec/models/notice_observer_spec.rb 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +require 'spec_helper'
  2 +
  3 +
... ...
spec/models/notice_spec.rb
... ... @@ -112,48 +112,4 @@ describe Notice do
112 112  
113 113 end
114 114  
115   -
116   - describe "email notifications (configured individually for each app)" do
117   - custom_thresholds = [2, 4, 8, 16, 32, 64]
118   -
119   - before do
120   - Errbit::Config.per_app_email_at_notices = true
121   - @app = Fabricate(:app_with_watcher, :email_at_notices => custom_thresholds)
122   - @err = Fabricate(:err, :problem => Fabricate(:problem, :app => @app))
123   - end
124   -
125   - after do
126   - Errbit::Config.per_app_email_at_notices = false
127   - end
128   -
129   - custom_thresholds.each do |threshold|
130   - it "sends an email notification after #{threshold} notice(s)" do
131   - @err.problem.stub(:notices_count).and_return(threshold)
132   - Mailer.should_receive(:err_notification).
133   - and_return(mock('email', :deliver => true))
134   - Fabricate(:notice, :err => @err)
135   - end
136   - end
137   - end
138   -
139   - describe "email notifications for a resolved issue" do
140   -
141   - before do
142   - Errbit::Config.per_app_email_at_notices = true
143   - @app = Fabricate(:app_with_watcher, :email_at_notices => [1])
144   - @err = Fabricate(:err, :problem => Fabricate(:problem, :app => @app, :notices_count => 100))
145   - end
146   -
147   - after do
148   - Errbit::Config.per_app_email_at_notices = false
149   - end
150   -
151   - it "should send email notification after 1 notice since an error has been resolved" do
152   - @err.problem.resolve!
153   - Mailer.should_receive(:err_notification).
154   - and_return(mock('email', :deliver => true))
155   - Fabricate(:notice, :err => @err)
156   - end
157   - end
158 115 end
159   -
... ...