fozzie 0.0.15 → 0.0.16

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.
@@ -1,10 +1,13 @@
1
1
  require 'spec_helper'
2
- require 'fozzie/classes'
3
2
 
4
3
  describe Fozzie do
5
4
 
6
- it { should respond_to(:c) }
7
- it { should respond_to(:config) }
5
+ it "allows dynamic assignment" do
6
+ { :host => 'somewhere.local', :port => 99 }.each do |field, val|
7
+ Fozzie.configure {|c| c.send("#{field}=", val) }
8
+ Fozzie.c.send(field).should == val
9
+ end
10
+ end
8
11
 
9
12
  it "has configuration" do
10
13
  Fozzie.config.should be_kind_of(Fozzie::Configuration)
@@ -17,139 +20,4 @@ describe Fozzie do
17
20
  end
18
21
  end
19
22
 
20
- it "acts like its inherited parent" do
21
- Fozzie.c.namespaces.each do |k|
22
- kl = Kernel.const_get(k)
23
- kl.should respond_to(:increment)
24
- kl.should respond_to(:decrement)
25
- kl.should respond_to(:timing)
26
- kl.should respond_to(:count)
27
- kl.should respond_to(:time)
28
- end
29
- end
30
-
31
- it "acts an a singleton" do
32
- Fozzie.c.namespaces.each do |k|
33
- kl1, kl2 = Kernel.const_get(k), Kernel.const_get(k)
34
- kl1.should == kl2
35
- end
36
- end
37
-
38
- it "times a given block" do
39
- Stats.expects(:timing).with() {|b, val, timing| b == 'data.bin' && (1000..1200).include?(val) }.twice
40
- Stats.time_for('data.bin') { sleep 1 }
41
- Stats.time_to_do('data.bin') { sleep 1 }
42
- end
43
-
44
- it "registers a commit" do
45
- Stats.expects(:timing).with('event.commit', anything).twice
46
- Stats.commit
47
- Stats.committed
48
- end
49
-
50
- it "registers a build" do
51
- Stats.expects(:timing).with('event.build', anything).twice
52
- Stats.build
53
- Stats.built
54
- end
55
-
56
- it "registers a deploy" do
57
- Stats.expects(:timing).with('event.deploy', anything).twice
58
- Stats.deploy
59
- Stats.deployed
60
- end
61
-
62
- it "ensures block is called on socket error" do
63
- UDPSocket.any_instance.stubs(:send).raises(SocketError)
64
- proc { Stats.time_for('data.bin') { sleep 1 } }.should_not raise_error
65
- proc { Stats.time_to_do('data.bin') { sleep 1 } }.should_not raise_error
66
- end
67
-
68
- it "raises exception if natural exception from block" do
69
- proc { Stats.time_for('data.bin') { raise ArgumentError, "testing" } }.should raise_error(ArgumentError)
70
- end
71
-
72
- it "only calls the block once on SocketError" do
73
- UDPSocket.any_instance.stubs(:send).raises(SocketError)
74
- i = 0
75
- p = proc {|n| (n + 1) }
76
- val = Stats.time_for('data.bin') { i+= p.call(i) }
77
- val.should == 1
78
- end
79
-
80
- describe "#increment_on" do
81
-
82
- it "registers success" do
83
- Stats.expects(:increment).with("event.increment.success", 1)
84
- Stats.increment_on('event.increment', true).should == true
85
- end
86
-
87
- it "registers failure" do
88
- Stats.expects(:increment).with("event.increment.fail", 1)
89
- Stats.increment_on('event.increment', false).should == false
90
- end
91
-
92
- it "simply questions the passed val with if" do
93
- a = mock()
94
- a.expects(:save).returns({})
95
- Stats.expects(:increment).with("event.increment.success", 1)
96
- Stats.increment_on('event.increment', a.save).should == {}
97
- end
98
-
99
- it "registers fail on nil return" do
100
- a = mock()
101
- a.expects(:save).returns(nil)
102
- Stats.expects(:increment).with("event.increment.fail", 1)
103
- Stats.increment_on('event.increment', a.save).should == nil
104
- end
105
-
106
- describe "performing actions" do
107
-
108
- it "registers success" do
109
- a = mock()
110
- a.expects(:save).returns(true)
111
- Stats.expects(:increment).with("event.increment.success", 1)
112
- Stats.increment_on('event.increment', a.save).should == true
113
- end
114
-
115
- it "registers failure" do
116
- a = mock()
117
- a.expects(:save).returns(false)
118
- Stats.expects(:increment).with("event.increment.fail", 1)
119
- Stats.increment_on('event.increment', a.save).should == false
120
- end
121
-
122
- it "registers positive even when nested" do
123
- a = mock()
124
- a.expects(:save).returns(true)
125
- Stats.expects(:timing).with('event.run', any_parameters)
126
- Stats.expects(:increment).with("event.increment.success", 1)
127
-
128
- res = Stats.time_to_do "event.run" do
129
- Stats.increment_on('event.increment', a.save)
130
- end
131
- res.should == true
132
- end
133
-
134
- it "registers negative even when nested" do
135
- a = mock()
136
- a.expects(:save).returns(false)
137
- Stats.expects(:timing).with('event.run', any_parameters)
138
- Stats.expects(:increment).with("event.increment.fail", 1)
139
-
140
- res = Stats.time_to_do "event.run" do
141
- Stats.increment_on('event.increment', a.save)
142
- end
143
- res.should == false
144
- end
145
-
146
- it "allows passing of arrays for stat key" do
147
- Stats.expects(:timing).with('event.commit', any_parameters)
148
- Stats.time_to_do %w{event commit} do; end
149
- end
150
-
151
- end
152
-
153
- end
154
-
155
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fozzie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-20 00:00:00.000000000 Z
12
+ date: 2012-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sys-uname
16
+ requirement: &70337811318040 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70337811318040
14
25
  - !ruby/object:Gem::Dependency
