litmus_paper 0.7.9 → 0.8.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/.ruby-version +1 -0
- data/.travis.yml +4 -3
- data/lib/litmus_paper.rb +1 -0
- data/lib/litmus_paper/dependency/haproxy_backends.rb +1 -1
- data/lib/litmus_paper/metric/constant_metric.rb +17 -0
- data/lib/litmus_paper/version.rb +1 -1
- data/spec/litmus_paper/app_spec.rb +17 -17
- data/spec/litmus_paper/cli/admin_spec.rb +1 -1
- data/spec/litmus_paper/dependency/haproxy_backends_spec.rb +0 -3
- data/spec/litmus_paper/health_spec.rb +8 -8
- data/spec/litmus_paper/metric/constant_metric_spec.rb +17 -0
- data/spec/litmus_paper/service_spec.rb +7 -7
- data/spec/ssl/server.crt +16 -12
- data/spec/support/haproxy_test_socket +10 -7
- data/spec/support/http_test_server.rb +2 -0
- metadata +127 -145
- data/.rvmrc +0 -1
- data/spec/support/constant_metric.rb +0 -13
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-1.8.7-p249
|
data/.travis.yml
CHANGED
data/lib/litmus_paper.rb
CHANGED
@@ -35,6 +35,7 @@ require 'litmus_paper/forced_health'
|
|
35
35
|
require 'litmus_paper/logger'
|
36
36
|
require 'litmus_paper/metric/available_memory'
|
37
37
|
require 'litmus_paper/metric/big_brother_service'
|
38
|
+
require 'litmus_paper/metric/constant_metric'
|
38
39
|
require 'litmus_paper/metric/cpu_load'
|
39
40
|
require 'litmus_paper/service'
|
40
41
|
require 'litmus_paper/status_file'
|
data/lib/litmus_paper/version.rb
CHANGED
@@ -55,7 +55,7 @@ describe LitmusPaper::App do
|
|
55
55
|
|
56
56
|
describe "POST /up" do
|
57
57
|
it "creates a global upfile" do
|
58
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
58
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
59
59
|
LitmusPaper.services['test'] = test_service
|
60
60
|
|
61
61
|
post "/up", :reason => "up for testing"
|
@@ -69,7 +69,7 @@ describe LitmusPaper::App do
|
|
69
69
|
|
70
70
|
describe "POST /down" do
|
71
71
|
it "creates a global downfile" do
|
72
|
-
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [ConstantMetric.new(100)])
|
72
|
+
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
73
73
|
LitmusPaper.services['test'] = test_service
|
74
74
|
|
75
75
|
post "/down", :reason => "down for testing"
|
@@ -83,7 +83,7 @@ describe LitmusPaper::App do
|
|
83
83
|
|
84
84
|
describe "POST /:service/up" do
|
85
85
|
it "creates a service specific upfile" do
|
86
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
86
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
87
87
|
LitmusPaper.services['test'] = test_service
|
88
88
|
|
89
89
|
post "/test/up", :reason => "up for testing"
|
@@ -97,7 +97,7 @@ describe LitmusPaper::App do
|
|
97
97
|
|
98
98
|
describe "DELETE /up" do
|
99
99
|
it "removes the global upfile" do
|
100
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
100
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
101
101
|
LitmusPaper.services['test'] = test_service
|
102
102
|
|
103
103
|
post "/up", :reason => "up for testing"
|
@@ -115,7 +115,7 @@ describe LitmusPaper::App do
|
|
115
115
|
end
|
116
116
|
|
117
117
|
it "404s if there is no upfile" do
|
118
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
118
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
119
119
|
|
120
120
|
delete "/up"
|
121
121
|
|
@@ -125,7 +125,7 @@ describe LitmusPaper::App do
|
|
125
125
|
|
126
126
|
describe "DELETE /down" do
|
127
127
|
it "removes the global downfile" do
|
128
|
-
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [ConstantMetric.new(100)])
|
128
|
+
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
129
129
|
LitmusPaper.services['test'] = test_service
|
130
130
|
|
131
131
|
post "/down", :reason => "down for testing"
|
@@ -145,7 +145,7 @@ describe LitmusPaper::App do
|
|
145
145
|
|
146
146
|
describe "DELETE /:service/up" do
|
147
147
|
it "removes a service specific upfile" do
|
148
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
148
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
149
149
|
LitmusPaper.services['test'] = test_service
|
150
150
|
|
151
151
|
post "/test/up", :reason => "up for testing"
|
@@ -165,7 +165,7 @@ describe LitmusPaper::App do
|
|
165
165
|
|
166
166
|
describe "GET /:service/status" do
|
167
167
|
it "is successful when the service is passing" do
|
168
|
-
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [ConstantMetric.new(100)])
|
168
|
+
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
169
169
|
LitmusPaper.services['test'] = test_service
|
170
170
|
|
171
171
|
get "/test/status"
|
@@ -176,11 +176,11 @@ describe LitmusPaper::App do
|
|
176
176
|
last_response.header.should_not have_key("X-Health-Forced")
|
177
177
|
last_response.body.should match(/Health: 100/)
|
178
178
|
last_response.body.should match(/AlwaysAvailableDependency: OK/)
|
179
|
-
last_response.body.should include("ConstantMetric(100): 100")
|
179
|
+
last_response.body.should include("Metric::ConstantMetric(100): 100")
|
180
180
|
end
|
181
181
|
|
182
182
|
it "is 'service unavailable' when the check fails" do
|
183
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
183
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
184
184
|
LitmusPaper.services['test'] = test_service
|
185
185
|
|
186
186
|
get "/test/status"
|
@@ -199,7 +199,7 @@ describe LitmusPaper::App do
|
|
199
199
|
end
|
200
200
|
|
201
201
|
it "is 'service unavailable' when an up file and down file exists" do
|
202
|
-
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [ConstantMetric.new(100)])
|
202
|
+
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
203
203
|
LitmusPaper.services['test'] = test_service
|
204
204
|
|
205
205
|
LitmusPaper::StatusFile.service_up_file("test").create("Up for testing")
|
@@ -213,7 +213,7 @@ describe LitmusPaper::App do
|
|
213
213
|
end
|
214
214
|
|
215
215
|
it "is 'service available' when an up file exists" do
|
216
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
216
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
217
217
|
LitmusPaper.services['test'] = test_service
|
218
218
|
|
219
219
|
LitmusPaper::StatusFile.service_up_file("test").create("Up for testing")
|
@@ -226,7 +226,7 @@ describe LitmusPaper::App do
|
|
226
226
|
end
|
227
227
|
|
228
228
|
it "is 'service available' when an up file exists" do
|
229
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
229
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
230
230
|
LitmusPaper.services['test'] = test_service
|
231
231
|
|
232
232
|
LitmusPaper::StatusFile.service_up_file("test").create("Up for testing")
|
@@ -239,7 +239,7 @@ describe LitmusPaper::App do
|
|
239
239
|
end
|
240
240
|
|
241
241
|
it "is 'service unavailable' when a global down file and up file exists" do
|
242
|
-
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [ConstantMetric.new(100)])
|
242
|
+
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
243
243
|
LitmusPaper.services['test'] = test_service
|
244
244
|
|
245
245
|
LitmusPaper::StatusFile.global_down_file.create("Down for testing")
|
@@ -253,7 +253,7 @@ describe LitmusPaper::App do
|
|
253
253
|
end
|
254
254
|
|
255
255
|
it "is 'service unavailable' when a global down file exists" do
|
256
|
-
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [ConstantMetric.new(100)])
|
256
|
+
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
257
257
|
LitmusPaper.services['test'] = test_service
|
258
258
|
|
259
259
|
LitmusPaper::StatusFile.global_down_file.create("Down for testing")
|
@@ -266,7 +266,7 @@ describe LitmusPaper::App do
|
|
266
266
|
end
|
267
267
|
|
268
268
|
it "is successful when a global up file exists" do
|
269
|
-
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [ConstantMetric.new(100)])
|
269
|
+
test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
270
270
|
LitmusPaper.services['test'] = test_service
|
271
271
|
|
272
272
|
LitmusPaper::StatusFile.global_up_file.create("Up for testing")
|
@@ -279,7 +279,7 @@ describe LitmusPaper::App do
|
|
279
279
|
end
|
280
280
|
|
281
281
|
it "resets the Facter cache" do
|
282
|
-
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [ConstantMetric.new(100)])
|
282
|
+
test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
|
283
283
|
LitmusPaper.services['test'] = test_service
|
284
284
|
|
285
285
|
get "/test/status"
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
3
|
describe 'litmusctl' do
|
5
4
|
def _litmusctl(args)
|
6
5
|
`bundle exec ruby -I lib bin/litmusctl #{args} -c #{TEST_CONFIG}`
|
7
6
|
end
|
8
7
|
|
9
8
|
before(:all) do
|
9
|
+
FileUtils.mkdir_p('tmp')
|
10
10
|
CONFIG_FILE = 'tmp/test.config'
|
11
11
|
system("cp #{TEST_CONFIG} #{CONFIG_FILE}")
|
12
12
|
ENV['LITMUS_CONFIG'] = CONFIG_FILE
|
@@ -9,13 +9,11 @@ describe LitmusPaper::Dependency::HaproxyBackends do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
it "is available if at least one backend is up" do
|
12
|
-
pending "Broken on TravisCI 1.9.x; works locally" if ENV["TRAVIS_RUBY_VERSION"] =~ /\A1.9/
|
13
12
|
haproxy = LitmusPaper::Dependency::HaproxyBackends.new("/tmp/stub-haproxy-stats", "yellow_cluster")
|
14
13
|
haproxy.should be_available
|
15
14
|
end
|
16
15
|
|
17
16
|
it "returns false if no nodes are available" do
|
18
|
-
pending "Broken on TravisCI 1.9.x; works locally" if ENV["TRAVIS_RUBY_VERSION"] =~ /\A1.9/
|
19
17
|
haproxy = LitmusPaper::Dependency::HaproxyBackends.new("/tmp/stub-haproxy-stats", "orange_cluster")
|
20
18
|
haproxy.should_not be_available
|
21
19
|
end
|
@@ -29,7 +27,6 @@ describe LitmusPaper::Dependency::HaproxyBackends do
|
|
29
27
|
end
|
30
28
|
|
31
29
|
it "returns false after a configurable number of seconds" do
|
32
|
-
pending "Broken on TravisCI 1.9.x; works locally" if ENV["TRAVIS_RUBY_VERSION"] =~ /\A1.9/
|
33
30
|
haproxy = LitmusPaper::Dependency::HaproxyBackends.new("/tmp/stub-haproxy-stats", "yellow_cluster", :timeout_seconds => 1)
|
34
31
|
haproxy.should_not be_available
|
35
32
|
end
|
@@ -4,13 +4,13 @@ describe LitmusPaper::Health do
|
|
4
4
|
describe "ok?" do
|
5
5
|
it "is true when health is greater than 0" do
|
6
6
|
health = LitmusPaper::Health.new
|
7
|
-
health.perform(ConstantMetric.new(50))
|
7
|
+
health.perform(LitmusPaper::Metric::ConstantMetric.new(50))
|
8
8
|
health.should be_ok
|
9
9
|
end
|
10
10
|
|
11
11
|
it "is false when health is 0" do
|
12
12
|
health = LitmusPaper::Health.new
|
13
|
-
health.perform(ConstantMetric.new(0))
|
13
|
+
health.perform(LitmusPaper::Metric::ConstantMetric.new(0))
|
14
14
|
health.should_not be_ok
|
15
15
|
end
|
16
16
|
end
|
@@ -18,8 +18,8 @@ describe LitmusPaper::Health do
|
|
18
18
|
describe "perform" do
|
19
19
|
it "executes the check and adds its value to its health" do
|
20
20
|
health = LitmusPaper::Health.new
|
21
|
-
health.perform(ConstantMetric.new(50))
|
22
|
-
health.perform(ConstantMetric.new(25))
|
21
|
+
health.perform(LitmusPaper::Metric::ConstantMetric.new(50))
|
22
|
+
health.perform(LitmusPaper::Metric::ConstantMetric.new(25))
|
23
23
|
health.value.should == 75
|
24
24
|
end
|
25
25
|
end
|
@@ -28,7 +28,7 @@ describe LitmusPaper::Health do
|
|
28
28
|
it "checks the dependency and modifies the value accordingly" do
|
29
29
|
health = LitmusPaper::Health.new
|
30
30
|
health.ensure(NeverAvailableDependency.new)
|
31
|
-
health.perform(ConstantMetric.new(50))
|
31
|
+
health.perform(LitmusPaper::Metric::ConstantMetric.new(50))
|
32
32
|
health.value.should == 0
|
33
33
|
end
|
34
34
|
end
|
@@ -45,8 +45,8 @@ describe LitmusPaper::Health do
|
|
45
45
|
|
46
46
|
it "includes the health of individual metrics" do
|
47
47
|
health = LitmusPaper::Health.new
|
48
|
-
health.perform(ConstantMetric.new(12))
|
49
|
-
health.perform(ConstantMetric.new(34))
|
48
|
+
health.perform(LitmusPaper::Metric::ConstantMetric.new(12))
|
49
|
+
health.perform(LitmusPaper::Metric::ConstantMetric.new(34))
|
50
50
|
|
51
51
|
health.summary.should include("ConstantMetric(12): 12")
|
52
52
|
health.summary.should include("ConstantMetric(34): 34")
|
@@ -54,7 +54,7 @@ describe LitmusPaper::Health do
|
|
54
54
|
|
55
55
|
it "only runs each metric once" do
|
56
56
|
health = LitmusPaper::Health.new
|
57
|
-
metric = ConstantMetric.new(12)
|
57
|
+
metric = LitmusPaper::Metric::ConstantMetric.new(12)
|
58
58
|
metric.should_receive(:current_health).once.and_return(12)
|
59
59
|
|
60
60
|
health.perform(metric)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LitmusPaper::Metric::ConstantMetric do
|
4
|
+
describe "#current_health" do
|
5
|
+
it "is the value of the weight" do
|
6
|
+
always_healthy = LitmusPaper::Metric::ConstantMetric.new(100)
|
7
|
+
always_healthy.current_health.should == 100
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#to_s" do
|
12
|
+
it "is the check name and the weight" do
|
13
|
+
always_healthy = LitmusPaper::Metric::ConstantMetric.new(50)
|
14
|
+
always_healthy.to_s.should == "Metric::ConstantMetric(50)"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -4,8 +4,8 @@ describe LitmusPaper::Service do
|
|
4
4
|
describe "health" do
|
5
5
|
it "is the sum of all the metrics' weight" do
|
6
6
|
service = LitmusPaper::Service.new('test')
|
7
|
-
service.measure_health ConstantMetric, :weight => 50
|
8
|
-
service.measure_health ConstantMetric, :weight => 25
|
7
|
+
service.measure_health LitmusPaper::Metric::ConstantMetric, :weight => 50
|
8
|
+
service.measure_health LitmusPaper::Metric::ConstantMetric, :weight => 25
|
9
9
|
|
10
10
|
service.current_health.value.should == 75
|
11
11
|
end
|
@@ -13,7 +13,7 @@ describe LitmusPaper::Service do
|
|
13
13
|
it "is 0 when a dependency fails" do
|
14
14
|
service = LitmusPaper::Service.new('test')
|
15
15
|
service.depends NeverAvailableDependency
|
16
|
-
service.measure_health ConstantMetric, :weight => 50
|
16
|
+
service.measure_health LitmusPaper::Metric::ConstantMetric, :weight => 50
|
17
17
|
|
18
18
|
service.current_health.value.should == 0
|
19
19
|
end
|
@@ -21,7 +21,7 @@ describe LitmusPaper::Service do
|
|
21
21
|
it "is 0 when a down file exists" do
|
22
22
|
service = LitmusPaper::Service.new('test')
|
23
23
|
service.depends AlwaysAvailableDependency
|
24
|
-
service.measure_health ConstantMetric, :weight => 50
|
24
|
+
service.measure_health LitmusPaper::Metric::ConstantMetric, :weight => 50
|
25
25
|
|
26
26
|
LitmusPaper::StatusFile.service_down_file("test").create("Down for testing")
|
27
27
|
|
@@ -32,7 +32,7 @@ describe LitmusPaper::Service do
|
|
32
32
|
it "is 0 when a global down file exists" do
|
33
33
|
service = LitmusPaper::Service.new('test')
|
34
34
|
service.depends AlwaysAvailableDependency
|
35
|
-
service.measure_health ConstantMetric, :weight => 50
|
35
|
+
service.measure_health LitmusPaper::Metric::ConstantMetric, :weight => 50
|
36
36
|
|
37
37
|
LitmusPaper::StatusFile.global_down_file.create("Down for testing")
|
38
38
|
|
@@ -43,7 +43,7 @@ describe LitmusPaper::Service do
|
|
43
43
|
it "is 100 when an up file exists" do
|
44
44
|
service = LitmusPaper::Service.new('test')
|
45
45
|
service.depends NeverAvailableDependency
|
46
|
-
service.measure_health ConstantMetric, :weight => 50
|
46
|
+
service.measure_health LitmusPaper::Metric::ConstantMetric, :weight => 50
|
47
47
|
|
48
48
|
LitmusPaper::StatusFile.service_up_file("test").create("Up for testing")
|
49
49
|
|
@@ -54,7 +54,7 @@ describe LitmusPaper::Service do
|
|
54
54
|
it "is 100 when a global up file exists" do
|
55
55
|
service = LitmusPaper::Service.new('test')
|
56
56
|
service.depends NeverAvailableDependency
|
57
|
-
service.measure_health ConstantMetric, :weight => 50
|
57
|
+
service.measure_health LitmusPaper::Metric::ConstantMetric, :weight => 50
|
58
58
|
|
59
59
|
LitmusPaper::StatusFile.global_up_file.create("Up for testing")
|
60
60
|
|
data/spec/ssl/server.crt
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
2
|
+
MIIC9DCCAl2gAwIBAgIJAMx9EGIRlAUoMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV
|
3
|
+
BAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQMA4GA1UEBxMHQ2hpY2FnbzESMBAG
|
4
|
+
A1UEChMJQnJhaW50cmVlMRIwEAYDVQQDEwkxMjcuMC4wLjEwIBcNMTMwNzA3MDAx
|
5
|
+
MTU2WhgPMjExMzA2MTMwMDExNTZaMFoxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJ
|
6
|
+
bGxpbm9pczEQMA4GA1UEBxMHQ2hpY2FnbzESMBAGA1UEChMJQnJhaW50cmVlMRIw
|
7
|
+
EAYDVQQDEwkxMjcuMC4wLjEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKal
|
8
|
+
Ca4fE3M1S/RUaJtUzNQkP9z34mKkNgjbSTN2acN4OtYPDzpoK1JxMWyFAP4ewp9S
|
9
|
+
M8yE1+SIhD+KK7BJa4HPk/uhOAxgQNZjqWxT9wJaSFfdPnACA7mROra4MXltDo53
|
10
|
+
kohpkkfoLzWOwfBwNR1d/HiGJ29FpSzl60kztjtLAgMBAAGjgb8wgbwwHQYDVR0O
|
11
|
+
BBYEFL0SW2V/u7G9MvC3EoDT3b12fk0EMIGMBgNVHSMEgYQwgYGAFL0SW2V/u7G9
|
12
|
+
MvC3EoDT3b12fk0EoV6kXDBaMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5v
|
13
|
+
aXMxEDAOBgNVBAcTB0NoaWNhZ28xEjAQBgNVBAoTCUJyYWludHJlZTESMBAGA1UE
|
14
|
+
AxMJMTI3LjAuMC4xggkAzH0QYhGUBSgwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B
|
15
|
+
AQUFAAOBgQAi6Piwyj50rOidzItRl14BaT2QHqKk1fbG2/k/gtmSHDmZGRCz70hV
|
16
|
+
ZNLmDaxE1UIYJvnyhcAtuwqCKnUShGWIeSaPn8bKD1sHn++ILGXM3TSouzT3nv1X
|
17
|
+
nERbDj5OSWjGNXLTLS0dGgLDGpG76wQVB21vMuN62aQnKtp1MipQMw==
|
14
18
|
-----END CERTIFICATE-----
|
@@ -8,9 +8,11 @@ sleep_time = sleep_time.to_f
|
|
8
8
|
|
9
9
|
UNIXServer.open(ARGV[0]) do |server|
|
10
10
|
socket = server.accept
|
11
|
+
command = socket.gets.chomp
|
11
12
|
sleep sleep_time
|
12
|
-
|
13
|
-
|
13
|
+
if command == "show stat"
|
14
|
+
begin
|
15
|
+
socket.puts <<-DATA
|
14
16
|
# pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt,
|
15
17
|
stats,FRONTEND,,,0,0,2000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,1,0,,,,0,0,0,0,,,,0,0,0,0,0,0,,0,0,0,,,
|
16
18
|
stats_backend,BACKEND,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,UP,0,0,0,,0,35,0,,1,2,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0,
|
@@ -24,10 +26,11 @@ orange_cluster,orange1,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,1,1,0,0,0,35,0,,1,6,1,,0,
|
|
24
26
|
orange_cluster,orange2,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,1,1,0,0,0,35,0,,1,6,1,,0,,2,0,,0,L4OK,,5,,,,,,,0,,,,0,0,
|
25
27
|
orange_cluster,BACKEND,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,DOWN,1,1,0,,0,35,0,,1,6,0,,0,,1,0,,0,,,,,,,,,,,,,,0,0,
|
26
28
|
DATA
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
socket.close
|
30
|
+
rescue Errno::EPIPE
|
31
|
+
# client closed the connection before we got to write
|
32
|
+
rescue Errno::EINVAL
|
33
|
+
# client closed connection because of timeout
|
34
|
+
end
|
32
35
|
end
|
33
36
|
end
|
metadata
CHANGED
@@ -1,181 +1,172 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: litmus_paper
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 7
|
9
|
-
- 9
|
10
|
-
version: 0.7.9
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.0
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Braintreeps
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-10-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: sinatra
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
18
|
+
requirements:
|
27
19
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 31
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 3
|
33
|
-
- 2
|
20
|
+
- !ruby/object:Gem::Version
|
34
21
|
version: 1.3.2
|
35
22
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: facter
|
39
23
|
prerelease: false
|
40
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.3.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: facter
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
41
33
|
none: false
|
42
|
-
requirements:
|
34
|
+
requirements:
|
43
35
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 1
|
46
|
-
segments:
|
47
|
-
- 1
|
48
|
-
- 6
|
49
|
-
- 7
|
36
|
+
- !ruby/object:Gem::Version
|
50
37
|
version: 1.6.7
|
51
38
|
type: :runtime
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: SyslogLogger
|
55
39
|
prerelease: false
|
56
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.6.7
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: SyslogLogger
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
57
49
|
none: false
|
58
|
-
requirements:
|
50
|
+
requirements:
|
59
51
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
hash: 5
|
62
|
-
segments:
|
63
|
-
- 1
|
64
|
-
- 4
|
65
|
-
- 1
|
52
|
+
- !ruby/object:Gem::Version
|
66
53
|
version: 1.4.1
|
67
54
|
type: :runtime
|
68
|
-
version_requirements: *id003
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: popen4
|
71
55
|
prerelease: false
|
72
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.4.1
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: popen4
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
73
65
|
none: false
|
74
|
-
requirements:
|
66
|
+
requirements:
|
75
67
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
hash: 31
|
78
|
-
segments:
|
79
|
-
- 0
|
80
|
-
- 1
|
81
|
-
- 2
|
68
|
+
- !ruby/object:Gem::Version
|
82
69
|
version: 0.1.2
|
83
70
|
type: :runtime
|
84
|
-
version_requirements: *id004
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: unicorn
|
87
71
|
prerelease: false
|
88
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
73
|
none: false
|
90
|
-
requirements:
|
74
|
+
requirements:
|
91
75
|
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.1.2
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: unicorn
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
98
85
|
version: 4.6.2
|
99
86
|
type: :runtime
|
100
|
-
version_requirements: *id005
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
name: rspec
|
103
87
|
prerelease: false
|
104
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
89
|
none: false
|
106
|
-
requirements:
|
90
|
+
requirements:
|
107
91
|
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 4.6.2
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rspec
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
114
101
|
version: 2.9.0
|
115
102
|
type: :development
|
116
|
-
version_requirements: *id006
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: rack-test
|
119
103
|
prerelease: false
|
120
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
105
|
none: false
|
122
|
-
requirements:
|
106
|
+
requirements:
|
123
107
|
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 2.9.0
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rack-test
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
130
117
|
version: 0.6.1
|
131
118
|
type: :development
|
132
|
-
version_requirements: *id007
|
133
|
-
- !ruby/object:Gem::Dependency
|
134
|
-
name: rake
|
135
119
|
prerelease: false
|
136
|
-
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.6.1
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rake
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
137
129
|
none: false
|
138
|
-
requirements:
|
130
|
+
requirements:
|
139
131
|
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
hash: 11
|
142
|
-
segments:
|
143
|
-
- 0
|
144
|
-
- 9
|
145
|
-
- 2
|
146
|
-
- 2
|
132
|
+
- !ruby/object:Gem::Version
|
147
133
|
version: 0.9.2.2
|
148
134
|
type: :development
|
149
|
-
version_requirements: *id008
|
150
|
-
- !ruby/object:Gem::Dependency
|
151
|
-
name: rake_commit
|
152
135
|
prerelease: false
|
153
|
-
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
154
137
|
none: false
|
155
|
-
requirements:
|
138
|
+
requirements:
|
156
139
|
- - ~>
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.9.2.2
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rake_commit
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0.13'
|
163
150
|
type: :development
|
164
|
-
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0.13'
|
165
158
|
description: Backend health tester for HA Services
|
166
|
-
email:
|
159
|
+
email:
|
167
160
|
- code@getbraintree.com
|
168
|
-
executables:
|
161
|
+
executables:
|
169
162
|
- litmus
|
170
163
|
- litmusctl
|
171
164
|
extensions: []
|
172
|
-
|
173
165
|
extra_rdoc_files: []
|
174
|
-
|
175
|
-
files:
|
166
|
+
files:
|
176
167
|
- .gitignore
|
177
168
|
- .rake_commit
|
178
|
-
- .
|
169
|
+
- .ruby-version
|
179
170
|
- .travis.yml
|
180
171
|
- Gemfile
|
181
172
|
- LICENSE
|
@@ -205,6 +196,7 @@ files:
|
|
205
196
|
- lib/litmus_paper/logger.rb
|
206
197
|
- lib/litmus_paper/metric/available_memory.rb
|
207
198
|
- lib/litmus_paper/metric/big_brother_service.rb
|
199
|
+
- lib/litmus_paper/metric/constant_metric.rb
|
208
200
|
- lib/litmus_paper/metric/cpu_load.rb
|
209
201
|
- lib/litmus_paper/service.rb
|
210
202
|
- lib/litmus_paper/status_file.rb
|
@@ -221,6 +213,7 @@ files:
|
|
221
213
|
- spec/litmus_paper/health_spec.rb
|
222
214
|
- spec/litmus_paper/metric/available_memory_spec.rb
|
223
215
|
- spec/litmus_paper/metric/big_brother_service_spec.rb
|
216
|
+
- spec/litmus_paper/metric/constant_metric_spec.rb
|
224
217
|
- spec/litmus_paper/metric/cpu_load_spec.rb
|
225
218
|
- spec/litmus_paper/service_spec.rb
|
226
219
|
- spec/litmus_paper/status_file_spec.rb
|
@@ -232,7 +225,6 @@ files:
|
|
232
225
|
- spec/support/always_available_dependency.rb
|
233
226
|
- spec/support/config.d/passing_test.config
|
234
227
|
- spec/support/config.d/test.config
|
235
|
-
- spec/support/constant_metric.rb
|
236
228
|
- spec/support/haproxy_test_socket
|
237
229
|
- spec/support/http_test_server.rb
|
238
230
|
- spec/support/http_test_server_config.ru
|
@@ -243,41 +235,31 @@ files:
|
|
243
235
|
- spec/support/test.d.config
|
244
236
|
- spec/support/test.reload.config
|
245
237
|
- spec/support/test.unicorn.config
|
246
|
-
has_rdoc: true
|
247
238
|
homepage: https://github.com/braintree/litmus_paper
|
248
239
|
licenses: []
|
249
|
-
|
250
240
|
post_install_message:
|
251
241
|
rdoc_options: []
|
252
|
-
|
253
|
-
require_paths:
|
242
|
+
require_paths:
|
254
243
|
- lib
|
255
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
244
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
256
245
|
none: false
|
257
|
-
requirements:
|
258
|
-
- -
|
259
|
-
- !ruby/object:Gem::Version
|
260
|
-
|
261
|
-
|
262
|
-
- 0
|
263
|
-
version: "0"
|
264
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - ! '>='
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '0'
|
250
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
265
251
|
none: false
|
266
|
-
requirements:
|
267
|
-
- -
|
268
|
-
- !ruby/object:Gem::Version
|
269
|
-
|
270
|
-
segments:
|
271
|
-
- 0
|
272
|
-
version: "0"
|
252
|
+
requirements:
|
253
|
+
- - ! '>='
|
254
|
+
- !ruby/object:Gem::Version
|
255
|
+
version: '0'
|
273
256
|
requirements: []
|
274
|
-
|
275
257
|
rubyforge_project:
|
276
|
-
rubygems_version: 1.
|
258
|
+
rubygems_version: 1.8.23
|
277
259
|
signing_key:
|
278
260
|
specification_version: 3
|
279
261
|
summary: Backend health tester for HA Services, partner project of big_brother
|
280
|
-
test_files:
|
262
|
+
test_files:
|
281
263
|
- spec/litmus_paper/app_spec.rb
|
282
264
|
- spec/litmus_paper/cli/admin_spec.rb
|
283
265
|
- spec/litmus_paper/configuration_file_spec.rb
|
@@ -289,6 +271,7 @@ test_files:
|
|
289
271
|
- spec/litmus_paper/health_spec.rb
|
290
272
|
- spec/litmus_paper/metric/available_memory_spec.rb
|
291
273
|
- spec/litmus_paper/metric/big_brother_service_spec.rb
|
274
|
+
- spec/litmus_paper/metric/constant_metric_spec.rb
|
292
275
|
- spec/litmus_paper/metric/cpu_load_spec.rb
|
293
276
|
- spec/litmus_paper/service_spec.rb
|
294
277
|
- spec/litmus_paper/status_file_spec.rb
|
@@ -300,7 +283,6 @@ test_files:
|
|
300
283
|
- spec/support/always_available_dependency.rb
|
301
284
|
- spec/support/config.d/passing_test.config
|
302
285
|
- spec/support/config.d/test.config
|
303
|
-
- spec/support/constant_metric.rb
|
304
286
|
- spec/support/haproxy_test_socket
|
305
287
|
- spec/support/http_test_server.rb
|
306
288
|
- spec/support/http_test_server_config.ru
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use ruby-1.8.7-p249@litmus_paper --create
|