honeybadger 5.0.2 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +713 -701
  3. data/LICENSE +19 -19
  4. data/README.md +57 -57
  5. data/TROUBLESHOOTING.md +3 -3
  6. data/bin/honeybadger +5 -5
  7. data/lib/honeybadger/agent.rb +488 -488
  8. data/lib/honeybadger/backend/base.rb +116 -116
  9. data/lib/honeybadger/backend/debug.rb +22 -22
  10. data/lib/honeybadger/backend/null.rb +29 -29
  11. data/lib/honeybadger/backend/server.rb +62 -62
  12. data/lib/honeybadger/backend/test.rb +46 -46
  13. data/lib/honeybadger/backend.rb +27 -27
  14. data/lib/honeybadger/backtrace.rb +181 -181
  15. data/lib/honeybadger/breadcrumbs/active_support.rb +119 -119
  16. data/lib/honeybadger/breadcrumbs/breadcrumb.rb +53 -53
  17. data/lib/honeybadger/breadcrumbs/collector.rb +82 -82
  18. data/lib/honeybadger/breadcrumbs/logging.rb +51 -51
  19. data/lib/honeybadger/breadcrumbs/ring_buffer.rb +44 -44
  20. data/lib/honeybadger/breadcrumbs.rb +8 -8
  21. data/lib/honeybadger/cli/deploy.rb +43 -43
  22. data/lib/honeybadger/cli/exec.rb +143 -143
  23. data/lib/honeybadger/cli/helpers.rb +28 -28
  24. data/lib/honeybadger/cli/heroku.rb +129 -129
  25. data/lib/honeybadger/cli/install.rb +101 -101
  26. data/lib/honeybadger/cli/main.rb +237 -237
  27. data/lib/honeybadger/cli/notify.rb +67 -67
  28. data/lib/honeybadger/cli/test.rb +267 -267
  29. data/lib/honeybadger/cli.rb +14 -14
  30. data/lib/honeybadger/config/defaults.rb +336 -333
  31. data/lib/honeybadger/config/env.rb +42 -42
  32. data/lib/honeybadger/config/ruby.rb +146 -146
  33. data/lib/honeybadger/config/yaml.rb +76 -76
  34. data/lib/honeybadger/config.rb +413 -413
  35. data/lib/honeybadger/const.rb +20 -20
  36. data/lib/honeybadger/context_manager.rb +55 -55
  37. data/lib/honeybadger/conversions.rb +16 -16
  38. data/lib/honeybadger/init/rails.rb +38 -38
  39. data/lib/honeybadger/init/rake.rb +66 -66
  40. data/lib/honeybadger/init/ruby.rb +11 -11
  41. data/lib/honeybadger/init/sinatra.rb +51 -51
  42. data/lib/honeybadger/logging.rb +177 -177
  43. data/lib/honeybadger/notice.rb +579 -568
  44. data/lib/honeybadger/plugin.rb +210 -210
  45. data/lib/honeybadger/plugins/breadcrumbs.rb +111 -111
  46. data/lib/honeybadger/plugins/delayed_job/plugin.rb +56 -56
  47. data/lib/honeybadger/plugins/delayed_job.rb +22 -22
  48. data/lib/honeybadger/plugins/faktory.rb +52 -52
  49. data/lib/honeybadger/plugins/lambda.rb +71 -71
  50. data/lib/honeybadger/plugins/local_variables.rb +44 -44
  51. data/lib/honeybadger/plugins/passenger.rb +23 -23
  52. data/lib/honeybadger/plugins/rails.rb +72 -63
  53. data/lib/honeybadger/plugins/resque.rb +72 -72
  54. data/lib/honeybadger/plugins/shoryuken.rb +52 -52
  55. data/lib/honeybadger/plugins/sidekiq.rb +71 -62
  56. data/lib/honeybadger/plugins/sucker_punch.rb +18 -18
  57. data/lib/honeybadger/plugins/thor.rb +32 -32
  58. data/lib/honeybadger/plugins/warden.rb +19 -19
  59. data/lib/honeybadger/rack/error_notifier.rb +92 -92
  60. data/lib/honeybadger/rack/user_feedback.rb +88 -88
  61. data/lib/honeybadger/rack/user_informer.rb +45 -45
  62. data/lib/honeybadger/ruby.rb +2 -2
  63. data/lib/honeybadger/singleton.rb +103 -103
  64. data/lib/honeybadger/tasks.rb +22 -22
  65. data/lib/honeybadger/templates/feedback_form.erb +84 -84
  66. data/lib/honeybadger/util/http.rb +92 -92
  67. data/lib/honeybadger/util/lambda.rb +32 -32
  68. data/lib/honeybadger/util/request_hash.rb +73 -73
  69. data/lib/honeybadger/util/request_payload.rb +41 -41
  70. data/lib/honeybadger/util/revision.rb +39 -39
  71. data/lib/honeybadger/util/sanitizer.rb +214 -214
  72. data/lib/honeybadger/util/sql.rb +34 -34
  73. data/lib/honeybadger/util/stats.rb +50 -50
  74. data/lib/honeybadger/version.rb +4 -4
  75. data/lib/honeybadger/worker.rb +253 -253
  76. data/lib/honeybadger.rb +11 -11
  77. data/resources/ca-bundle.crt +3376 -3376
  78. data/vendor/capistrano-honeybadger/lib/capistrano/honeybadger.rb +5 -5
  79. data/vendor/capistrano-honeybadger/lib/capistrano/tasks/deploy.cap +89 -89
  80. data/vendor/capistrano-honeybadger/lib/honeybadger/capistrano/legacy.rb +47 -47
  81. data/vendor/capistrano-honeybadger/lib/honeybadger/capistrano.rb +2 -2
  82. data/vendor/cli/inifile.rb +628 -628
  83. data/vendor/cli/thor/actions/create_file.rb +103 -103
  84. data/vendor/cli/thor/actions/create_link.rb +59 -59
  85. data/vendor/cli/thor/actions/directory.rb +118 -118
  86. data/vendor/cli/thor/actions/empty_directory.rb +135 -135
  87. data/vendor/cli/thor/actions/file_manipulation.rb +316 -316
  88. data/vendor/cli/thor/actions/inject_into_file.rb +107 -107
  89. data/vendor/cli/thor/actions.rb +319 -319
  90. data/vendor/cli/thor/base.rb +656 -656
  91. data/vendor/cli/thor/command.rb +133 -133
  92. data/vendor/cli/thor/core_ext/hash_with_indifferent_access.rb +77 -77
  93. data/vendor/cli/thor/core_ext/io_binary_read.rb +10 -10
  94. data/vendor/cli/thor/core_ext/ordered_hash.rb +98 -98
  95. data/vendor/cli/thor/error.rb +32 -32
  96. data/vendor/cli/thor/group.rb +281 -281
  97. data/vendor/cli/thor/invocation.rb +178 -178
  98. data/vendor/cli/thor/line_editor/basic.rb +35 -35
  99. data/vendor/cli/thor/line_editor/readline.rb +88 -88
  100. data/vendor/cli/thor/line_editor.rb +17 -17
  101. data/vendor/cli/thor/parser/argument.rb +73 -73
  102. data/vendor/cli/thor/parser/arguments.rb +175 -175
  103. data/vendor/cli/thor/parser/option.rb +125 -125
  104. data/vendor/cli/thor/parser/options.rb +218 -218
  105. data/vendor/cli/thor/parser.rb +4 -4
  106. data/vendor/cli/thor/rake_compat.rb +71 -71
  107. data/vendor/cli/thor/runner.rb +322 -322
  108. data/vendor/cli/thor/shell/basic.rb +421 -421
  109. data/vendor/cli/thor/shell/color.rb +149 -149
  110. data/vendor/cli/thor/shell/html.rb +126 -126
  111. data/vendor/cli/thor/shell.rb +81 -81
  112. data/vendor/cli/thor/util.rb +267 -267
  113. data/vendor/cli/thor/version.rb +3 -3
  114. data/vendor/cli/thor.rb +484 -484
  115. metadata +10 -5
