failbot 1.2.0 → 1.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c43604c17fd3f70e059393df33105ff1859a525
4
- data.tar.gz: b6001b69118747ba9a4f852b8cb06411aa7ccddb
3
+ metadata.gz: d710f1c5942b7b228fb70cebf33d7bfbcc5f3bbf
4
+ data.tar.gz: 0ab8adce8358db0ebd4745a12b497c33eabf9b3e
5
5
  SHA512:
6
- metadata.gz: 74a8815c07c15e8df64e60e278140b7c85ad46f354ac514a31f5f27bbeee625f8f8abc7efdcd3c6290bcfbc86d02494e78f1d87a8b3e2281313bd75132a80263
7
- data.tar.gz: f43c79a47c6c371dd3c7c8581a13fce6dffd3b7a31c29a8e521bdcba457b15a44152b4474988b5f993a56de41dfe53e843af4a6184a48fe0f46a38c7bbc0b66d
6
+ metadata.gz: db3c86ddad1bf8070b74ad1d5081b568164be50cc527272177f41515a75c106ded9634fb71f7a2cff69a20c042873b37cfae760122d635f94975b81578d2a26a
7
+ data.tar.gz: 5f94db35e19e527a0c0d3f6f9b86f1318d08d30dd7eab9d8463986f467671009159501a5fac999deeec9eecfe716ac1253fa9a1cdb7a70491519b583e34a5fd9
@@ -148,6 +148,40 @@ module Failbot
148
148
  @before_report = nil
149
149
  end
150
150
 
151
+ # Specify a custom block for calculating rollups. It should accept:
152
+ #
153
+ # exception - The exception object
154
+ # context - The context hash
155
+ #
156
+ # The block must return a String.
157
+ #
158
+ # If a `rollup` attribute is supplied at the time of reporting, either via
159
+ # the `failbot_context` method on an exception, or passed to `Failbot.report`,
160
+ # it will be used as the rollup and this block will not be called.
161
+ def rollup(&block)
162
+ @rollup = block
163
+ end
164
+
165
+ # Default rollup for an exception. Exceptions with the same rollup are
166
+ # grouped together in Haystack. The rollup is an MD5 hash of the exception
167
+ # class and the raising file, line, and method.
168
+ DEFAULT_ROLLUP = lambda do |exception, context|
169
+ backtrace_line = Array(exception.backtrace).first || ""
170
+ # We want all exceptions from foo.html.erb:123 to be grouped together, no
171
+ # matter what wacky generated ERB method name is attached to it.
172
+ cleaned_line = backtrace_line.sub(/_erb__[_\d]+'\z/, "_erb'")
173
+
174
+ Digest::MD5.hexdigest("#{exception.class}#{cleaned_line}")
175
+ end
176
+
177
+ private_constant :DEFAULT_ROLLUP
178
+
179
+ def use_default_rollup
180
+ rollup(&DEFAULT_ROLLUP)
181
+ end
182
+
183
+ use_default_rollup
184
+
151
185
  # Public: Sends an exception to the exception tracking service along
152
186
  # with a hash of custom attributes to be included with the report. When the
153
187
  # raise_errors option is set, this method raises the exception instead of
@@ -178,6 +212,10 @@ module Failbot
178
212
  return unless @report_errors
179
213
  data = squash_contexts(context, exception_info(e), other)
180
214
 
215
+ if !data.has_key?("rollup")
216
+ data = data.merge("rollup" => @rollup.call(e, data))
217
+ end
218
+
181
219
  if @before_report
182
220
  data = squash_contexts(data, @before_report.call(e, data))
183
221
  end
@@ -293,9 +331,7 @@ module Failbot
293
331
  #
294
332
  # e - The exception object to turn into a Hash.
295
333
  #
296
- # Returns a Hash including a 'class', 'message', 'backtrace', and 'rollup'
297
- # keys. The rollup value is an MD5 hash of the exception class and the
298
- # raising file, line, and method.
334
+ # Returns a Hash including a 'class', 'message', 'backtrace' keys.
299
335
  def exception_info(e)
300
336
  backtrace = Array(e.backtrace)[0, 500]
301
337
 
@@ -304,7 +340,6 @@ module Failbot
304
340
  'message' => e.message,
305
341
  'backtrace' => backtrace.join("\n"),
306
342
  'ruby' => RUBY_DESCRIPTION,
307
- 'rollup' => rollup(e),
308
343
  'created_at' => Time.now.utc.iso8601(6)
309
344
  }
310
345
 
@@ -343,22 +378,6 @@ module Failbot
343
378
  Failbot.instrumenter.instrument(name, payload) if Failbot.instrumenter
344
379
  end
345
380
 
346
- # Generate a rollup for an exception. Exceptions with the same rollup are
347
- # grouped together in Haystack. The rollup is an MD5 hash of the exception
348
- # class and the raising file, line, and method.
349
- #
350
- # e - The exception object
351
- #
352
- # Returns a String.
353
- def rollup(e)
354
- backtrace_line = Array(e.backtrace).first || ""
355
- # We want all exceptions from foo.html.erb:123 to be grouped together, no
356
- # matter what wacky generated ERB method name is attached to it.
357
- cleaned_line = backtrace_line.sub(/_erb__[_\d]+'\z/, "_erb'")
358
-
359
- Digest::MD5.hexdigest("#{e.class}#{cleaned_line}")
360
- end
361
-
362
381
  extend self
363
382
 
364
383
  # If the library was lazy loaded due to failbot/exit_hook.rb and a delayed
@@ -54,7 +54,7 @@ module Failbot
54
54
  response = yield socket
55
55
  response
56
56
  ensure
57
- socket.close
57
+ socket.close if socket
58
58
  end
59
59
  end
60
60
  end
@@ -1,3 +1,3 @@
1
1
  module Failbot
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: failbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "@rtomayko"
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-08-19 00:00:00.000000000 Z
13
+ date: 2015-09-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: yajl-ruby