fozzie 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.gitignore +5 -5
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +5 -5
- data/Gemfile +3 -3
- data/README.md +288 -276
- data/Rakefile +6 -6
- data/fozzie.gemspec +29 -29
- data/fozzie.yml.example +14 -14
- data/lib/core_ext/hash/symbolize_keys.rb +21 -21
- data/lib/core_ext/module/alias_method_chain.rb +19 -19
- data/lib/core_ext/module/monitor.rb +12 -12
- data/lib/core_ext/string/snakecase.rb +9 -9
- data/lib/fozzie.rb +67 -67
- data/lib/fozzie/adapter/statsd.rb +95 -95
- data/lib/fozzie/bulk_dsl.rb +27 -27
- data/lib/fozzie/configuration.rb +1 -0
- data/lib/fozzie/dsl.rb +18 -18
- data/lib/fozzie/exception.rb +4 -4
- data/lib/fozzie/interface.rb +139 -139
- data/lib/fozzie/rack/middleware.rb +43 -43
- data/lib/fozzie/sniff.rb +49 -49
- data/lib/fozzie/version.rb +3 -3
- data/resources/mill.js.example +26 -26
- data/spec/config/fozzie.yml +5 -5
- data/spec/lib/core_ext/module/monitor_spec.rb +8 -8
- data/spec/lib/fozzie/adapter/statsd_spec.rb +82 -82
- data/spec/lib/fozzie/bulk_dsl_spec.rb +46 -46
- data/spec/lib/fozzie/configuration_spec.rb +125 -125
- data/spec/lib/fozzie/dsl_spec.rb +15 -15
- data/spec/lib/fozzie/rack/middleware_spec.rb +69 -69
- data/spec/lib/fozzie/rack/sinatra_spec.rb +30 -30
- data/spec/lib/fozzie/sniff_spec.rb +131 -131
- data/spec/lib/fozzie/version_spec.rb +9 -9
- data/spec/lib/fozzie_spec.rb +39 -39
- data/spec/shared_examples/fozzie_adapter.rb +7 -7
- data/spec/shared_examples/interface.rb +159 -159
- data/spec/spec_helper.rb +28 -28
- metadata +24 -36
- data/.rvmrc +0 -1
@@ -1,125 +1,125 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'resolv'
|
3
|
-
|
4
|
-
describe Fozzie::Configuration do
|
5
|
-
it "#host" do
|
6
|
-
subject.host.should be_kind_of(String)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "#port" do
|
10
|
-
subject.port.should be_kind_of(Fixnum)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "attempts to load configuration from yaml" do
|
14
|
-
c = Fozzie::Configuration.new({
|
15
|
-
env: 'test',
|
16
|
-
config_path: 'spec/',
|
17
|
-
adapter: :TestAdapter
|
18
|
-
})
|
19
|
-
c.stub(:origin_name => "")
|
20
|
-
c.host.should eq '1.1.1.1'
|
21
|
-
c.port.should eq 9876
|
22
|
-
c.appname.should eq 'fozzie'
|
23
|
-
c.data_prefix.should eq "fozzie#{c.safe_separator}test"
|
24
|
-
end
|
25
|
-
|
26
|
-
it "defaults env" do
|
27
|
-
subject.env.should eq 'test'
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#adapter" do
|
31
|
-
it "throw error on incorrect assignment" do
|
32
|
-
-> { Fozzie::Configuration.new({:env => 'test', :adapter => 'foo'}) }.should raise_error(Fozzie::AdapterMissing)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "defaults adapter to Statsd" do
|
36
|
-
subject.adapter.should be_kind_of(Fozzie::Adapter::Statsd)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#disable_prefix" do
|
41
|
-
it "sets the data_prefix to nil" do
|
42
|
-
subject.disable_prefix
|
43
|
-
subject.data_prefix.should be_nil
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "#prefix and #data_prefix" do
|
48
|
-
it "creates a #data_prefix" do
|
49
|
-
subject.stub(:origin_name => "")
|
50
|
-
subject.data_prefix.should eq 'test'
|
51
|
-
end
|
52
|
-
|
53
|
-
it "creates a #data_prefix with appname when set" do
|
54
|
-
subject.stub(:origin_name => "")
|
55
|
-
subject.appname = 'astoria'
|
56
|
-
subject.data_prefix.should eq 'astoria.test'
|
57
|
-
end
|
58
|
-
|
59
|
-
it "creates a #data_prefix with origin" do
|
60
|
-
subject.appname = 'astoria'
|
61
|
-
subject.data_prefix.should match /^astoria\.(\S+)\.test$/
|
62
|
-
end
|
63
|
-
|
64
|
-
it "allows dynamic assignment of #prefix to derive #data_prefix" do
|
65
|
-
subject.prefix = [:foo, :bar, :car]
|
66
|
-
subject.data_prefix.should eq 'foo.bar.car'
|
67
|
-
end
|
68
|
-
|
69
|
-
it "allows dynamic injection of value to prefix" do
|
70
|
-
subject.stub(:origin_name => "")
|
71
|
-
subject.prefix << 'git-sha-1234'
|
72
|
-
subject.data_prefix.should eq 'test.git-sha-1234'
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
it "handles missing configuration namespace" do
|
77
|
-
proc { Fozzie::Configuration.new({:env => 'blbala', :config_path => 'spec/'}) }.should_not raise_error
|
78
|
-
end
|
79
|
-
|
80
|
-
it "#namespaces" do
|
81
|
-
subject.namespaces.should be_kind_of(Array)
|
82
|
-
subject.namespaces.should include("Stats")
|
83
|
-
subject.namespaces.should include("S")
|
84
|
-
end
|
85
|
-
|
86
|
-
describe "#sniff?" do
|
87
|
-
it "defaults to false for testing" do
|
88
|
-
subject.stub(:env => "test")
|
89
|
-
subject.sniff?.should be_false
|
90
|
-
end
|
91
|
-
|
92
|
-
it "defaults true when in development" do
|
93
|
-
subject.stub(:env => "development")
|
94
|
-
subject.sniff?.should be_true
|
95
|
-
end
|
96
|
-
|
97
|
-
it "defaults true when in production" do
|
98
|
-
subject.stub(:env => "production")
|
99
|
-
subject.sniff?.should be_true
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe "#sniff_envs allows configuration for #sniff?" do
|
104
|
-
let!(:sniff_envs) { subject.stub(:sniff_envs => ['test']) }
|
105
|
-
|
106
|
-
it "scopes to return false" do
|
107
|
-
subject.stub(:env => "development")
|
108
|
-
subject.sniff?.should be_false
|
109
|
-
end
|
110
|
-
|
111
|
-
it "scopes to return true" do
|
112
|
-
subject.stub(:env => "test")
|
113
|
-
subject.sniff?.should be_true
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
describe "ignoring prefix" do
|
119
|
-
it "does not use prefix when set to ignore" do
|
120
|
-
subject.disable_prefix
|
121
|
-
subject.ignore_prefix.should eq(true)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'resolv'
|
3
|
+
|
4
|
+
describe Fozzie::Configuration do
|
5
|
+
it "#host" do
|
6
|
+
subject.host.should be_kind_of(String)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "#port" do
|
10
|
+
subject.port.should be_kind_of(Fixnum)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "attempts to load configuration from yaml" do
|
14
|
+
c = Fozzie::Configuration.new({
|
15
|
+
env: 'test',
|
16
|
+
config_path: 'spec/',
|
17
|
+
adapter: :TestAdapter
|
18
|
+
})
|
19
|
+
c.stub(:origin_name => "")
|
20
|
+
c.host.should eq '1.1.1.1'
|
21
|
+
c.port.should eq 9876
|
22
|
+
c.appname.should eq 'fozzie'
|
23
|
+
c.data_prefix.should eq "fozzie#{c.safe_separator}test"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "defaults env" do
|
27
|
+
subject.env.should eq 'test'
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#adapter" do
|
31
|
+
it "throw error on incorrect assignment" do
|
32
|
+
-> { Fozzie::Configuration.new({:env => 'test', :adapter => 'foo'}) }.should raise_error(Fozzie::AdapterMissing)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "defaults adapter to Statsd" do
|
36
|
+
subject.adapter.should be_kind_of(Fozzie::Adapter::Statsd)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#disable_prefix" do
|
41
|
+
it "sets the data_prefix to nil" do
|
42
|
+
subject.disable_prefix
|
43
|
+
subject.data_prefix.should be_nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#prefix and #data_prefix" do
|
48
|
+
it "creates a #data_prefix" do
|
49
|
+
subject.stub(:origin_name => "")
|
50
|
+
subject.data_prefix.should eq 'test'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "creates a #data_prefix with appname when set" do
|
54
|
+
subject.stub(:origin_name => "")
|
55
|
+
subject.appname = 'astoria'
|
56
|
+
subject.data_prefix.should eq 'astoria.test'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "creates a #data_prefix with origin" do
|
60
|
+
subject.appname = 'astoria'
|
61
|
+
subject.data_prefix.should match /^astoria\.(\S+)\.test$/
|
62
|
+
end
|
63
|
+
|
64
|
+
it "allows dynamic assignment of #prefix to derive #data_prefix" do
|
65
|
+
subject.prefix = [:foo, :bar, :car]
|
66
|
+
subject.data_prefix.should eq 'foo.bar.car'
|
67
|
+
end
|
68
|
+
|
69
|
+
it "allows dynamic injection of value to prefix" do
|
70
|
+
subject.stub(:origin_name => "")
|
71
|
+
subject.prefix << 'git-sha-1234'
|
72
|
+
subject.data_prefix.should eq 'test.git-sha-1234'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "handles missing configuration namespace" do
|
77
|
+
proc { Fozzie::Configuration.new({:env => 'blbala', :config_path => 'spec/'}) }.should_not raise_error
|
78
|
+
end
|
79
|
+
|
80
|
+
it "#namespaces" do
|
81
|
+
subject.namespaces.should be_kind_of(Array)
|
82
|
+
subject.namespaces.should include("Stats")
|
83
|
+
subject.namespaces.should include("S")
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#sniff?" do
|
87
|
+
it "defaults to false for testing" do
|
88
|
+
subject.stub(:env => "test")
|
89
|
+
subject.sniff?.should be_false
|
90
|
+
end
|
91
|
+
|
92
|
+
it "defaults true when in development" do
|
93
|
+
subject.stub(:env => "development")
|
94
|
+
subject.sniff?.should be_true
|
95
|
+
end
|
96
|
+
|
97
|
+
it "defaults true when in production" do
|
98
|
+
subject.stub(:env => "production")
|
99
|
+
subject.sniff?.should be_true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "#sniff_envs allows configuration for #sniff?" do
|
104
|
+
let!(:sniff_envs) { subject.stub(:sniff_envs => ['test']) }
|
105
|
+
|
106
|
+
it "scopes to return false" do
|
107
|
+
subject.stub(:env => "development")
|
108
|
+
subject.sniff?.should be_false
|
109
|
+
end
|
110
|
+
|
111
|
+
it "scopes to return true" do
|
112
|
+
subject.stub(:env => "test")
|
113
|
+
subject.sniff?.should be_true
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "ignoring prefix" do
|
119
|
+
it "does not use prefix when set to ignore" do
|
120
|
+
subject.disable_prefix
|
121
|
+
subject.ignore_prefix.should eq(true)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
data/spec/lib/fozzie/dsl_spec.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fozzie/interface'
|
3
|
-
|
4
|
-
describe Fozzie::Dsl do
|
5
|
-
|
6
|
-
subject { Fozzie::Dsl.instance }
|
7
|
-
|
8
|
-
it_behaves_like "interface"
|
9
|
-
|
10
|
-
it "acts an a singleton" do
|
11
|
-
Fozzie.c.namespaces.each do |k|
|
12
|
-
Kernel.const_get(k).should eq Fozzie::Dsl.instance
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fozzie/interface'
|
3
|
+
|
4
|
+
describe Fozzie::Dsl do
|
5
|
+
|
6
|
+
subject { Fozzie::Dsl.instance }
|
7
|
+
|
8
|
+
it_behaves_like "interface"
|
9
|
+
|
10
|
+
it "acts an a singleton" do
|
11
|
+
Fozzie.c.namespaces.each do |k|
|
12
|
+
Kernel.const_get(k).should eq Fozzie::Dsl.instance
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
16
|
end
|
@@ -1,70 +1,70 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fozzie/rack/middleware'
|
3
|
-
|
4
|
-
describe Fozzie::Rack::Middleware do
|
5
|
-
|
6
|
-
subject do
|
7
|
-
unless defined?(RackApp)
|
8
|
-
RackApp = Class.new { def call(env); env end }
|
9
|
-
end
|
10
|
-
Fozzie::Rack::Middleware.new RackApp.new
|
11
|
-
end
|
12
|
-
|
13
|
-
it { should respond_to(:call) }
|
14
|
-
it { should respond_to(:generate_key) }
|
15
|
-
|
16
|
-
describe "subject" do
|
17
|
-
it "returns env on call for testing" do
|
18
|
-
subject.call({}).should == {}
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#call" do
|
23
|
-
|
24
|
-
it "ignored stats request when path not valid" do
|
25
|
-
fake_env = { 'PATH_INFO' => '' }
|
26
|
-
subject.should_receive(:call_without_timer).with(fake_env)
|
27
|
-
subject.call(fake_env)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "passes request with timer on index" do
|
31
|
-
fake_env = { 'PATH_INFO' => '/' }
|
32
|
-
subject.should_receive(:call_with_timer).with('index.render', fake_env)
|
33
|
-
subject.call(fake_env)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "passes request with timer on full path" do
|
37
|
-
fake_env = { 'PATH_INFO' => '/somewhere/nice' }
|
38
|
-
subject.should_receive(:call_with_timer).with('somewhere.nice.render', fake_env)
|
39
|
-
subject.call(fake_env)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "passes request onto app" do
|
43
|
-
envs = ['', '/', '/somewhere/nice'].each do |p|
|
44
|
-
fake_env = { 'PATH_INFO' => p }
|
45
|
-
subject.app.should_receive(:call).with(fake_env)
|
46
|
-
subject.call(fake_env)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "#generate_key" do
|
52
|
-
|
53
|
-
it "returns nil when applicable" do
|
54
|
-
fake_env = { 'PATH_INFO' => '' }
|
55
|
-
subject.generate_key(fake_env).should be_nil
|
56
|
-
end
|
57
|
-
|
58
|
-
it "returns index when root" do
|
59
|
-
fake_env = { 'PATH_INFO' => '/' }
|
60
|
-
subject.generate_key(fake_env).should == 'index.render'
|
61
|
-
end
|
62
|
-
|
63
|
-
it "returns dotted value" do
|
64
|
-
fake_env = { 'PATH_INFO' => '/somewhere/nice' }
|
65
|
-
subject.generate_key(fake_env).should == 'somewhere.nice.render'
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fozzie/rack/middleware'
|
3
|
+
|
4
|
+
describe Fozzie::Rack::Middleware do
|
5
|
+
|
6
|
+
subject do
|
7
|
+
unless defined?(RackApp)
|
8
|
+
RackApp = Class.new { def call(env); env end }
|
9
|
+
end
|
10
|
+
Fozzie::Rack::Middleware.new RackApp.new
|
11
|
+
end
|
12
|
+
|
13
|
+
it { should respond_to(:call) }
|
14
|
+
it { should respond_to(:generate_key) }
|
15
|
+
|
16
|
+
describe "subject" do
|
17
|
+
it "returns env on call for testing" do
|
18
|
+
subject.call({}).should == {}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#call" do
|
23
|
+
|
24
|
+
it "ignored stats request when path not valid" do
|
25
|
+
fake_env = { 'PATH_INFO' => '' }
|
26
|
+
subject.should_receive(:call_without_timer).with(fake_env)
|
27
|
+
subject.call(fake_env)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "passes request with timer on index" do
|
31
|
+
fake_env = { 'PATH_INFO' => '/' }
|
32
|
+
subject.should_receive(:call_with_timer).with('index.render', fake_env)
|
33
|
+
subject.call(fake_env)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "passes request with timer on full path" do
|
37
|
+
fake_env = { 'PATH_INFO' => '/somewhere/nice' }
|
38
|
+
subject.should_receive(:call_with_timer).with('somewhere.nice.render', fake_env)
|
39
|
+
subject.call(fake_env)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "passes request onto app" do
|
43
|
+
envs = ['', '/', '/somewhere/nice'].each do |p|
|
44
|
+
fake_env = { 'PATH_INFO' => p }
|
45
|
+
subject.app.should_receive(:call).with(fake_env)
|
46
|
+
subject.call(fake_env)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#generate_key" do
|
52
|
+
|
53
|
+
it "returns nil when applicable" do
|
54
|
+
fake_env = { 'PATH_INFO' => '' }
|
55
|
+
subject.generate_key(fake_env).should be_nil
|
56
|
+
end
|
57
|
+
|
58
|
+
it "returns index when root" do
|
59
|
+
fake_env = { 'PATH_INFO' => '/' }
|
60
|
+
subject.generate_key(fake_env).should == 'index.render'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns dotted value" do
|
64
|
+
fake_env = { 'PATH_INFO' => '/somewhere/nice' }
|
65
|
+
subject.generate_key(fake_env).should == 'somewhere.nice.render'
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
70
|
end
|
@@ -1,31 +1,31 @@
|
|
1
|
-
require 'fozzie/rack/middleware'
|
2
|
-
require 'sinatra/base'
|
3
|
-
require 'rack/test'
|
4
|
-
|
5
|
-
describe "Sinatra Server with Middleware" do
|
6
|
-
include Rack::Test::Methods
|
7
|
-
|
8
|
-
def app
|
9
|
-
Sinatra.new do
|
10
|
-
set :environment, :test
|
11
|
-
use Fozzie::Rack::Middleware
|
12
|
-
get('/') { "echo" }
|
13
|
-
get('/somewhere/nice') { "echo" }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
it "sends stats request on root" do
|
18
|
-
S.should_receive(:timing).with('index.render', anything, anything)
|
19
|
-
get '/'
|
20
|
-
last_response.should be_ok
|
21
|
-
last_response.body.should == 'echo'
|
22
|
-
end
|
23
|
-
|
24
|
-
it "sends stats request on nested path" do
|
25
|
-
S.should_receive(:timing).with('somewhere.nice.render', anything, anything)
|
26
|
-
|
27
|
-
get '/somewhere/nice'
|
28
|
-
last_response.should be_ok
|
29
|
-
last_response.body.should == 'echo'
|
30
|
-
end
|
1
|
+
require 'fozzie/rack/middleware'
|
2
|
+
require 'sinatra/base'
|
3
|
+
require 'rack/test'
|
4
|
+
|
5
|
+
describe "Sinatra Server with Middleware" do
|
6
|
+
include Rack::Test::Methods
|
7
|
+
|
8
|
+
def app
|
9
|
+
Sinatra.new do
|
10
|
+
set :environment, :test
|
11
|
+
use Fozzie::Rack::Middleware
|
12
|
+
get('/') { "echo" }
|
13
|
+
get('/somewhere/nice') { "echo" }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "sends stats request on root" do
|
18
|
+
S.should_receive(:timing).with('index.render', anything, anything)
|
19
|
+
get '/'
|
20
|
+
last_response.should be_ok
|
21
|
+
last_response.body.should == 'echo'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "sends stats request on nested path" do
|
25
|
+
S.should_receive(:timing).with('somewhere.nice.render', anything, anything)
|
26
|
+
|
27
|
+
get '/somewhere/nice'
|
28
|
+
last_response.should be_ok
|
29
|
+
last_response.body.should == 'echo'
|
30
|
+
end
|
31
31
|
end
|