exception_handling 1.0.5 → 1.1.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: ba22d4665ccfec321d2f12cd3dbf965aa470ce0f
4
- data.tar.gz: 59d92855f4428b245ccafdab96ae2690a8df4be4
3
+ metadata.gz: de8ca845a02baac1f3d11d1c1e3ff419698ed239
4
+ data.tar.gz: 57789ae890ab9c9cc2c8f1bce947ca7b58660082
5
5
  SHA512:
6
- metadata.gz: ac10edb35d2d2e7ee25fe17aa7df89137452a368c5e95b599ed62a780c02bdf9e5cd9a0bbc334d7cb410dc8320ae8aaf3afbfc995ad489018a1b9e016c9b2a1c
7
- data.tar.gz: 85c0eb7988d28e5fcbcb6f2e8e66f9a13b25dc8a174f4dff6ab6b414df4eb5dfbe3dfa2a01abaaf8a7e5f05d2416d4f1fc62024e4afc9d58f3340c4f771af94b
6
+ metadata.gz: 5450a2e7753d4e34927f25d0fe21929b5e1670eba9e88e8a2add7e6b8f6fc027343b6771e192875e657e7b7734c9bfd20d3551f123293c52ce5355974a1fa844
7
+ data.tar.gz: dd96400045fec01c3ce1c38d2e8d9f2a800ecfd67713fe23fc3c9d1053dffe6956e2735dece5befe8e0c1dfde66a2e7814e3a80847b3d416868d4fb823f0cd14
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- exception_handling (1.0.4)
4
+ exception_handling (1.1.0)
5
5
  actionmailer (~> 3.2)
6
6
  actionpack (~> 3.2)
7
7
  activesupport (~> 3.2)
@@ -45,14 +45,14 @@ GEM
45
45
  builder (3.0.4)
46
46
  coderay (1.1.0)
47
47
  erubis (2.7.0)
48
- eventmachine (1.0.3)
48
+ eventmachine (1.0.8)
49
49
  hike (1.2.3)
50
50
  hobo_support (2.0.1)
51
51
  rails (~> 3.2.0)
52
52
  i18n (0.6.11)
53
53
  invoca-utils (0.0.2)
54
54
  journey (1.0.4)
55
- json (1.8.1)
55
+ json (1.8.3)
56
56
  mail (2.5.4)
57
57
  mime-types (~> 1.16)
58
58
  treetop (~> 1.4.8)
@@ -67,12 +67,12 @@ GEM
67
67
  coderay (~> 1.1.0)
68
68
  method_source (~> 0.8.1)
69
69
  slop (~> 3.4)
70
- rack (1.4.5)
70
+ rack (1.4.7)
71
71
  rack-cache (1.2)
72
72
  rack (>= 0.4)
73
73
  rack-ssl (1.3.4)
74
74
  rack
75
- rack-test (0.6.2)
75
+ rack-test (0.6.3)
76
76
  rack (>= 1.0)
77
77
  rails (3.2.19)
78
78
  actionmailer (= 3.2.19)
@@ -101,7 +101,7 @@ GEM
101
101
  activesupport (>= 3.0.0)
102
102
  bourne (~> 1.3)
103
103
  slop (3.6.0)
104
- sprockets (2.2.2)
104
+ sprockets (2.2.3)
105
105
  hike (~> 1.2)
106
106
  multi_json (~> 1.0)
107
107
  rack (~> 1.0)
@@ -111,7 +111,7 @@ GEM
111
111
  treetop (1.4.15)
112
112
  polyglot
113
113
  polyglot (>= 0.3.1)
114
- tzinfo (0.3.41)
114
+ tzinfo (0.3.45)
115
115
 
116
116
  PLATFORMS
117
117
  ruby
data/README.md CHANGED
@@ -36,6 +36,9 @@ For example:
36
36
  ExceptionHandling.email_environment = Rails.env
37
37
  ExceptionHandling.eventmachine_safe = false
38
38
  ExceptionHandling.eventmachine_synchrony = false
39
+ ExceptionHandling.sensu_host = "127.0.0.1"
40
+ ExceptionHandling.sensu_port = 3030
41
+ ExceptionHandling.sensu_prefix = ""
39
42
 
40
43
 
