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 ADDED
@@ -0,0 +1 @@
1
+ ruby-1.8.7-p249
data/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.8.7
4
- - 1.9.2
5
- - 1.9.3
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.0.0
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'
@@ -42,7 +42,7 @@ module LitmusPaper
42
42
  def _fetch_stats
43
43
  Timeout.timeout(@timeout) do
44
44
  UNIXSocket.open(@domain_socket) do |socket|
45
- socket.send "show stat\n", 0
45
+ socket.puts("show stat")
46
46
  socket.read
47
47
  end
48
48
  end
@@ -0,0 +1,17 @@
1
+ module LitmusPaper
2
+ module Metric
3
+ class ConstantMetric
4
+ def initialize(weight)
5
+ @weight = weight
6
+ end
7
+
8
+ def current_health
9
+ @weight
10
+ end
11
+
12
+ def to_s
13
+ "Metric::ConstantMetric(#{@weight})"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module LitmusPaper
2
- VERSION = "0.7.9"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -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
- MIICKzCCAZQCCQDNHjwe58QzrjANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJV
3
- UzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xEjAQBgNVBAoT
4
- CUJyYWludHJlZTESMBAGA1UEAxMJMTI3LjAuMC4xMB4XDTEyMDYwNTIxNTYzMloX
5
- DTEzMDYwNTIxNTYzMlowWjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lz
6
- MRAwDgYDVQQHEwdDaGljYWdvMRIwEAYDVQQKEwlCcmFpbnRyZWUxEjAQBgNVBAMT
7
- CTEyNy4wLjAuMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApqUJrh8TczVL
8
- 9FRom1TM1CQ/3PfiYqQ2CNtJM3Zpw3g61g8POmgrUnExbIUA/h7Cn1IzzITX5IiE
9
- P4orsElrgc+T+6E4DGBA1mOpbFP3AlpIV90+cAIDuZE6trgxeW0OjneSiGmSR+gv
10
- NY7B8HA1HV38eIYnb0WlLOXrSTO2O0sCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAb
11
- GCVAF99klFo62Snqivm8Xg/siacNWx+NbFJT5FRH3yJEFTOboFBqIdjkw3Ez+FMZ
12
- T4Buz5IUW0GH6iHFula2X9Yp28qdMaY2ftOegF2TubfIJMtYlK0iY+nrlKIRLVSe
13
- XyKCau0+/NiQ+WHYrK/QVuGiC8b9Ol5R+zD1yJIH4g==
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
- begin
13
- socket.puts <<-DATA
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
- socket.close
28
- rescue Errno::EPIPE
29
- # client closed the connection before we got to write
30
- rescue Errno::EINVAL
31
- # client closed connection because of timeout
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
@@ -1,6 +1,8 @@
1
1
  require 'sinatra/base'
2
2
 
3
3
  class HttpTestServer < Sinatra::Base
4
+ set :protection, :except => :path_traversal
5
+
4
6
  get "/method" do
5
7
  text 200, "GET"
6
8
  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
- hash: 17
5
- prerelease: false
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
- date: 2013-05-20 00:00:00 +00:00
19
- default_executable:
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- requirement: &id003 !ruby/object:Gem::Requirement
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
89
73
  none: false
90
- requirements:
74
+ requirements:
91
75
  - - ~>
92
- - !ruby/object:Gem::Version
93
- hash: 35
94
- segments:
95
- - 4
96
- - 6
97
- - 2
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
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
105
89
  none: false
106
- requirements:
90
+ requirements:
107
91
  - - ~>
108
- - !ruby/object:Gem::Version
109
- hash: 43
110
- segments:
111
- - 2
112
- - 9
113
- - 0
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
- requirement: &id007 !ruby/object:Gem::Requirement
104
+ version_requirements: !ruby/object:Gem::Requirement
121
105
  none: false
122
- requirements:
106
+ requirements:
123
107
  - - ~>
124
- - !ruby/object:Gem::Version
125
- hash: 5
126
- segments:
127
- - 0
128
- - 6
129
- - 1
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
- requirement: &id008 !ruby/object:Gem::Requirement
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
- requirement: &id009 !ruby/object:Gem::Requirement
136
+ version_requirements: !ruby/object:Gem::Requirement
154
137
  none: false
155
- requirements:
138
+ requirements:
156
139
  - - ~>
157
- - !ruby/object:Gem::Version
158
- hash: 17
159
- segments:
160
- - 0
161
- - 13
162
- version: "0.13"
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
- version_requirements: *id009
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
- - .rvmrc
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
- hash: 3
261
- segments:
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
- hash: 3
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.3.7
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
@@ -1,13 +0,0 @@
1
- class ConstantMetric
2
- def initialize(constant)
3
- @constant = constant
4
- end
5
-
6
- def current_health
7
- @constant
8
- end
9
-
10
- def to_s
11
- "#{self.class.name}(#{@constant})"
12
- end
13
- end