@@ -1,22 +1,22 @@
1
- namespace :honeybadger do
2
- def warn_task_moved(old_name, new_cmd = "honeybadger help #{old_name}")
3
- puts "This task was moved to the CLI in honeybadger 2.0. To learn more, run `#{new_cmd}`."
4
- end
5
-
6
- desc "Verify your gem installation by sending a test exception to the honeybadger service"
7
- task :test do
8
- warn_task_moved('test')
9
- end
10
-
11
- desc "Notify Honeybadger of a new deploy."
12
- task :deploy do
13
- warn_task_moved('deploy')
14
- end
15
-
16
- namespace :heroku do
17
- desc "Install Heroku deploy notifications addon"
18
- task :add_deploy_notification do
19
- warn_task_moved('heroku:add_deploy_notification', 'honeybadger heroku help install_deploy_notification')
20
- end
21
- end
22
- end
1
+ namespace :honeybadger do
2
+ def warn_task_moved(old_name, new_cmd = "honeybadger help #{old_name}")
3
+ puts "This task was moved to the CLI in honeybadger 2.0. To learn more, run `#{new_cmd}`."
4
+ end
5
+
6
+ desc "Verify your gem installation by sending a test exception to the honeybadger service"
7
+ task :test do
8
+ warn_task_moved('test')
9
+ end
10
+
11
+ desc "Notify Honeybadger of a new deploy."
12
+ task :deploy do
13
+ warn_task_moved('deploy')
14
+ end
15
+
16
+ namespace :heroku do
17
+ desc "Install Heroku deploy notifications addon"
18
+ task :add_deploy_notification do
19
+ warn_task_moved('heroku:add_deploy_notification', 'honeybadger heroku help install_deploy_notification')
20
+ end
21
+ end
22
+ end
@@ -1,84 +1,84 @@
1
- <style>
2
- #honeybadger_feedback_form *, #honeybadger_feedback_form *:before, #honeybadger_feedback_form *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
3
- #honeybadger_feedback_form h2 { font-size: 110%; line-height: 1.5em; }
4
- #honeybadger_feedback_form label { font-weight: bold; }
5
- #honeybadger_feedback_name, #honeybadger_feedback_email, #honeybadger_feedback_comment { width: 100%; padding: 0.5em; }
6
- #honeybadger_feedback_comment { height: 10em; }
7
- #honeybadger_feedback_form .honeybadger-feedback-phone { display: none; }
8
- #honeybadger_feedback_link { font-size: 90%; }
9
- </style>
10
-
11
- <script>
12
- function honeybadgerFeedbackResponse(data) {
13
- if (data['result'] == 'OK') {
14
- var form = document.getElementById('honeybadger_feedback_form');
15
- var success = document.getElementById('honeybadger_feedback_success');
16
-
17
- form.style.display = 'none';
18
- success.style.display = 'block';
19
- } else {
20
- var message;
21
-
22
- if (data['error']) {
23
- message = data['error'];
24
- } else {
25
- message = 'An unknown error occurred. Please try again.';
26
- }
27
-
28
- alert(message);
29
- }
30
- }
31
-
32
- function sendHoneybadgerFeedback() {
33
- try {
34
- var script = document.createElement('script');
35
- var form = document.getElementById('honeybadger_feedback_form');
36
- script.src = '<%= action %>?format=js&token=<%= error_id %>&name=' + encodeURIComponent(form.name.value) + '&email=' + encodeURIComponent(form.email.value) + '&comment=' + encodeURIComponent(form.comment.value);
37
- form.appendChild(script);
38
- return false;
39
- } catch(e) {
40
- if (window.console) {
41
- console.log('Error caught while processing Honeybadger feedback form: ' + e);
42
- console.log('Submitting form normally...');
43
- }
44
- return true;
45
- }
46
- }
47
- </script>
48
-
49
- <div id="honeybadger_feedback_success" style="display:none;">
50
- <p><strong><%= I18n.t('honeybadger.feedback.thanks', :default => 'Thanks for the feedback!') %></strong></p>
51
- </div>
52
-
53
- <form action="<%= action %>" method="POST" id="honeybadger_feedback_form" onsubmit="return sendHoneybadgerFeedback();">
54
- <input type="hidden" name="token" id="honeybadger_feedback_token" value="<%= error_id %>">
55
-
56
- <h2><%= I18n.t('honeybadger.feedback.heading', :default => 'Care to help us fix this?') %></h2>
57
- <p><%= I18n.t('honeybadger.feedback.explanation', :default => 'Any information you can provide will help our technical team get to the bottom of this issue.') %></p>
58
-
59
- <p class="honeybadger-feedback-name">
60
- <label for="honeybadger_feedback_name"><%= I18n.t('honeybadger.feedback.labels.name', :default => 'Your name') %></label><br>
61
- <input type="text" name="name" id="honeybadger_feedback_name" size="60">
62
- </p>
63
-
64
- <p class="honeybadger-feedback-phone">
65
- <label for="honeybadger_feedback_phone"><%= I18n.t('honeybadger.feedback.labels.phone', :default => 'Your phone number') %></label><br>
66
- <input type="text" name="phone" id="honeybadger_feedback_phone" size="60">
67
- </p>
68
-
69
- <p class="honeybadger-feedback-email">
70
- <label for="honeybadger_feedback_email"><%= I18n.t('honeybadger.feedback.labels.email', :default => 'Your email address') %></label><br>
71
- <input type="email" name="email" id="honeybadger_feedback_email" size="60">
72
- </p>
73
-
74
- <p class="honeybadger-feedback-comment">
75
- <label for="honeybadger_feedback_comment"><%= I18n.t('honeybadger.feedback.labels.comment', :default => 'Comment (required)') %></label><br>
76
- <textarea name="comment" id="honeybadger_feedback_comment" cols="50" rows="6" required></textarea>
77
- </p>
78
-
79
- <p class="honeybadger-feedback-submit">
80
- <input type="submit" id="honeybadger_feedback_submit" value="<%= I18n.t('honeybadger.feedback.submit', :default => 'Send') %>">
81
- </p>
82
- </form>
83
-
84
- <p><a id="honeybadger_feedback_link" href="https://www.honeybadger.io/" target="_blank" title="Exception, uptime, and performance monitoring for Ruby.">Powered by Honeybadger</a></p>
1
+ <style>
2
+ #honeybadger_feedback_form *, #honeybadger_feedback_form *:before, #honeybadger_feedback_form *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
3
+ #honeybadger_feedback_form h2 { font-size: 110%; line-height: 1.5em; }
4
+ #honeybadger_feedback_form label { font-weight: bold; }
5
+ #honeybadger_feedback_name, #honeybadger_feedback_email, #honeybadger_feedback_comment { width: 100%; padding: 0.5em; }
6
+ #honeybadger_feedback_comment { height: 10em; }
7
+ #honeybadger_feedback_form .honeybadger-feedback-phone { display: none; }
8
+ #honeybadger_feedback_link { font-size: 90%; }
9
+ </style>
10
+
11
+ <script>
12
+ function honeybadgerFeedbackResponse(data) {
13
+ if (data['result'] == 'OK') {
14
+ var form = document.getElementById('honeybadger_feedback_form');
15
+ var success = document.getElementById('honeybadger_feedback_success');
16
+
17
+ form.style.display = 'none';
18
+ success.style.display = 'block';
19
+ } else {
20
+ var message;
21
+
22
+ if (data['error']) {
23
+ message = data['error'];
24
+ } else {
25
+ message = 'An unknown error occurred. Please try again.';
26
+ }
27
+
28
+ alert(message);
29
+ }
30
+ }
31
+
32
+ function sendHoneybadgerFeedback() {
33
+ try {
34
+ var script = document.createElement('script');
35
+ var form = document.getElementById('honeybadger_feedback_form');
36
+ script.src = '<%= action %>?format=js&token=<%= error_id %>&name=' + encodeURIComponent(form.name.value) + '&email=' + encodeURIComponent(form.email.value) + '&comment=' + encodeURIComponent(form.comment.value);
37
+ form.appendChild(script);
38
+ return false;
39
+ } catch(e) {
40
+ if (window.console) {
41
+ console.log('Error caught while processing Honeybadger feedback form: ' + e);
42
+ console.log('Submitting form normally...');
43
+ }
44
+ return true;
45
+ }
46
+ }
47
+ </script>
48
+
49
+ <div id="honeybadger_feedback_success" style="display:none;">
50
+ <p><strong><%= I18n.t('honeybadger.feedback.thanks', :default => 'Thanks for the feedback!') %></strong></p>
51
+ </div>
52
+
53
+ <form action="<%= action %>" method="POST" id="honeybadger_feedback_form" onsubmit="return sendHoneybadgerFeedback();">
54
+ <input type="hidden" name="token" id="honeybadger_feedback_token" value="<%= error_id %>">
55
+
56
+ <h2><%= I18n.t('honeybadger.feedback.heading', :default => 'Care to help us fix this?') %></h2>
57
+ <p><%= I18n.t('honeybadger.feedback.explanation', :default => 'Any information you can provide will help our technical team get to the bottom of this issue.') %></p>
58
+
59
+ <p class="honeybadger-feedback-name">
60
+ <label for="honeybadger_feedback_name"><%= I18n.t('honeybadger.feedback.labels.name', :default => 'Your name') %></label><br>
61
+ <input type="text" name="name" id="honeybadger_feedback_name" size="60">
62
+ </p>
63
+
64
+ <p class="honeybadger-feedback-phone">
65
+ <label for="honeybadger_feedback_phone"><%= I18n.t('honeybadger.feedback.labels.phone', :default => 'Your phone number') %></label><br>
66
+ <input type="text" name="phone" id="honeybadger_feedback_phone" size="60">
67
+ </p>
68
+
69
+ <p class="honeybadger-feedback-email">
70
+ <label for="honeybadger_feedback_email"><%= I18n.t('honeybadger.feedback.labels.email', :default => 'Your email address') %></label><br>
71
+ <input type="email" name="email" id="honeybadger_feedback_email" size="60">
72
+ </p>
73
+
74
+ <p class="honeybadger-feedback-comment">
75
+ <label for="honeybadger_feedback_comment"><%= I18n.t('honeybadger.feedback.labels.comment', :default => 'Comment (required)') %></label><br>
76
+ <textarea name="comment" id="honeybadger_feedback_comment" cols="50" rows="6" required></textarea>
77
+ </p>
78
+
79
+ <p class="honeybadger-feedback-submit">
80
+ <input type="submit" id="honeybadger_feedback_submit" value="<%= I18n.t('honeybadger.feedback.submit', :default => 'Send') %>">
81
+ </p>
82
+ </form>
83
+
84
+ <p><a id="honeybadger_feedback_link" href="https://www.honeybadger.io/" target="_blank" title="Exception, uptime, and performance monitoring for Ruby.">Powered by Honeybadger</a></p>
@@ -1,92 +1,92 @@
1
- require 'forwardable'
2
- require 'net/http'
3
- require 'json'
4
- require 'zlib'
5
- require 'openssl'
6
-
7
- require 'honeybadger/version'
8
- require 'honeybadger/logging'
9
-
10
- module Honeybadger
11
- module Util
12
- class HTTP
13
- extend Forwardable
14
-
15
- include Honeybadger::Logging::Helper
16
-
17
- HEADERS = {
18
- 'Content-type'.freeze => 'application/json'.freeze,
19
- 'Content-Encoding'.freeze => 'deflate'.freeze,
20
- 'Accept'.freeze => 'text/json, application/json'.freeze,
21
- 'User-Agent'.freeze => "HB-Ruby #{VERSION}; #{RUBY_VERSION}; #{RUBY_PLATFORM}".freeze
22
- }.freeze
23
-
24
- ERRORS = [Timeout::Error,
25
- Errno::EINVAL,
26
- Errno::ECONNRESET,
27
- Errno::ECONNREFUSED,
28
- Errno::ENETUNREACH,
29
- EOFError,
30
- Net::HTTPBadResponse,
31
- Net::HTTPHeaderSyntaxError,
32
- Net::ProtocolError,
33
- OpenSSL::SSL::SSLError,
34
- SocketError].freeze
35
-
36
- def initialize(config)
37
- @config = config
38
- end
39
-
40
- def get(endpoint)
41
- response = http_connection.get(endpoint)
42
- debug { sprintf("http method=GET path=%s code=%d", endpoint.dump, response.code) }
43
- response
44
- end
45
-
46
- def post(endpoint, payload, headers = nil)
47
- response = http_connection.post(endpoint, compress(payload.to_json), http_headers(headers))
48
- debug { sprintf("http method=POST path=%s code=%d", endpoint.dump, response.code) }
49
- response
50
- end
51
-
52
- private
53
-
54
- attr_reader :config
55
-
56
- def http_connection
57
- setup_http_connection
58
- end
59
-
60
- def http_headers(headers = nil)
61
- {}.tap do |hash|
62
- hash.merge!(HEADERS)
63
- hash.merge!({'X-API-Key' => config[:api_key].to_s})
64
- hash.merge!(headers) if headers
65
- end
66
- end
67
-
68
- def setup_http_connection
69
- http_class = Net::HTTP::Proxy(config[:'connection.proxy_host'], config[:'connection.proxy_port'], config[:'connection.proxy_user'], config[:'connection.proxy_pass'])
70
- http = http_class.new(config[:'connection.host'], config.connection_port)
71
-
72
- http.read_timeout = config[:'connection.http_read_timeout']
73
- http.open_timeout = config[:'connection.http_open_timeout']
74
-
75
- if config[:'connection.secure']
76
- http.use_ssl = true
77
-
78
- http.ca_file = config.ca_bundle_path
79
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
80
- else
81
- http.use_ssl = false
82
- end
83
-
84
- http
85
- end
86
-
87
- def compress(string, level = Zlib::DEFAULT_COMPRESSION)
88
- Zlib::Deflate.deflate(string, level)
89
- end
90
- end
91
- end
92
- end
1
+ require 'forwardable'
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'zlib'
5
+ require 'openssl'
6
+
7
+ require 'honeybadger/version'
8
+ require 'honeybadger/logging'
9
+
10
+ module Honeybadger
11
+ module Util
12
+ class HTTP
13
+ extend Forwardable
14
+
15
+ include Honeybadger::Logging::Helper
16
+
17
+ HEADERS = {
18
+ 'Content-type'.freeze => 'application/json'.freeze,
19
+ 'Content-Encoding'.freeze => 'deflate'.freeze,
20
+ 'Accept'.freeze => 'text/json, application/json'.freeze,
21
+ 'User-Agent'.freeze => "HB-Ruby #{VERSION}; #{RUBY_VERSION}; #{RUBY_PLATFORM}".freeze
22
+ }.freeze
23
+
24
+ ERRORS = [Timeout::Error,
25
+ Errno::EINVAL,
26
+ Errno::ECONNRESET,
27
+ Errno::ECONNREFUSED,
28
+ Errno::ENETUNREACH,
29
+ EOFError,
30
+ Net::HTTPBadResponse,
31
+ Net::HTTPHeaderSyntaxError,
32
+ Net::ProtocolError,
33
+ OpenSSL::SSL::SSLError,
34
+ SocketError].freeze
35
+
36
+ def initialize(config)
37
+ @config = config
38
+ end
39
+
40
+ def get(endpoint)
41
+ response = http_connection.get(endpoint)
42
+ debug { sprintf("http method=GET path=%s code=%d", endpoint.dump, response.code) }
43
+ response
44
+ end
45
+
46
+ def post(endpoint, payload, headers = nil)
47
+ response = http_connection.post(endpoint, compress(payload.to_json), http_headers(headers))
48
+ debug { sprintf("http method=POST path=%s code=%d", endpoint.dump, response.code) }
49
+ response
50
+ end
51
+
52
+ private
53
+
54
+ attr_reader :config
55
+
56
+ def http_connection
57
+ setup_http_connection
58
+ end
59
+
60
+ def http_headers(headers = nil)
61
+ {}.tap do |hash|
62
+ hash.merge!(HEADERS)
63
+ hash.merge!({'X-API-Key' => config[:api_key].to_s})
64
+ hash.merge!(headers) if headers
65
+ end
66
+ end
67
+
68
+ def setup_http_connection
69
+ http_class = Net::HTTP::Proxy(config[:'connection.proxy_host'], config[:'connection.proxy_port'], config[:'connection.proxy_user'], config[:'connection.proxy_pass'])
70
+ http = http_class.new(config[:'connection.host'], config.connection_port)
71
+
72
+ http.read_timeout = config[:'connection.http_read_timeout']
73
+ http.open_timeout = config[:'connection.http_open_timeout']
74
+
75
+ if config[:'connection.secure']
76
+ http.use_ssl = true
77
+
78
+ http.ca_file = config.ca_bundle_path
79
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
80
+ else
81
+ http.use_ssl = false
82
+ end
83
+
84
+ http
85
+ end
86
+
87
+ def compress(string, level = Zlib::DEFAULT_COMPRESSION)
88
+ Zlib::Deflate.deflate(string, level)
89
+ end
90
+ end
91
+ end
92
+ end
@@ -1,32 +1,32 @@
1
- module Honeybadger
2
- module Util
3
- class Lambda
4
- AWS_ENV_MAP = {
5
- "_HANDLER" => "handler",
6
- "AWS_REGION" => "region",
7
- "AWS_EXECUTION_ENV" => "runtime",
8
- "AWS_LAMBDA_FUNCTION_NAME" => "function",
9
- "AWS_LAMBDA_FUNCTION_MEMORY_SIZE" => "memory",
10
- "AWS_LAMBDA_FUNCTION_VERSION" => "version",
11
- "AWS_LAMBDA_LOG_GROUP_NAME" => "log_group",
12
- "AWS_LAMBDA_LOG_STREAM_NAME" => "log_name"
13
- }.freeze
14
-
15
- class << self
16
- def lambda_execution?
17
- !!ENV["AWS_LAMBDA_FUNCTION_NAME"]
18
- end
19
-
20
- def normalized_data
21
- AWS_ENV_MAP.each_with_object({}) do |(k, v), memo|
22
- memo[v] = ENV[k] if ENV[k]
23
- end
24
- end
25
-
26
- def trace_id
27
- ENV["_X_AMZN_TRACE_ID"]
28
- end
29
- end
30
- end
31
- end
32
- end
1
+ module Honeybadger
2
+ module Util
3
+ class Lambda
4
+ AWS_ENV_MAP = {
5
+ "_HANDLER" => "handler",
6
+ "AWS_REGION" => "region",
7
+ "AWS_EXECUTION_ENV" => "runtime",
8
+ "AWS_LAMBDA_FUNCTION_NAME" => "function",
9
+ "AWS_LAMBDA_FUNCTION_MEMORY_SIZE" => "memory",
10
+ "AWS_LAMBDA_FUNCTION_VERSION" => "version",
11
+ "AWS_LAMBDA_LOG_GROUP_NAME" => "log_group",
12
+ "AWS_LAMBDA_LOG_STREAM_NAME" => "log_name"
13
+ }.freeze
14
+
15
+ class << self
16
+ def lambda_execution?
17
+ !!ENV["AWS_LAMBDA_FUNCTION_NAME"]
18
+ end
19
+
20
+ def normalized_data
21
+ AWS_ENV_MAP.each_with_object({}) do |(k, v), memo|
22
+ memo[v] = ENV[k] if ENV[k]
23
+ end
24
+ end
25
+
26
+ def trace_id
27
+ ENV["_X_AMZN_TRACE_ID"]
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,73 +1,73 @@
1
- require 'set'
2
-
3
- module Honeybadger
4
- module Util
5
- # Constructs a request hash from a Rack::Request matching the /v1/notices
6
- # API specification.
7
- module RequestHash
8
- HTTP_HEADER_PREFIX = 'HTTP_'.freeze
9
-
10
- CGI_WHITELIST = %w(
11
- AUTH_TYPE
12
- CONTENT_LENGTH
13
- CONTENT_TYPE
14
- GATEWAY_INTERFACE
15
- HTTPS
16
- REMOTE_ADDR
17
- REMOTE_HOST
18
- REMOTE_IDENT
19
- REMOTE_USER
20
- REQUEST_METHOD
21
- SERVER_NAME
22
- SERVER_PORT
23
- SERVER_PROTOCOL
24
- SERVER_SOFTWARE
25
- ).freeze
26
-
27
- def self.from_env(env)
28
- return {} unless defined?(::Rack::Request)
29
- return {} unless env
30
-
31
- hash, request = {}, ::Rack::Request.new(env.dup)
32
-
33
- hash[:url] = extract_url(request)
34
- hash[:params] = extract_params(request)
35
- hash[:component] = hash[:params]['controller']
36
- hash[:action] = hash[:params]['action']
37
- hash[:session] = extract_session(request)
38
- hash[:cgi_data] = extract_cgi_data(request)
39
-
40
- hash
41
- end
42
-
43
- def self.extract_url(request)
44
- request.env['honeybadger.request.url'] || request.url
45
- rescue => e
46
- "Failed to access URL -- #{e}"
47
- end
48
-
49
- def self.extract_params(request)
50
- (request.env['action_dispatch.request.parameters'] || request.params).to_hash || {}
51
- rescue => e
52
- { error: "Failed to access params -- #{e}" }
53
- end
54
-
55
- def self.extract_session(request)
56
- request.session.to_hash
57
- rescue => e
58
- # Rails raises ArgumentError when `config.secret_token` is missing, and
59
- # ActionDispatch::Session::SessionRestoreError when the session can't be
60
- # restored.
61
- { error: "Failed to access session data -- #{e}" }
62
- end
63
-
64
- def self.extract_cgi_data(request)
65
- request.env.each_with_object({}) do |(k,v), env|
66
- next unless k.is_a?(String)
67
- next unless k.start_with?(HTTP_HEADER_PREFIX) || CGI_WHITELIST.include?(k)
68
- env[k] = v
69
- end
70
- end
71
- end
72
- end
73
- end
1
+ require 'set'
2
+
3
+ module Honeybadger
4
+ module Util
5
+ # Constructs a request hash from a Rack::Request matching the /v1/notices
6
+ # API specification.
7
+ module RequestHash
8
+ HTTP_HEADER_PREFIX = 'HTTP_'.freeze
9
+
10
+ CGI_WHITELIST = %w(
11
+ AUTH_TYPE
12
+ CONTENT_LENGTH
13
+ CONTENT_TYPE
14
+ GATEWAY_INTERFACE
15
+ HTTPS
16
+ REMOTE_ADDR
17
+ REMOTE_HOST
18
+ REMOTE_IDENT
19
+ REMOTE_USER
20
+ REQUEST_METHOD
21
+ SERVER_NAME
22
+ SERVER_PORT
23
+ SERVER_PROTOCOL
24
+ SERVER_SOFTWARE
25
+ ).freeze
26
+
27
+ def self.from_env(env)
28
+ return {} unless defined?(::Rack::Request)
29
+ return {} unless env
30
+
31
+ hash, request = {}, ::Rack::Request.new(env.dup)
32
+
33
+ hash[:url] = extract_url(request)
34
+ hash[:params] = extract_params(request)
35
+ hash[:component] = hash[:params]['controller']
36
+ hash[:action] = hash[:params]['action']
37
+ hash[:session] = extract_session(request)
38
+ hash[:cgi_data] = extract_cgi_data(request)
39
+
40
+ hash
41
+ end
42
+
43
+ def self.extract_url(request)
44
+ request.env['honeybadger.request.url'] || request.url
45
+ rescue => e
46
+ "Failed to access URL -- #{e}"
47
+ end
48
+
49
+ def self.extract_params(request)
50
+ (request.env['action_dispatch.request.parameters'] || request.params).to_hash || {}
51
+ rescue => e
52
+ { error: "Failed to access params -- #{e}" }
53
+ end
54
+
55
+ def self.extract_session(request)
56
+ request.session.to_hash
57
+ rescue => e
58
+ # Rails raises ArgumentError when `config.secret_token` is missing, and
59
+ # ActionDispatch::Session::SessionRestoreError when the session can't be
60
+ # restored.
61
+ { error: "Failed to access session data -- #{e}" }
62
+ end
63
+
64
+ def self.extract_cgi_data(request)
65
+ request.env.each_with_object({}) do |(k,v), env|
66
+ next unless k.is_a?(String)
67
+ next unless k.start_with?(HTTP_HEADER_PREFIX) || CGI_WHITELIST.include?(k)
68
+ env[k] = v
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end