15
26
  name: rake
16
- requirement: &70179066578640 !ruby/object:Gem::Requirement
27
+ requirement: &70337811333440 !ruby/object:Gem::Requirement
17
28
  none: false
18
29
  requirements:
19
30
  - - ! '>='
@@ -21,10 +32,10 @@ dependencies:
21
32
  version: '0'
22
33
  type: :development
23
34
  prerelease: false
24
- version_requirements: *70179066578640
35
+ version_requirements: *70337811333440
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rspec
27
- requirement: &70179066578220 !ruby/object:Gem::Requirement
38
+ requirement: &70337811332500 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70179066578220
46
+ version_requirements: *70337811332500
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: mocha
38
- requirement: &70179066577740 !ruby/object:Gem::Requirement
49
+ requirement: &70337811331420 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '0'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70179066577740
57
+ version_requirements: *70337811331420
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: syntax
49
- requirement: &70179066577300 !ruby/object:Gem::Requirement
60
+ requirement: &70337811330660 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70179066577300
68
+ version_requirements: *70337811330660
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: rack-test
60
- requirement: &70179066576860 !ruby/object:Gem::Requirement
71
+ requirement: &70337811329600 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: '0'
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70179066576860
79
+ version_requirements: *70337811329600
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: simplecov
71
- requirement: &70179066576440 !ruby/object:Gem::Requirement
82
+ requirement: &70337811328880 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: '0'
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *70179066576440
90
+ version_requirements: *70337811328880
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: sinatra
82
- requirement: &70179066576020 !ruby/object:Gem::Requirement
93
+ requirement: &70337811328060 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: '0'
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *70179066576020
101
+ version_requirements: *70337811328060
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: actionpack
93
- requirement: &70179066575540 !ruby/object:Gem::Requirement
104
+ requirement: &70337811327220 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: '0'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *70179066575540
112
+ version_requirements: *70337811327220
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: guard
104
- requirement: &70179066575120 !ruby/object:Gem::Requirement
115
+ requirement: &70337811326540 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,10 +120,32 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *70179066575120
123
+ version_requirements: *70337811326540
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: guard-rspec
115
- requirement: &70179066574700 !ruby/object:Gem::Requirement
126
+ requirement: &70337811342180 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *70337811342180
135
+ - !ruby/object:Gem::Dependency
136
+ name: guard-rocco
137
+ requirement: &70337811341600 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *70337811341600
146
+ - !ruby/object:Gem::Dependency
147
+ name: fl-rocco
148
+ requirement: &70337811340980 !ruby/object:Gem::Requirement
116
149
  none: false