41
44
  ## Usage
@@ -47,6 +47,16 @@ module ExceptionHandling
47
47
  end
48
48
  end
49
49
 
50
+ def alert_warning(*args)
51
+ ExceptionHandling.alert_warning(*args)
52
+ end
53
+
54
+ def ensure_alert(*args)
55
+ ExceptionHandling.ensure_alert(*args) do
56
+ yield
57
+ end
58
+ end
59
+
50
60
  # Store aside the current controller when included
51
61
  LONG_REQUEST_SECONDS = (defined?(Rails) && Rails.env == 'test' ? 300 : 30)
52
62
  def set_current_controller
@@ -0,0 +1,26 @@
1
+ require "socket"
2
+
3
+ module ExceptionHandling
4
+ module Sensu
5
+ LEVELS = {
6
+ warning: 1,
7
+ critical: 2
8
+ }
9
+
10
+ class << self
11
+ def generate_event(name, message, level = :warning)
12
+ status = LEVELS[level] or raise "Invalid alert level #{level}"
13
+
14
+ event = {name: ExceptionHandling.sensu_prefix.to_s + name, output: message, status: status}
15
+
16
+ send_event(event)
17
+ end
18
+
19
+ def send_event(event)
20
+ Socket.tcp(ExceptionHandling.sensu_host, ExceptionHandling.sensu_port) do |sock|
21
+ sock.send(event.to_json, 0)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module ExceptionHandling
2
- VERSION = "1.0.5"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -5,6 +5,7 @@ require 'active_support/core_ext/hash'
5
5
  require 'invoca/utils'
6
6
 
7
7
  require "exception_handling/mailer"
8
+ require "exception_handling/sensu"
8
9
  require "exception_handling/methods"
9
10
  require "exception_handling/log_stub_error"
10
11
  require "exception_handling/exception_description"
@@ -108,12 +109,18 @@ EOF
108
109
  attr_accessor :custom_data_hook
109
110
  attr_accessor :post_log_error_hook
110
111
  attr_accessor :stub_handler
112
+ attr_accessor :sensu_host
113
+ attr_accessor :sensu_port
114
+ attr_accessor :sensu_prefix
111
115
 
112
116
  @filter_list_filename = "./config/exception_filters.yml"
113
117
  @mailer_send_enabled = true
114
118
  @email_environment = ""
115
119
  @eventmachine_safe = false
116
120
  @eventmachine_synchrony = false
121
+ @sensu_host = "127.0.0.1"
122
+ @sensu_port = 3030
123
+ @sensu_prefix = ""
117
124
 
118
125
  # set this for operation within an eventmachine reactor
119
126
  def eventmachine_safe=(bool)
@@ -302,6 +309,25 @@ EOF
302
309
  end
303
310
  end
304
311
 
312
+ def alert_warning(exception_or_string, alert_name, exception_context)
313
+ ex = make_exception(exception_or_string)
314
+ log_error(ex, exception_context)
315
+ begin
316
+ ExceptionHandling::Sensu.generate_event(alert_name, exception_context.to_s + "\n" + ex.message.to_s)
317
+ rescue => send_ex
318
+ log_error(send_ex, 'ExceptionHandling.alert_warning')
319
+ end
320
+ end
321
+
322
+ def ensure_alert(alert_name, exception_context)
323
+ begin
324
+ yield
325
+ rescue => ex
326
+ alert_warning(ex, alert_name, exception_context)
327
+ nil
328
+ end
329
+ end
330
+
305
331
  def set_log_error_timestamp
306
332
  ExceptionHandling.last_exception_timestamp = Time.now.to_i
307
333
  end
@@ -467,7 +493,7 @@ EOF
467
493
  end
468
494
 
469
495
  def clean_backtrace(exception)
470
- if exception.backtrace.nil?
496
+ backtrace = if exception.backtrace.nil?
471
497
  ['<no backtrace>']
472
498
  elsif exception.is_a?(ClientLoggingError)
473
499
  exception.backtrace
@@ -476,6 +502,13 @@ EOF
476
502
  else
477
503
  exception.backtrace
478
504
  end
