failbot 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d710f1c5942b7b228fb70cebf33d7bfbcc5f3bbf
4
- data.tar.gz: 0ab8adce8358db0ebd4745a12b497c33eabf9b3e
3
+ metadata.gz: f19849426b1157a44d160d8830f3b27c6cb92474
4
+ data.tar.gz: 60928e3d00961f66514689a7741da5900a7daee4
5
5
  SHA512:
6
- metadata.gz: db3c86ddad1bf8070b74ad1d5081b568164be50cc527272177f41515a75c106ded9634fb71f7a2cff69a20c042873b37cfae760122d635f94975b81578d2a26a
7
- data.tar.gz: 5f94db35e19e527a0c0d3f6f9b86f1318d08d30dd7eab9d8463986f467671009159501a5fac999deeec9eecfe716ac1253fa9a1cdb7a70491519b583e34a5fd9
6
+ metadata.gz: a55e4e99838d44b9be16c0e8e47edb6da56f8a09d54dca7a2179d9bf70cc971c77d2b17ef4182454931f1800359106a599b667676919f9c6cc29602d1ac8c520
7
+ data.tar.gz: ae4c150bd8b7711b30deceac609149e9d2e7b16930c8377a6534907e6985ffcabef0d50807954f31ae772d6ccac38728557df8516fb0a3c75c53a700667c273e
@@ -343,6 +343,10 @@ module Failbot
343
343
  'created_at' => Time.now.utc.iso8601(6)
344
344
  }
345
345
 
346
+ if cause = pretty_print_cause(e)
347
+ res['cause'] = cause
348
+ end
349
+
346
350
  if exception_context = (e.respond_to?(:failbot_context) && e.failbot_context)
347
351
  res.merge!(exception_context)
348
352
  end
@@ -378,6 +382,73 @@ module Failbot
378
382
  Failbot.instrumenter.instrument(name, payload) if Failbot.instrumenter
379
383
  end
380
384
 
385
+ # We'll include this many nested Exception#cause objects in the needle
386
+ # context. We limit the number of objects to prevent excessive recursion and
387
+ # large needle contexts.
388
+ MAXIMUM_CAUSE_DEPTH = 2
389
+
390
+ # Pretty-print Exception#cause (and nested causes) for inclusion in needle
391
+ # context
392
+ #
393
+ # e - The Exception object whose #cause should be printed
394
+ # depth - Integer number of Exception#cause objects to descend into.
395
+ #
396
+ # Returns a String.
397
+ def pretty_print_cause(e, depth = MAXIMUM_CAUSE_DEPTH)
398
+ return unless depth > 0
399
+
400
+ causes = []
401
+
402
+ current = e
403
+ depth.times do
404
+ pretty_cause = pretty_print_one_cause(current)
405
+ break unless pretty_cause
406
+ causes << pretty_cause
407
+ current = current.cause
408
+ end
409
+
410
+ return if causes.empty?
411
+
412
+ result = causes.join("\n\nCAUSED BY:\n\n")
413
+
414
+ if current.respond_to?(:cause) && current.cause
415
+ result << "\n\nFurther #cause backtraces were omitted\n"
416
+ end
417
+
418
+ result
419
+ end
420
+
421
+ # Pretty-print a single Exception#cause
422
+ #
423
+ # e - The Exception object whose #cause should be printed
424
+ #
425
+ # Returns a String.
426
+ def pretty_print_one_cause(e)
427
+ return unless e.respond_to?(:cause)
428
+ cause = e.cause
429
+ return unless cause
430
+
431
+ result = "#{cause.class.name}: #{cause.message}\n"
432
+
433
+ # Find where the cause's backtrace differs from the child exception's.
434
+ backtrace = Array(e.backtrace)
435
+ cause_backtrace = Array(cause.backtrace)
436
+ index = -1
437
+ while backtrace[index] == cause_backtrace[index]
438
+ index -= 1
439
+ end
440
+
441
+ # Add on a few common frames to make it clear where the backtraces line up.
442
+ index += 3
443
+ index = -1 if index >= 0
444
+
445
+ cause_backtrace[0..index].each do |line|
446
+ result << "\t#{line}\n"
447
+ end
448
+
449
+ result
450
+ end
451
+
381
452
  extend self
382
453
 
383
454
  # If the library was lazy loaded due to failbot/exit_hook.rb and a delayed
@@ -1,3 +1,3 @@
1
1
  module Failbot
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.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.3.0
4
+ version: 1.4.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-09-11 00:00:00.000000000 Z
13
+ date: 2015-12-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: yajl-ruby
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
107
  version: 1.3.6
108
108
  requirements: []
109
109
  rubyforge_project:
110
- rubygems_version: 2.2.2
110
+ rubygems_version: 2.2.3
111
111
  signing_key:
112
112
  specification_version: 4
113
113
  summary: Deliver exceptions to Haystack