aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouise Crow <louise.crow@gmail.com>2014-12-11 15:36:21 +0000
committerLouise Crow <louise.crow@gmail.com>2014-12-11 15:36:21 +0000
commit2a1fe08f90439f13b38cb1e9549e85d643aeef43 (patch)
tree1ac2d02bab04b3d5f1280d5eba873b38b31cf396
parentde5c998d72bac9e13c56b6089169da9647d014b2 (diff)
parentf7bb67685086da37578305f60d2adbacbd3c3343 (diff)
Merge branch 'catch-openuri-timeout-errors' into rails-3-develop
-rw-r--r--lib/quiet_opener.rb15
-rw-r--r--spec/controllers/services_controller_spec.rb6
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/quiet_opener.rb b/lib/quiet_opener.rb
index 16ea27b8e..c6e259b93 100644
--- a/lib/quiet_opener.rb
+++ b/lib/quiet_opener.rb
@@ -7,8 +7,19 @@ end
def quietly_try_to_open(url)
begin
result = open(url).read.strip
- rescue OpenURI::HTTPError, SocketError, Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNRESET
- Rails.logger.warn("Unable to open third-party URL #{url}")
+ rescue OpenURI::HTTPError,
+ SocketError,
+ Errno::ETIMEDOUT,
+ Errno::ECONNREFUSED,
+ Errno::EHOSTUNREACH,
+ Errno::ECONNRESET,
+ Timeout::Error => exception
+ e = Exception.new("Unable to open third-party URL #{url}: #{exception.message}")
+ e.set_backtrace(exception.backtrace)
+ if !AlaveteliConfiguration.exception_notifications_from.blank? && !AlaveteliConfiguration.exception_notifications_to.blank?
+ ExceptionNotifier::Notifier.exception_notification(request.env, e).deliver
+ end
+ Rails.logger.warn(e.message)
result = ""
end
return result
diff --git a/spec/controllers/services_controller_spec.rb b/spec/controllers/services_controller_spec.rb
index 14731f090..248c97ad4 100644
--- a/spec/controllers/services_controller_spec.rb
+++ b/spec/controllers/services_controller_spec.rb
@@ -60,21 +60,25 @@ describe ServicesController, "when returning a message for people in other count
response.should be_success
response.body.should == 'Hello! We have an <a href="/help/alaveteli?country_name=Deutschland">important message</a> for visitors outside Deutschland'
end
+
it "should default to no message if the country_from_ip domain doesn't exist" do
AlaveteliConfiguration.stub!(:gaze_url).and_return('http://12123sdf14qsd.com')
get :other_country_message
response.should be_success
response.body.should == ''
end
+
it "should default to no message if the country_from_ip service doesn't exist" do
AlaveteliConfiguration.stub!(:gaze_url).and_return('http://www.google.com')
get :other_country_message
response.should be_success
response.body.should == ''
end
- it "should default to no message if the country_from_ip service returns an error" do
+
+ it "should default to no message and log the error with url if the country_from_ip service returns an error" do
FakeWeb.register_uri(:get, %r|500.com|, :body => "Error", :status => ["500", "Error"])
AlaveteliConfiguration.stub!(:gaze_url).and_return('http://500.com')
+ Rails.logger.should_receive(:warn).with /500\.com.*500 Error/
get :other_country_message
response.should be_success
response.body.should == ''