505
+
506
+ # The rails backtrace cleaner returns an empty array for a backtrace if the exception was raised outside the app (inside a gem for instance)
507
+ if backtrace.is_a?(Array) && backtrace.empty?
508
+ exception.backtrace
509
+ else
510
+ backtrace
511
+ end
479
512
  end
480
513
 
481
514
  def clear_exception_summary
data/test/test_helper.rb CHANGED
@@ -33,8 +33,33 @@ require 'exception_handling/testing'
33
33
  def clear
34
34
  @logged = []
35
35
  end
36
+ end
37
+
38
+ class SocketStub
39
+ attr_accessor :sent, :connected
40
+
41
+ def initialize
42
+ @connected = true
43
+ clear
44
+ end
45
+
46
+ def send(message, _flags)
47
+ sent << message
48
+ end
49
+
50
+ def close
51
+ @connected = false
36
52
  end
37
53
 
54
+ def clear
55
+ @sent = []
56
+ end
57
+
58
+ def closed?
59
+ !@connceted
60
+ end
61
+ end
62
+
38
63
  ExceptionHandling.logger = LoggerStub.new
39
64
 
40
65
  def dont_stub_log_error
@@ -67,6 +92,9 @@ class ActiveSupport::TestCase
67
92
  ExceptionHandling.filter_list_filename = "./config/exception_filters.yml"
68
93
  ExceptionHandling.eventmachine_safe = false
69
94
  ExceptionHandling.eventmachine_synchrony = false
95
+ ExceptionHandling.sensu_host = "127.0.0.1"
96
+ ExceptionHandling.sensu_port = 3030
97
+ ExceptionHandling.sensu_prefix = ""
70
98
  end
71
99
 
72
100
  teardown do
@@ -65,6 +65,15 @@ module ExceptionHandling
65
65
  assert_equal expected, exception_description.exception_data
66
66
  end
67
67
 
68
+ should "match multiple email addresses" do
69
+ mobi = "ExceptionHandling::Warning: LoginAttempt::IPAddressLocked: failed login for 'mcc@mobistreak.com'"
70
+ credit = "ExceptionHandling::Warning: LoginAttempt::IPAddressLocked: failed login for 'damon@thecreditpros.com'"
71
+
72
+ exception_description = ExceptionDescription.new(:filter1, error: "ExceptionHandling::Warning: LoginAttempt::IPAddressLocked: failed login for '(mcc\@mobistreak|damon\@thecreditpros).com'" )
73
+ assert exception_description.match?(error: mobi), "does not match mobi"
74
+ assert exception_description.match?(error: credit), "does not match credit"
75
+ end
76
+
68
77
  end
69
78
 
70
79
  end
@@ -0,0 +1,50 @@
1
+ require File.expand_path('../../../test_helper', __FILE__)
2
+
3
+ module ExceptionHandling
4
+ class SensuTest < ActiveSupport::TestCase
5
+ context "#generate_event" do
6
+ should "create an event" do
7
+ mock(ExceptionHandling::Sensu).send_event({ name: "world_is_ending", output: "stick head between knees and kiss ass goodbye", status: 1 })
8
+
9
+ ExceptionHandling::Sensu.generate_event("world_is_ending", "stick head between knees and kiss ass goodbye")
10
+ end
11
+
12
+ should "add the sensu prefix" do
13
+ ExceptionHandling.sensu_prefix = "cnn_"
14
+
15
+ mock(ExceptionHandling::Sensu).send_event({ name: "cnn_world_is_ending", output: "stick head between knees and kiss ass goodbye", status: 1 })
16
+
17
+ ExceptionHandling::Sensu.generate_event("world_is_ending", "stick head between knees and kiss ass goodbye")
18
+ end
19
+
20
+ should "allow the level to be set to critical" do
21
+ mock(ExceptionHandling::Sensu).send_event({ name: "world_is_ending", output: "stick head between knees and kiss ass goodbye", status: 2 })
22
+
23
+ ExceptionHandling::Sensu.generate_event("world_is_ending", "stick head between knees and kiss ass goodbye", :critical)
24
+ end
25
+
26
+ should "error if an invalid level is supplied" do
27
+ dont_allow(ExceptionHandling::Sensu).send_event
28
+
29
+ assert_raise(RuntimeError, "Invalid alert level") do
30
+ ExceptionHandling::Sensu.generate_event("world_is_ending", "stick head between knees and kiss ass goodbye", :hair_on_fire)
31
+ end
32
+ end
33
+ end
34
+
35
+ context "#send_event" do
36
+ setup do
37
+ @event = { name: "world_is_ending", output: "stick head between knees and kiss ass goodbye", status: 1 }
38
+ @socket = SocketStub.new
39
+ end
40
+
41
+ should "send event json to sensu client" do
42
+ mock.any_instance_of(Addrinfo).connect.with_any_args { @socket }
43
+
44
+ ExceptionHandling::Sensu.send_event(@event)
45
+
46
+ assert_equal @event.to_json, @socket.sent.first
47
+ end
48
+ end
49
+ end
50
+ end
@@ -228,6 +228,29 @@ class ExceptionHandlingTest < ActiveSupport::TestCase
228
228
  end
