airbrake 3.1.6 → 11.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. checksums.yaml +7 -0
  2. data/lib/airbrake.rb +23 -150
  3. data/lib/airbrake/capistrano.rb +6 -42
  4. data/lib/airbrake/capistrano/capistrano2.rb +40 -0
  5. data/lib/airbrake/capistrano/capistrano3.rb +23 -0
  6. data/lib/airbrake/delayed_job.rb +66 -0
  7. data/lib/airbrake/logger.rb +103 -0
  8. data/lib/airbrake/rack.rb +30 -45
  9. data/lib/airbrake/rack/context_filter.rb +65 -0
  10. data/lib/airbrake/rack/http_headers_filter.rb +44 -0
  11. data/lib/airbrake/rack/http_params_filter.rb +27 -0
  12. data/lib/airbrake/rack/instrumentable.rb +136 -0
  13. data/lib/airbrake/rack/middleware.rb +102 -0
  14. data/lib/airbrake/rack/request_body_filter.rb +33 -0
  15. data/lib/airbrake/rack/request_store.rb +34 -0
  16. data/lib/airbrake/rack/route_filter.rb +51 -0
  17. data/lib/airbrake/rack/session_filter.rb +25 -0
  18. data/lib/airbrake/rack/user.rb +74 -0
  19. data/lib/airbrake/rack/user_filter.rb +25 -0
  20. data/lib/airbrake/rails.rb +25 -31
  21. data/lib/airbrake/rails/action_cable.rb +35 -0
  22. data/lib/airbrake/rails/action_cable/notify_callback.rb +22 -0
  23. data/lib/airbrake/rails/action_controller.rb +40 -0
  24. data/lib/airbrake/rails/action_controller_notify_subscriber.rb +32 -0
  25. data/lib/airbrake/rails/action_controller_performance_breakdown_subscriber.rb +51 -0
  26. data/lib/airbrake/rails/action_controller_route_subscriber.rb +33 -0
  27. data/lib/airbrake/rails/active_job.rb +50 -0
  28. data/lib/airbrake/rails/active_record.rb +36 -0
  29. data/lib/airbrake/rails/active_record_subscriber.rb +46 -0
  30. data/lib/airbrake/rails/app.rb +78 -0
  31. data/lib/airbrake/rails/backtrace_cleaner.rb +23 -0
  32. data/lib/airbrake/rails/curb.rb +32 -0
  33. data/lib/airbrake/rails/event.rb +81 -0
  34. data/lib/airbrake/rails/excon_subscriber.rb +25 -0
  35. data/lib/airbrake/rails/http.rb +14 -0
  36. data/lib/airbrake/rails/http_client.rb +16 -0
  37. data/lib/airbrake/rails/net_http.rb +18 -0
  38. data/lib/airbrake/rails/railtie.rb +151 -0
  39. data/lib/airbrake/rails/typhoeus.rb +16 -0
  40. data/lib/airbrake/rake.rb +65 -0
  41. data/lib/airbrake/rake/tasks.rb +112 -0
  42. data/lib/airbrake/resque.rb +61 -0
  43. data/lib/airbrake/shoryuken.rb +54 -0
  44. data/lib/airbrake/sidekiq.rb +55 -0
  45. data/lib/airbrake/sidekiq/retryable_jobs_filter.rb +53 -0
  46. data/lib/airbrake/sneakers.rb +72 -0
  47. data/lib/airbrake/version.rb +5 -1
  48. data/lib/generators/airbrake_generator.rb +25 -0
  49. data/lib/generators/airbrake_initializer.rb.erb +80 -0
  50. metadata +206 -259
  51. data/CHANGELOG +0 -944
  52. data/Gemfile +0 -3
  53. data/Guardfile +0 -6
  54. data/INSTALL +0 -20
  55. data/MIT-LICENSE +0 -22
  56. data/README.md +0 -556
  57. data/README_FOR_HEROKU_ADDON.md +0 -94
  58. data/Rakefile +0 -223
  59. data/SUPPORTED_RAILS_VERSIONS +0 -38
  60. data/TESTING.md +0 -41
  61. data/airbrake.gemspec +0 -40
  62. data/bin/airbrake +0 -12
  63. data/features/metal.feature +0 -18
  64. data/features/rack.feature +0 -60
  65. data/features/rails.feature +0 -272
  66. data/features/rails_with_js_notifier.feature +0 -97
  67. data/features/rake.feature +0 -27
  68. data/features/sinatra.feature +0 -29
  69. data/features/step_definitions/file_steps.rb +0 -10
  70. data/features/step_definitions/metal_steps.rb +0 -23
  71. data/features/step_definitions/rack_steps.rb +0 -23
  72. data/features/step_definitions/rails_application_steps.rb +0 -478
  73. data/features/step_definitions/rake_steps.rb +0 -17
  74. data/features/support/airbrake_shim.rb.template +0 -16
  75. data/features/support/env.rb +0 -18
  76. data/features/support/matchers.rb +0 -35
  77. data/features/support/rails.rb +0 -201
  78. data/features/support/rake/Rakefile +0 -68
  79. data/features/support/terminal.rb +0 -107
  80. data/features/user_informer.feature +0 -63
  81. data/generators/airbrake/airbrake_generator.rb +0 -94
  82. data/generators/airbrake/lib/insert_commands.rb +0 -34
  83. data/generators/airbrake/lib/rake_commands.rb +0 -24
  84. data/generators/airbrake/templates/airbrake_tasks.rake +0 -25
  85. data/generators/airbrake/templates/capistrano_hook.rb +0 -6
  86. data/generators/airbrake/templates/initializer.rb +0 -6
  87. data/install.rb +0 -1
  88. data/lib/airbrake/backtrace.rb +0 -108
  89. data/lib/airbrake/cli/client.rb +0 -68
  90. data/lib/airbrake/cli/options.rb +0 -41
  91. data/lib/airbrake/cli/printer.rb +0 -30
  92. data/lib/airbrake/cli/project.rb +0 -17
  93. data/lib/airbrake/cli/project_factory.rb +0 -36
  94. data/lib/airbrake/cli/runner.rb +0 -48
  95. data/lib/airbrake/cli/validator.rb +0 -8
  96. data/lib/airbrake/configuration.rb +0 -311
  97. data/lib/airbrake/extensions/blank.rb +0 -73
  98. data/lib/airbrake/notice.rb +0 -390
  99. data/lib/airbrake/rails/action_controller_catcher.rb +0 -30
  100. data/lib/airbrake/rails/controller_methods.rb +0 -87
  101. data/lib/airbrake/rails/error_lookup.rb +0 -33
  102. data/lib/airbrake/rails/javascript_notifier.rb +0 -47
  103. data/lib/airbrake/rails/middleware/exceptions_catcher.rb +0 -33
  104. data/lib/airbrake/rails3_tasks.rb +0 -98
  105. data/lib/airbrake/railtie.rb +0 -48
  106. data/lib/airbrake/rake_handler.rb +0 -71
  107. data/lib/airbrake/sender.rb +0 -128
  108. data/lib/airbrake/shared_tasks.rb +0 -47
  109. data/lib/airbrake/tasks.rb +0 -83
  110. data/lib/airbrake/user_informer.rb +0 -27
  111. data/lib/airbrake_tasks.rb +0 -64
  112. data/lib/rails/generators/airbrake/airbrake_generator.rb +0 -100
  113. data/lib/templates/javascript_notifier.erb +0 -15
  114. data/lib/templates/rescue.erb +0 -91
  115. data/rails/init.rb +0 -1
  116. data/resources/README.md +0 -34
  117. data/resources/ca-bundle.crt +0 -3376
  118. data/script/integration_test.rb +0 -38
  119. data/test/airbrake_2_3.xsd +0 -88
  120. data/test/airbrake_tasks_test.rb +0 -170
  121. data/test/backtrace_test.rb +0 -162
  122. data/test/capistrano_test.rb +0 -34
  123. data/test/catcher_test.rb +0 -333
  124. data/test/configuration_test.rb +0 -233
  125. data/test/helper.rb +0 -263
  126. data/test/javascript_notifier_test.rb +0 -51
  127. data/test/logger_test.rb +0 -79
  128. data/test/notice_test.rb +0 -490
  129. data/test/notifier_test.rb +0 -276
  130. data/test/rack_test.rb +0 -58
  131. data/test/rails_initializer_test.rb +0 -36
  132. data/test/recursion_test.rb +0 -10
  133. data/test/sender_test.rb +0 -288
  134. data/test/user_informer_test.rb +0 -29
