airbrake-statsd 0.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.
- data/.gitignore +17 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/README.md +64 -0
- data/Rakefile +20 -0
- data/airbrake-statsd.gemspec +26 -0
- data/lib/airbrake-statsd/airbrake_ext.rb +21 -0
- data/lib/airbrake-statsd/configuration.rb +19 -0
- data/lib/airbrake-statsd/version.rb +5 -0
- data/lib/airbrake-statsd.rb +40 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/unit/airbrake-statsd/airbrake_ext_spec.rb +62 -0
- data/spec/unit/airbrake-statsd/configuration_spec.rb +42 -0
- data/spec/unit/airbrake-statsd_spec.rb +72 -0
- metadata +126 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Airbrake-Statsd
|
2
|
+
|
3
|
+
[](http://travis-ci.org/jimeh/airbrake-statsd)
|
4
|
+
|
5
|
+
Extends the [Airbrake][] gem to also report exceptions Esty's [Statsd][]
|
6
|
+
statistics aggregator.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
gem install airbrake-statsd
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
It's assumed you know what both Airbrake and StatsD are before attempting to
|
15
|
+
use this gem. If you don't, come back when you do know :)
|
16
|
+
|
17
|
+
All that's needed is to require `airbrake-statsd` and call
|
18
|
+
`Airbrake::Statsd.configure` and Airbrake notifications will automatically be
|
19
|
+
sent to StatsD and Airbrake.
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
require 'airbrake'
|
23
|
+
require 'airbrake-statsd'
|
24
|
+
|
25
|
+
Airbrake::Statsd.configure do |config|
|
26
|
+
config.host = 'my-statsd-server'
|
27
|
+
config.port = 8125
|
28
|
+
config.namespace = 'my_awesome_app'
|
29
|
+
end
|
30
|
+
|
31
|
+
Airbrake.notify({})
|
32
|
+
```
|
33
|
+
|
34
|
+
## Credit & Thanks
|
35
|
+
|
36
|
+
* [Global Personals][gp] for hosting a hack day.
|
37
|
+
|
38
|
+
## License and Copyright
|
39
|
+
|
40
|
+
Copyright (c) 2012 Jim Myhrberg & Global Personals, Ltd.
|
41
|
+
|
42
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
43
|
+
a copy of this software and associated documentation files (the
|
44
|
+
"Software"), to deal in the Software without restriction, including
|
45
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
46
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
47
|
+
permit persons to whom the Software is furnished to do so, subject to
|
48
|
+
the following conditions:
|
49
|
+
|
50
|
+
The above copyright notice and this permission notice shall be
|
51
|
+
included in all copies or substantial portions of the Software.
|
52
|
+
|
53
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
54
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
55
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
56
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
57
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
58
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
59
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
60
|
+
|
61
|
+
|
62
|
+
[airbrake]: http://airbrake.io/
|
63
|
+
[statsd]: https://github.com/etsy/statsd
|
64
|
+
[gp]: http://globalpersonals.co.uk/
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
|
4
|
+
# Default task
|
5
|
+
task :default => 'spec'
|
6
|
+
|
7
|
+
# Rspec
|
8
|
+
require "rspec/core/rake_task"
|
9
|
+
|
10
|
+
RSpec::Core::RakeTask.new(:spec)
|
11
|
+
|
12
|
+
namespace :spec do
|
13
|
+
RSpec::Core::RakeTask.new(:integration) do |spec|
|
14
|
+
spec.pattern = 'spec/integration/**/*_spec.rb'
|
15
|
+
end
|
16
|
+
|
17
|
+
RSpec::Core::RakeTask.new(:unit) do |spec|
|
18
|
+
spec.pattern = 'spec/unit/**/*_spec.rb'
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/airbrake-statsd/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ['Jim Myhrberg']
|
6
|
+
gem.email = ['contact@jimeh.me']
|
7
|
+
gem.description = 'Increment an exception counter in StatsD whenever ' +
|
8
|
+
'the Airbrake gem reports and exception.'
|
9
|
+
gem.summary = 'Increment an exception counter in StatsD whenever ' +
|
10
|
+
'the Airbrake gem reports and exception.'
|
11
|
+
gem.homepage = 'http://github.com/jimeh/airbrake-statsd'
|
12
|
+
|
13
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
14
|
+
gem.files = `git ls-files`.split("\n")
|
15
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
gem.name = 'airbrake-statsd'
|
17
|
+
gem.require_paths = ['lib']
|
18
|
+
gem.version = Airbrake::Statsd::VERSION
|
19
|
+
|
20
|
+
gem.add_development_dependency 'rake'
|
21
|
+
gem.add_development_dependency 'rspec'
|
22
|
+
gem.add_development_dependency 'simplecov'
|
23
|
+
|
24
|
+
gem.add_runtime_dependency 'airbrake'
|
25
|
+
gem.add_runtime_dependency 'statsd-ruby'
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Airbrake
|
2
|
+
class << self
|
3
|
+
|
4
|
+
def notify_with_statds(*args)
|
5
|
+
Airbrake::Statsd.increment
|
6
|
+
notify_without_statsd(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
alias :notify_without_statsd :notify
|
10
|
+
alias :notify :notify_with_statds
|
11
|
+
|
12
|
+
def notify_or_ignore_with_statsd(*args)
|
13
|
+
Airbrake::Statsd.increment
|
14
|
+
notify_or_ignore_without_statsd(*args)
|
15
|
+
end
|
16
|
+
|
17
|
+
alias :notify_or_ignore_without_statsd :notify_or_ignore
|
18
|
+
alias :notify_or_ignore :notify_or_ignore_with_statsd
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Airbrake
|
2
|
+
module Statsd
|
3
|
+
class Configuration
|
4
|
+
|
5
|
+
attr_accessor :namespace
|
6
|
+
|
7
|
+
def host
|
8
|
+
@host ||= 'localhost'
|
9
|
+
end
|
10
|
+
attr_writer :host
|
11
|
+
|
12
|
+
def port
|
13
|
+
@port ||= 8125
|
14
|
+
end
|
15
|
+
attr_writer :port
|
16
|
+
|
17
|
+
end # Configuration
|
18
|
+
end # Statsd
|
19
|
+
end # Airbrake
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'airbrake'
|
2
|
+
require 'statsd'
|
3
|
+
|
4
|
+
require 'airbrake-statsd/version'
|
5
|
+
require 'airbrake-statsd/configuration'
|
6
|
+
require 'airbrake-statsd/airbrake_ext'
|
7
|
+
|
8
|
+
module Airbrake
|
9
|
+
module Statsd
|
10
|
+
class << self
|
11
|
+
|
12
|
+
def configure(&block)
|
13
|
+
@configured = true
|
14
|
+
block.call(config) if block_given?
|
15
|
+
end
|
16
|
+
|
17
|
+
def configured?
|
18
|
+
!!@configured
|
19
|
+
end
|
20
|
+
|
21
|
+
def config
|
22
|
+
@config ||= Configuration.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def client
|
26
|
+
@client ||= begin
|
27
|
+
client = ::Statsd.new(config.host, config.port)
|
28
|
+
client.namespace = config.namespace if config.namespace
|
29
|
+
client
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def increment
|
34
|
+
return unless configured?
|
35
|
+
client.increment('exceptions')
|
36
|
+
end
|
37
|
+
|
38
|
+
end # << self
|
39
|
+
end # Statsd
|
40
|
+
end # Airbrake
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Airbrake do
|
4
|
+
|
5
|
+
subject { Airbrake }
|
6
|
+
|
7
|
+
it '#notify is an alias to #notify_with_statsd' do
|
8
|
+
subject.method(:notify).should == subject.method(:notify_with_statds)
|
9
|
+
end
|
10
|
+
|
11
|
+
it '#notify_or_ignore is an alias to #notify_or_ignore_with_statsd' do
|
12
|
+
subject.method(:notify_or_ignore).
|
13
|
+
should == subject.method(:notify_or_ignore_with_statsd)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#notify_without_statsd' do
|
17
|
+
it 'does not call Airbrake::Statsd.increment' do
|
18
|
+
Airbrake.stub(:send_notice).and_return(nil)
|
19
|
+
|
20
|
+
Airbrake.should_receive(:build_notice_for).with('oops', {})
|
21
|
+
Airbrake::Statsd.should_not_receive(:increment)
|
22
|
+
|
23
|
+
Airbrake.notify_without_statsd('oops', {})
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#notify' do
|
28
|
+
it 'calls Airbrake::Statsd.increment' do
|
29
|
+
Airbrake.stub(:send_notice).and_return(nil)
|
30
|
+
|
31
|
+
Airbrake.should_receive(:build_notice_for).with('oops', {})
|
32
|
+
Airbrake::Statsd.should_receive(:increment)
|
33
|
+
|
34
|
+
Airbrake.notify('oops', {})
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '#notify_or_ignore_without_statsd' do
|
39
|
+
it 'does not call Airbrake::Statsd.increment' do
|
40
|
+
Airbrake.stub(:send_notice).and_return(nil)
|
41
|
+
|
42
|
+
Airbrake.should_receive(:build_notice_for).with('oops', {}).
|
43
|
+
and_return(mock('Notice', :ignore? => false))
|
44
|
+
Airbrake::Statsd.should_not_receive(:increment)
|
45
|
+
|
46
|
+
Airbrake.notify_or_ignore_without_statsd('oops', {})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#notify_or_ignore' do
|
51
|
+
it 'calls Airbrake::Statsd.increment' do
|
52
|
+
Airbrake.stub(:send_notice).and_return(nil)
|
53
|
+
|
54
|
+
Airbrake.should_receive(:build_notice_for).with('oops', {}).
|
55
|
+
and_return(mock('Notice', :ignore? => false))
|
56
|
+
Airbrake::Statsd.should_receive(:increment)
|
57
|
+
|
58
|
+
Airbrake.notify_or_ignore('oops', {})
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Airbrake
|
4
|
+
module Statsd
|
5
|
+
describe Configuration do
|
6
|
+
|
7
|
+
describe '`host` option' do
|
8
|
+
it 'defaults to "localhost"' do
|
9
|
+
subject.host.should == 'localhost'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'can be set' do
|
13
|
+
subject.host = 'not-default.com'
|
14
|
+
subject.host.should == 'not-default.com'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '`port` option' do
|
19
|
+
it 'defaults to 8125' do
|
20
|
+
subject.port.should == 8125
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'can be set' do
|
24
|
+
subject.port = 88125
|
25
|
+
subject.port.should == 88125
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '`namespace` option' do
|
30
|
+
it 'defaults to "nil"' do
|
31
|
+
subject.namespace.should be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'can be set' do
|
35
|
+
subject.namespace = 'my_awesome_app'
|
36
|
+
subject.namespace.should == 'my_awesome_app'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Airbrake
|
4
|
+
describe Statsd do
|
5
|
+
|
6
|
+
subject { Statsd }
|
7
|
+
|
8
|
+
before do
|
9
|
+
subject.instance_variable_set('@configured', nil)
|
10
|
+
subject.instance_variable_set('@config', nil)
|
11
|
+
subject.instance_variable_set('@client', nil)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#configured?' do
|
15
|
+
context 'when #configure has been called' do
|
16
|
+
it 'returns true' do
|
17
|
+
subject.configure
|
18
|
+
subject.configured?.should be_true
|
19
|
+
end
|
20
|
+
end # configure called
|
21
|
+
|
22
|
+
context 'when #configure has not been called' do
|
23
|
+
it 'returns false' do
|
24
|
+
subject.configured?.should be_false
|
25
|
+
end
|
26
|
+
end # configure not called
|
27
|
+
end # configured?
|
28
|
+
|
29
|
+
describe '#config' do
|
30
|
+
it 'creates new Configuration instance if not set' do
|
31
|
+
subject.config.should be_a(Statsd::Configuration)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#client' do
|
36
|
+
it 'creates a new ::Statsd client instance if not set' do
|
37
|
+
subject.config.should_receive(:host).once.and_return('testhost')
|
38
|
+
subject.config.should_receive(:port).once.and_return(1234)
|
39
|
+
::Statsd.should_receive(:new).with('testhost', 1234)
|
40
|
+
subject.client
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when a namespace is set in #config instance' do
|
44
|
+
before do
|
45
|
+
subject.configure { |config| config.namespace = 'test' }
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'sets namespace on client' do
|
49
|
+
::Statsd.any_instance.should_receive(:namespace=).with('test').once
|
50
|
+
subject.client
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#increment' do
|
56
|
+
context 'when #configure has been called' do
|
57
|
+
before { subject.configure }
|
58
|
+
|
59
|
+
it 'calls #increment on #client instance' do
|
60
|
+
subject.client.should_receive(:increment).once
|
61
|
+
subject.increment
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'default bucket name used is "exceptions"' do
|
65
|
+
subject.client.should_receive(:increment).with('exceptions').once
|
66
|
+
subject.increment
|
67
|
+
end
|
68
|
+
end # configure called
|
69
|
+
end # increment
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: airbrake-statsd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jim Myhrberg
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &70264029721400 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70264029721400
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70264029719960 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70264029719960
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: simplecov
|
38
|
+
requirement: &70264029719260 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70264029719260
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: airbrake
|
49
|
+
requirement: &70264029718620 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70264029718620
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: statsd-ruby
|
60
|
+
requirement: &70264029717780 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70264029717780
|
69
|
+
description: Increment an exception counter in StatsD whenever the Airbrake gem reports
|
70
|
+
and exception.
|
71
|
+
email:
|
72
|
+
- contact@jimeh.me
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- .gitignore
|
78
|
+
- .travis.yml
|
79
|
+
- Gemfile
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- airbrake-statsd.gemspec
|
83
|
+
- lib/airbrake-statsd.rb
|
84
|
+
- lib/airbrake-statsd/airbrake_ext.rb
|
85
|
+
- lib/airbrake-statsd/configuration.rb
|
86
|
+
- lib/airbrake-statsd/version.rb
|
87
|
+
- spec/spec_helper.rb
|
88
|
+
- spec/unit/airbrake-statsd/airbrake_ext_spec.rb
|
89
|
+
- spec/unit/airbrake-statsd/configuration_spec.rb
|
90
|
+
- spec/unit/airbrake-statsd_spec.rb
|
91
|
+
homepage: http://github.com/jimeh/airbrake-statsd
|
92
|
+
licenses: []
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
segments:
|
104
|
+
- 0
|
105
|
+
hash: 2958165307938427188
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
hash: 2958165307938427188
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 1.8.11
|
118
|
+
signing_key:
|
119
|
+
specification_version: 3
|
120
|
+
summary: Increment an exception counter in StatsD whenever the Airbrake gem reports
|
121
|
+
and exception.
|
122
|
+
test_files:
|
123
|
+
- spec/spec_helper.rb
|
124
|
+
- spec/unit/airbrake-statsd/airbrake_ext_spec.rb
|
125
|
+
- spec/unit/airbrake-statsd/configuration_spec.rb
|
126
|
+
- spec/unit/airbrake-statsd_spec.rb
|