229
229
  end
230
230
 
231
+ context "ExceptionHandling.ensure_alert" do
232
+ should "log the exception as usual and fire a sensu event" do
233
+ mock(ExceptionHandling::Sensu).generate_event("Favorite Feature", "test context\nblah")
234
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/)
235
+ ExceptionHandling.ensure_alert('Favorite Feature', 'test context') { raise ArgumentError.new("blah") }
236
+ end
237
+
238
+ should "should not send sensu event if an exception is not raised." do
239
+ dont_allow(ExceptionHandling.logger).fatal
240
+ dont_allow(ExceptionHandling::Sensu).generate_event
241
+ ExceptionHandling.ensure_alert('Ignored', 'test context') { ; }
242
+ end
243
+
244
+ should "log if the sensu event could not be sent" do
245
+ mock(ExceptionHandling::Sensu).send_event(anything) { raise "Failed to send" }
246
+ mock(ExceptionHandling.logger) do |logger|
247
+ logger.fatal(/first_test_exception/)
248
+ logger.fatal(/Failed to send/)
249
+ end
250
+ ExceptionHandling.ensure_alert("Not Used", 'test context') { raise ArgumentError.new("first_test_exception") }
251
+ end
252
+ end
253
+
231
254
  context "exception timestamp" do
232
255
  setup do
233
256
  Time.now_override = Time.parse( '1986-5-21 4:17 am UTC' )
@@ -609,37 +632,52 @@ class ExceptionHandlingTest < ActiveSupport::TestCase
609
632
  end
610
633
 
611
634
  should "return entire backtrace if cleaned is emtpy" do
