strumbar 0.3.0 → 0.4.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/CHANGELOG.md +8 -0
- data/README.md +25 -17
- data/lib/strumbar.rb +4 -15
- data/lib/strumbar/configuration.rb +59 -3
- data/lib/strumbar/instrumentation.rb +6 -8
- data/lib/strumbar/version.rb +1 -1
- data/spec/configuration_spec.rb +26 -0
- data/spec/instrumentation_spec.rb +62 -70
- metadata +6 -4
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.4.0 (2013-02-09)
|
4
|
+
|
5
|
+
#### /!\ Breaks Backwards Compatibility /!\
|
6
|
+
|
7
|
+
* instrumentation is no longer loaded by default.
|
8
|
+
* `Strumbar::Configuration#instrumentation &block` is now gone: use the new `config.instruments.use MyInstrument` syntax instead.
|
9
|
+
* default values for options are now stored on the configuration object instead of the `Strumbar` module.
|
10
|
+
|
3
11
|
## 0.3.0 (2013-02-04)
|
4
12
|
|
5
13
|
* Adds wrapper for gauge, set, and count: `Strumbar::Client.(gauge|set|count) key, value, sample_rate = Strumbar.default_rate`.
|
data/README.md
CHANGED
@@ -66,30 +66,38 @@ Strumbar.strum 'view.render', payload do
|
|
66
66
|
end
|
67
67
|
```
|
68
68
|
|
69
|
+
## Instruments
|
69
70
|
|
70
|
-
|
71
|
+
Strumbar allows middleware-style instruments to be added via the configure block. These instruments
|
72
|
+
need only respond to `#load` with an optional hash. Strumbar comes with a few instruments to be added.
|
73
|
+
Here's an example:
|
71
74
|
|
72
|
-
|
73
|
-
|
75
|
+
``` ruby
|
76
|
+
class Guitar
|
77
|
+
def self.load options = {}
|
78
|
+
Strumbar.subscribe 'query.*' do |client, event|
|
79
|
+
client.increment "query.#{event.payload[:query]}", options[:rate]
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
74
83
|
|
75
|
-
|
76
|
-
|
77
|
-
|
84
|
+
Strumbar.configure do |config|
|
85
|
+
# Can pass optional hash of data to controller for access when loading
|
86
|
+
config.instruments.use Strumbar::Instrumentation::ActiveRecord, rate: 0.8
|
87
|
+
config.instruments.use Strumbar::Instrumentation::ActionController, rate: 1.0
|
78
88
|
|
79
|
-
|
80
|
-
|
89
|
+
# Unless passed, `rate` will be passed as the value of Strumbar.default_rate
|
90
|
+
config.instruments.use Strumbar::Instrumentation::Redis
|
81
91
|
|
82
|
-
|
83
|
-
|
84
|
-
config.instrumentation do
|
85
|
-
Strumbar::Instrumentation::ActionController.load rate: 0.5
|
86
|
-
Strumbar::Instrumentation::ActiveRecord.load
|
87
|
-
Strumbar::Instrumentation::Redis.load
|
92
|
+
# When passing an array of objects, each element of the array will use the
|
93
|
+
# same optional information, and will use the default rate if not supplied
|
88
94
|
|
89
|
-
|
90
|
-
|
91
|
-
end
|
95
|
+
# Guitar and SnareDrum will receive `{ rate: Strumbar.default_rate }`
|
96
|
+
config.instruments.use [Guitar, SnareDrum]
|
92
97
|
|
98
|
+
# SixStringBass and FourStringBass will receive the same hash
|
99
|
+
config.instruments.use [SixStringBass, FourStringBass], rate: 0.75
|
100
|
+
end
|
93
101
|
```
|
94
102
|
|
95
103
|
## Authors
|
data/lib/strumbar.rb
CHANGED
@@ -5,11 +5,10 @@ require 'strumbar/instrumentation'
|
|
5
5
|
|
6
6
|
require 'active_support'
|
7
7
|
require 'active_support/core_ext/object/try'
|
8
|
+
require 'active_support/core_ext/module/delegation'
|
8
9
|
|
9
10
|
module Strumbar
|
10
11
|
class << self
|
11
|
-
attr_reader :configuration
|
12
|
-
|
13
12
|
def configure
|
14
13
|
@configuration = Configuration.new
|
15
14
|
yield @configuration
|
@@ -20,21 +19,11 @@ module Strumbar
|
|
20
19
|
@client ||= Client.new host, port
|
21
20
|
end
|
22
21
|
|
23
|
-
def
|
24
|
-
configuration
|
25
|
-
end
|
26
|
-
|
27
|
-
def port
|
28
|
-
configuration.try(:port) || 8125
|
22
|
+
def configuration
|
23
|
+
@configuration ||= Configuration.new
|
29
24
|
end
|
30
25
|
|
31
|
-
|
32
|
-
configuration.try(:application) || 'statsd_appname'
|
33
|
-
end
|
34
|
-
|
35
|
-
def default_rate
|
36
|
-
configuration.try(:default_rate) || 1
|
37
|
-
end
|
26
|
+
delegate :host, :port, :instruments, :application, :default_rate, to: :configuration
|
38
27
|
|
39
28
|
def subscribe identifier
|
40
29
|
ActiveSupport::Notifications.subscribe identifier do |*args|
|
@@ -1,13 +1,69 @@
|
|
1
1
|
module Strumbar
|
2
|
+
class InstrumentList
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@instruments = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def each &block
|
10
|
+
@instruments.each &block
|
11
|
+
end
|
12
|
+
|
13
|
+
def empty?
|
14
|
+
@instruments.empty?
|
15
|
+
end
|
16
|
+
|
17
|
+
def use instruments, options = {}
|
18
|
+
if instruments.respond_to? :each
|
19
|
+
instruments.each do |instrument|
|
20
|
+
add instrument, options
|
21
|
+
end
|
22
|
+
else
|
23
|
+
add instruments, options
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete instrument
|
28
|
+
@instruments.delete_if { |i| i[0] == instrument }
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def add instrument, options
|
34
|
+
if instrument.respond_to? :load
|
35
|
+
@instruments << [instrument, options]
|
36
|
+
else
|
37
|
+
raise 'Instrument does not respond to load'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
2
42
|
class Configuration
|
3
43
|
attr_accessor :port,
|
4
44
|
:host,
|
5
45
|
:application,
|
6
46
|
:default_rate,
|
7
|
-
:
|
47
|
+
:instruments
|
48
|
+
|
49
|
+
def initialize
|
50
|
+
@instruments = InstrumentList.new
|
51
|
+
end
|
52
|
+
|
53
|
+
def host
|
54
|
+
@host || 'localhost'
|
55
|
+
end
|
56
|
+
|
57
|
+
def port
|
58
|
+
@port || 8125
|
59
|
+
end
|
60
|
+
|
61
|
+
def application
|
62
|
+
@application || 'statsd_appname'
|
63
|
+
end
|
8
64
|
|
9
|
-
def
|
10
|
-
@
|
65
|
+
def default_rate
|
66
|
+
@default_rate || 1
|
11
67
|
end
|
12
68
|
end
|
13
69
|
end
|
@@ -6,15 +6,13 @@ module Strumbar
|
|
6
6
|
autoload :Redis, 'strumbar/instrumentation/redis'
|
7
7
|
|
8
8
|
def self.load
|
9
|
-
|
9
|
+
Strumbar.instruments.each do |instrument_info|
|
10
|
+
instrument = instrument_info[0]
|
11
|
+
options = instrument_info[1]
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
Strumbar::Instrumentation::ActionController.load if defined?(::ActionController)
|
15
|
-
Strumbar::Instrumentation::ActiveRecord.load if defined?(::ActiveRecord)
|
16
|
-
Strumbar::Instrumentation::Mongoid.load if defined?(::Mongoid)
|
17
|
-
Strumbar::Instrumentation::Redis.load if defined?(::Redis)
|
13
|
+
options[:rate] ||= Strumbar.default_rate
|
14
|
+
|
15
|
+
instrument.load options
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end
|
data/lib/strumbar/version.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Strumbar
|
4
|
+
describe Configuration do
|
5
|
+
let(:config) { Configuration.new }
|
6
|
+
|
7
|
+
context "default configuration values" do
|
8
|
+
it "defaults #host to 'localhost'" do
|
9
|
+
config.host.should == 'localhost'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "defaults #port to 8125" do
|
13
|
+
config.port.should == 8125
|
14
|
+
end
|
15
|
+
|
16
|
+
it "defaults #application to 'statsd_appname'" do
|
17
|
+
config.application.should == 'statsd_appname'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "defaults #default_rate to 1" do
|
21
|
+
config.default_rate.should == 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -1,105 +1,97 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
class Guitar
|
4
|
+
def self.load options = {}
|
5
|
+
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class BassGuitar < Guitar ; end
|
10
|
+
class Pencil ; end
|
11
|
+
|
3
12
|
describe Strumbar::Instrumentation do
|
4
13
|
describe '#load' do
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
context 'without a custom instrumentation loader' do
|
10
|
-
before do
|
14
|
+
context 'configuration block' do
|
15
|
+
it 'accepts an instrument that responds to #load' do
|
11
16
|
Strumbar.configure do |config|
|
17
|
+
config.instruments.use Guitar
|
12
18
|
end
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'loads the ActionController subscription if ActionController is defined' do
|
16
|
-
|
17
|
-
ActionController = true
|
18
|
-
|
19
|
-
Strumbar::Instrumentation::ActionController.should_receive :load
|
20
|
-
Strumbar::Instrumentation.load
|
21
19
|
|
22
|
-
|
20
|
+
Strumbar.instruments.should include [Guitar, { rate: 1.0}]
|
23
21
|
end
|
24
22
|
|
25
|
-
it '
|
26
|
-
Strumbar
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
it 'loads the ActiveRecord subscription if ActiveRecord is loaded' do
|
31
|
-
ActiveRecord = true
|
32
|
-
|
33
|
-
Strumbar::Instrumentation::ActiveRecord.should_receive :load
|
34
|
-
Strumbar::Instrumentation.load
|
23
|
+
it 'accepts an array of instruments' do
|
24
|
+
Strumbar.configure do |config|
|
25
|
+
config.instruments.use [Guitar, BassGuitar]
|
26
|
+
end
|
35
27
|
|
36
|
-
|
28
|
+
Strumbar.instruments.should include [Guitar, {rate: 1.0}]
|
29
|
+
Strumbar.instruments.should include [BassGuitar, {rate: 1.0}]
|
37
30
|
end
|
38
31
|
|
39
|
-
it '
|
40
|
-
Strumbar
|
41
|
-
|
32
|
+
it 'allows deletion of instruments from Strumbar' do
|
33
|
+
Strumbar.configure do |config|
|
34
|
+
config.instruments.use Guitar
|
35
|
+
config.instruments.should include [Guitar, {}]
|
36
|
+
config.instruments.delete Guitar
|
37
|
+
config.instruments.should_not include [Guitar, {}]
|
38
|
+
end
|
42
39
|
end
|
43
40
|
|
44
|
-
it '
|
45
|
-
|
46
|
-
|
47
|
-
def process ; end
|
48
|
-
end
|
41
|
+
it 'raises an exception when trying to load an Instrument that does not respond to load' do
|
42
|
+
Strumbar.configure do |config|
|
43
|
+
expect { config.instruments.use Pencil }.to raise_error
|
49
44
|
end
|
50
|
-
|
51
|
-
Strumbar::Instrumentation::Redis.should_receive :load
|
52
|
-
Strumbar::Instrumentation.load
|
53
|
-
|
54
|
-
undefine :Redis
|
55
45
|
end
|
56
46
|
|
57
|
-
it '
|
58
|
-
|
59
|
-
Strumbar
|
47
|
+
it 'accepts a hash of options' do
|
48
|
+
Guitar.should_receive(:load).with(rate: 1.2)
|
49
|
+
Strumbar.configure do |config|
|
50
|
+
config.instruments.use Guitar, rate: 1.2
|
51
|
+
end
|
60
52
|
end
|
61
53
|
|
62
|
-
|
63
|
-
|
64
|
-
context 'with a custom instrumentations loader' do
|
65
|
-
before do
|
54
|
+
it 'passes the default rate to an instrument if no hash is specified' do
|
55
|
+
Guitar.should_receive(:load).with(rate: 1.0)
|
66
56
|
Strumbar.configure do |config|
|
67
|
-
config.
|
68
|
-
Strumbar::Instrumentation::ActionController.load
|
69
|
-
end
|
57
|
+
config.instruments.use Guitar
|
70
58
|
end
|
71
59
|
end
|
72
60
|
|
73
|
-
it '
|
74
|
-
|
75
|
-
|
76
|
-
Strumbar::Instrumentation.load
|
77
|
-
undefine :ActionController
|
78
|
-
end
|
61
|
+
it 'passes the same hash to an array of instruments' do
|
62
|
+
Guitar.should_receive(:load).with(rate: 1.5)
|
63
|
+
BassGuitar.should_receive(:load).with(rate: 1.5)
|
79
64
|
|
80
|
-
|
81
|
-
|
65
|
+
Strumbar.configure do |config|
|
66
|
+
config.instruments.use [Guitar, BassGuitar], rate: 1.5
|
67
|
+
end
|
68
|
+
end
|
82
69
|
|
83
|
-
|
84
|
-
|
70
|
+
it 'passes the default rate to to an array of instruments' do
|
71
|
+
Guitar.should_receive(:load).with(rate: 1.0)
|
72
|
+
BassGuitar.should_receive(:load).with(rate: 1.0)
|
85
73
|
|
86
|
-
|
74
|
+
Strumbar.configure do |config|
|
75
|
+
config.instruments.use [Guitar, BassGuitar]
|
76
|
+
end
|
87
77
|
end
|
88
78
|
|
89
|
-
it '
|
90
|
-
|
91
|
-
|
92
|
-
def process ; end
|
93
|
-
end
|
79
|
+
it 'loads no default instruments unless specified' do
|
80
|
+
Strumbar.configure do
|
81
|
+
# NOPE
|
94
82
|
end
|
95
|
-
|
83
|
+
Strumbar.instruments.should be_empty
|
96
84
|
Strumbar::Instrumentation::Redis.should_not_receive :load
|
97
|
-
Strumbar::Instrumentation.load
|
98
|
-
|
99
|
-
undefine :Redis
|
100
85
|
end
|
101
86
|
|
102
|
-
|
87
|
+
it 'sends the load message to all instruments in Strumbar' do
|
88
|
+
Guitar.should_receive :load
|
89
|
+
BassGuitar.should_receive :load
|
103
90
|
|
91
|
+
Strumbar.configure do |config|
|
92
|
+
config.instruments.use [Guitar, BassGuitar]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
104
96
|
end
|
105
97
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strumbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-02-
|
13
|
+
date: 2013-02-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -103,6 +103,7 @@ files:
|
|
103
103
|
- lib/strumbar/instrumentation/redis.rb
|
104
104
|
- lib/strumbar/version.rb
|
105
105
|
- spec/client_spec.rb
|
106
|
+
- spec/configuration_spec.rb
|
106
107
|
- spec/instrumentation/mongoid/controller_runtime_spec.rb
|
107
108
|
- spec/instrumentation/mongoid/runtime_tracker_spec.rb
|
108
109
|
- spec/instrumentation/redis_spec.rb
|
@@ -124,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
125
|
version: '0'
|
125
126
|
segments:
|
126
127
|
- 0
|
127
|
-
hash: -
|
128
|
+
hash: -3917631635399669521
|
128
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
130
|
none: false
|
130
131
|
requirements:
|
@@ -133,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
134
|
version: '0'
|
134
135
|
segments:
|
135
136
|
- 0
|
136
|
-
hash: -
|
137
|
+
hash: -3917631635399669521
|
137
138
|
requirements: []
|
138
139
|
rubyforge_project:
|
139
140
|
rubygems_version: 1.8.24
|
@@ -142,6 +143,7 @@ specification_version: 3
|
|
142
143
|
summary: Helper library to strum along in your application.
|
143
144
|
test_files:
|
144
145
|
- spec/client_spec.rb
|
146
|
+
- spec/configuration_spec.rb
|
145
147
|
- spec/instrumentation/mongoid/controller_runtime_spec.rb
|
146
148
|
- spec/instrumentation/mongoid/runtime_tracker_spec.rb
|
147
149
|
- spec/instrumentation/redis_spec.rb
|