exception_notification_sns 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cab2c46a81a544c5f04974a5b6dd9ef965058f9e
4
+ data.tar.gz: a9c7beea1c3aa16ea4794d129dba552c76b55039
5
+ SHA512:
6
+ metadata.gz: 9e976e3ee6a743ef3fc702d09659c4ccdd9a236713c86cc5d8834955e01c6de239e726439d624f9953d45b8ee65481ebf027b3bf28b1f4b878d2e8b6893c0cff
7
+ data.tar.gz: eb61eaff462f908c3d3549cd741fec506801d55b1bed22328e81711b9bcc3363e5bbb1f0a2d7cbf132b6e72384959f82ffa32bd1d722ec0d93f93e0f97a480b2
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ .idea
2
+ *.iml
3
+ *.gem
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ exception_notification_sns
data/.ruby-verson ADDED
@@ -0,0 +1 @@
1
+ 2.2.0
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,159 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ exception_notification_sns (0.1.0)
5
+ aws-sdk-v1 (>= 1, < 3)
6
+ exception_notification (= 4.2.1)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionmailer (4.2.7.1)
12
+ actionpack (= 4.2.7.1)
13
+ actionview (= 4.2.7.1)
14
+ activejob (= 4.2.7.1)
15
+ mail (~> 2.5, >= 2.5.4)
16
+ rails-dom-testing (~> 1.0, >= 1.0.5)
17
+ actionpack (4.2.7.1)
18
+ actionview (= 4.2.7.1)
19
+ activesupport (= 4.2.7.1)
20
+ rack (~> 1.6)
21
+ rack-test (~> 0.6.2)
22
+ rails-dom-testing (~> 1.0, >= 1.0.5)
23
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
24
+ actionview (4.2.7.1)
25
+ activesupport (= 4.2.7.1)
26
+ builder (~> 3.1)
27
+ erubis (~> 2.7.0)
28
+ rails-dom-testing (~> 1.0, >= 1.0.5)
29
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
30
+ activejob (4.2.7.1)
31
+ activesupport (= 4.2.7.1)
32
+ globalid (>= 0.3.0)
33
+ activemodel (4.2.7.1)
34
+ activesupport (= 4.2.7.1)
35
+ builder (~> 3.1)
36
+ activerecord (4.2.7.1)
37
+ activemodel (= 4.2.7.1)
38
+ activesupport (= 4.2.7.1)
39
+ arel (~> 6.0)
40
+ activesupport (4.2.7.1)
41
+ i18n (~> 0.7)
42
+ json (~> 1.7, >= 1.7.7)
43
+ minitest (~> 5.1)
44
+ thread_safe (~> 0.3, >= 0.3.4)
45
+ tzinfo (~> 1.1)
46
+ arel (6.0.4)
47
+ aws-sdk-v1 (1.66.0)
48
+ json (~> 1.4)
49
+ nokogiri (>= 1.4.4)
50
+ builder (3.2.3)
51
+ concurrent-ruby (1.0.4)
52
+ coveralls (0.8.18)
53
+ json (>= 1.8, < 3)
54
+ simplecov (~> 0.12.0)
55
+ term-ansicolor (~> 1.3)
56
+ thor (~> 0.19.1)
57
+ tins (~> 1.6)
58
+ diff-lcs (1.2.5)
59
+ docile (1.1.5)
60
+ erubis (2.7.0)
61
+ exception_notification (4.2.1)
62
+ actionmailer (>= 4.0, < 6)
63
+ activesupport (>= 4.0, < 6)
64
+ factory_girl (4.5.0)
65
+ activesupport (>= 3.0.0)
66
+ globalid (0.3.7)
67
+ activesupport (>= 4.1.0)
68
+ i18n (0.7.0)
69
+ json (1.8.6)
70
+ loofah (2.0.3)
71
+ nokogiri (>= 1.5.9)
72
+ mail (2.6.4)
73
+ mime-types (>= 1.16, < 4)
74
+ metaclass (0.0.4)
75
+ mime-types (3.1)
76
+ mime-types-data (~> 3.2015)
77
+ mime-types-data (3.2016.0521)
78
+ mini_portile2 (2.1.0)
79
+ minitest (5.10.1)
80
+ mocha (0.13.3)
81
+ metaclass (~> 0.0.1)
82
+ nokogiri (1.7.0.1)
83
+ mini_portile2 (~> 2.1.0)
84
+ rack (1.6.5)
85
+ rack-test (0.6.3)
86
+ rack (>= 1.0)
87
+ rails (4.2.7.1)
88
+ actionmailer (= 4.2.7.1)
89
+ actionpack (= 4.2.7.1)
90
+ actionview (= 4.2.7.1)
91
+ activejob (= 4.2.7.1)
92
+ activemodel (= 4.2.7.1)
93
+ activerecord (= 4.2.7.1)
94
+ activesupport (= 4.2.7.1)
95
+ bundler (>= 1.3.0, < 2.0)
96
+ railties (= 4.2.7.1)
97
+ sprockets-rails
98
+ rails-deprecated_sanitizer (1.0.3)
99
+ activesupport (>= 4.2.0.alpha)
100
+ rails-dom-testing (1.0.8)
101
+ activesupport (>= 4.2.0.beta, < 5.0)
102
+ nokogiri (~> 1.6)
103
+ rails-deprecated_sanitizer (>= 1.0.1)
104
+ rails-html-sanitizer (1.0.3)
105
+ loofah (~> 2.0)
106
+ railties (4.2.7.1)
107
+ actionpack (= 4.2.7.1)
108
+ activesupport (= 4.2.7.1)
109
+ rake (>= 0.8.7)
110
+ thor (>= 0.18.1, < 2.0)
111
+ rake (12.0.0)
112
+ rspec (3.4.0)
113
+ rspec-core (~> 3.4.0)
114
+ rspec-expectations (~> 3.4.0)
115
+ rspec-mocks (~> 3.4.0)
116
+ rspec-core (3.4.4)
117
+ rspec-support (~> 3.4.0)
118
+ rspec-expectations (3.4.0)
119
+ diff-lcs (>= 1.2.0, < 2.0)
120
+ rspec-support (~> 3.4.0)
121
+ rspec-mocks (3.4.1)
122
+ diff-lcs (>= 1.2.0, < 2.0)
123
+ rspec-support (~> 3.4.0)
124
+ rspec-support (3.4.1)
125
+ simplecov (0.12.0)
126
+ docile (~> 1.1.0)
127
+ json (>= 1.8, < 3)
128
+ simplecov-html (~> 0.10.0)
129
+ simplecov-html (0.10.0)
130
+ sprockets (3.7.1)
131
+ concurrent-ruby (~> 1.0)
132
+ rack (> 1, < 3)
133
+ sprockets-rails (3.2.0)
134
+ actionpack (>= 4.0)
135
+ activesupport (>= 4.0)
136
+ sprockets (>= 3.0.0)
137
+ sqlite3 (1.3.10)
138
+ term-ansicolor (1.4.0)
139
+ tins (~> 1.0)
140
+ thor (0.19.4)
141
+ thread_safe (0.3.5)
142
+ tins (1.13.0)
143
+ tzinfo (1.2.2)
144
+ thread_safe (~> 0.1)
145
+
146
+ PLATFORMS
147
+ ruby
148
+
149
+ DEPENDENCIES
150
+ coveralls (~> 0.8.2)
151
+ exception_notification_sns!
152
+ factory_girl (= 4.5)
153
+ mocha (~> 0.13.0)
154
+ rails (>= 4.0.0, < 6)
155
+ rspec (= 3.4.0)
156
+ sqlite3 (= 1.3.10)
157
+
158
+ BUNDLED WITH
159
+ 1.13.7
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2017 Ingemark
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # Exception notification SNS
2
+
3
+ Exception notification extension for Amazon SNS
4
+
5
+ ## Requirements
6
+
7
+ * Ruby 2.2 or greater
8
+ * Rails 4.0 or greater
9
+
10
+ ## Getting Started
11
+
12
+ Add the following line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'exception_notification_sns'
16
+ ```
17
+
18
+ ### Rails
19
+
20
+ ExceptionNotificationSNS adds sns notifier for exception_notification gem. It is used as a rack middleware, or in the environment you want it to run. In most cases you would want ExceptionNotificationSNS to run on production. Thus, you can make it work by putting the following lines in your `config/environments/production.rb`:
21
+
22
+ ```ruby
23
+ Rails.application.config.middleware.use ExceptionNotification::Rack,
24
+ sns: {
25
+ access_key_id: 'AWS_ACCESS_KEY_ID',
26
+ secret_access_key: 'AWS_SECRET_ACCESS_KEY',
27
+ region: 'AWS_REGION',
28
+ topic_arn: 'AWS_SNS_TOPIC_ARN'
29
+ }
30
+ ```
31
+
32
+ #### Options
33
+
34
+ ##### access_key_id
35
+
36
+ *String, required*
37
+
38
+ AWS access key ID
39
+
40
+ ##### secret_access_key
41
+
42
+ *String, required*
43
+
44
+ AWS secret access key
45
+
46
+ ##### region
47
+
48
+ *String, required*
49
+
50
+ AWS region
51
+
52
+ ##### topic_arn
53
+
54
+ *String, required*
55
+
56
+ AWS SNS topic arn
57
+
58
+ ## Extras
59
+
60
+ For more information about exception_notification gem on which this gem was built, visit [exception_notification](https://github.com/smartinez87/exception_notification).
61
+
62
+ ## License
63
+
64
+ Copyright (c) 2017 Matej Minažek, released under the [MIT license](http://www.opensource.org/licenses/MIT).
65
+
66
+
67
+
68
+
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ Bundler::GemHelper.install_tasks
4
+ require 'appraisal'
5
+
6
+ require 'rake/testtask'
7
+
8
+ task :default => [:test]
9
+
10
+ Rake::TestTask.new(:test) do |t|
11
+ t.libs << 'lib'
12
+ t.libs << 'test'
13
+ t.pattern = 'test/**/*_test.rb'
14
+ t.verbose = true
15
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: UTF-8
2
+ Gem::Specification.new do |s|
3
+ s.platform = Gem::Platform::RUBY
4
+ s.name = 'exception_notification_sns'
5
+ s.version = '0.1.0'
6
+ s.summary = 'exception_notification extension for aws sns v1'
7
+ s.description = 'exception_notification_sns gem is used for sending application extensions to aws sns. It extends exception_notification gem, uses aws-sdk-v1 gem to push exception notificatons to amazon sns'
8
+ s.required_ruby_version = '>= 2.2.0'
9
+
10
+ s.author = 'Matej Minažek'
11
+ s.email = 'matej.minazek@ingemark.com'
12
+ s.homepage = 'http://www.ingemark.com'
13
+ s.license = 'MIT'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.require_path = 'lib'
17
+
18
+ s.add_runtime_dependency 'exception_notification', '4.2.1'
19
+ s.add_runtime_dependency 'aws-sdk-v1', '>= 1', '< 3'
20
+
21
+ s.add_development_dependency 'rails', '>= 4.0.0', '< 6'
22
+ s.add_development_dependency 'factory_girl', '4.5'
23
+ s.add_development_dependency 'rspec', '3.4.0'
24
+ s.add_development_dependency 'mocha', '~> 0.13.0'
25
+ s.add_development_dependency 'sqlite3', '1.3.10'
26
+ s.add_development_dependency 'coveralls', '~> 0.8.2'
27
+
28
+ end
@@ -0,0 +1,4 @@
1
+ require 'exception_notification'
2
+ require 'aws-sdk-v1'
3
+
4
+ require 'exception_notifier/sns_notifier'
@@ -0,0 +1,65 @@
1
+ require 'action_dispatch'
2
+
3
+ module ExceptionNotifier
4
+ class SnsNotifier < BaseNotifier
5
+ include ExceptionNotifier::BacktraceCleaner
6
+
7
+ def initialize(options)
8
+ super
9
+ access_key_id = options.delete(:access_key_id)
10
+ secret_access_key = options.delete(:secret_access_key)
11
+ region = options.delete(:region)
12
+
13
+ @sns_client = AWS::SNS::Client.new(access_key_id: access_key_id, secret_access_key: secret_access_key, region: region)
14
+ @topic_arn = options.delete(:topic_arn)
15
+ end
16
+
17
+ def call(exception, options={})
18
+ return if !active?
19
+
20
+
21
+
22
+ env = options[:env] || {}
23
+ puts env.inspect
24
+ @options = options
25
+ @exception = exception
26
+ @backtrace = exception.backtrace ? clean_backtrace(exception) : []
27
+ @kontroller = env['action_controller.instance']
28
+ @request = ::ActionDispatch::Request.new(env) if @kontroller
29
+
30
+ @sns_client.publish({
31
+ subject: compose_subject,
32
+ topic_arn: @topic_arn,
33
+ message: compose_message.to_json
34
+ })
35
+ end
36
+
37
+ def active?
38
+ !@sns_client.nil? && !@topic_arn.nil?
39
+ end
40
+
41
+ def compose_subject
42
+ subject = @kontroller ? "#{@kontroller.controller_name}##{@kontroller.action_name}" : ''
43
+ subject << " (#{@exception.class})"
44
+ subject << " #{@exception.message.inspect}"
45
+ end
46
+
47
+ def compose_message
48
+ message = {
49
+ backtrace: @backtrace.to_s,
50
+ default: compose_subject
51
+ }
52
+
53
+ message[:request] = {
54
+ url: @request.url,
55
+ method: @request.request_method,
56
+ remote_ip: @request.remote_ip,
57
+ parameters: @request.filtered_parameters.inspect
58
+ } if @request
59
+
60
+ message
61
+ end
62
+ end
63
+ end
64
+
65
+
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+ require 'exception_notifier/sns_notifier'
3
+
4
+ describe 'SNS Notifer' do
5
+
6
+ before(:each) do
7
+ options = {
8
+ access_key_id: 'acces_key',
9
+ secret_access_key: 'secret_access_key',
10
+ topic_arn: 'topic_arn',
11
+ region: 'region'
12
+ }
13
+
14
+ @sns = ExceptionNotifier::SnsNotifier.new(options)
15
+ end
16
+
17
+ it 'should send exception notification to sns if properly configured' do
18
+ @sns.call(fake_exception)
19
+ end
20
+
21
+ it 'should compose correct message and subject' do
22
+ @sns.call(fake_exception)
23
+
24
+ composed_subject = @sns.compose_subject
25
+ expect(composed_subject).to eq fake_subject
26
+
27
+ composed_message = @sns.compose_message
28
+ expect(composed_message[:backtrace]).not_to be_nil
29
+ expect(composed_message[:default]).not_to be_nil
30
+ end
31
+
32
+ private
33
+
34
+ def fake_message
35
+ {
36
+ backtrace: fake_exception.backtrace.to_s,
37
+ default: fake_subject
38
+ }
39
+ end
40
+
41
+ def fake_subject
42
+ subject = " (#{fake_exception.class})"
43
+ subject << " #{fake_exception.message.inspect}"
44
+ end
45
+
46
+
47
+ def fake_exception
48
+ begin
49
+ 5/0
50
+ rescue Exception => e
51
+ e
52
+ end
53
+ end
54
+
55
+
56
+ end
@@ -0,0 +1,18 @@
1
+ # load lib in LOAD_PATH
2
+ $:<< File.join(File.dirname(__FILE__), '../lib')
3
+
4
+ # Configure Rails Environment
5
+ ENV["RAILS_ENV"] = "test"
6
+
7
+ require 'rspec'
8
+
9
+ require 'mocha/api'
10
+ require 'aws/sns'
11
+ require 'exception_notifier'
12
+
13
+ ExceptionNotifier.testing_mode!
14
+ AWS.stub!
15
+
16
+ RSpec.configure do |config|
17
+
18
+ end
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: exception_notification_sns
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Matej Minažek
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: exception_notification
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk-v1
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '3'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '1'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '3'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rails
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 4.0.0
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '6'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 4.0.0
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '6'
67
+ - !ruby/object:Gem::Dependency
68
+ name: factory_girl
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - '='
72
+ - !ruby/object:Gem::Version
73
+ version: '4.5'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '='
79
+ - !ruby/object:Gem::Version
80
+ version: '4.5'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - '='
86
+ - !ruby/object:Gem::Version
87
+ version: 3.4.0
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '='
93
+ - !ruby/object:Gem::Version
94
+ version: 3.4.0
95
+ - !ruby/object:Gem::Dependency
96
+ name: mocha
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 0.13.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: 0.13.0
109
+ - !ruby/object:Gem::Dependency
110
+ name: sqlite3
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - '='
114
+ - !ruby/object:Gem::Version
115
+ version: 1.3.10
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - '='
121
+ - !ruby/object:Gem::Version
122
+ version: 1.3.10
123
+ - !ruby/object:Gem::Dependency
124
+ name: coveralls
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: 0.8.2
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: 0.8.2
137
+ description: exception_notification_sns gem is used for sending application extensions
138
+ to aws sns. It extends exception_notification gem, uses aws-sdk-v1 gem to push exception
139
+ notificatons to amazon sns
140
+ email: matej.minazek@ingemark.com
141
+ executables: []
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - ".gitignore"
146
+ - ".ruby-gemset"
147
+ - ".ruby-verson"
148
+ - Gemfile
149
+ - Gemfile.lock
150
+ - LICENSE
151
+ - README.md
152
+ - Rakefile
153
+ - exception_notification_sns.gemspec
154
+ - lib/exception_notification_sns.rb
155
+ - lib/exception_notifier/sns_notifier.rb
156
+ - spec/exception_notifer/sns_notifer_spec.rb
157
+ - spec/spec_helper.rb
158
+ homepage: http://www.ingemark.com
159
+ licenses:
160
+ - MIT
161
+ metadata: {}
162
+ post_install_message:
163
+ rdoc_options: []
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: 2.2.0
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 2.4.8
179
+ signing_key:
180
+ specification_version: 4
181
+ summary: exception_notification extension for aws sns v1
182
+ test_files: []