litmus_paper 0.7.9 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|