adhearsion-reporter 2.0.1 → 2.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/.rspec +3 -0
- data/.travis.yml +16 -0
- data/CHANGELOG.md +6 -0
- data/Guardfile +24 -0
- data/Rakefile +5 -0
- data/adhearsion-reporter.gemspec +4 -1
- data/lib/adhearsion/reporter.rb +32 -15
- data/lib/adhearsion/reporter/airbrake_notifier.rb +49 -0
- data/lib/adhearsion/reporter/newrelic_notifier.rb +27 -0
- data/lib/adhearsion/reporter/version.rb +3 -1
- data/spec/reporter_spec.rb +106 -0
- data/spec/spec_helper.rb +13 -0
- metadata +49 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55eccb6f3f9822e1bb2fcfb3bf543dba08da7d9f
|
4
|
+
data.tar.gz: 8f9a673465445f6bd37e65a694f54f298496d08c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af79d4b1a6c6664347b609e24fef1cf88d10b36bec698cdc637a1ad248bab2485bd45a2ef3a01cfb5263c6da1ebde5466e423223842bf20c8fb9f688b3b13f3e
|
7
|
+
data.tar.gz: f69ff9fdfe2ba9265e42d95729ca8a9105b51380b9752bd876a93dc68196e99dd7855681da2aa9d3cb7c8c3b5628da0d8e8229ec8d78e3a876a0db7a1726a530
|
data/.rspec
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 1.9.2
|
4
|
+
- 1.9.3
|
5
|
+
- 2.0.0
|
6
|
+
- 2.1.0
|
7
|
+
- jruby-19mode
|
8
|
+
- rbx-19mode
|
9
|
+
- ruby-head
|
10
|
+
matrix:
|
11
|
+
allow_failures:
|
12
|
+
- rvm: 1.9.2
|
13
|
+
- rvm: ruby-head
|
14
|
+
- rvm: rbx-19mode
|
15
|
+
notifications:
|
16
|
+
irc: "irc.freenode.org#adhearsion"
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# develop
|
2
2
|
|
3
|
+
# v2.1.0
|
4
|
+
* Bugfix: record the correct environment with each notification
|
5
|
+
* Feature: include a little more metadata with each notification
|
6
|
+
* Feature: ignore notification from configurable list of environments (default: development and test)
|
7
|
+
* Feature: include hostname and Adhearsion version in environment portion of report
|
8
|
+
|
3
9
|
# v2.0.1
|
4
10
|
* Bugfix: Adhearsion may pass a logger object with exception events
|
5
11
|
|
data/Guardfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :rspec do
|
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' }
|
23
|
+
end
|
24
|
+
|
data/Rakefile
CHANGED
data/adhearsion-reporter.gemspec
CHANGED
@@ -4,7 +4,7 @@ require "adhearsion/reporter/version"
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "adhearsion-reporter"
|
7
|
-
s.version = Adhearsion::
|
7
|
+
s.version = Adhearsion::Reporter::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Ben Klang"]
|
10
10
|
s.email = %w{bklang@mojolingo.com}
|
@@ -24,4 +24,7 @@ EOF
|
|
24
24
|
|
25
25
|
s.add_runtime_dependency "adhearsion", ["~> 2.0"]
|
26
26
|
s.add_runtime_dependency "toadhopper", [">= 1.3.0"]
|
27
|
+
s.add_runtime_dependency "newrelic_rpm", ["~> 3.6"]
|
28
|
+
|
29
|
+
s.add_development_dependency 'guard-rspec'
|
27
30
|
end
|
data/lib/adhearsion/reporter.rb
CHANGED
@@ -1,24 +1,41 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
|
2
3
|
require 'toadhopper'
|
3
4
|
|
5
|
+
require 'adhearsion'
|
6
|
+
require 'adhearsion/reporter/airbrake_notifier'
|
7
|
+
require 'adhearsion/reporter/newrelic_notifier'
|
8
|
+
|
4
9
|
module Adhearsion
|
5
|
-
class Reporter
|
6
|
-
|
7
|
-
|
8
|
-
|
10
|
+
class Reporter
|
11
|
+
class << self
|
12
|
+
def config
|
13
|
+
Plugin.config
|
14
|
+
end
|
9
15
|
end
|
10
16
|
|
11
|
-
|
12
|
-
config
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
class Plugin < Adhearsion::Plugin
|
18
|
+
config :reporter do
|
19
|
+
api_key nil, desc: "The Airbrake/Errbit API key"
|
20
|
+
url "http://airbrake.io", desc: "Base URL for notification service"
|
21
|
+
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",
|
23
|
+
transform: Proc.new { |v| const_get(v.to_s) }
|
24
|
+
enable true, desc: "Disables notifications. Useful for testing"
|
25
|
+
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
|
+
newrelic {
|
27
|
+
license_key 'MYKEY', desc: "Your license key for New Relic"
|
28
|
+
app_name "My Application", desc: "The name of your application as you'd like it show up in New Relic"
|
29
|
+
monitor_mode false, desc: "Whether the agent collects performance data about your application"
|
30
|
+
developer_mode false, desc: "More information but very high overhead in memory"
|
31
|
+
log_level 'info', desc: "The newrelic's agent log level"
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
init :reporter do
|
36
|
+
Reporter.config.notifier.init
|
37
|
+
Events.register_callback(:exception) do |e, logger|
|
38
|
+
Reporter.config.notifier.instance.notify e
|
22
39
|
end
|
23
40
|
end
|
24
41
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'toadhopper'
|
4
|
+
require 'socket'
|
5
|
+
require 'adhearsion/reporter/version'
|
6
|
+
|
7
|
+
module Adhearsion
|
8
|
+
class Reporter
|
9
|
+
class AirbrakeNotifier
|
10
|
+
include Singleton
|
11
|
+
|
12
|
+
def init
|
13
|
+
@notifier = Toadhopper.new Reporter.config.api_key, :notify_host => Reporter.config.url
|
14
|
+
@options = {
|
15
|
+
framework_env: Adhearsion.config.platform.environment,
|
16
|
+
notifier_name: 'adhearsion-reporter',
|
17
|
+
notifier_version: Adhearsion::Reporter::VERSION,
|
18
|
+
project_root: Adhearsion.config.platform[:root],
|
19
|
+
environment: {
|
20
|
+
'HOSTNAME' => Socket.gethostname,
|
21
|
+
'AHN_VERSION' => Adhearsion::VERSION
|
22
|
+
}
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def notify(ex)
|
27
|
+
return unless should_post?
|
28
|
+
response = @notifier.post!(ex, @options)
|
29
|
+
if !response.errors.empty? || !(200..299).include?(response.status.to_i)
|
30
|
+
logger.error "Error posting exception to #{Reporter.config.url}! Response code #{response.status}"
|
31
|
+
response.errors.each do |error|
|
32
|
+
logger.error "#{error}"
|
33
|
+
end
|
34
|
+
logger.warn "Original exception message: #{ex.message}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.method_missing(m, *args, &block)
|
39
|
+
instance.send m, *args, &block
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def should_post?
|
44
|
+
Reporter.config.enable &&
|
45
|
+
!Reporter.config.excluded_environments.include?(@options[:framework_env])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'new_relic/control'
|
4
|
+
|
5
|
+
module Adhearsion
|
6
|
+
class Reporter
|
7
|
+
class NewrelicNotifier
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
def init
|
11
|
+
NewRelic::Agent.manual_start(Adhearsion::Reporter.config.newrelic.to_hash)
|
12
|
+
end
|
13
|
+
|
14
|
+
def notify(ex)
|
15
|
+
NewRelic::Agent.notice_error(ex)
|
16
|
+
rescue Exception => e
|
17
|
+
logger.error "Error posting exception to Newrelic"
|
18
|
+
logger.warn "Original exception message: #{e.message}"
|
19
|
+
raise
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.method_missing(m, *args, &block)
|
23
|
+
instance.send m, *args, &block
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Adhearsion::Reporter do
|
4
|
+
EventClass = Class.new
|
5
|
+
ExceptionClass = Class.new StandardError
|
6
|
+
|
7
|
+
context "with a DummyNotifier" do
|
8
|
+
class DummyNotifier
|
9
|
+
include Singleton
|
10
|
+
attr_reader :initialized, :notified
|
11
|
+
def init
|
12
|
+
@initialized = true
|
13
|
+
end
|
14
|
+
|
15
|
+
def notify(ex)
|
16
|
+
@notified = ex
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.method_missing(m, *args, &block)
|
20
|
+
instance.send m, *args, &block
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
before(:each) do
|
25
|
+
Adhearsion::Reporter.config.notifier = DummyNotifier
|
26
|
+
Adhearsion::Plugin.init_plugins
|
27
|
+
Adhearsion::Events.trigger_immediately :exception, ExceptionClass.new
|
28
|
+
end
|
29
|
+
|
30
|
+
it "calls init on the notifier instance" do
|
31
|
+
Adhearsion::Reporter.config.notifier.instance.initialized.should == true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "logs an exception event" do
|
35
|
+
sleep 0.25
|
36
|
+
Adhearsion::Reporter.config.notifier.instance.notified.class.should == ExceptionClass
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "with a AirbrakeNotifier" do
|
41
|
+
before(:each) do
|
42
|
+
Adhearsion::Reporter.config.notifier = Adhearsion::Reporter::AirbrakeNotifier
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should initialize correctly" do
|
46
|
+
Toadhopper.should_receive(:new).with(Adhearsion::Reporter.config.api_key, notify_host: Adhearsion::Reporter.config.url)
|
47
|
+
Adhearsion::Plugin.init_plugins
|
48
|
+
end
|
49
|
+
|
50
|
+
context "exceptions" do
|
51
|
+
let(:mock_notifier) { double 'notifier' }
|
52
|
+
let(:event_error) { ExceptionClass.new }
|
53
|
+
let(:response) { double('response').as_null_object }
|
54
|
+
|
55
|
+
before { Toadhopper.should_receive(:new).at_least(:once).and_return(mock_notifier) }
|
56
|
+
|
57
|
+
after do
|
58
|
+
Adhearsion::Plugin.init_plugins
|
59
|
+
Adhearsion::Events.trigger_immediately :exception, event_error
|
60
|
+
end
|
61
|
+
|
62
|
+
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)
|
64
|
+
end
|
65
|
+
|
66
|
+
context "with an environment set" do
|
67
|
+
before { Adhearsion.config.platform.environment = :foo }
|
68
|
+
|
69
|
+
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)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "in excluded environments" do
|
75
|
+
before do
|
76
|
+
Adhearsion.config.platform.environment = :development
|
77
|
+
Adhearsion::Plugin.init_plugins
|
78
|
+
end
|
79
|
+
it "should not report errors for excluded environments" do
|
80
|
+
mock_notifier.should_not_receive(:post!)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "with a NewrelicNotifier" do
|
87
|
+
before(:each) do
|
88
|
+
Adhearsion::Reporter.config.notifier = Adhearsion::Reporter::NewrelicNotifier
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should initialize correctly" do
|
92
|
+
NewRelic::Agent.should_receive(:manual_start).with(Adhearsion::Reporter.config.newrelic.to_hash)
|
93
|
+
Adhearsion::Plugin.init_plugins
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should notify Newrelic" do
|
97
|
+
NewRelic::Agent.should_receive(:manual_start)
|
98
|
+
|
99
|
+
event_error = ExceptionClass.new
|
100
|
+
NewRelic::Agent.should_receive(:notice_error).at_least(:once).with(event_error)
|
101
|
+
|
102
|
+
Adhearsion::Plugin.init_plugins
|
103
|
+
Adhearsion::Events.trigger_immediately :exception, event_error
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'adhearsion'
|
2
|
+
require 'adhearsion/reporter'
|
3
|
+
require 'socket'
|
4
|
+
|
5
|
+
ENV['AHN_ENV'] = 'production'
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.color_enabled = true
|
9
|
+
config.tty = true
|
10
|
+
|
11
|
+
config.filter_run :focus => true
|
12
|
+
config.run_all_when_everything_filtered = true
|
13
|
+
end
|
metadata
CHANGED
@@ -1,43 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adhearsion-reporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.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: 2014-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: adhearsion
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: toadhopper
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.3.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.3.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: newrelic_rpm
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.6'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
description: |
|
42
70
|
Report Adhearsion application exceptions and deployments to:
|
43
71
|
|
@@ -50,16 +78,23 @@ executables: []
|
|
50
78
|
extensions: []
|
51
79
|
extra_rdoc_files: []
|
52
80
|
files:
|
53
|
-
- .gitignore
|
81
|
+
- ".gitignore"
|
82
|
+
- ".rspec"
|
83
|
+
- ".travis.yml"
|
54
84
|
- CHANGELOG.md
|
55
85
|
- Gemfile
|
86
|
+
- Guardfile
|
56
87
|
- LICENSE
|
57
88
|
- README.md
|
58
89
|
- Rakefile
|
59
90
|
- adhearsion-reporter.gemspec
|
60
91
|
- lib/adhearsion-reporter.rb
|
61
92
|
- lib/adhearsion/reporter.rb
|
93
|
+
- lib/adhearsion/reporter/airbrake_notifier.rb
|
94
|
+
- lib/adhearsion/reporter/newrelic_notifier.rb
|
62
95
|
- lib/adhearsion/reporter/version.rb
|
96
|
+
- spec/reporter_spec.rb
|
97
|
+
- spec/spec_helper.rb
|
63
98
|
homepage: http://github.com/adhearsion/adhearsion-reporter
|
64
99
|
licenses: []
|
65
100
|
metadata: {}
|
@@ -69,18 +104,21 @@ require_paths:
|
|
69
104
|
- lib
|
70
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
106
|
requirements:
|
72
|
-
- -
|
107
|
+
- - ">="
|
73
108
|
- !ruby/object:Gem::Version
|
74
109
|
version: '0'
|
75
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
111
|
requirements:
|
77
|
-
- -
|
112
|
+
- - ">="
|
78
113
|
- !ruby/object:Gem::Version
|
79
114
|
version: '0'
|
80
115
|
requirements: []
|
81
116
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
117
|
+
rubygems_version: 2.2.1
|
83
118
|
signing_key:
|
84
119
|
specification_version: 4
|
85
120
|
summary: Report Adhearsion application deployments and exceptions
|
86
|
-
test_files:
|
121
|
+
test_files:
|
122
|
+
- spec/reporter_spec.rb
|
123
|
+
- spec/spec_helper.rb
|
124
|
+
has_rdoc:
|