@@ -1,17 +0,0 @@
1
- When /I run rake with (.+)/ do |command|
2
- @rake_command = "rake #{command.gsub(' ','_')}"
3
- @rake_result = `cd features/support/rake && GEM_HOME=#{BUILT_GEM_ROOT} #{@rake_command} 2>&1`
4
- end
5
-
6
- Then /Airbrake should (|not) ?catch the exception/ do |condition|
7
- if condition=='not'
8
- @rake_result.should_not =~ /^airbrake/
9
- else
10
- @rake_result.should =~ /^airbrake/
11
- end
12
- end
13
-
14
- Then /Airbrake should send the rake command line as the component name/ do
15
- component = @rake_result.match(/^airbrake (.*)$/)[1]
16
- component.should == @rake_command
17
- end
@@ -1,16 +0,0 @@
1
- require 'sham_rack'
2
-
3
- Airbrake.configuration.logger = Logger.new STDOUT if defined?(Airbrake)
4
-
5
- ShamRack.at("api.airbrake.io") do |env|
6
- response = <<-end_xml
7
- <notice>
8
- <id>b6817316-9c45-ed26-45eb-780dbb86aadb</id>
9
- <url>http://airbrake.io/locate/b6817316-9c45-ed26-45eb-780dbb86aadb</url>
10
- </notice>
11
-
12
- Request:
13
- #{env["rack.input"].read}
14
- end_xml
15
- ["200 OK", { "Content-type" => "text/xml" }, [response]]
16
- end
@@ -1,18 +0,0 @@
1
- require 'active_support'
2
- require 'nokogiri'
3
- require 'rspec'
4
-
5
- PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..')).freeze
6
- TEMP_DIR = File.join(PROJECT_ROOT, 'tmp').freeze
7
- LOCAL_RAILS_ROOT = File.join(TEMP_DIR, 'rails_root').freeze
8
- BUILT_GEM_ROOT = File.join(TEMP_DIR, 'built_gems').freeze
9
- LOCAL_GEM_ROOT = File.join(TEMP_DIR, 'local_gems').freeze
10
- RACK_FILE = File.join(TEMP_DIR, 'rack_app.rb').freeze
11
-
12
- Before do
13
- FileUtils.mkdir_p(TEMP_DIR)
14
- FileUtils.rm_rf(BUILT_GEM_ROOT)
15
- FileUtils.rm_rf(LOCAL_RAILS_ROOT)
16
- FileUtils.rm_f(RACK_FILE)
17
- FileUtils.mkdir_p(BUILT_GEM_ROOT)
18
- end
@@ -1,35 +0,0 @@
1
- RSpec::Matchers.define :have_content do |xpath, content|
2
- match do |document|
3
- @elements = document.search(xpath)
4
-
5
- if @elements.empty?
6
- false
7
- else
8
- element_with_content = document.at("#{xpath}[contains(.,'#{content}')]")
9
-
10
- if element_with_content.nil?
11
- @found = @elements.collect { |element| element.content }
12
-
13
- false
14
- else
15
- true
16
- end
17
- end
18
- end
19
-
20
- failure_message_for_should do |document|
21
- if @elements.empty?
22
- "In XML:\n#{document}\nNo element at #{xpath}"
23
- else
24
- "In XML:\n#{document}\nGot content #{@found.inspect} at #{xpath} instead of #{content.inspect}"
25
- end
26
- end
27
-
28
- failure_message_for_should_not do |document|
29
- unless @elements.empty?
30
- "In XML:\n#{document}\nExpcted no content #{content.inspect} at #{xpath}"
31
- end
32
- end
33
- end
34
-
35
- World(RSpec::Matchers)
@@ -1,201 +0,0 @@
1
- module RailsHelpers
2
- def rails_root_exists?
3
- File.exists?(environment_path)
4
- end
5
-
6
- def application_controller_filename
7
- controller_filename = File.join(rails_root, 'app', 'controllers', "application_controller.rb")
8
- end
9
-
10
- def rails3?
11
- rails_version =~ /^3/
12
- end
13
-
14
- def rails_root
15
- LOCAL_RAILS_ROOT
16
- end
17
-
18
- def rails_uses_rack?
19
- rails3? || rails_version =~ /^2\.3/
20
- end
21
-
22
- def rails_version
23
- @rails_version ||= begin
24
- if ENV["RAILS_VERSION"]
25
- ENV["RAILS_VERSION"]
26
- elsif bundler_manages_gems?
27
- rails_version = open(gemfile_path).read.match(/gem.*rails["'].*["'](.+)["']/)[1]
28
- else
29
- environment_file = File.join(rails_root, 'config', 'environment.rb')
30
- rails_version = `grep RAILS_GEM_VERSION #{environment_file}`.match(/[\d.]+/)[0]
31
- end
32
- end
33
- end
34
-
35
- def bundler_manages_gems?
36
- File.exists?(gemfile_path)
37
- end
38
-
39
- def gemfile_path
40
- gemfile = File.join(rails_root, 'Gemfile')
41
- end
42
-
43
- def rails_manages_gems?
44
- rails_version =~ /^2\.[123]/
45
- end
46
-
47
- def rails_supports_initializers?
48
- rails3? || rails_version =~ /^2\./
49
- end
50
-
51
- def rails_finds_generators_in_gems?
52
- rails3? || rails_version =~ /^2\./
53
- end
54
-
55
- def version_string
56
- ENV['RAILS_VERSION'] || `tail -n 1 SUPPORTED_RAILS_VERSIONS` # use latest version if ENV["RAILS_VERSION"] is undefined
57
- end
58
-
59
- def environment_path
60
- File.join(rails_root, 'config', 'environment.rb')
61
- end
62
-
63
- def rakefile_path
64
- File.join(rails_root, 'Rakefile')
65
- end
66
-
67
- def bundle_gem(gem_name, version = nil)
68
- File.open(gemfile_path, 'a') do |file|
69
- gem = "gem '#{gem_name}'"
70
- gem += ", '#{version}'" if version
71
- file.puts(gem)
72
- end
73
- end
74
-
75
- def config_gem(gem_name, version = nil)
76
- run = "Rails::Initializer.run do |config|"
77
- insert = " config.gem '#{gem_name}'"
78
- insert += ", :version => '#{version}'" if version
79
- content = File.read(environment_path)
80
- content = "require 'thread'\n#{content}"
81
- if content.sub!(run, "#{run}\n#{insert}")
82
- File.open(environment_path, 'wb') { |file| file.write(content) }
83
- else
84
- raise "Couldn't find #{run.inspect} in #{environment_path}"
85
- end
86
- end
87
-
88
- def config_gem_dependencies
89
- insert = <<-END
90
- if Gem::VERSION >= "1.3.6"
91
- module Rails
92
- class GemDependency
93
- def requirement
94
- r = super
95
- (r == Gem::Requirement.default) ? nil : r
96
- end
97
- end
98
- end
99
- end
100
- END
101
- run = "Rails::Initializer.run do |config|"
102
- content = File.read(environment_path)
103
- if content.sub!(run, "#{insert}\n#{run}")
104
- File.open(environment_path, 'wb') { |file| file.write(content) }
105
- else
106
- raise "Couldn't find #{run.inspect} in #{environment_path}"
107
- end
108
- end
109
-
110
- def require_thread
111
- content = File.read(rakefile_path)
112
- content = "require 'thread'\n#{content}"
113
- File.open(rakefile_path, 'wb') { |file| file.write(content) }
114
- end
115
-
116
- def perform_request(uri, environment = 'production')
117
- if rails3?
118
- request_script = <<-SCRIPT
119
- require File.expand_path('../config/environment', __FILE__)
120
-
121
-
122
- env = Rack::MockRequest.env_for(#{uri.inspect})
123
- response = RailsRoot::Application.call(env)
124
-
125
-
126
- response = response.last if response.last.is_a?(ActionDispatch::Response)
127
-
128
- if response.is_a?(Array)
129
- puts response.join
130
- else
131
- puts response.body
132
- end
133
- SCRIPT
134
- File.open(File.join(rails_root, 'request.rb'), 'w') { |file| file.write(request_script) }
135
- @terminal.cd(rails_root)
136
- @terminal.run("ruby -rthread ./script/rails runner -e #{environment} request.rb")
137
- elsif rails_uses_rack?
138
- request_script = <<-SCRIPT
139
- require File.expand_path('../config/environment', __FILE__)
140
-
141
- env = Rack::MockRequest.env_for(#{uri.inspect})
142
- app = Rack::Lint.new(ActionController::Dispatcher.new)
143
-
144
- status, headers, body = app.call(env)
145
-
146
- response = ""
147
- if body.respond_to?(:to_str)
148
- response << body
149
- else
150
- body.each { |part| response << part }
151
- end
152
-
153
- puts response
154
- SCRIPT
155
- File.open(File.join(rails_root, 'request.rb'), 'w') { |file| file.write(request_script) }
156
- @terminal.cd(rails_root)
157
- @terminal.run("ruby -rthread ./script/runner -e #{environment} request.rb")
158
- else
159
- uri = URI.parse(uri)
160
- request_script = <<-SCRIPT
161
- require 'cgi'
162
- class CGIWrapper < CGI
163
- def initialize(*args)
164
- @env_table = {}
165
- @stdinput = $stdin
166
- super(*args)
167
- end
168
- attr_reader :env_table
169
- end
170
- $stdin = StringIO.new("")
171
- cgi = CGIWrapper.new
172
- cgi.env_table.update({
173
- 'HTTPS' => 'off',
174
- 'REQUEST_METHOD' => "GET",
175
- 'HTTP_HOST' => #{[uri.host, uri.port].join(':').inspect},
176
- 'SERVER_PORT' => #{uri.port.inspect},
177
- 'REQUEST_URI' => #{uri.request_uri.inspect},
178
- 'PATH_INFO' => #{uri.path.inspect},
179
- 'QUERY_STRING' => #{uri.query.inspect}
180
- })
181
- require 'dispatcher' unless defined?(ActionController::Dispatcher)
182
- Dispatcher.dispatch(cgi)
183
- SCRIPT
184
- File.open(File.join(rails_root, 'request.rb'), 'w') { |file| file.write(request_script) }
185
- @terminal.cd(rails_root)
186
- @terminal.run("ruby -rthread ./script/runner -e #{environment} request.rb")
187
- end
188
- end
189
-
190
- def monkeypatch_old_version
191
- monkeypatchin= <<-MONKEYPATCHIN
192
-
193
- MissingSourceFile::REGEXPS << [/^cannot load such file -- (.+)$/i, 1]
194
-
195
- MONKEYPATCHIN
196
-
197
- File.open(File.join(rails_root,"config","initializers", 'monkeypatchin.rb'), 'w') { |file| file.write(monkeypatchin) }
198
- end
199
- end
200
-
201
- World(RailsHelpers)
@@ -1,68 +0,0 @@
1
- # A test harness for RakeHandler
2
- #
3
- require 'rake'
4
- require 'rubygems'
5
- require 'airbrake'
6
- require 'airbrake/rake_handler'
7
-
8
- Airbrake.configure do |c|
9
- end
10
-
11
- # Should catch exception
12
- task :airbrake do
13
- Airbrake.configuration.rescue_rake_exceptions = true
14
- stub_tty_output(true)
15
- raise_exception
16
- end
17
-
18
- # Should not catch exception
19
- task :airbrake_disabled do
20
- Airbrake.configuration.rescue_rake_exceptions = false
21
- stub_tty_output(true)
22
- raise_exception
23
- end
24
-
25
- # Should not catch exception as tty_output is true
26
- task :airbrake_autodetect_from_terminal do
27
- Airbrake.configuration.rescue_rake_exceptions = nil
28
- stub_tty_output(true)
29
- raise_exception
30
- end
31
-
32
- # Should catch exception as tty_output is false
33
- task :airbrake_autodetect_not_from_terminal do
34
- Airbrake.configuration.rescue_rake_exceptions = nil
35
- stub_tty_output(false)
36
- raise_exception
37
- end
38
-
39
- task :airbrake_not_yet_configured do
40
- Airbrake.configuration.rescue_rake_exceptions = true
41
- stub_tty_output(true)
42
- stub_empty_sender
43
- raise_exception
44
- end
45
-
46
- module Airbrake
47
- def self.notify_or_ignore(*args)
48
- # TODO if you need to check more params, you'll have to use json.dump or something
49
- $stderr.puts "airbrake #{args[1][:component]}"
50
- end
51
- end
52
-
53
- def stub_empty_sender
54
- Airbrake.sender = nil
55
- end
56
-
57
- def stub_tty_output(value)
58
- Rake.application.instance_eval do
59
- @tty_output_stub = value
60
- def tty_output?
61
- @tty_output_stub
62
- end
63
- end
64
- end
65
-
66
- def raise_exception
67
- raise 'TEST'
68
- end
@@ -1,107 +0,0 @@
1
- require 'fileutils'
2
-
3
- Before do
4
- @terminal = Terminal.new
5
- end
6
-
7
- After do |story|
8
- if story.failed?
9
- # puts @terminal.output
10
- end
11
- end
12
-
13
- class Terminal
14
- attr_reader :output, :status
15
- attr_accessor :environment_variables, :invoke_heroku_rake_tasks_locally
16
-
17
- def initialize
18
- @cwd = FileUtils.pwd
19
- @output = ""
20
- @status = 0
21
- @logger = Logger.new(File.join(TEMP_DIR, 'terminal.log'))
22
-
23
- @invoke_heroku_rake_tasks_locally = false
24
-
25
- @environment_variables = {
26
- "GEM_HOME" => LOCAL_GEM_ROOT,
27
- "GEM_PATH" => "#{LOCAL_GEM_ROOT}:#{BUILT_GEM_ROOT}",
28
- "PATH" => "#{gem_bin_path}:#{ENV['PATH']}"
29
- }
30
- end
31
-
32
- def cd(directory)
33
- @cwd = directory
34
- end
35
-
36
- def run(command)
37
- command = optionally_invoke_heroku_rake_tasks_locally(command)
38
-
39
- output << "#{command}\n"
40
- FileUtils.cd(@cwd) do
41
- # The ; forces ruby to shell out so the env settings work right
42
- cmdline = "#{environment_settings} #{command} 2>&1 ; "
43
- logger.debug(cmdline)
44
- result = `#{cmdline}`
45
- logger.debug(result)
46
- output << result
47
- end
48
- @status = $?
49
- end
50
-
51
- def optionally_invoke_heroku_rake_tasks_locally(command)
52
- if invoke_heroku_rake_tasks_locally
53
- command.sub(/^heroku /, '')
54
- else
55
- command
56
- end
57
- end
58
-
59
- def echo(string)
60
- logger.debug(string)
61
- end
62
-
63
- def flush!
64
- @output = ""
65
- end
66
-
67
- def build_and_install_gem(gemspec)
68
- pkg_dir = File.join(TEMP_DIR, 'pkg')
69
- FileUtils.mkdir_p(pkg_dir)
70
- output = `gem build #{gemspec} 2>&1`
71
- gem_file = Dir.glob("*.gem").first
72
- unless gem_file
73
- raise "Gem didn't build:\n#{output}"
74
- end
75
- target = File.join(pkg_dir, gem_file)
76
- FileUtils.mv(gem_file, target)
77
- install_gem_to(LOCAL_GEM_ROOT, target)
78
- end
79
-
80
- def install_gem(gem)
81
- install_gem_to(LOCAL_GEM_ROOT, gem)
82
- end
83
-
84
- def uninstall_gem(gem)
85
- `gem uninstall -i #{LOCAL_GEM_ROOT} #{gem}`
86
- end
87
-
88
- def prepend_path(path)
89
- @environment_variables['PATH'] = path + ":" + @environment_variables['PATH']
90
- end
91
-
92
- private
93
-
94
- def install_gem_to(root, gem)
95
- `gem install -i #{root} --no-ri --no-rdoc #{gem}`
96
- end
97
-
98
- def environment_settings
99
- @environment_variables.map { |key, value| "#{key}=#{value}" }.join(' ')
100
- end
101
-
102
- def gem_bin_path
103
- File.join(LOCAL_GEM_ROOT, "bin")
104
- end
105
-
106
- attr_reader :logger
107
- end