honeybadger 5.1.0 → 5.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +722 -713
  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 +55 -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 -336
  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 +416 -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/hanami.rb +19 -0
  39. data/lib/honeybadger/init/rails.rb +38 -38
  40. data/lib/honeybadger/init/rake.rb +66 -66
  41. data/lib/honeybadger/init/ruby.rb +11 -11
  42. data/lib/honeybadger/init/sinatra.rb +57 -51
  43. data/lib/honeybadger/logging.rb +177 -177
  44. data/lib/honeybadger/notice.rb +579 -579
  45. data/lib/honeybadger/plugin.rb +210 -210
  46. data/lib/honeybadger/plugins/breadcrumbs.rb +111 -111
  47. data/lib/honeybadger/plugins/delayed_job/plugin.rb +56 -56
  48. data/lib/honeybadger/plugins/delayed_job.rb +22 -22
  49. data/lib/honeybadger/plugins/faktory.rb +52 -52
  50. data/lib/honeybadger/plugins/lambda.rb +71 -71
  51. data/lib/honeybadger/plugins/local_variables.rb +44 -44
  52. data/lib/honeybadger/plugins/passenger.rb +23 -23
  53. data/lib/honeybadger/plugins/rails.rb +72 -72
  54. data/lib/honeybadger/plugins/resque.rb +72 -72
  55. data/lib/honeybadger/plugins/shoryuken.rb +52 -52
  56. data/lib/honeybadger/plugins/sidekiq.rb +71 -71
  57. data/lib/honeybadger/plugins/sucker_punch.rb +18 -18
  58. data/lib/honeybadger/plugins/thor.rb +32 -32
  59. data/lib/honeybadger/plugins/warden.rb +19 -19
  60. data/lib/honeybadger/rack/error_notifier.rb +92 -92
  61. data/lib/honeybadger/rack/user_feedback.rb +88 -88
  62. data/lib/honeybadger/rack/user_informer.rb +45 -45
  63. data/lib/honeybadger/ruby.rb +2 -2
  64. data/lib/honeybadger/singleton.rb +103 -103
  65. data/lib/honeybadger/tasks.rb +22 -22
  66. data/lib/honeybadger/templates/feedback_form.erb +84 -84
  67. data/lib/honeybadger/util/http.rb +92 -92
  68. data/lib/honeybadger/util/lambda.rb +32 -32
  69. data/lib/honeybadger/util/request_hash.rb +73 -73
  70. data/lib/honeybadger/util/request_payload.rb +41 -41
  71. data/lib/honeybadger/util/revision.rb +39 -39
  72. data/lib/honeybadger/util/sanitizer.rb +214 -214
  73. data/lib/honeybadger/util/sql.rb +34 -34
  74. data/lib/honeybadger/util/stats.rb +50 -50
  75. data/lib/honeybadger/version.rb +4 -4
  76. data/lib/honeybadger/worker.rb +253 -253
  77. data/lib/honeybadger.rb +13 -11
  78. data/resources/ca-bundle.crt +3376 -3376
  79. data/vendor/capistrano-honeybadger/lib/capistrano/honeybadger.rb +5 -5
  80. data/vendor/capistrano-honeybadger/lib/capistrano/tasks/deploy.cap +89 -89
  81. data/vendor/capistrano-honeybadger/lib/honeybadger/capistrano/legacy.rb +47 -47
  82. data/vendor/capistrano-honeybadger/lib/honeybadger/capistrano.rb +2 -2
  83. data/vendor/cli/inifile.rb +628 -628
  84. data/vendor/cli/thor/actions/create_file.rb +103 -103
  85. data/vendor/cli/thor/actions/create_link.rb +59 -59
  86. data/vendor/cli/thor/actions/directory.rb +118 -118
  87. data/vendor/cli/thor/actions/empty_directory.rb +135 -135
  88. data/vendor/cli/thor/actions/file_manipulation.rb +316 -316
  89. data/vendor/cli/thor/actions/inject_into_file.rb +107 -107
  90. data/vendor/cli/thor/actions.rb +319 -319
  91. data/vendor/cli/thor/base.rb +656 -656
  92. data/vendor/cli/thor/command.rb +133 -133
  93. data/vendor/cli/thor/core_ext/hash_with_indifferent_access.rb +77 -77
  94. data/vendor/cli/thor/core_ext/io_binary_read.rb +10 -10
  95. data/vendor/cli/thor/core_ext/ordered_hash.rb +98 -98
  96. data/vendor/cli/thor/error.rb +32 -32
  97. data/vendor/cli/thor/group.rb +281 -281
  98. data/vendor/cli/thor/invocation.rb +178 -178
  99. data/vendor/cli/thor/line_editor/basic.rb +35 -35
  100. data/vendor/cli/thor/line_editor/readline.rb +88 -88
  101. data/vendor/cli/thor/line_editor.rb +17 -17
  102. data/vendor/cli/thor/parser/argument.rb +73 -73
  103. data/vendor/cli/thor/parser/arguments.rb +175 -175
  104. data/vendor/cli/thor/parser/option.rb +125 -125
  105. data/vendor/cli/thor/parser/options.rb +218 -218
  106. data/vendor/cli/thor/parser.rb +4 -4
  107. data/vendor/cli/thor/rake_compat.rb +71 -71
  108. data/vendor/cli/thor/runner.rb +322 -322
  109. data/vendor/cli/thor/shell/basic.rb +421 -421
  110. data/vendor/cli/thor/shell/color.rb +149 -149
  111. data/vendor/cli/thor/shell/html.rb +126 -126
  112. data/vendor/cli/thor/shell.rb +81 -81
  113. data/vendor/cli/thor/util.rb +267 -267
  114. data/vendor/cli/thor/version.rb +3 -3
  115. data/vendor/cli/thor.rb +484 -484
  116. metadata +4 -3