117
150
  requirements:
118
151
  - - ! '>='
@@ -120,7 +153,7 @@ dependencies:
120
153
  version: '0'
121
154
  type: :development
122
155
  prerelease: false
123
- version_requirements: *70179066574700
156
+ version_requirements: *70337811340980
124
157
  description: Gem allows statistics gathering from Ruby and Ruby on Rails applications
125
158
  to Statsd
126
159
  email:
@@ -135,20 +168,28 @@ files:
135
168
  - Guardfile
136
169
  - README.md
137
170
  - Rakefile
171
+ - doc/lib/core_ext/hash.html
172
+ - doc/lib/fozzie.html
173
+ - doc/lib/fozzie/configuration.html
174
+ - doc/lib/fozzie/interface.html
175
+ - doc/lib/fozzie/rack/middleware.html
176
+ - doc/lib/fozzie/rails/middleware.html
177
+ - doc/lib/fozzie/socket.html
178
+ - doc/lib/fozzie/version.html
138
179
  - fozzie.gemspec
139
180
  - fozzie.yml.example
140
181
  - lib/core_ext/hash.rb
141
182
  - lib/fozzie.rb
142
- - lib/fozzie/classes.rb
143
- - lib/fozzie/config.rb
144
183
  - lib/fozzie/configuration.rb
184
+ - lib/fozzie/interface.rb
145
185
  - lib/fozzie/rack/middleware.rb
146
186
  - lib/fozzie/rails/middleware.rb
187
+ - lib/fozzie/socket.rb
147
188
  - lib/fozzie/version.rb
148
189
  - spec/config/fozzie.yml
149
190
  - spec/lib/core_ext/hash_spec.rb
150
- - spec/lib/fozzie/config_spec.rb
151
191
  - spec/lib/fozzie/configuration_spec.rb
192
+ - spec/lib/fozzie/interface_spec.rb
152
193
  - spec/lib/fozzie/rack/middleware_spec.rb
153
194
  - spec/lib/fozzie/rails/middleware_spec.rb
154
195
  - spec/lib/fozzie/version_spec.rb
@@ -168,7 +209,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
209
  version: '0'
169
210
  segments:
170
211
  - 0
171
- hash: 3343690096652723699
212
+ hash: 95658434726318047
172
213
  required_rubygems_version: !ruby/object:Gem::Requirement
173
214
  none: false
174
215
  requirements:
@@ -177,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
218
  version: '0'
178
219
  segments:
179
220
  - 0
180
- hash: 3343690096652723699
221
+ hash: 95658434726318047
181
222
  requirements: []
182
223
  rubyforge_project: fozzie
183
224
  rubygems_version: 1.8.10
@@ -187,8 +228,8 @@ summary: Statsd gem bolt-on
187
228
  test_files:
188
229
  - spec/config/fozzie.yml
189
230
  - spec/lib/core_ext/hash_spec.rb
190
- - spec/lib/fozzie/config_spec.rb
191
231
  - spec/lib/fozzie/configuration_spec.rb
232
+ - spec/lib/fozzie/interface_spec.rb
192
233
  - spec/lib/fozzie/rack/middleware_spec.rb
193
234
  - spec/lib/fozzie/rails/middleware_spec.rb
194
235
  - spec/lib/fozzie/version_spec.rb
