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 +4 -4
- data/CHANGELOG.md +2 -0
- data/Guardfile +3 -18
- data/README.md +15 -0
- data/adhearsion-reporter.gemspec +7 -3
- data/lib/adhearsion/reporter.rb +25 -5
- data/lib/adhearsion/reporter/email_notifier.rb +49 -0
- data/lib/adhearsion/reporter/sentry_notifier.rb +32 -0
- data/lib/adhearsion/reporter/version.rb +1 -1
- data/spec/reporter_spec.rb +146 -11
- data/spec/spec_helper.rb +1 -1
- metadata +51 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f64fe44bf22a4f443f8ea106405880fd6b8a072
|
4
|
+
data.tar.gz: a6066fc3c57366b8c92f043d108397bf34ce73a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16cde73a7ca5a67970bd2beacc160b46155d2b54a4426bf0ff16c62fc8ce28de77cd7e590c4e82f1efcc6db1855a70d465efcc064edc2185aacca98521997da2
|
7
|
+
data.tar.gz: 4f0091592f7ede2c3000e312e3d6a59cdbc7ece490a9f55eabd449ca77264ba0c7e6c83147045a91ded58930d53d5c00564c4408a52e868379acc68c637bf909
|
data/CHANGELOG.md
CHANGED
@@ -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
|
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
|
|
data/adhearsion-reporter.gemspec
CHANGED
@@ -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
|
-
|
18
|
-
|
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
|
data/lib/adhearsion/reporter.rb
CHANGED
@@ -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::
|
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
|
-
|
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
|
-
|
37
|
-
|
38
|
-
|
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
|
data/spec/reporter_spec.rb
CHANGED
@@ -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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
102
|
+
expect(NewRelic::Agent).to receive(:manual_start)
|
98
103
|
|
99
104
|
event_error = ExceptionClass.new
|
100
|
-
NewRelic::Agent.
|
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
|
data/spec/spec_helper.rb
CHANGED
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.
|
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:
|
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
|
-
|
74
|
-
|
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.
|
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:
|