honeybadger 2.0.0.beta.2 → 2.0.0.beta.3
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.
- checksums.yaml +4 -4
- data/lib/honeybadger/cli.rb +2 -2
- data/lib/honeybadger/config.rb +9 -0
- data/lib/honeybadger/config/defaults.rb +17 -4
- data/lib/honeybadger/config/yaml.rb +5 -4
- data/lib/honeybadger/notice.rb +18 -13
- data/lib/honeybadger/plugin.rb +2 -2
- data/lib/honeybadger/util/http.rb +1 -1
- data/lib/honeybadger/version.rb +1 -1
- data/lib/honeybadger/worker.rb +26 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a59b10cd827731513426b228e5d19a58af562ca
|
4
|
+
data.tar.gz: c9691c718cfac669916547060fe2515437ef09a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: baaa7ad6cd490e13aa917cd02c684b3c04850b81f4943c8612aabd961b321f990ade9bcc5cb9f3f879cfd7d4b6683b7d2d4798c5f0a1a43544fb3b1a2b5df89f
|
7
|
+
data.tar.gz: d91ee78cc723be8421b9c1adef00e59142558f2123f655862d070abb09f0e03aa66811094aa563d7e1b72d749ee8d27efc09c26b8cfd719012dbeb9c49020b4c
|
data/lib/honeybadger/cli.rb
CHANGED
@@ -229,8 +229,8 @@ module Honeybadger
|
|
229
229
|
say(tab_indent(hierarchy.size) << "#{key}:")
|
230
230
|
indent = tab_indent(hierarchy.size+1)
|
231
231
|
say(indent + "Description: #{Config::OPTIONS[dotted_key][:description]}")
|
232
|
-
say(indent + "Default: #{Config::OPTIONS[dotted_key][:default].
|
233
|
-
say(indent + "Current: #{value.
|
232
|
+
say(indent + "Default: #{Config::OPTIONS[dotted_key][:default].inspect}")
|
233
|
+
say(indent + "Current: #{value.inspect}")
|
234
234
|
end
|
235
235
|
end
|
236
236
|
end
|
data/lib/honeybadger/config.rb
CHANGED
@@ -178,6 +178,15 @@ module Honeybadger
|
|
178
178
|
request && request.env['action_dispatch.parameter_filter'] or []
|
179
179
|
end
|
180
180
|
|
181
|
+
def excluded_request_keys
|
182
|
+
[].tap do |keys|
|
183
|
+
keys << :session if self[:'request.disable_session']
|
184
|
+
keys << :params if self[:'request.disable_params']
|
185
|
+
keys << :cgi_data if self[:'request.disable_environment']
|
186
|
+
keys << :url if self[:'request.disable_url']
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
181
190
|
def write
|
182
191
|
path = config_path
|
183
192
|
|
@@ -5,9 +5,10 @@ module Honeybadger
|
|
5
5
|
IGNORE_DEFAULT = ['ActiveRecord::RecordNotFound',
|
6
6
|
'ActionController::RoutingError',
|
7
7
|
'ActionController::InvalidAuthenticityToken',
|
8
|
-
'CGI::Session::CookieStore::TamperedWithCookie',
|
9
8
|
'ActionController::UnknownAction',
|
9
|
+
'ActionController::UnknownFormat',
|
10
10
|
'AbstractController::ActionNotFound',
|
11
|
+
'CGI::Session::CookieStore::TamperedWithCookie',
|
11
12
|
'Mongoid::Errors::DocumentNotFound',
|
12
13
|
'Sinatra::NotFound'].map(&:freeze).freeze
|
13
14
|
|
@@ -112,9 +113,21 @@ module Honeybadger
|
|
112
113
|
description: 'A list of keys to filter when sending request data.',
|
113
114
|
default: ['password'.freeze, 'password_confirmation'.freeze].freeze
|
114
115
|
},
|
115
|
-
:'request.
|
116
|
-
description: '
|
117
|
-
default:
|
116
|
+
:'request.disable_session' => {
|
117
|
+
description: 'Prevent session from being sent with request data.',
|
118
|
+
default: false
|
119
|
+
},
|
120
|
+
:'request.disable_params' => {
|
121
|
+
description: 'Prevent params from being sent with request data.',
|
122
|
+
default: false
|
123
|
+
},
|
124
|
+
:'request.disable_environment' => {
|
125
|
+
description: 'Prevent Rack environment from being sent with request data.',
|
126
|
+
default: false
|
127
|
+
},
|
128
|
+
:'request.disable_url' => {
|
129
|
+
description: 'Prevent url from being sent with request data (Rack environment may still contain it in some cases).',
|
130
|
+
default: false
|
118
131
|
},
|
119
132
|
:'user_informer.enabled' => {
|
120
133
|
description: 'Enable the UserInformer middleware.',
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'yaml'
|
3
|
+
require 'erb'
|
3
4
|
|
4
5
|
module Honeybadger
|
5
6
|
class Config
|
6
7
|
class Yaml < ::Hash
|
7
8
|
def initialize(path, env = 'production')
|
8
|
-
@path = Pathname.new(path)
|
9
|
+
@path = path.kind_of?(Pathname) ? path : Pathname.new(path)
|
9
10
|
|
10
11
|
if !@path.exist?
|
11
12
|
raise ConfigError, "The configuration file #{@path} was not found."
|
@@ -14,9 +15,9 @@ module Honeybadger
|
|
14
15
|
elsif !@path.writable?
|
15
16
|
raise ConfigError, "The configuration file #{@path} is not writable."
|
16
17
|
else
|
17
|
-
yaml = YAML.load(@path.read)
|
18
|
-
|
19
|
-
update(dotify_keys(yaml
|
18
|
+
yaml = YAML.load(ERB.new(@path.read).result)
|
19
|
+
yaml.merge!(yaml[env]) if yaml[env].kind_of?(Hash)
|
20
|
+
update(dotify_keys(yaml))
|
20
21
|
end
|
21
22
|
|
22
23
|
rescue StandardError => e
|
data/lib/honeybadger/notice.rb
CHANGED
@@ -30,6 +30,16 @@ module Honeybadger
|
|
30
30
|
# Internal: Matches lines beginning with ./
|
31
31
|
RELATIVE_ROOT = Regexp.new('^\.\/').freeze
|
32
32
|
|
33
|
+
# Internal: default values to use for request data.
|
34
|
+
REQUEST_DEFAULTS = {
|
35
|
+
url: nil,
|
36
|
+
component: nil,
|
37
|
+
action: nil,
|
38
|
+
params: {}.freeze,
|
39
|
+
session: {}.freeze,
|
40
|
+
cgi_data: {}.freeze
|
41
|
+
}.freeze
|
42
|
+
|
33
43
|
class Notice
|
34
44
|
extend Forwardable
|
35
45
|
|
@@ -130,7 +140,7 @@ module Honeybadger
|
|
130
140
|
|
131
141
|
@sanitizer = Util::Sanitizer.new(filters: config.params_filters)
|
132
142
|
@request_sanitizer = Util::RequestSanitizer.new(@sanitizer)
|
133
|
-
@request = OpenStruct.new(construct_request_hash(config.request, opts, @request_sanitizer))
|
143
|
+
@request = OpenStruct.new(construct_request_hash(config.request, opts, @request_sanitizer, config.excluded_request_keys))
|
134
144
|
@context = construct_context_hash(opts, @sanitizer)
|
135
145
|
|
136
146
|
@stats = Util::Stats.all
|
@@ -299,21 +309,16 @@ module Honeybadger
|
|
299
309
|
].compact | BACKTRACE_FILTERS
|
300
310
|
end
|
301
311
|
|
302
|
-
def construct_request_hash(rack_request, opts, sanitizer)
|
303
|
-
defaults = {
|
304
|
-
url: opts[:url],
|
305
|
-
component: opts[:component] || opts[:controller],
|
306
|
-
action: opts[:action],
|
307
|
-
params: opts[:params] || opts[:parameters] || {},
|
308
|
-
session: opts[:session] || {},
|
309
|
-
cgi_data: opts[:cgi_data] || {}
|
310
|
-
}
|
311
|
-
|
312
|
+
def construct_request_hash(rack_request, opts, sanitizer, excluded_keys = [])
|
312
313
|
request = {}
|
313
314
|
request.merge!(Rack::RequestHash.new(rack_request)) if rack_request
|
314
315
|
|
315
|
-
|
316
|
-
|
316
|
+
request[:component] = opts[:controller] if opts.has_key?(:controller)
|
317
|
+
request[:params] = opts[:parameters] if opts.has_key?(:parameters)
|
318
|
+
|
319
|
+
REQUEST_DEFAULTS.each do |key, default|
|
320
|
+
request[key] = opts[key] if opts.has_key?(key)
|
321
|
+
request[key] = default if !request[key] || excluded_keys.include?(key)
|
317
322
|
end
|
318
323
|
|
319
324
|
request[:session] = request[:session][:data] if request[:session][:data]
|
data/lib/honeybadger/plugin.rb
CHANGED
@@ -71,7 +71,7 @@ module Honeybadger
|
|
71
71
|
def ok?(config)
|
72
72
|
@requirements.all? {|r| Execution.new(config, &r).call }
|
73
73
|
rescue => e
|
74
|
-
config.logger.error(sprintf('plugin error name=%s class=%s message=%s
|
74
|
+
config.logger.error(sprintf('plugin error name=%s class=%s message=%s at=%s', name, e.class, e.message.dump, e.backtrace.first.dump))
|
75
75
|
false
|
76
76
|
end
|
77
77
|
|
@@ -89,7 +89,7 @@ module Honeybadger
|
|
89
89
|
|
90
90
|
@loaded
|
91
91
|
rescue => e
|
92
|
-
config.logger.error(sprintf('plugin error name=%s class=%s message=%s
|
92
|
+
config.logger.error(sprintf('plugin error name=%s class=%s message=%s at=%s', name, e.class, e.message.dump, e.backtrace.first.dump))
|
93
93
|
@loaded = true
|
94
94
|
false
|
95
95
|
end
|
@@ -66,7 +66,7 @@ module Honeybadger
|
|
66
66
|
http
|
67
67
|
rescue => e
|
68
68
|
error do
|
69
|
-
sprintf('http error class=%s message=%s
|
69
|
+
sprintf('http error class=%s message=%s at=%s', e.class, e.message.dump, e.backtrace.first.dump)
|
70
70
|
end
|
71
71
|
raise e
|
72
72
|
end
|
data/lib/honeybadger/version.rb
CHANGED
data/lib/honeybadger/worker.rb
CHANGED
@@ -70,15 +70,26 @@ module Honeybadger
|
|
70
70
|
def trace(trace)
|
71
71
|
if trace.duration > config[:'traces.threshold']
|
72
72
|
debug { sprintf('worker adding trace duration=%s feature=traces id=%s', trace.duration.round(2), trace.id) }
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
traces.push(trace)
|
74
|
+
flush_traces if traces.flush?
|
75
|
+
true
|
76
76
|
else
|
77
77
|
debug { sprintf('worker discarding trace duration=%s feature=traces id=%s', trace.duration.round(2), trace.id) }
|
78
|
+
false
|
78
79
|
end
|
79
80
|
end
|
80
81
|
|
81
|
-
|
82
|
+
def timing(*args, &block)
|
83
|
+
metrics.timing(*args, &block)
|
84
|
+
flush_metrics if metrics.flush?
|
85
|
+
true
|
86
|
+
end
|
87
|
+
|
88
|
+
def increment(*args, &block)
|
89
|
+
metrics.increment(*args, &block)
|
90
|
+
flush_metrics if metrics.flush?
|
91
|
+
true
|
92
|
+
end
|
82
93
|
|
83
94
|
private
|
84
95
|
|
@@ -108,14 +119,18 @@ module Honeybadger
|
|
108
119
|
|
109
120
|
def flush_metrics
|
110
121
|
debug { 'worker flushing metrics feature=metrics' } # TODO: Include count.
|
111
|
-
|
112
|
-
|
122
|
+
mutex.synchronize do
|
123
|
+
metrics.chunk(100, &method(:push).to_proc.curry[:metrics])
|
124
|
+
init_metrics
|
125
|
+
end
|
113
126
|
end
|
114
127
|
|
115
128
|
def flush_traces
|
116
129
|
debug { sprintf('worker flushing traces feature=traces count=%d', traces.size) }
|
117
|
-
|
118
|
-
|
130
|
+
mutex.synchronize do
|
131
|
+
push(:traces, traces) unless traces.empty?
|
132
|
+
init_traces
|
133
|
+
end
|
119
134
|
end
|
120
135
|
|
121
136
|
def flush_queue
|
@@ -145,9 +160,7 @@ module Honeybadger
|
|
145
160
|
return false
|
146
161
|
end
|
147
162
|
|
148
|
-
|
149
|
-
queue[feature].push(object)
|
150
|
-
end
|
163
|
+
queue[feature].push(object)
|
151
164
|
|
152
165
|
true
|
153
166
|
end
|
@@ -157,7 +170,7 @@ module Honeybadger
|
|
157
170
|
debug { 'worker started' }
|
158
171
|
work until finish
|
159
172
|
rescue Exception => e
|
160
|
-
error(sprintf('error in worker thread (shutting down) class=%s message=%s
|
173
|
+
error(sprintf('error in worker thread (shutting down) class=%s message=%s at=%s', e.class, e.message.dump, e.backtrace.first.dump))
|
161
174
|
raise e
|
162
175
|
ensure
|
163
176
|
debug { 'stopping worker' }
|
@@ -176,7 +189,7 @@ module Honeybadger
|
|
176
189
|
|
177
190
|
sleep(0.1)
|
178
191
|
rescue StandardError => e
|
179
|
-
error(sprintf('error in worker thread class=%s message=%s
|
192
|
+
error(sprintf('error in worker thread class=%s message=%s at=%s', e.class, e.message.dump, e.backtrace.first.dump))
|
180
193
|
sleep(1)
|
181
194
|
end
|
182
195
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: honeybadger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.beta.
|
4
|
+
version: 2.0.0.beta.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Honeybadger Industries LLC
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Make managing application errors a more pleasant experience.
|
14
14
|
email:
|