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,177 +1,177 @@
1
- require 'logger'
2
- require 'singleton'
3
- require 'delegate'
4
- require 'forwardable'
5
-
6
- module Honeybadger
7
- # @api private
8
- module Logging
9
- PREFIX = '** [Honeybadger] '.freeze
10
- LOGGER_PROG = "honeybadger".freeze
11
-
12
- # Logging helper methods. Requires a Honeybadger::Config @config instance
13
- # variable to exist and/or #logger to be defined. Each method is
14
- # defined/block captured in this module rather than delegating to the
15
- # logger directly to avoid extra object allocation.
16
- module Helper
17
- private
18
- def debug(msg = nil)
19
- return true unless logger.debug?
20
- msg = yield if block_given?
21
- logger.debug(msg)
22
- end
23
- alias :d :debug
24
-
25
- def info(msg = nil)
26
- return true unless logger.info?
27
- msg = yield if block_given?
28
- logger.info(msg)
29
- end
30
-
31
- def warn(msg = nil)
32
- return true unless logger.warn?
33
- msg = yield if block_given?
34
- logger.warn(msg)
35
- end
36
-
37
- def error(msg = nil)
38
- return true unless logger.error?
39
- msg = yield if block_given?
40
- logger.error(msg)
41
- end
42
-
43
- def logger
44
- @config.logger
45
- end
46
- end
47
-
48
- class Base
49
- Logger::Severity.constants.each do |severity|
50
- define_method severity.downcase do |msg|
51
- add(Logger::Severity.const_get(severity), msg)
52
- end
53
-
54
- define_method :"#{severity.downcase}?" do
55
- true
56
- end
57
- end
58
-
59
- def add(severity, msg)
60
- raise NotImplementedError, 'must define #add on subclass.'
61
- end
62
-
63
- def level
64
- Logger::Severity::DEBUG
65
- end
66
- end
67
-
68
- class BootLogger < Base
69
- include Singleton
70
-
71
- def initialize
72
- @messages = []
73
- end
74
-
75
- def add(severity, msg)
76
- @messages << [severity, msg]
77
- end
78
-
79
- def flush(logger)
80
- @messages.each do |msg|
81
- logger.add(*msg)
82
- end
83
- @messages.clear
84
- end
85
- end
86
-
87
- class StandardLogger < Base
88
- extend Forwardable
89
-
90
- def initialize(logger = Logger.new(nil))
91
- raise ArgumentError, 'logger not specified' unless logger
92
- raise ArgumentError, 'logger must be a logger' unless logger.respond_to?(:add)
93
-
94
- @logger = logger
95
- end
96
-
97
- def add(severity, msg, progname=LOGGER_PROG)
98
- @logger.add(severity, msg, progname)
99
- end
100
-
101
- def_delegators :@logger, :level, :debug?, :info?, :warn?, :error?
102
- end
103
-
104
- class FormattedLogger < StandardLogger
105
- def add(severity, msg, progname=LOGGER_PROG)
106
- super(severity, format_message(msg), progname)
107
- end
108
-
109
- private
110
-
111
- def format_message(msg)
112
- return msg unless msg.kind_of?(String)
113
- PREFIX + msg
114
- end
115
- end
116
-
117
- class ConfigLogger < StandardLogger
118
- LOCATE_CALLER_LOCATION = Regexp.new("#{Regexp.escape(__FILE__)}").freeze
119
- CALLER_LOCATION = Regexp.new("#{Regexp.escape(File.expand_path('../../../', __FILE__))}/(.*)").freeze
120
-
121
- INFO_SUPPLEMENT = ' level=%s pid=%s'.freeze
122
- DEBUG_SUPPLEMENT = ' at=%s'.freeze
123
-
124
- def initialize(config, logger = Logger.new(nil))
125
- @config = config
126
- @tty = STDOUT.tty?
127
- @tty_level = @config.log_level(:'logging.tty_level')
128
- super(logger)
129
- end
130
-
131
- def add(severity, msg)
132
- return true if suppress_tty?(severity)
133
-
134
- # There is no debug level in Honeybadger. Debug logs will be logged at
135
- # the info level if the debug config option is on.
136
- if severity == Logger::Severity::DEBUG
137
- return true if suppress_debug?
138
- super(Logger::Severity::INFO, supplement(msg, Logger::Severity::DEBUG))
139
- else
140
- super(severity, supplement(msg, severity))
141
- end
142
- end
143
-
144
- def debug?
145
- @config.log_debug?
146
- end
147
-
148
- private
149
-
150
- def suppress_debug?
151
- !debug?
152
- end
153
-
154
- def suppress_tty?(severity)
155
- @tty && severity < @tty_level
156
- end
157
-
158
- def supplement(msg, severity)
159
- return msg unless msg.kind_of?(String)
160
-
161
- r = msg.dup
162
- r << sprintf(INFO_SUPPLEMENT, severity, Process.pid)
163
- if severity == Logger::Severity::DEBUG && l = caller_location
164
- r << sprintf(DEBUG_SUPPLEMENT, l.dump)
165
- end
166
-
167
- r
168
- end
169
-
170
- def caller_location
171
- if caller && caller.find {|l| l !~ LOCATE_CALLER_LOCATION && l =~ CALLER_LOCATION }
172
- Regexp.last_match(1)
173
- end
174
- end
175
- end
176
- end
177
- end
1
+ require 'logger'
2
+ require 'singleton'
3
+ require 'delegate'
4
+ require 'forwardable'
5
+
6
+ module Honeybadger
7
+ # @api private
8
+ module Logging
9
+ PREFIX = '** [Honeybadger] '.freeze
10
+ LOGGER_PROG = "honeybadger".freeze
11
+
12
+ # Logging helper methods. Requires a Honeybadger::Config @config instance
13
+ # variable to exist and/or #logger to be defined. Each method is
14
+ # defined/block captured in this module rather than delegating to the
15
+ # logger directly to avoid extra object allocation.
16
+ module Helper
17
+ private
18
+ def debug(msg = nil)
19
+ return true unless logger.debug?
20
+ msg = yield if block_given?
21
+ logger.debug(msg)
22
+ end
23
+ alias :d :debug
24
+
25
+ def info(msg = nil)
26
+ return true unless logger.info?
27
+ msg = yield if block_given?
28
+ logger.info(msg)
29
+ end
30
+
31
+ def warn(msg = nil)
32
+ return true unless logger.warn?
33
+ msg = yield if block_given?
34
+ logger.warn(msg)
35
+ end
36
+
37
+ def error(msg = nil)
38
+ return true unless logger.error?
39
+ msg = yield if block_given?
40
+ logger.error(msg)
41
+ end
42
+
43
+ def logger
44
+ @config.logger
45
+ end
46
+ end
47
+
48
+ class Base
49
+ Logger::Severity.constants.each do |severity|
50
+ define_method severity.downcase do |msg|
51
+ add(Logger::Severity.const_get(severity), msg)
52
+ end
53
+
54
+ define_method :"#{severity.downcase}?" do
55
+ true
56
+ end
57
+ end
58
+
59
+ def add(severity, msg)
60
+ raise NotImplementedError, 'must define #add on subclass.'
61
+ end
62
+
63
+ def level
64
+ Logger::Severity::DEBUG
65
+ end
66
+ end
67
+
68
+ class BootLogger < Base
69
+ include Singleton
70
+
71
+ def initialize
72
+ @messages = []
73
+ end
74
+
75
+ def add(severity, msg)
76
+ @messages << [severity, msg]
77
+ end
78
+
79
+ def flush(logger)
80
+ @messages.each do |msg|
81
+ logger.add(*msg)
82
+ end
83
+ @messages.clear
84
+ end
85
+ end
86
+
87
+ class StandardLogger < Base
88
+ extend Forwardable
89
+
90
+ def initialize(logger = Logger.new(nil))
91
+ raise ArgumentError, 'logger not specified' unless logger
92
+ raise ArgumentError, 'logger must be a logger' unless logger.respond_to?(:add)
93
+
94
+ @logger = logger
95
+ end
96
+
97
+ def add(severity, msg, progname=LOGGER_PROG)
98
+ @logger.add(severity, msg, progname)
99
+ end
100
+
101
+ def_delegators :@logger, :level, :debug?, :info?, :warn?, :error?
102
+ end
103
+
104
+ class FormattedLogger < StandardLogger
105
+ def add(severity, msg, progname=LOGGER_PROG)
106
+ super(severity, format_message(msg), progname)
107
+ end
108
+
109
+ private
110
+
111
+ def format_message(msg)
112
+ return msg unless msg.kind_of?(String)
113
+ PREFIX + msg
114
+ end
115
+ end
116
+
117
+ class ConfigLogger < StandardLogger
118
+ LOCATE_CALLER_LOCATION = Regexp.new("#{Regexp.escape(__FILE__)}").freeze
119
+ CALLER_LOCATION = Regexp.new("#{Regexp.escape(File.expand_path('../../../', __FILE__))}/(.*)").freeze
120
+
121
+ INFO_SUPPLEMENT = ' level=%s pid=%s'.freeze
122
+ DEBUG_SUPPLEMENT = ' at=%s'.freeze
123
+
124
+ def initialize(config, logger = Logger.new(nil))
125
+ @config = config
126
+ @tty = STDOUT.tty?
127
+ @tty_level = @config.log_level(:'logging.tty_level')
128
+ super(logger)
129
+ end
130
+
131
+ def add(severity, msg)
132
+ return true if suppress_tty?(severity)
133
+
134
+ # There is no debug level in Honeybadger. Debug logs will be logged at
135
+ # the info level if the debug config option is on.
136
+ if severity == Logger::Severity::DEBUG
137
+ return true if suppress_debug?
138
+ super(Logger::Severity::INFO, supplement(msg, Logger::Severity::DEBUG))
139
+ else
140
+ super(severity, supplement(msg, severity))
141
+ end
142
+ end
143
+
144
+ def debug?
145
+ @config.log_debug?
146
+ end
147
+
148
+ private
149
+
150
+ def suppress_debug?
151
+ !debug?
152
+ end
153
+
154
+ def suppress_tty?(severity)
155
+ @tty && severity < @tty_level
156
+ end
157
+
158
+ def supplement(msg, severity)
159
+ return msg unless msg.kind_of?(String)
160
+
161
+ r = msg.dup
162
+ r << sprintf(INFO_SUPPLEMENT, severity, Process.pid)
163
+ if severity == Logger::Severity::DEBUG && l = caller_location
164
+ r << sprintf(DEBUG_SUPPLEMENT, l.dump)
165
+ end
166
+
167
+ r
168
+ end
169
+
170
+ def caller_location
171
+ if caller && caller.find {|l| l !~ LOCATE_CALLER_LOCATION && l =~ CALLER_LOCATION }
172
+ Regexp.last_match(1)
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end