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 +4 -4
- data/Gemfile.lock +7 -7
- data/README.md +3 -0
- data/lib/exception_handling/methods.rb +10 -0
- data/lib/exception_handling/sensu.rb +26 -0
- data/lib/exception_handling/version.rb +1 -1
- data/lib/exception_handling.rb +34 -1
- data/test/test_helper.rb +28 -0
- data/test/unit/exception_handling/exception_description_test.rb +9 -0
- data/test/unit/exception_handling/sensu_test.rb +50 -0
- data/test/unit/exception_handling_test.rb +69 -31
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de8ca845a02baac1f3d11d1c1e3ff419698ed239
|
4
|
+
data.tar.gz: 57789ae890ab9c9cc2c8f1bce947ca7b58660082
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
+
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
data/lib/exception_handling.rb
CHANGED
@@ -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
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
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
|
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:
|
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:
|