@@ -1,146 +0,0 @@
1
- module Fozzie
2
- module Classes
3
-
4
- class AbstractFozzie
5
-
6
- RESERVED_CHARS_REGEX = /[\:\|\@]/
7
-
8
- attr_reader :prefix, :configuration
9
-
10
- # Sends an increment (count = 1) for the given stat to the statsd server.
11
- #
12
- # @param stat (see #count)
13
- # @param sample_rate (see #count)
14
- # @see #count
15
- def increment(stat, sample_rate=1)
16
- count(stat, 1, sample_rate)
17
- end
18
-
19
- # Sends a decrement (count = -1) for the given stat to the statsd server.
20
- #
21
- # @param stat (see #count)
22
- # @param sample_rate (see #count)
23
- # @see #count
24
- def decrement(stat, sample_rate=1)
25
- count(stat, -1, sample_rate)
26
- end
27
-
28
- # Sends an arbitrary count for the given stat to the statsd server.
29
- #
30
- # @param [String] stat stat name
31
- # @param [Integer] count count
32
- # @param [Integer] sample_rate sample rate, 1 for always
33
- def count(stat, count, sample_rate=1)
34
- send(stat, count, 'c', sample_rate)
35
- end
36
-
37
- # Sends a timing (in ms) for the given stat to the statsd server. The
38
- # sample_rate determines what percentage of the time this report is sent. The
39
- # statsd server then uses the sample_rate to correctly track the average
40
- # timing for the stat.
41
- #
42
- # @param stat stat name
43
- # @param [Integer] ms timing in milliseconds
44
- # @param [Integer] sample_rate sample rate, 1 for always
45
- def timing(stat, ms, sample_rate=1)
46
- send(stat, ms, 'ms', sample_rate)
47
- end
48
-
49
- # Reports execution time of the provided block using {#timing}.
50
- #
51
- # @param stat (see #timing)
52
- # @param sample_rate (see #timing)
53
- # @yield The operation to be timed
54
- # @see #timing
55
- # @example Report the time (in ms) taken to activate an account
56
- # $statsd.time('account.activate') { @account.activate! }
57
- def time(stat, sample_rate=1)
58
- stat = stat.flatten.join('.') if stat.kind_of?(Array)
59
- start = Time.now
60
- result = yield
61
- timing(stat, ((Time.now - start) * 1000).round, sample_rate)
62
- result
63
- end
64
-
65
- def time_to_do(stat, sample_rate=1, &block)
66
- time_for(stat, sample_rate, &block)
67
- end
68
-
69
- def time_for(stat, sample_rate=1, &block)
70
- time(stat, sample_rate, &block)
71
- end
72
-
73
- def commit
74
- event :commit
75
- end
76
- def committed; commit; end
77
-
78
- def built
79
- event :build
80
- end
81
- def build; built; end
82
-
83
- def deployed(app = nil)
84
- event :deploy, app
85
- end
86
- def deploy(app = nil); deployed(app); end
87
-
88
- def increment_on(stat, perf, sample_rate=1)
89
- key = "#{stat}.%s" % (perf ? "success" : "fail")
90
- increment(key, sample_rate)
91
- perf
92
- end
93
-
94
- def logger
95
- self.class.logger
96
- end
97
-
98
- def self.logger
99
- @logger
100
- end
101
-
102
- private
103
-
104
- def event(type, app = nil)
105
- stat = "event.#{type.to_s}"
106
- stat << ".#{app}" unless app.nil?
107
- timing stat, Time.now.usec
108
- end
109
-
110
- def send_to_socket(message)
111
- return false if Fozzie.c.ip_from_host.empty?
112
- begin
113
- self.class.logger.debug {"Statsd: #{message}"} if self.class.logger
114
- socket.send(message, 0, Fozzie.c.ip_from_host, Fozzie.c.port)
115
- rescue SocketError, RuntimeError, Errno::EADDRNOTAVAIL, Timeout::Error => exc
116
- self.class.logger.debug {"Statsd Failure: #{exc.message}"} if self.class.logger
117
- nil
118
- end
119
- end
120
-
121
- def sampled(sample_rate)
122
- yield unless sample_rate < 1 and rand > sample_rate
123
- end
124
-
125
- def send(stat, delta, type, sample_rate)
126
- prefix = "#{Fozzie.c.data_prefix}." unless Fozzie.c.data_prefix.nil?
127
- stat = stat.to_s.gsub('::', '.').gsub(RESERVED_CHARS_REGEX, '_')
128
- sampled(sample_rate) { send_to_socket("#{prefix}#{stat}:#{delta}|#{type}#{'|@' << sample_rate.to_s if sample_rate < 1}") }
129
- end
130
-
131
- def socket
132
- @socket ||= UDPSocket.new
133
- end
134
-
135
- end
136
-
137
- def self.included(klass)
138
- Fozzie.c.namespaces.each do |klas|
139
- # set a constant
140
- Kernel.const_set(klas, AbstractFozzie.new) unless const_defined?(klas)
141
- end
142
- end
143
-
144
- end
145
-
146
- end