@@ -1,103 +1,103 @@
1
- require 'forwardable'
2
- require 'honeybadger/agent'
3
-
4
- # Honeybadger's public API is made up of two parts: the {Honeybadger} singleton
5
- # module, and the {Agent} class. The singleton module delegates its methods to
6
- # a global agent instance, {Agent#instance}; this allows methods to be accessed
7
- # directly, for example when calling +Honeybadger.notify+:
8
- #
9
- # begin
10
- # raise 'testing an error report'
11
- # rescue => err
12
- # Honeybadger.notify(err)
13
- # end
14
- #
15
- # Custom agents may also be created by users who want to report to multiple
16
- # Honeybadger projects in the same app (or have fine-grained control over
17
- # configuration), however most users will use the global agent.
18
- #
19
- # @see Honeybadger::Agent
20
- module Honeybadger
21
- extend Forwardable
22
- extend self
23
-
24
- # @!macro [attach] def_delegator
25
- # @!method $2(...)
26
- # Forwards to {$1}.
27
- # @see Agent#$2
28
- def_delegator :'Honeybadger::Agent.instance', :check_in
29
- def_delegator :'Honeybadger::Agent.instance', :context
30
- def_delegator :'Honeybadger::Agent.instance', :configure
31
- def_delegator :'Honeybadger::Agent.instance', :get_context
32
- def_delegator :'Honeybadger::Agent.instance', :flush
33
- def_delegator :'Honeybadger::Agent.instance', :stop
34
- def_delegator :'Honeybadger::Agent.instance', :exception_filter
35
- def_delegator :'Honeybadger::Agent.instance', :exception_fingerprint
36
- def_delegator :'Honeybadger::Agent.instance', :backtrace_filter
37
- def_delegator :'Honeybadger::Agent.instance', :add_breadcrumb
38
- def_delegator :'Honeybadger::Agent.instance', :breadcrumbs
39
- def_delegator :'Honeybadger::Agent.instance', :clear!
40
- def_delegator :'Honeybadger::Agent.instance', :track_deployment
41
-
42
- # @!macro [attach] def_delegator
43
- # @!method $2(...)
44
- # @api private
45
- # Forwards to {$1}.
46
- # @see Agent#$2
47
- def_delegator :'Honeybadger::Agent.instance', :config
48
- def_delegator :'Honeybadger::Agent.instance', :init!
49
- def_delegator :'Honeybadger::Agent.instance', :with_rack_env
50
-
51
- # @!method notify(...)
52
- # Forwards to {Agent.instance}.
53
- # @see Agent#notify
54
- def notify(exception_or_opts, opts = {})
55
- # Note this is defined directly (instead of via forwardable) so that
56
- # generated stack traces work as expected.
57
- Agent.instance.notify(exception_or_opts, opts)
58
- end
59
-
60
- # @api private
61
- def load_plugins!
62
- Dir[File.expand_path('../plugins/*.rb', __FILE__)].each do |plugin|
63
- require plugin
64
- end
65
- Plugin.load!(self.config)
66
- end
67
-
68
- # @api private
69
- def install_at_exit_callback
70
- at_exit do
71
- if $! && !ignored_exception?($!) && Honeybadger.config[:'exceptions.notify_at_exit']
72
- Honeybadger.notify($!, component: 'at_exit', sync: true)
73
- end
74
-
75
- Honeybadger.stop if Honeybadger.config[:'send_data_at_exit']
76
- end
77
- end
78
-
79
- # @deprecated
80
- def start(config = {})
81
- raise NoMethodError, <<-WARNING
82
- `Honeybadger.start` is no longer necessary and has been removed.
83
-
84
- Use `Honeybadger.configure` to explicitly configure the agent from Ruby moving forward:
85
-
86
- Honeybadger.configure do |config|
87
- config.api_key = 'project api key'
88
- config.exceptions.ignore += [CustomError]
89
- end
90
- WARNING
91
- end
92
-
93
- private
94
- # @api private
95
- def ignored_exception?(exception)
96
- exception.is_a?(SystemExit) ||
97
- ( exception.is_a?(SignalException) &&
98
- ( (exception.respond_to?(:signm) && exception.signm == "SIGTERM") ||
99
- # jruby has a missing #signm implementation
100
- ["TERM", "SIGTERM"].include?(exception.to_s) )
101
- )
102
- end
103
- end
1
+ require 'forwardable'
2
+ require 'honeybadger/agent'
3
+
4
+ # Honeybadger's public API is made up of two parts: the {Honeybadger} singleton
5
+ # module, and the {Agent} class. The singleton module delegates its methods to
6
+ # a global agent instance, {Agent#instance}; this allows methods to be accessed
7
+ # directly, for example when calling +Honeybadger.notify+:
8
+ #
9
+ # begin
10
+ # raise 'testing an error report'
11
+ # rescue => err
12
+ # Honeybadger.notify(err)
13
+ # end
14
+ #
15
+ # Custom agents may also be created by users who want to report to multiple
16
+ # Honeybadger projects in the same app (or have fine-grained control over
17
+ # configuration), however most users will use the global agent.
18
+ #
19
+ # @see Honeybadger::Agent
20
+ module Honeybadger
21
+ extend Forwardable
22
+ extend self
23
+
24
+ # @!macro [attach] def_delegator
25
+ # @!method $2(...)
26
+ # Forwards to {$1}.
27
+ # @see Agent#$2
28
+ def_delegator :'Honeybadger::Agent.instance', :check_in
29
+ def_delegator :'Honeybadger::Agent.instance', :context
30
+ def_delegator :'Honeybadger::Agent.instance', :configure
31
+ def_delegator :'Honeybadger::Agent.instance', :get_context
32
+ def_delegator :'Honeybadger::Agent.instance', :flush
33
+ def_delegator :'Honeybadger::Agent.instance', :stop
34
+ def_delegator :'Honeybadger::Agent.instance', :exception_filter
35
+ def_delegator :'Honeybadger::Agent.instance', :exception_fingerprint
36
+ def_delegator :'Honeybadger::Agent.instance', :backtrace_filter
37
+ def_delegator :'Honeybadger::Agent.instance', :add_breadcrumb
38
+ def_delegator :'Honeybadger::Agent.instance', :breadcrumbs
39
+ def_delegator :'Honeybadger::Agent.instance', :clear!
40
+ def_delegator :'Honeybadger::Agent.instance', :track_deployment
41
+
42
+ # @!macro [attach] def_delegator
43
+ # @!method $2(...)
44
+ # @api private
45
+ # Forwards to {$1}.
46
+ # @see Agent#$2
47
+ def_delegator :'Honeybadger::Agent.instance', :config
48
+ def_delegator :'Honeybadger::Agent.instance', :init!
49
+ def_delegator :'Honeybadger::Agent.instance', :with_rack_env
50
+
51
+ # @!method notify(...)
52
+ # Forwards to {Agent.instance}.
53
+ # @see Agent#notify
54
+ def notify(exception_or_opts, opts = {})
55
+ # Note this is defined directly (instead of via forwardable) so that
56
+ # generated stack traces work as expected.
57
+ Agent.instance.notify(exception_or_opts, opts)
58
+ end
59
+
60
+ # @api private
61
+ def load_plugins!
62
+ Dir[File.expand_path('../plugins/*.rb', __FILE__)].each do |plugin|
63
+ require plugin
64
+ end
65
+ Plugin.load!(self.config)
66
+ end
67
+
68
+ # @api private
69
+ def install_at_exit_callback
70
+ at_exit do
71
+ if $! && !ignored_exception?($!) && Honeybadger.config[:'exceptions.notify_at_exit']
72
+ Honeybadger.notify($!, component: 'at_exit', sync: true)
73
+ end
74
+
75
+ Honeybadger.stop if Honeybadger.config[:'send_data_at_exit']
76
+ end
77
+ end
78
+
79
+ # @deprecated
80
+ def start(config = {})
81
+ raise NoMethodError, <<-WARNING
82
+ `Honeybadger.start` is no longer necessary and has been removed.
83
+
84
+ Use `Honeybadger.configure` to explicitly configure the agent from Ruby moving forward:
85
+
86
+ Honeybadger.configure do |config|
87
+ config.api_key = 'project api key'
88
+ config.exceptions.ignore += [CustomError]
89
+ end
90
+ WARNING
91
+ end
92
+
93
+ private
94
+ # @api private
95
+ def ignored_exception?(exception)
96
+ exception.is_a?(SystemExit) ||
97
+ ( exception.is_a?(SignalException) &&
98
+ ( (exception.respond_to?(:signm) && exception.signm == "SIGTERM") ||
99
+ # jruby has a missing #signm implementation
100
+ ["TERM", "SIGTERM"].include?(exception.to_s) )
101
+ )
102
+ end
103
+ end
@@ -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