fozzie 0.0.5 → 0.0.6
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/fozzie.gemspec +4 -0
- data/lib/fozzie.rb +5 -0
- data/lib/fozzie/classes.rb +1 -1
- data/lib/fozzie/configuration.rb +1 -1
- data/lib/fozzie/rack/middleware.rb +39 -0
- data/lib/fozzie/rails/middleware.rb +16 -0
- data/lib/fozzie/railtie.rb +11 -0
- data/lib/fozzie/version.rb +1 -1
- data/spec/lib/fozzie/config_spec.rb +1 -1
- data/spec/lib/fozzie/configuration_spec.rb +3 -3
- data/spec/lib/fozzie/rack/middleware_spec.rb +102 -0
- data/spec/lib/fozzie/rails/middleware_spec.rb +28 -0
- data/spec/lib/fozzie_spec.rb +12 -12
- metadata +65 -14
data/fozzie.gemspec
CHANGED
@@ -21,5 +21,9 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_development_dependency 'rake'
|
22
22
|
s.add_development_dependency 'rspec'
|
23
23
|
s.add_development_dependency 'mocha'
|
24
|
+
s.add_development_dependency 'syntax'
|
25
|
+
s.add_development_dependency 'rack-test'
|
24
26
|
s.add_development_dependency 'simplecov'
|
27
|
+
s.add_development_dependency 'sinatra'
|
28
|
+
s.add_development_dependency 'actionpack'
|
25
29
|
end
|
data/lib/fozzie.rb
CHANGED
data/lib/fozzie/classes.rb
CHANGED
data/lib/fozzie/configuration.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Fozzie
|
2
|
+
module Rack
|
3
|
+
class Middleware
|
4
|
+
|
5
|
+
attr_reader :app
|
6
|
+
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
k = generate_key(env)
|
13
|
+
if k.nil?
|
14
|
+
self.call_without_timer(env)
|
15
|
+
else
|
16
|
+
self.call_with_timer(k, env)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def call_without_timer(env)
|
21
|
+
@app.call(env)
|
22
|
+
end
|
23
|
+
|
24
|
+
def call_with_timer(key, env)
|
25
|
+
S.time_to_do key do
|
26
|
+
@app.call(env)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def generate_key(env)
|
31
|
+
s = env['PATH_INFO']
|
32
|
+
return nil if s.nil?
|
33
|
+
s = (s == '/' ? 'index' : s.gsub(/.(\/)./) {|m| m.gsub('/', '.') }.gsub(/\//, '').strip)
|
34
|
+
(s.nil? || s.empty? ? nil : "#{s}.render")
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'fozzie/rack/middleware'
|
2
|
+
|
3
|
+
module Fozzie
|
4
|
+
module Rails
|
5
|
+
class Middleware < Fozzie::Rack::Middleware
|
6
|
+
|
7
|
+
def generate_key(env)
|
8
|
+
s = env['PATH_INFO']
|
9
|
+
return nil if s.nil?
|
10
|
+
path = ActionController::Routing::Routes.recognize_path(s)
|
11
|
+
[path[:controller], path[:action], "render"].join('.')
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/fozzie/version.rb
CHANGED
@@ -21,16 +21,16 @@ describe Fozzie::Configuration do
|
|
21
21
|
it "defaults env" do
|
22
22
|
subject.env.should == 'development'
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
it "creates a data prefix" do
|
26
26
|
subject.data_prefix.should == 'development'
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
it "creates a data prefix with appname when set" do
|
30
30
|
subject.appname = 'astoria'
|
31
31
|
subject.data_prefix.should == 'astoria.development'
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
it "handles missing configuration namespace" do
|
35
35
|
proc { Fozzie::Configuration.new({:env => 'blbala', :config_path => 'spec/'}) }.should_not raise_error
|
36
36
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'sinatra/base'
|
3
|
+
require 'rack/test'
|
4
|
+
|
5
|
+
describe Fozzie::Rack::Middleware do
|
6
|
+
|
7
|
+
subject do
|
8
|
+
RackApp = Class.new do
|
9
|
+
def call(env)
|
10
|
+
env
|
11
|
+
end
|
12
|
+
end unless defined?(RackApp)
|
13
|
+
Fozzie::Rack::Middleware.new RackApp.new
|
14
|
+
end
|
15
|
+
|
16
|
+
it { should respond_to(:call) }
|
17
|
+
it { should respond_to(:generate_key) }
|
18
|
+
|
19
|
+
describe "subject" do
|
20
|
+
it "returns env on call for testing" do
|
21
|
+
subject.call({}).should == {}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#call" do
|
26
|
+
|
27
|
+
it "ignored stats request when path not valid" do
|
28
|
+
fake_env = { 'PATH_INFO' => '' }
|
29
|
+
subject.expects(:call_without_timer).with(fake_env)
|
30
|
+
subject.call(fake_env)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "passes request with timer on index" do
|
34
|
+
fake_env = { 'PATH_INFO' => '/' }
|
35
|
+
subject.expects(:call_with_timer).with('index.render', fake_env)
|
36
|
+
subject.call(fake_env)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "passes request with timer on full path" do
|
40
|
+
fake_env = { 'PATH_INFO' => '/somewhere/nice' }
|
41
|
+
subject.expects(:call_with_timer).with('somewhere.nice.render', fake_env)
|
42
|
+
subject.call(fake_env)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "passes request onto app" do
|
46
|
+
envs = ['', '/', '/somewhere/nice'].each do |p|
|
47
|
+
fake_env = { 'PATH_INFO' => p }
|
48
|
+
subject.app.expects(:call).with(fake_env)
|
49
|
+
subject.call(fake_env)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#generate_key" do
|
56
|
+
|
57
|
+
it "returns nil when applicable" do
|
58
|
+
fake_env = { 'PATH_INFO' => '' }
|
59
|
+
subject.generate_key(fake_env).should be_nil
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns index when root" do
|
63
|
+
fake_env = { 'PATH_INFO' => '/' }
|
64
|
+
subject.generate_key(fake_env).should == 'index.render'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns dotted value" do
|
68
|
+
fake_env = { 'PATH_INFO' => '/somewhere/nice' }
|
69
|
+
subject.generate_key(fake_env).should == 'somewhere.nice.render'
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "Sinatra Server with Middleware" do
|
77
|
+
include Rack::Test::Methods
|
78
|
+
|
79
|
+
def app
|
80
|
+
Sinatra.new do
|
81
|
+
set :environment, :test
|
82
|
+
use Fozzie::Rack::Middleware
|
83
|
+
get('/') { "echo" }
|
84
|
+
get('/somewhere/nice') { "echo" }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
it "sends stats request on root" do
|
89
|
+
S.expects(:timing).with('index.render', any_parameters)
|
90
|
+
get '/'
|
91
|
+
last_response.should be_ok
|
92
|
+
last_response.body.should == 'echo'
|
93
|
+
end
|
94
|
+
|
95
|
+
it "sends stats request on nested path" do
|
96
|
+
S.expects(:timing).with('somewhere.nice.render', any_parameters)
|
97
|
+
get '/somewhere/nice'
|
98
|
+
last_response.should be_ok
|
99
|
+
last_response.body.should == 'echo'
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'action_controller'
|
3
|
+
|
4
|
+
describe Fozzie::Rails::Middleware do
|
5
|
+
|
6
|
+
subject do
|
7
|
+
RailsApp = Class.new do
|
8
|
+
def call(env)
|
9
|
+
env
|
10
|
+
end
|
11
|
+
end unless defined?(RailsApp)
|
12
|
+
Fozzie::Rails::Middleware.new RailsApp.new
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "subject" do
|
16
|
+
it "returns env on call for testing" do
|
17
|
+
subject.call({}).should == {}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it "#generate_key" do
|
22
|
+
s = '/somewhere/railsy'
|
23
|
+
fake_env = { 'PATH_INFO' => s }
|
24
|
+
ActionController::Routing::Routes.expects(:recognize_path).with(s).returns({:controller => 'somewhere', :action => 'railsy'})
|
25
|
+
subject.generate_key(fake_env).should == 'somewhere.railsy.render'
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/spec/lib/fozzie_spec.rb
CHANGED
@@ -5,18 +5,18 @@ describe Fozzie do
|
|
5
5
|
|
6
6
|
it { should respond_to(:c) }
|
7
7
|
it { should respond_to(:config) }
|
8
|
-
|
8
|
+
|
9
9
|
it "has configuration" do
|
10
10
|
Fozzie.config.should be_kind_of(Fozzie::Configuration)
|
11
11
|
Fozzie.c.should be_kind_of(Fozzie::Configuration)
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
it "creates new classes for statistics gathering" do
|
15
15
|
Fozzie::Classes::NAMESPACES.each do |k|
|
16
16
|
Kernel.const_defined?(k).should == true
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
it "acts like its inherited parent" do
|
21
21
|
Fozzie::Classes::NAMESPACES.each do |k|
|
22
22
|
kl = Kernel.const_get(k)
|
@@ -27,52 +27,52 @@ describe Fozzie do
|
|
27
27
|
kl.should respond_to(:time)
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it "acts an a singleton" do
|
32
32
|
Fozzie::Classes::NAMESPACES.each do |k|
|
33
33
|
kl1, kl2 = Kernel.const_get(k), Kernel.const_get(k)
|
34
34
|
kl1.should == kl2
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
it "assigns namespace when passed" do
|
39
39
|
Fozzie::AbstractFozzie.new(1,2, 'a').namespace.should == 'a'
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
it "times a given block" do
|
43
43
|
Stats.expects(:timing).with() {|b, val, timing| b == 'data.bin' && (1000..1200).include?(val) }.twice
|
44
44
|
Stats.time_for('data.bin') { sleep 1 }
|
45
45
|
Stats.time_to_do('data.bin') { sleep 1 }
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
it "registers a commit" do
|
49
49
|
Stats.expects(:timing).with('event.commit', anything).twice
|
50
50
|
Stats.commit
|
51
51
|
Stats.committed
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
it "registers a build" do
|
55
55
|
Stats.expects(:timing).with('event.build', anything).twice
|
56
56
|
Stats.build
|
57
57
|
Stats.built
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
it "registers a deploy" do
|
61
61
|
Stats.expects(:timing).with('event.deploy', anything).twice
|
62
62
|
Stats.deploy
|
63
63
|
Stats.deployed
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
it "ensures block is called on socket error" do
|
67
67
|
UDPSocket.any_instance.stubs(:send).raises(SocketError)
|
68
68
|
proc { Stats.time_for('data.bin') { sleep 1 } }.should_not raise_error
|
69
69
|
proc { Stats.time_to_do('data.bin') { sleep 1 } }.should_not raise_error
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
it "raises exception if natural exception from block" do
|
73
73
|
proc { Stats.time_for('data.bin') { raise ArgumentError, "testing" } }.should raise_error(ArgumentError)
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
it "only calls the block once on SocketError" do
|
77
77
|
UDPSocket.any_instance.stubs(:send).raises(SocketError)
|
78
78
|
i = 0
|
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.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: statsd-ruby
|
16
|
-
requirement: &
|
16
|
+
requirement: &70225957503840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70225957503840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70225957670940 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70225957670940
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70225957670120 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70225957670120
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mocha
|
49
|
-
requirement: &
|
49
|
+
requirement: &70225957669480 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,54 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70225957669480
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: syntax
|
60
|
+
requirement: &70225957668900 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70225957668900
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack-test
|
71
|
+
requirement: &70225957668200 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70225957668200
|
58
80
|
- !ruby/object:Gem::Dependency
|
59
81
|
name: simplecov
|
60
|
-
requirement: &
|
82
|
+
requirement: &70225957667320 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70225957667320
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: sinatra
|
93
|
+
requirement: &70225957664940 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70225957664940
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: actionpack
|
104
|
+
requirement: &70225957664380 !ruby/object:Gem::Requirement
|
61
105
|
none: false
|
62
106
|
requirements:
|
63
107
|
- - ! '>='
|
@@ -65,7 +109,7 @@ dependencies:
|
|
65
109
|
version: '0'
|
66
110
|
type: :development
|
67
111
|
prerelease: false
|
68
|
-
version_requirements: *
|
112
|
+
version_requirements: *70225957664380
|
69
113
|
description: Gem allows statistics gathering from Ruby and Ruby on Rails applications
|
70
114
|
to Statsd
|
71
115
|
email:
|
@@ -86,11 +130,16 @@ files:
|
|
86
130
|
- lib/fozzie/classes.rb
|
87
131
|
- lib/fozzie/config.rb
|
88
132
|
- lib/fozzie/configuration.rb
|
133
|
+
- lib/fozzie/rack/middleware.rb
|
134
|
+
- lib/fozzie/rails/middleware.rb
|
135
|
+
- lib/fozzie/railtie.rb
|
89
136
|
- lib/fozzie/version.rb
|
90
137
|
- spec/config/fozzie.yml
|
91
138
|
- spec/lib/core_ext/hash_spec.rb
|
92
139
|
- spec/lib/fozzie/config_spec.rb
|
93
140
|
- spec/lib/fozzie/configuration_spec.rb
|
141
|
+
- spec/lib/fozzie/rack/middleware_spec.rb
|
142
|
+
- spec/lib/fozzie/rails/middleware_spec.rb
|
94
143
|
- spec/lib/fozzie/version_spec.rb
|
95
144
|
- spec/lib/fozzie_spec.rb
|
96
145
|
- spec/spec_helper.rb
|
@@ -108,7 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
157
|
version: '0'
|
109
158
|
segments:
|
110
159
|
- 0
|
111
|
-
hash:
|
160
|
+
hash: 2608603561307742535
|
112
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
162
|
none: false
|
114
163
|
requirements:
|
@@ -117,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
166
|
version: '0'
|
118
167
|
segments:
|
119
168
|
- 0
|
120
|
-
hash:
|
169
|
+
hash: 2608603561307742535
|
121
170
|
requirements: []
|
122
171
|
rubyforge_project: fozzie
|
123
172
|
rubygems_version: 1.8.10
|
@@ -129,6 +178,8 @@ test_files:
|
|
129
178
|
- spec/lib/core_ext/hash_spec.rb
|
130
179
|
- spec/lib/fozzie/config_spec.rb
|
131
180
|
- spec/lib/fozzie/configuration_spec.rb
|
181
|
+
- spec/lib/fozzie/rack/middleware_spec.rb
|
182
|
+
- spec/lib/fozzie/rails/middleware_spec.rb
|
132
183
|
- spec/lib/fozzie/version_spec.rb
|
133
184
|
- spec/lib/fozzie_spec.rb
|
134
185
|
- spec/spec_helper.rb
|