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 +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:
|