Commit 444059a16ace054d94c38435dfab05fae27220a1

Authored by Joenio Costa
Committed by Daniela Feitosa
1 parent b37c7bda

Notify exceptions by email

- new config entry 'exception_recipients' in noosfero.yml

(ActionItem1808)
INSTALL
... ... @@ -215,6 +215,24 @@ At this point you have a functional Noosfero installation running, the only
215 215 thing left is to configure your webserver as a reverse proxy to pass requests
216 216 to them.
217 217  
  218 +Enabling exception notifications
  219 +================================
  220 +
  221 +This is an optional step. You will need it only if you want to receive e-mail
  222 +notifications when some exception occurs on Noosfero.
  223 +
  224 +First, install this version of the gem.
  225 +Others versions may not be compatible with Noosfero:
  226 +
  227 +# gem install exception_notification -v 1.0.20090728
  228 +
  229 +You can configure the e-mails that will receive the notifications.
  230 +Change the file config/noosfero.yml as the following example, replacing the
  231 +e-mails by real ones:
  232 +
  233 + production:
  234 + exception_recipients: [admin@example.com, you@example.com]
  235 +
218 236 ==================
219 237 Apache instalation
220 238 ==================
... ... @@ -224,7 +242,7 @@ Apache instalation
224 242 Apache configuration
225 243 --------------------
226 244  
227   -Firts you have to enable the following some apache modules:
  245 +First you have to enable the following some apache modules:
228 246  
229 247 deflate
230 248 expires
... ...
config/initializers/01_load_config.rb 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +file = "#{RAILS_ROOT}/config/noosfero.yml"
  2 +NOOSFERO_CONF = File.exists?(file) ? YAML.load_file(file)[RAILS_ENV] || {} : {}
... ...
config/initializers/exception_notification.rb 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +unless NOOSFERO_CONF['exception_recipients'].blank?
  2 + require 'exception_notification.rb'
  3 + ExceptionNotifier.sender_address = "noreply@#{Environment.default.default_hostname}"
  4 + ExceptionNotifier.email_prefix = "[Noosfero ERROR] "
  5 + ExceptionNotifier.exception_recipients = NOOSFERO_CONF['exception_recipients']
  6 + ActionController::Base.send :include, ExceptionNotifiable
  7 +end
... ...
config/initializers/load_config.rb
... ... @@ -1,2 +0,0 @@
1   -file = "#{RAILS_ROOT}/config/noosfero.yml"
2   -NOOSFERO_CONF = File.exists?(file) ? YAML.load_file(file)[RAILS_ENV] || {} : {}
config/noosfero.yml.dist
... ... @@ -7,6 +7,7 @@ development:
7 7 addthis_options: favorites, email, digg, delicious, technorati, slashdot, twitter, more
8 8 gravatar: wavatar
9 9 googlemaps_initial_zoom: 4
  10 + exception_recipients: [admin@example.com]
10 11  
11 12 test:
12 13  
... ...
test/integration/exception_notification_test.rb 0 → 100644
... ... @@ -0,0 +1,28 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +require 'account_controller'
  3 +require 'exception_notification.rb'
  4 +ActionController::Base.send :include, ExceptionNotifiable
  5 +ExceptionNotifier.exception_recipients = ['admin@example.com', 'user@example.com']
  6 +
  7 +class ExceptionNotificationTest < ActionController::IntegrationTest
  8 + def setup
  9 + ActionMailer::Base.delivery_method = :test
  10 + ActionMailer::Base.perform_deliveries = true
  11 + ActionMailer::Base.deliveries = []
  12 + AccountController.any_instance.stubs(:signup).raises(RuntimeError)
  13 + AccountController.any_instance.stubs(:local_request?).returns(false)
  14 + AccountController.any_instance.stubs(:consider_all_requests_local).returns(false)
  15 + end
  16 +
  17 + should 'deliver mail notification about exceptions' do
  18 + assert_difference ActionMailer::Base.deliveries, :size do
  19 + get '/account/signup'
  20 + end
  21 + end
  22 +
  23 + should 'deliver mails to addresses listed in Noosfero configuration noosfero.yml' do
  24 + get '/account/signup'
  25 + assert_includes ActionMailer::Base.deliveries.map(&:to).flatten, 'admin@example.com'
  26 + assert_includes ActionMailer::Base.deliveries.map(&:to).flatten, 'user@example.com'
  27 + end
  28 +end
... ...