exception_handling 1.0.5 → 1.1.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: 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: