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 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