612
- backtrace = ["/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/relation/finder_methods.rb:312:in `find_with_ids'",
613
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/relation/finder_methods.rb:107:in `find'",
614
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/querying.rb:5:in `__send__'",
615
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/querying.rb:5:in `find'",
616
- "/Library/Ruby/Gems/1.8/gems/shoulda-context-1.0.2/lib/shoulda/context/context.rb:398:in `call'",
617
- "/Library/Ruby/Gems/1.8/gems/shoulda-context-1.0.2/lib/shoulda/context/context.rb:398:in `test: Exception mapping should return entire backtrace if cleaned is emtpy. '",
618
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/testing/setup_and_teardown.rb:72:in `__send__'",
619
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/testing/setup_and_teardown.rb:72:in `run'",
620
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:447:in `_run__1913317170__setup__4__callbacks'",
621
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:405:in `send'",
622
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:405:in `__run_callback'",
623
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:385:in `_run_setup_callbacks'",
624
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:81:in `send'",
625
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:81:in `run_callbacks'",
626
- "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/testing/setup_and_teardown.rb:70:in `run'",
627
- "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/testsuite.rb:34:in `run'",
628
- "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/testsuite.rb:33:in `each'",
629
- "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/testsuite.rb:33:in `run'",
630
- "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/testrunnermediator.rb:46:in `old_run_suite'",
631
- "(eval):12:in `run_suite'",
632
- "/Applications/RubyMine.app/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:93:in `send'",
633
- "/Applications/RubyMine.app/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:93:in `start_mediator'",
634
- "/Applications/RubyMine.app/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:81:in `start'",
635
- "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/testrunnerutilities.rb:29:in `run'",
636
- "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/autorunner.rb:12:in `run'",
637
- "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit.rb:279",
638
- "-e:1"]
639
- ex = Exception.new
640
- ex.set_backtrace(backtrace)
641
- result = ExceptionHandling.send(:clean_backtrace, ex)
642
- assert_equal backtrace, result
635
+ begin
636
+ backtrace = ["/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/relation/finder_methods.rb:312:in `find_with_ids'",
637
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/relation/finder_methods.rb:107:in `find'",
638
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/querying.rb:5:in `__send__'",
639
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/querying.rb:5:in `find'",
640
+ "/Library/Ruby/Gems/1.8/gems/shoulda-context-1.0.2/lib/shoulda/context/context.rb:398:in `call'",
641
+ "/Library/Ruby/Gems/1.8/gems/shoulda-context-1.0.2/lib/shoulda/context/context.rb:398:in `test: Exception mapping should return entire backtrace if cleaned is emtpy. '",
642
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/testing/setup_and_teardown.rb:72:in `__send__'",
643
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/testing/setup_and_teardown.rb:72:in `run'",
644
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:447:in `_run__1913317170__setup__4__callbacks'",
645
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:405:in `send'",
646
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:405:in `__run_callback'",
647
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:385:in `_run_setup_callbacks'",
648
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:81:in `send'",
649
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/callbacks.rb:81:in `run_callbacks'",
650
+ "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activesupport/lib/active_support/testing/setup_and_teardown.rb:70:in `run'",
651
+ "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/testsuite.rb:34:in `run'",
652
+ "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/testsuite.rb:33:in `each'",
653
+ "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/testsuite.rb:33:in `run'",
654
+ "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/testrunnermediator.rb:46:in `old_run_suite'",
655
+ "(eval):12:in `run_suite'",
656
+ "/Applications/RubyMine.app/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:93:in `send'",
657
+ "/Applications/RubyMine.app/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:93:in `start_mediator'",
658
+ "/Applications/RubyMine.app/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:81:in `start'",
659
+ "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/ui/testrunnerutilities.rb:29:in `run'",
660
+ "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit/autorunner.rb:12:in `run'",
661
+ "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/test/unit.rb:279",
662
+ "-e:1"]
663
+
664
+ module ::Rails
665
+ class BacktraceCleaner
666
+ def clean(_backtrace)
667
+ []
668
+ end
669
+ end
670
+ end
671
+
672
+ mock(Rails).backtrace_cleaner { Rails::BacktraceCleaner.new }
673
+
674
+ ex = Exception.new
675
+ ex.set_backtrace(backtrace)
676
+ result = ExceptionHandling.send(:clean_backtrace, ex)
677
+ assert_equal backtrace, result
678
+ ensure
679
+ Object.send(:remove_const, :Rails)
680
+ end
643
681
  end
644
682
 
645
683
  should "clean params" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exception_handling
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colin Kelley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-26 00:00:00.000000000 Z
11
+ date: 2015-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -172,6 +172,7 @@ files:
172
172
  - lib/exception_handling/log_stub_error.rb
173
173
  - lib/exception_handling/mailer.rb
174
174
  - lib/exception_handling/methods.rb
175
+ - lib/exception_handling/sensu.rb
175
176
  - lib/exception_handling/testing.rb
176
177
  - lib/exception_handling/version.rb
177
178
  - test/test_helper.rb
@@ -180,6 +181,7 @@ files:
180
181
  - test/unit/exception_handling/log_error_stub_test.rb
181
182
  - test/unit/exception_handling/mailer_test.rb
182
183
  - test/unit/exception_handling/methods_test.rb
184
+ - test/unit/exception_handling/sensu_test.rb
183
185
  - test/unit/exception_handling_test.rb
184
186
  - views/exception_handling/mailer/escalation_notification.html.erb
185
187
  - views/exception_handling/mailer/exception_notification.html.erb
@@ -215,5 +217,6 @@ test_files:
215
217
  - test/unit/exception_handling/log_error_stub_test.rb
216
218
  - test/unit/exception_handling/mailer_test.rb
217
219
  - test/unit/exception_handling/methods_test.rb
220
+ - test/unit/exception_handling/sensu_test.rb
218
221
  - test/unit/exception_handling_test.rb
219
222
  has_rdoc: