adhearsion-reporter 2.1.0 → 2.2.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: 55eccb6f3f9822e1bb2fcfb3bf543dba08da7d9f
4
- data.tar.gz: 8f9a673465445f6bd37e65a694f54f298496d08c
3
+ metadata.gz: 2f64fe44bf22a4f443f8ea106405880fd6b8a072
4
+ data.tar.gz: a6066fc3c57366b8c92f043d108397bf34ce73a7
5
5
  SHA512:
6
- metadata.gz: af79d4b1a6c6664347b609e24fef1cf88d10b36bec698cdc637a1ad248bab2485bd45a2ef3a01cfb5263c6da1ebde5466e423223842bf20c8fb9f688b3b13f3e
7
- data.tar.gz: f69ff9fdfe2ba9265e42d95729ca8a9105b51380b9752bd876a93dc68196e99dd7855681da2aa9d3cb7c8c3b5628da0d8e8229ec8d78e3a876a0db7a1726a530
6
+ metadata.gz: 16cde73a7ca5a67970bd2beacc160b46155d2b54a4426bf0ff16c62fc8ce28de77cd7e590c4e82f1efcc6db1855a70d465efcc064edc2185aacca98521997da2
7
+ data.tar.gz: 4f0091592f7ede2c3000e312e3d6a59cdbc7ece490a9f55eabd449ca77264ba0c7e6c83147045a91ded58930d53d5c00564c4408a52e868379acc68c637bf909
@@ -1,4 +1,6 @@
1
1
  # develop
2
+ * New notifiers: EmailNotifier and SentryNotifier
3
+ * Allow configuring multiple notifiers as a list. The `notifier` option is deprecated in favour of `notifiers`, which can be used the same for a single notifier.
2
4
 
3
5
  # v2.1.0
4
6
  * Bugfix: record the correct environment with each notification
data/Guardfile CHANGED
@@ -1,24 +1,9 @@
1
1
  # A sample Guardfile
2
2
  # More info at https://github.com/guard/guard#readme
3
3
 
4
- guard :rspec do
4
+ guard 'rspec', cmd: 'bundle exec rspec' do
5
5
  watch(%r{^spec/.+_spec\.rb$})
6
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
- watch('spec/spec_helper.rb') { "spec" }
8
-
9
- # Rails example
10
- watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
- watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
- watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
- watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
- watch('config/routes.rb') { "spec/routing" }
15
- watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
-
17
- # Capybara features specs
18
- watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
19
-
20
- # Turnip features and steps
21
- watch(%r{^spec/acceptance/(.+)\.feature$})
22
- watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec/" }
23
8
  end
24
9
 
data/README.md CHANGED
@@ -31,6 +31,21 @@ Adhearsion.config do |config|
31
31
  end
32
32
  ```
33
33
 
34
+ Email Notifier
35
+ --------------
36
+ Email notification uses the [pony](https://github.com/benprew/pony) gem.
37
+ The `email` configuration key is passed to Pony on initialization using `Pony.options`.
38
+
39
+ To set the destination address and the sender address, for example, you can use:
40
+
41
+ ```ruby
42
+ Adhearsion::Reporter.config.email = {
43
+ via: :sendmail,
44
+ to: 'recv@domain.ext',
45
+ from: 'send@domain.ext'
46
+ }
47
+ ```
48
+
34
49
  Copyright
35
50
  ---------
36
51
 
@@ -13,9 +13,10 @@ Gem::Specification.new do |s|
13
13
  s.description = <<EOF
14
14
  Report Adhearsion application exceptions and deployments to:
15
15
 
16
- Airbrake
17
- Errbit
18
- This Adhearsion plugin requires Adhearsion 2.0 or later. For Adhearsion 1.0 try the previous version of this gem ahn_hoptoad
16
+ Airbrake / Errbit
17
+ Email
18
+ Newrelic
19
+ Sentry
19
20
  EOF
20
21
  s.files = `git ls-files`.split("\n")
21
22
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -25,6 +26,9 @@ EOF
25
26
  s.add_runtime_dependency "adhearsion", ["~> 2.0"]
26
27
  s.add_runtime_dependency "toadhopper", [">= 1.3.0"]
27
28
  s.add_runtime_dependency "newrelic_rpm", ["~> 3.6"]
29
+ s.add_runtime_dependency "pony", ["~> 1.10"]
30
+ s.add_runtime_dependency "sentry-raven", ["~> 0.15.0"]
28
31
 
29
32
  s.add_development_dependency 'guard-rspec'
33
+ s.add_development_dependency 'timecop'
30
34
  end
@@ -5,6 +5,8 @@ require 'toadhopper'
5
5
  require 'adhearsion'
6
6
  require 'adhearsion/reporter/airbrake_notifier'
7
7
  require 'adhearsion/reporter/newrelic_notifier'
8
+ require 'adhearsion/reporter/email_notifier'
9
+ require 'adhearsion/reporter/sentry_notifier'
8
10
 
9
11
  module Adhearsion
10
12
  class Reporter
@@ -18,10 +20,14 @@ module Adhearsion
18
20
  config :reporter do
19
21
  api_key nil, desc: "The Airbrake/Errbit API key"
20
22
  url "http://airbrake.io", desc: "Base URL for notification service"
23
+ app_name "Adhearsion", desc: "Application name, used for reporting"
21
24
  notifier Adhearsion::Reporter::AirbrakeNotifier,
22
- desc: "The class that will act as the notifier. Built-in classes are Adhearsion::Reporter::AirbrakeNotifier and Adhearsion::Reporter::NewrelicNotifier",
25
+ desc: "The class that will act as the notifier. Built-in classes are Adhearsion::Reporter::AirbrakeNotifier, Adhearsion::Reporter::NewrelicNotifier, and Adhearsion::Reporter::SentryNotifier. This option is deprecated; please specify in `notifiers`.",
23
26
  transform: Proc.new { |v| const_get(v.to_s) }
24
- enable true, desc: "Disables notifications. Useful for testing"
27
+ notifiers [],
28
+ desc: "Collection of classes that will act as notifiers",
29
+ transform: Proc.new { |v| v.split(',').map { |n| n.to_s.constantize } }
30
+ enable true, desc: "Whether to send notifications - set to false to disable all notifications globally (useful for testing)"
25
31
  excluded_environments [:development, :test], desc: "Skip reporting errors for the listed environments (comma delimited when set by environment variable", transform: Proc.new { |v| names = v.split(','); names = names.each.map &:to_sym }
26
32
  newrelic {
27
33
  license_key 'MYKEY', desc: "Your license key for New Relic"
@@ -30,12 +36,26 @@ module Adhearsion
30
36
  developer_mode false, desc: "More information but very high overhead in memory"
31
37
  log_level 'info', desc: "The newrelic's agent log level"
32
38
  }
39
+ email Hash.new(via: :sendmail), desc: "Used to configure the email notifier, with options accepted by the pony (https://github.com/benprew/pony) gem"
40
+ sentry {
41
+ dsn 'https://<user>:<password>@app.getsentry.com/<application>', desc: "The SENTRY_DSN, or client key that has been created in Sentry"
42
+ current_environment 'production', 'The current execution environment'
43
+ environments ['production'], 'The environments for which Sentry is active'
44
+ }
33
45
  end
34
46
 
35
47
  init :reporter do
36
- Reporter.config.notifier.init
37
- Events.register_callback(:exception) do |e, logger|
38
- Reporter.config.notifier.instance.notify e
48
+ # If a collection of multiple notifiers is not set, fall back to the individual option for BC.
49
+ # TODO: Remove the `notifier` option in v3.0
50
+ if Reporter.config.notifiers.empty?
51
+ Reporter.config.notifiers = [Reporter.config.notifier]
52
+ end
53
+
54
+ Reporter.config.notifiers.each do |notifier|
55
+ notifier.init
56
+ Events.register_callback(:exception) do |e, logger|
57
+ notifier.notify e
58
+ end
39
59
  end
40
60
  end
41
61
  end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'pony'
4
+ require 'socket'
5
+
6
+ module Adhearsion
7
+ class Reporter
8
+ class EmailNotifier
9
+ include Singleton
10
+
11
+ def init
12
+ Pony.options = Adhearsion::Reporter.config.email
13
+ end
14
+
15
+ def notify(ex)
16
+ Pony.mail({
17
+ subject: email_subject(ex),
18
+ body: exception_text(ex),
19
+ from: hostname
20
+ })
21
+ end
22
+
23
+ def self.method_missing(m, *args, &block)
24
+ instance.send m, *args, &block
25
+ end
26
+
27
+ private
28
+ def email_subject(exception)
29
+ "[#{Adhearsion::Reporter.config.app_name}-#{environment}] Exception: #{exception.class} (#{exception.message})"
30
+ end
31
+
32
+ def exception_text(exception)
33
+ backtrace = exception.backtrace || ["EMPTY BACKTRACE"]
34
+ "#{Adhearsion::Reporter.config.app_name} reported an exception at #{Time.now.to_s}" +
35
+ "\n\n#{exception.class} (#{exception.message}):\n" +
36
+ backtrace.join("\n") +
37
+ "\n\n"
38
+ end
39
+
40
+ def environment
41
+ Adhearsion.config.platform.environment.to_s.upcase
42
+ end
43
+
44
+ def hostname
45
+ Socket.gethostname
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ require 'raven'
4
+
5
+ module Adhearsion
6
+ class Reporter
7
+ class SentryNotifier
8
+ include Singleton
9
+
10
+ def init
11
+ Raven.configure do |config|
12
+ Reporter.config.sentry.each do |k,v|
13
+ config.send("#{k}=", v) unless v.nil?
14
+ end
15
+ end
16
+ end
17
+
18
+ def notify(ex)
19
+ Raven.capture_exception(ex)
20
+ rescue Exception => e
21
+ logger.error "Error posting exception to Sentry"
22
+ logger.warn "Original exception message: #{e.message}"
23
+ raise
24
+ end
25
+
26
+ def self.method_missing(m, *args, &block)
27
+ instance.send m, *args, &block
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,5 @@
1
1
  module Adhearsion
2
2
  class Reporter
3
- VERSION = '2.1.0'
3
+ VERSION = '2.2.0'
4
4
  end
5
5
  end
@@ -4,6 +4,11 @@ describe Adhearsion::Reporter do
4
4
  EventClass = Class.new
5
5
  ExceptionClass = Class.new StandardError
6
6
 
7
+ before do
8
+ Adhearsion::Reporter.config.notifier = nil
9
+ Adhearsion::Reporter.config.notifiers = []
10
+ end
11
+
7
12
  context "with a DummyNotifier" do
8
13
  class DummyNotifier
9
14
  include Singleton
@@ -28,12 +33,12 @@ describe Adhearsion::Reporter do
28
33
  end
29
34
 
30
35
  it "calls init on the notifier instance" do
31
- Adhearsion::Reporter.config.notifier.instance.initialized.should == true
36
+ expect(Adhearsion::Reporter.config.notifier.instance.initialized).to be(true)
32
37
  end
33
38
 
34
39
  it "logs an exception event" do
35
40
  sleep 0.25
36
- Adhearsion::Reporter.config.notifier.instance.notified.class.should == ExceptionClass
41
+ expect(Adhearsion::Reporter.config.notifier.instance.notified.class).to eq(ExceptionClass)
37
42
  end
38
43
  end
39
44
 
@@ -43,16 +48,16 @@ describe Adhearsion::Reporter do
43
48
  end
44
49
 
45
50
  it "should initialize correctly" do
46
- Toadhopper.should_receive(:new).with(Adhearsion::Reporter.config.api_key, notify_host: Adhearsion::Reporter.config.url)
51
+ expect(Toadhopper).to receive(:new).with(Adhearsion::Reporter.config.api_key, notify_host: Adhearsion::Reporter.config.url)
47
52
  Adhearsion::Plugin.init_plugins
48
53
  end
49
54
 
50
55
  context "exceptions" do
51
56
  let(:mock_notifier) { double 'notifier' }
52
57
  let(:event_error) { ExceptionClass.new }
53
- let(:response) { double('response').as_null_object }
58
+ let(:response) { double('response', status: '200').as_null_object }
54
59
 
55
- before { Toadhopper.should_receive(:new).at_least(:once).and_return(mock_notifier) }
60
+ before { expect(Toadhopper).to receive(:new).at_least(:once).and_return(mock_notifier) }
56
61
 
57
62
  after do
58
63
  Adhearsion::Plugin.init_plugins
@@ -60,14 +65,14 @@ describe Adhearsion::Reporter do
60
65
  end
61
66
 
62
67
  it "should notify Airbrake" do
63
- mock_notifier.should_receive(:post!).at_least(:once).with(event_error, hash_including(framework_env: :production)).and_return(response)
68
+ expect(mock_notifier).to receive(:post!).at_least(:once).with(event_error, hash_including(framework_env: :production)).and_return(response)
64
69
  end
65
70
 
66
71
  context "with an environment set" do
67
72
  before { Adhearsion.config.platform.environment = :foo }
68
73
 
69
74
  it "notifies airbrake with that environment" do
70
- mock_notifier.should_receive(:post!).at_least(:once).with(event_error, hash_including(framework_env: :foo)).and_return(response)
75
+ expect(mock_notifier).to receive(:post!).at_least(:once).with(event_error, hash_including(framework_env: :foo)).and_return(response)
71
76
  end
72
77
  end
73
78
 
@@ -77,7 +82,7 @@ describe Adhearsion::Reporter do
77
82
  Adhearsion::Plugin.init_plugins
78
83
  end
79
84
  it "should not report errors for excluded environments" do
80
- mock_notifier.should_not_receive(:post!)
85
+ expect(mock_notifier).to_not receive(:post!)
81
86
  end
82
87
  end
83
88
  end
@@ -89,18 +94,148 @@ describe Adhearsion::Reporter do
89
94
  end
90
95
 
91
96
  it "should initialize correctly" do
92
- NewRelic::Agent.should_receive(:manual_start).with(Adhearsion::Reporter.config.newrelic.to_hash)
97
+ expect(NewRelic::Agent).to receive(:manual_start).with(Adhearsion::Reporter.config.newrelic.to_hash)
93
98
  Adhearsion::Plugin.init_plugins
94
99
  end
95
100
 
96
101
  it "should notify Newrelic" do
97
- NewRelic::Agent.should_receive(:manual_start)
102
+ expect(NewRelic::Agent).to receive(:manual_start)
98
103
 
99
104
  event_error = ExceptionClass.new
100
- NewRelic::Agent.should_receive(:notice_error).at_least(:once).with(event_error)
105
+ expect(NewRelic::Agent).to receive(:notice_error).at_least(:once).with(event_error)
101
106
 
102
107
  Adhearsion::Plugin.init_plugins
103
108
  Adhearsion::Events.trigger_immediately :exception, event_error
104
109
  end
105
110
  end
111
+
112
+ context 'with an EmailNotifier' do
113
+ let(:email_options) do
114
+ {
115
+ via: :sendmail,
116
+ to: 'recv@domain.ext'
117
+ }
118
+ end
119
+
120
+ let(:time_freeze) { Time.parse("2014-07-24 17:30:00") }
121
+
122
+ let(:fake_backtrace) do
123
+ [
124
+ '1: foo',
125
+ '2: bar'
126
+ ]
127
+ end
128
+
129
+ let(:error_message) { "Something bad" }
130
+
131
+ before(:each) do
132
+ Adhearsion::Reporter.config.notifier = Adhearsion::Reporter::EmailNotifier
133
+ Adhearsion::Reporter.config.email = email_options
134
+ end
135
+
136
+ it "should initialize correctly" do
137
+ Adhearsion::Plugin.init_plugins
138
+ expect(Pony.options).to be(email_options)
139
+ end
140
+
141
+ it "should notify via email" do
142
+
143
+ event_error = ExceptionClass.new error_message
144
+ event_error.set_backtrace(fake_backtrace)
145
+
146
+ hostname = Socket.gethostname
147
+ environment = Adhearsion.config.platform.environment.to_s.upcase
148
+
149
+ Timecop.freeze(time_freeze) do
150
+ expect(Pony).to receive(:mail).at_least(:once).with({
151
+ subject: "[#{Adhearsion::Reporter.config.app_name}-#{environment}] Exception: ExceptionClass (#{error_message})",
152
+ body: "#{Adhearsion::Reporter.config.app_name} reported an exception at #{time_freeze.to_s}\n\nExceptionClass (#{error_message}):\n#{event_error.backtrace.join("\n")}\n\n",
153
+ from: hostname
154
+ })
155
+
156
+ Adhearsion::Plugin.init_plugins
157
+ Adhearsion::Events.trigger_immediately :exception, event_error
158
+ end
159
+ end
160
+ end
161
+
162
+ context "with a SentryNotifier" do
163
+ let(:sentry_options) do
164
+ {
165
+ "dsn" => 'https://123abc:def456@app.getsentry.com/98765',
166
+ "environments" => ['production', 'staging'],
167
+ "current_environment" => 'production'
168
+ }
169
+ end
170
+
171
+ before(:each) do
172
+ Adhearsion::Reporter.config.notifier = Adhearsion::Reporter::SentryNotifier
173
+ Adhearsion::Reporter.config.sentry = sentry_options
174
+ end
175
+
176
+ it "should initialize correctly" do
177
+ Adhearsion::Plugin.init_plugins
178
+
179
+ config = Raven.configuration
180
+ sentry_options.each do |k, v|
181
+ if k == "dsn" #There is no getter for this attribute, so we have to get it through it components
182
+ expect("#{config.scheme}://#{config.public_key}:#{config.secret_key}@#{config.host}/#{config.path}#{config.project_id}").to eq v
183
+ else
184
+ expect(Raven.configuration.send("#{k}")).to eq v
185
+ end
186
+ end
187
+ end
188
+
189
+ it "should notify Sentry" do
190
+ expect(Raven).to receive(:configure)
191
+ event_error = ExceptionClass.new
192
+ expect(Raven).to receive(:capture_exception).at_least(:once).with(event_error)
193
+
194
+ Adhearsion::Plugin.init_plugins
195
+ Adhearsion::Events.trigger_immediately :exception, event_error
196
+ end
197
+ end
198
+
199
+ context "with multiple notifiers" do
200
+
201
+ class BaseNotifier
202
+ include Singleton
203
+
204
+ attr_reader :initialized, :notified
205
+
206
+ def init
207
+ @initialized = true
208
+ end
209
+
210
+ def notify(ex)
211
+ @notified = ex
212
+ end
213
+
214
+ def self.method_missing(m, *args, &block)
215
+ instance.send m, *args, &block
216
+ end
217
+ end
218
+
219
+ class MockNotifier < BaseNotifier; end
220
+ class AnotherMockNotifier < BaseNotifier; end
221
+
222
+ before(:each) do
223
+ Adhearsion::Events.clear_handlers(:exception)
224
+ Adhearsion::Reporter::config.notifiers = [MockNotifier, AnotherMockNotifier]
225
+ Adhearsion::Plugin.init_plugins
226
+ Adhearsion::Events.trigger_immediately :exception, ExceptionClass.new
227
+ end
228
+
229
+ it "calls init on each of the notifier instances" do
230
+ Adhearsion::Reporter::config.notifiers.each do |notifier|
231
+ expect(notifier.instance.initialized).to be(true)
232
+ end
233
+ end
234
+
235
+ it "logs an exception in each of the registered notifiers" do
236
+ Adhearsion::Reporter::config.notifiers.each do |notifier|
237
+ expect(notifier.instance.notified.class).to eq(ExceptionClass)
238
+ end
239
+ end
240
+ end
106
241
  end
@@ -1,11 +1,11 @@
1
1
  require 'adhearsion'
2
2
  require 'adhearsion/reporter'
3
3
  require 'socket'
4
+ require 'timecop'
4
5
 
5
6
  ENV['AHN_ENV'] = 'production'
6
7
 
7
8
  RSpec.configure do |config|
8
- config.color_enabled = true
9
9
  config.tty = true
10
10
 
11
11
  config.filter_run :focus => true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adhearsion-reporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Klang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-16 00:00:00.000000000 Z
11
+ date: 2016-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: adhearsion
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pony
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.10'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sentry-raven
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.15.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.15.0
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: guard-rspec
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,12 +94,27 @@ dependencies:
66
94
  - - ">="
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: timecop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
69
111
  description: |
70
112
  Report Adhearsion application exceptions and deployments to:
71
113
 
72
- Airbrake
73
- Errbit
74
- This Adhearsion plugin requires Adhearsion 2.0 or later. For Adhearsion 1.0 try the previous version of this gem ahn_hoptoad
114
+ Airbrake / Errbit
115
+ Email
116
+ Newrelic
117
+ Sentry
75
118
  email:
76
119
  - bklang@mojolingo.com
77
120
  executables: []
@@ -91,7 +134,9 @@ files:
91
134
  - lib/adhearsion-reporter.rb
92
135
  - lib/adhearsion/reporter.rb
93
136
  - lib/adhearsion/reporter/airbrake_notifier.rb
137
+ - lib/adhearsion/reporter/email_notifier.rb
94
138
  - lib/adhearsion/reporter/newrelic_notifier.rb
139
+ - lib/adhearsion/reporter/sentry_notifier.rb
95
140
  - lib/adhearsion/reporter/version.rb
96
141
  - spec/reporter_spec.rb
97
142
  - spec/spec_helper.rb
@@ -114,11 +159,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
159
  version: '0'
115
160
  requirements: []
116
161
  rubyforge_project:
117
- rubygems_version: 2.2.1
162
+ rubygems_version: 2.4.5
118
163
  signing_key:
119
164
  specification_version: 4
120
165
  summary: Report Adhearsion application deployments and exceptions
121
166
  test_files:
122
167
  - spec/reporter_spec.rb
123
168
  - spec/spec_helper.rb
124
- has_rdoc: