errplane 0.3.7 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -1
- data/.rspec +2 -0
- data/.travis.yml +22 -0
- data/README.md +2 -10
- data/Rakefile +19 -31
- data/errplane.gemspec +5 -9
- data/gemfiles/Gemfile.rails-2.3.x +8 -0
- data/gemfiles/Gemfile.rails-2.3.x.lock +60 -0
- data/gemfiles/{rails_3.2.gemfile → Gemfile.rails-3.0.x} +2 -2
- data/gemfiles/Gemfile.rails-3.0.x.lock +82 -0
- data/gemfiles/{rails_3.1.gemfile → Gemfile.rails-3.1.x} +2 -1
- data/gemfiles/Gemfile.rails-3.1.x.lock +94 -0
- data/gemfiles/{rails_3.0.gemfile → Gemfile.rails-3.2.x} +2 -1
- data/gemfiles/Gemfile.rails-3.2.x.lock +92 -0
- data/lib/errplane.rb +15 -10
- data/lib/errplane/backtrace.rb +38 -0
- data/lib/errplane/black_box.rb +8 -5
- data/lib/errplane/capistrano.rb +0 -1
- data/lib/errplane/configuration.rb +30 -22
- data/lib/errplane/errplane_chef_handler.rb +2 -4
- data/lib/errplane/logger.rb +11 -0
- data/lib/errplane/rails/air_traffic_controller.rb +2 -1
- data/lib/errplane/rails/middleware/hijack_render_exception.rb +5 -2
- data/lib/errplane/railtie.rb +0 -9
- data/lib/errplane/transmitter.rb +19 -11
- data/lib/errplane/version.rb +1 -1
- data/lib/rails/generators/errplane/templates/initializer.rb +0 -3
- data/spec/app/rails2.rb +38 -0
- data/spec/app/{rails.rb → rails3.rb} +0 -3
- data/spec/integration/exceptions_spec.rb +27 -9
- data/spec/rails2/README +243 -0
- data/spec/rails2/Rakefile +10 -0
- data/spec/rails2/app/controllers/application_controller.rb +10 -0
- data/spec/rails2/app/controllers/widgets_controller.rb +5 -0
- data/spec/rails2/app/helpers/application_helper.rb +3 -0
- data/spec/rails2/app/helpers/widgets_helper.rb +1 -0
- data/spec/rails2/config/boot.rb +114 -0
- data/spec/rails2/config/database.yml +3 -0
- data/spec/rails2/config/environment.rb +33 -0
- data/spec/rails2/config/environments/development.rb +17 -0
- data/spec/rails2/config/environments/production.rb +28 -0
- data/spec/{internal/public/favicon.ico → rails2/config/environments/test.rb} +0 -0
- data/spec/rails2/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails2/config/initializers/cookie_verification_secret.rb +7 -0
- data/spec/{internal → rails2}/config/initializers/errplane.rb +0 -0
- data/spec/rails2/config/initializers/inflections.rb +10 -0
- data/spec/rails2/config/initializers/mime_types.rb +5 -0
- data/spec/rails2/config/initializers/new_rails_defaults.rb +21 -0
- data/spec/rails2/config/initializers/session_store.rb +15 -0
- data/spec/rails2/config/locales/en.yml +5 -0
- data/spec/rails2/config/routes.rb +3 -0
- data/spec/rails2/lib/tasks/rspec.rake +144 -0
- data/spec/rails2/log/development.log +0 -0
- data/spec/rails2/log/production.log +0 -0
- data/spec/rails2/log/server.log +0 -0
- data/spec/rails2/log/test.log +785 -0
- data/spec/rails2/public/404.html +30 -0
- data/spec/rails2/public/422.html +30 -0
- data/spec/rails2/public/500.html +30 -0
- data/spec/rails2/public/favicon.ico +0 -0
- data/spec/rails2/public/images/rails.png +0 -0
- data/spec/rails2/public/index.html +275 -0
- data/spec/rails2/public/javascripts/application.js +2 -0
- data/spec/rails2/public/javascripts/controls.js +963 -0
- data/spec/rails2/public/javascripts/dragdrop.js +973 -0
- data/spec/rails2/public/javascripts/effects.js +1128 -0
- data/spec/rails2/public/javascripts/prototype.js +4320 -0
- data/spec/rails2/public/robots.txt +5 -0
- data/spec/rails2/script/about +4 -0
- data/spec/rails2/script/autospec +6 -0
- data/spec/rails2/script/console +3 -0
- data/spec/rails2/script/dbconsole +3 -0
- data/spec/rails2/script/destroy +3 -0
- data/spec/rails2/script/generate +3 -0
- data/spec/rails2/script/performance/benchmarker +3 -0
- data/spec/rails2/script/performance/profiler +3 -0
- data/spec/rails2/script/plugin +3 -0
- data/spec/rails2/script/runner +3 -0
- data/spec/rails2/script/server +3 -0
- data/spec/rails2/script/spec +10 -0
- data/spec/rails2/test/performance/browsing_test.rb +9 -0
- data/spec/rails2/test/test_helper.rb +38 -0
- data/spec/spec_helper.rb +27 -16
- data/spec/suite.sh +39 -0
- data/spec/unit/backtrace_spec.rb +62 -0
- data/spec/unit/black_box_spec.rb +3 -3
- data/spec/unit/configuration_spec.rb +29 -0
- data/spec/unit/errplane_spec.rb +24 -15
- data/specs.watchr +21 -0
- metadata +194 -90
- data/gemfiles/rails_2.3.gemfile +0 -6
- data/gemfiles/rails_2.3.gemfile.lock +0 -148
- data/gemfiles/rails_3.0.gemfile.lock +0 -148
- data/gemfiles/rails_3.1.gemfile.lock +0 -148
- data/gemfiles/rails_3.2.gemfile.lock +0 -121
- data/lib/errplane/rails/udp_logger.rb +0 -54
- data/lib/errplane/syslogproto.rb +0 -7
- data/lib/errplane/syslogproto/common.rb +0 -81
- data/lib/errplane/syslogproto/logger.rb +0 -24
- data/lib/errplane/syslogproto/packet.rb +0 -107
- data/lib/errplane/syslogproto/parser.rb +0 -51
- data/spec/internal/app/controllers/application_controller.rb +0 -2
- data/spec/internal/app/controllers/widgets_controller.rb +0 -9
- data/spec/internal/config/database.yml +0 -3
- data/spec/internal/config/routes.rb +0 -3
- data/spec/internal/db/combustion_test.sqlite +0 -0
- data/spec/internal/db/schema.rb +0 -3
- data/spec/internal/log/.gitignore +0 -1
data/lib/errplane.rb
CHANGED
|
@@ -2,10 +2,14 @@ require 'net/http'
|
|
|
2
2
|
require 'net/https'
|
|
3
3
|
require 'rubygems'
|
|
4
4
|
|
|
5
|
+
require "json" unless Hash.respond_to?(:to_json)
|
|
6
|
+
|
|
5
7
|
require "errplane/version"
|
|
8
|
+
require "errplane/logger"
|
|
6
9
|
require "errplane/black_box"
|
|
7
10
|
require "errplane/configuration"
|
|
8
11
|
require "errplane/transmitter"
|
|
12
|
+
require "errplane/backtrace"
|
|
9
13
|
require "errplane/rack"
|
|
10
14
|
|
|
11
15
|
require "errplane/railtie" if defined? Rails::Railtie
|
|
@@ -13,6 +17,8 @@ require "errplane/sinatra" if defined? Sinatra::Request
|
|
|
13
17
|
|
|
14
18
|
module Errplane
|
|
15
19
|
class << self
|
|
20
|
+
include Logger
|
|
21
|
+
|
|
16
22
|
attr_writer :configuration
|
|
17
23
|
attr_accessor :transmitter
|
|
18
24
|
|
|
@@ -28,14 +34,14 @@ module Errplane
|
|
|
28
34
|
def transmit_unless_ignorable(e, env)
|
|
29
35
|
begin
|
|
30
36
|
black_box = assemble_black_box_for(e, env)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
37
|
+
log :info, "Transmitter: #{transmitter.inspect}"
|
|
38
|
+
log :info, "Black Box: #{black_box.to_json}"
|
|
39
|
+
log :info, "Ignorable Exception? #{ignorable_exception?(e)}"
|
|
40
|
+
log :info, "Environment: #{ENV.to_hash}"
|
|
35
41
|
|
|
36
42
|
transmitter.relay(black_box) unless ignorable_exception?(e)
|
|
37
43
|
rescue => e
|
|
38
|
-
configuration.logger.info("[Errplane] Something went terribly wrong. Exception failed to take off.
|
|
44
|
+
configuration.logger.info("[Errplane] Something went terribly wrong. Exception failed to take off! #{e.class}: #{e.message}")
|
|
39
45
|
end
|
|
40
46
|
end
|
|
41
47
|
|
|
@@ -47,13 +53,12 @@ module Errplane
|
|
|
47
53
|
assemble_black_box_for(e, env)
|
|
48
54
|
end
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
configuration.logger.info("\nEnvironment: #{ENV.to_hash}") if configuration.debug?
|
|
56
|
+
log :info, "Transmitter: #{transmitter.inspect}"
|
|
57
|
+
log :info, "Black Box: #{black_box.to_json}"
|
|
58
|
+
log :info, "Environment: #{ENV.to_hash}"
|
|
54
59
|
transmitter.relay(black_box)
|
|
55
60
|
rescue => e
|
|
56
|
-
configuration.logger.info("[Errplane] Something went terribly wrong. Exception failed to take off.
|
|
61
|
+
configuration.logger.info("[Errplane] Something went terribly wrong. Exception failed to take off! #{e.class}: #{e.message}")
|
|
57
62
|
end
|
|
58
63
|
end
|
|
59
64
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module Errplane
|
|
2
|
+
class Backtrace
|
|
3
|
+
class Line
|
|
4
|
+
FORMAT = %r{^((?:[a-zA-Z]:)?[^:]+):(\d+)(?::in `([^']+)')?$}.freeze
|
|
5
|
+
|
|
6
|
+
attr_reader :file
|
|
7
|
+
attr_reader :number
|
|
8
|
+
attr_reader :method
|
|
9
|
+
|
|
10
|
+
def initialize(line)
|
|
11
|
+
_, @file, @number, @method = line.match(FORMAT).to_a
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_s
|
|
15
|
+
"#{file}:#{number} in `#{method}'"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def inspect
|
|
19
|
+
"<Line: #{to_s}>"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
attr_reader :lines
|
|
24
|
+
|
|
25
|
+
def initialize(backtrace)
|
|
26
|
+
@lines = backtrace.each.collect do |line|
|
|
27
|
+
Errplane.configuration.backtrace_filters.each do |filter|
|
|
28
|
+
line = filter.call(line)
|
|
29
|
+
end
|
|
30
|
+
Line.new(line)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def inspect
|
|
35
|
+
"<Backtrace: " + lines.collect { |line| line.to_s }.join(", ") + ">"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/errplane/black_box.rb
CHANGED
|
@@ -7,6 +7,7 @@ module Errplane
|
|
|
7
7
|
attr_reader :controller
|
|
8
8
|
attr_reader :action
|
|
9
9
|
attr_reader :request_url
|
|
10
|
+
attr_reader :user_agent
|
|
10
11
|
attr_reader :custom_data
|
|
11
12
|
|
|
12
13
|
def initialize(params = {})
|
|
@@ -16,11 +17,12 @@ module Errplane
|
|
|
16
17
|
@controller = params[:controller]
|
|
17
18
|
@action = params[:action]
|
|
18
19
|
@request_url = params[:request_url]
|
|
20
|
+
@user_agent = params[:user_agent]
|
|
19
21
|
@custom_data = params[:custom_data] || {}
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
def to_json
|
|
23
|
-
|
|
25
|
+
payload = {
|
|
24
26
|
:time => Time.now.to_i,
|
|
25
27
|
:application_name => Errplane.configuration.application_name,
|
|
26
28
|
:application_root => Errplane.configuration.application_root,
|
|
@@ -38,10 +40,10 @@ module Errplane
|
|
|
38
40
|
|
|
39
41
|
Errplane.configuration.add_custom_exception_data(self)
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
payload[:request_data] = request_data if @controller || @action || !params.empty?
|
|
44
|
+
payload[:hash] = hash if hash
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
payload.to_json
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
def reporter
|
|
@@ -58,7 +60,8 @@ module Errplane
|
|
|
58
60
|
:session_data => @session_data,
|
|
59
61
|
:controller => @controller,
|
|
60
62
|
:action => @action,
|
|
61
|
-
:request_url => @request_url
|
|
63
|
+
:request_url => @request_url,
|
|
64
|
+
:user_agent => @user_agent
|
|
62
65
|
}
|
|
63
66
|
end
|
|
64
67
|
end
|
data/lib/errplane/capistrano.rb
CHANGED
|
@@ -6,7 +6,6 @@ module Errplane
|
|
|
6
6
|
attr_accessor :application_id
|
|
7
7
|
attr_accessor :application_name
|
|
8
8
|
attr_accessor :application_root
|
|
9
|
-
attr_accessor :syslogd_port
|
|
10
9
|
|
|
11
10
|
attr_accessor :logger
|
|
12
11
|
attr_accessor :rails_environment
|
|
@@ -16,16 +15,34 @@ module Errplane
|
|
|
16
15
|
attr_accessor :language_version
|
|
17
16
|
attr_accessor :ignored_exceptions
|
|
18
17
|
attr_accessor :ignored_environments
|
|
18
|
+
attr_accessor :ignored_user_agents
|
|
19
|
+
attr_accessor :backtrace_filters
|
|
20
|
+
|
|
19
21
|
attr_accessor :environment_variables
|
|
20
22
|
|
|
21
23
|
attr_accessor :debug
|
|
24
|
+
attr_accessor :reraise_global_exceptions
|
|
22
25
|
|
|
23
26
|
DEFAULTS = {
|
|
24
27
|
:api_host => "api.errplane.com",
|
|
25
28
|
:app_host => "app.errplane.com",
|
|
26
29
|
:ignored_exceptions => %w{ActiveRecord::RecordNotFound
|
|
27
30
|
ActionController::RoutingError},
|
|
28
|
-
:ignored_environments => %w{development test cucumber selenium}
|
|
31
|
+
:ignored_environments => %w{development test cucumber selenium},
|
|
32
|
+
:ignored_user_agents => %w{GoogleBot},
|
|
33
|
+
:backtrace_filters => [
|
|
34
|
+
lambda { |line| line.gsub(/^\.\//, "") },
|
|
35
|
+
lambda { |line|
|
|
36
|
+
return line if Errplane.configuration.application_root.to_s.empty?
|
|
37
|
+
line.gsub(/#{Errplane.configuration.application_root}/, "[APP_ROOT]")
|
|
38
|
+
},
|
|
39
|
+
lambda { |line|
|
|
40
|
+
if defined?(Gem) && !Gem.path.nil? && !Gem.path.empty?
|
|
41
|
+
Gem.path.each { |path| line = line.gsub(/#{path}/, "[GEM_ROOT]") }
|
|
42
|
+
end
|
|
43
|
+
line
|
|
44
|
+
}
|
|
45
|
+
]
|
|
29
46
|
}
|
|
30
47
|
|
|
31
48
|
def initialize
|
|
@@ -33,36 +50,27 @@ module Errplane
|
|
|
33
50
|
@app_host = DEFAULTS[:app_host]
|
|
34
51
|
@ignored_exceptions = DEFAULTS[:ignored_exceptions].dup
|
|
35
52
|
@ignored_environments = DEFAULTS[:ignored_environments].dup
|
|
53
|
+
@ignored_user_agents = DEFAULTS[:ignored_user_agents].dup
|
|
54
|
+
@backtrace_filters = DEFAULTS[:backtrace_filters].dup
|
|
36
55
|
@debug = false
|
|
56
|
+
@rescue_global_exceptions = false
|
|
37
57
|
end
|
|
38
58
|
|
|
39
59
|
def debug?
|
|
40
60
|
!!@debug
|
|
41
61
|
end
|
|
42
62
|
|
|
43
|
-
def
|
|
44
|
-
|
|
63
|
+
def reraise_global_exceptions?
|
|
64
|
+
!!@reraise_global_exceptions
|
|
45
65
|
end
|
|
46
66
|
|
|
47
|
-
def
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
url = "/api/v1/syslogds.txt?api_key=#{@api_key}"
|
|
52
|
-
http.get(url)
|
|
53
|
-
rescue Exception => e
|
|
54
|
-
puts e
|
|
55
|
-
end
|
|
56
|
-
|
|
67
|
+
def ignore_user_agent?(incoming_user_agent)
|
|
68
|
+
return false if self.ignored_user_agents.nil?
|
|
69
|
+
self.ignored_user_agents.any? {|agent| incoming_user_agent =~ /#{agent}/}
|
|
70
|
+
end
|
|
57
71
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
# Success
|
|
61
|
-
response.body
|
|
62
|
-
else
|
|
63
|
-
# Failure
|
|
64
|
-
""
|
|
65
|
-
end
|
|
72
|
+
def ignore_current_environment?
|
|
73
|
+
self.ignored_environments.include?(self.rails_environment)
|
|
66
74
|
end
|
|
67
75
|
|
|
68
76
|
def define_custom_exception_data(&block)
|
|
@@ -50,16 +50,14 @@ class ErrplaneChefHandler < Chef::Handler
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def setup_errplane
|
|
53
|
-
raise ArgumentError.new("You must
|
|
53
|
+
raise ArgumentError.new("You must provide an Errplane API key") unless api_key
|
|
54
54
|
Errplane.configure do |config|
|
|
55
55
|
config.api_key = api_key
|
|
56
56
|
config.application_id = "chef"
|
|
57
57
|
config.application_name = "chef"
|
|
58
|
-
# config.syslogd_port = "4445"
|
|
59
58
|
config.logger = Chef::Log
|
|
60
|
-
#config.logger = Logger.new(STDOUT)
|
|
61
59
|
config.debug = false
|
|
62
60
|
config.rails_environment = @environment
|
|
63
61
|
end
|
|
64
62
|
end
|
|
65
|
-
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module Errplane
|
|
2
|
+
module Logger
|
|
3
|
+
PREFIX = "[Errplane] "
|
|
4
|
+
|
|
5
|
+
private
|
|
6
|
+
def log(level, message)
|
|
7
|
+
return if level != :error && !Errplane.configuration.debug?
|
|
8
|
+
Errplane.configuration.logger.send(level, PREFIX + message) if Errplane.configuration.logger
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -7,7 +7,8 @@ module Errplane
|
|
|
7
7
|
:session_data => errplane_session_data,
|
|
8
8
|
:controller => params[:controller],
|
|
9
9
|
:action => params[:action],
|
|
10
|
-
:request_url => errplane_request_url
|
|
10
|
+
:request_url => errplane_request_url,
|
|
11
|
+
:user_agent => request.env["HTTP_USER_AGENT"]
|
|
11
12
|
}
|
|
12
13
|
end
|
|
13
14
|
|
|
@@ -9,8 +9,11 @@ module Errplane
|
|
|
9
9
|
def render_exception_with_errplane(env, e)
|
|
10
10
|
controller = env["action_controller.instance"]
|
|
11
11
|
Errplane.configuration.logger.info("Controller: #{controller}")
|
|
12
|
-
|
|
13
|
-
Errplane.
|
|
12
|
+
request_data = controller.try(:errplane_request_data) || {}
|
|
13
|
+
Errplane.configuration.logger.info("Request Data: #{request_data}")
|
|
14
|
+
unless Errplane.configuration.ignore_user_agent?(request_data[:user_agent])
|
|
15
|
+
Errplane.transmit_unless_ignorable(e, request_data)
|
|
16
|
+
end
|
|
14
17
|
render_exception_without_errplane(env, e)
|
|
15
18
|
end
|
|
16
19
|
end
|
data/lib/errplane/railtie.rb
CHANGED
|
@@ -11,11 +11,6 @@ module Errplane
|
|
|
11
11
|
exit
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
Errplane.configuration.syslogd_port = Errplane.configuration.get_logport
|
|
15
|
-
if(Errplane.configuration.syslogd_port && Errplane.configuration.syslogd_port.to_s != "")
|
|
16
|
-
require 'errplane/rails/udp_logger'
|
|
17
|
-
end
|
|
18
|
-
|
|
19
14
|
Errplane.configure do |config|
|
|
20
15
|
config.ignored_environments = []
|
|
21
16
|
end
|
|
@@ -80,10 +75,6 @@ module Errplane
|
|
|
80
75
|
config.framework_version = ::Rails::VERSION::STRING
|
|
81
76
|
end
|
|
82
77
|
|
|
83
|
-
if(Errplane.configuration.syslogd_port && Errplane.configuration.syslogd_port.to_s != "")
|
|
84
|
-
require 'errplane/rails/udp_logger'
|
|
85
|
-
end
|
|
86
|
-
|
|
87
78
|
ActiveSupport.on_load(:action_controller) do
|
|
88
79
|
require 'errplane/rails/air_traffic_controller'
|
|
89
80
|
include Errplane::Rails::AirTrafficController
|
data/lib/errplane/transmitter.rb
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
module Errplane
|
|
2
2
|
class Transmitter
|
|
3
|
+
include Errplane::Logger
|
|
4
|
+
|
|
5
|
+
HTTP_ERRORS = [ EOFError,
|
|
6
|
+
Errno::ECONNREFUSED,
|
|
7
|
+
Errno::ECONNRESET,
|
|
8
|
+
Errno::EINVAL,
|
|
9
|
+
Net::HTTPBadResponse,
|
|
10
|
+
Net::HTTPHeaderSyntaxError,
|
|
11
|
+
Net::ProtocolError,
|
|
12
|
+
Timeout::Error ].freeze
|
|
13
|
+
|
|
3
14
|
def initialize(params = {})
|
|
4
15
|
end
|
|
5
16
|
|
|
@@ -8,20 +19,17 @@ module Errplane
|
|
|
8
19
|
data = black_box.to_json
|
|
9
20
|
response = begin
|
|
10
21
|
url = "/api/v1/applications/#{Errplane.configuration.application_id}/exceptions/#{Errplane.configuration.rails_environment}#{"/deploy" if deployment}?api_key=#{Errplane.configuration.api_key}"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
rescue Exception => e
|
|
17
|
-
# e
|
|
22
|
+
log :info, "URL: #{url}"
|
|
23
|
+
log :info, "Data: #{data.inspect}"
|
|
24
|
+
http.post(url, data)
|
|
25
|
+
rescue *HTTP_ERRORS => e
|
|
26
|
+
log :error, "HTTP error contacting Errplane API! #{e.class}: #{e.message}"
|
|
18
27
|
end
|
|
19
28
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# Success
|
|
29
|
+
if response.is_a?(Net::HTTPSuccess)
|
|
30
|
+
log :info, "Request Succeeded: #{response.inspect}"
|
|
23
31
|
else
|
|
24
|
-
#
|
|
32
|
+
log :error, "Request Failed: #{response.inspect}"
|
|
25
33
|
end
|
|
26
34
|
end
|
|
27
35
|
|
data/lib/errplane/version.rb
CHANGED
data/spec/app/rails2.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
RAILS_ROOT = File.dirname(__FILE__)
|
|
2
|
+
|
|
3
|
+
module Rails
|
|
4
|
+
class << self
|
|
5
|
+
def vendor_rails?; return false; end
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Rails::Initializer.run do |config|
|
|
10
|
+
# config.time_zone = 'UTC'
|
|
11
|
+
# config.cache_classes = true
|
|
12
|
+
# config.whiny_nils = true
|
|
13
|
+
# config.action_controller.consider_all_requests_local = true
|
|
14
|
+
# config.action_controller.perform_caching = false
|
|
15
|
+
# config.action_view.cache_template_loading = true
|
|
16
|
+
# config.action_controller.allow_forgery_protection = false
|
|
17
|
+
# config.action_mailer.delivery_method = :test
|
|
18
|
+
config.frameworks = [ :action_controller, :active_resource ]
|
|
19
|
+
config.action_controller.session = { :key => "_myapp_session", :secret => "1234567890abcdef1234567890abcdef" }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
ActionController::Base.cookie_verifier_secret = '1234567890abcdef1234567890abcdef'
|
|
23
|
+
ActionController::Base.session = {
|
|
24
|
+
:key => '_myapp_session',
|
|
25
|
+
:secret => '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
Errplane.configure do |config|
|
|
29
|
+
config.api_key = "f123-e456-d789c012"
|
|
30
|
+
config.application_id = "b12r8c72"
|
|
31
|
+
config.ignored_environments = []
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class ApplicationController < ActionController::Base; end
|
|
35
|
+
class WidgetsController < ApplicationController
|
|
36
|
+
def index; render :nothing => true; end
|
|
37
|
+
def new; return 1/0; end
|
|
38
|
+
end
|
|
@@ -15,9 +15,6 @@ end
|
|
|
15
15
|
Errplane.configure do |config|
|
|
16
16
|
config.api_key = "f123-e456-d789c012"
|
|
17
17
|
config.application_id = "b12r8c72"
|
|
18
|
-
config.logger = Logger.new(STDOUT)
|
|
19
|
-
config.debug = true
|
|
20
|
-
config.ignored_environments = []
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
class ApplicationController < ActionController::Base; end
|
|
@@ -1,24 +1,42 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/integration_helper"
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/integration_helper")
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
describe "exception handling" do
|
|
4
4
|
before do
|
|
5
5
|
Errplane.configure do |config|
|
|
6
6
|
config.ignored_environments = %w{development}
|
|
7
7
|
end
|
|
8
|
+
|
|
9
|
+
FakeWeb.last_request = nil
|
|
10
|
+
FakeWeb.clean_registry
|
|
11
|
+
@request_path = "/api/v1/applications/#{Errplane.configuration.application_id}/exceptions/test?api_key=f123-e456-d789c012"
|
|
12
|
+
@request_url = "http://api.errplane.com#{@request_path}"
|
|
13
|
+
FakeWeb.register_uri(:post, @request_url, :body => "", :status => ["200", "OK"])
|
|
8
14
|
end
|
|
9
15
|
|
|
10
16
|
describe "in an action that raises an exception" do
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
it "should make an HTTP call to the API" do
|
|
18
|
+
get "/widgets/new"
|
|
19
|
+
FakeWeb.last_request.should_not be_nil
|
|
20
|
+
FakeWeb.last_request.path.should == @request_path
|
|
21
|
+
FakeWeb.last_request.method.should == "POST"
|
|
15
22
|
end
|
|
16
23
|
end
|
|
17
24
|
|
|
18
25
|
describe "in an action that does not raise an exception" do
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
it "should not make an HTTP call to the API" do
|
|
27
|
+
get "/widgets"
|
|
28
|
+
FakeWeb.last_request.should be_nil
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "for an ignored user agent" do
|
|
33
|
+
it "should not make an HTTP call to the API" do
|
|
34
|
+
Errplane.configure do |config|
|
|
35
|
+
config.ignored_user_agents = %w{Googlebot}
|
|
36
|
+
end
|
|
37
|
+
get "/widgets/new", {}, { "HTTP_USER_AGENT" => "Googlebot/2.1" }
|
|
38
|
+
FakeWeb.last_request.should be_nil
|
|
22
39
|
end
|
|
23
40
|
end
|
|
24
41
|
end
|
|
42
|
+
|