litmus_paper 0.6.1 → 0.6.2
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/lib/litmus_paper/app.rb +20 -3
- data/lib/litmus_paper/forced_health.rb +4 -0
- data/lib/litmus_paper/health.rb +4 -0
- data/lib/litmus_paper/version.rb +1 -1
- data/spec/litmus_paper/app_spec.rb +21 -0
- data/spec/support/haproxy_test_socket +2 -0
- metadata +100 -117
data/lib/litmus_paper/app.rb
CHANGED
@@ -4,7 +4,11 @@ module LitmusPaper
|
|
4
4
|
output = "Litmus Paper #{LitmusPaper::VERSION}\n\n"
|
5
5
|
output += "Services monitored:\n"
|
6
6
|
LitmusPaper.services.each do |service_name, service|
|
7
|
-
output += "* #{service_name} (#{service.current_health.value})
|
7
|
+
output += "* #{service_name} (#{service.current_health.value})"
|
8
|
+
if service.current_health.forced?
|
9
|
+
output += " - forced: #{service.current_health.summary}"
|
10
|
+
end
|
11
|
+
output += "\n"
|
8
12
|
end
|
9
13
|
|
10
14
|
_text 200, output
|
@@ -31,10 +35,23 @@ module LitmusPaper
|
|
31
35
|
if health.nil?
|
32
36
|
_text 404, "NOT FOUND", { "X-Health" => "0" }
|
33
37
|
else
|
34
|
-
|
38
|
+
if health.ok?
|
39
|
+
response_code = 200
|
40
|
+
status = "up"
|
41
|
+
else
|
42
|
+
response_code = 503
|
43
|
+
status = "down"
|
44
|
+
end
|
45
|
+
|
46
|
+
headers = {"X-Health" => health.value.to_s}
|
35
47
|
body = "Health: #{health.value}\n"
|
36
48
|
body << health.summary
|
37
|
-
|
49
|
+
|
50
|
+
if health.forced?
|
51
|
+
headers["X-Health-Forced"] = status
|
52
|
+
end
|
53
|
+
|
54
|
+
_text response_code, body, headers
|
38
55
|
end
|
39
56
|
end
|
40
57
|
|
data/lib/litmus_paper/health.rb
CHANGED
data/lib/litmus_paper/version.rb
CHANGED
@@ -33,6 +33,20 @@ describe LitmusPaper::App do
|
|
33
33
|
last_response.status.should == 200
|
34
34
|
last_response.body.should include("* test (0)\n")
|
35
35
|
end
|
36
|
+
|
37
|
+
it "includes the status if forced" do
|
38
|
+
LitmusPaper.services['test'] = LitmusPaper::Service.new('test')
|
39
|
+
LitmusPaper.services['another'] = LitmusPaper::Service.new('another')
|
40
|
+
|
41
|
+
LitmusPaper::StatusFile.service_up_file("test").create("Up for testing")
|
42
|
+
LitmusPaper::StatusFile.service_down_file("another").create("Down for testing")
|
43
|
+
|
44
|
+
get "/"
|
45
|
+
|
46
|
+
last_response.status.should == 200
|
47
|
+
last_response.body.should include("* another (0) - forced: Down for testing\n")
|
48
|
+
last_response.body.should include("* test (100) - forced: Up for testing\n")
|
49
|
+
end
|
36
50
|
end
|
37
51
|
|
38
52
|
describe "POST /up" do
|
@@ -155,6 +169,7 @@ describe LitmusPaper::App do
|
|
155
169
|
last_response.should be_ok
|
156
170
|
last_response.header["Content-Type"].should == "text/plain"
|
157
171
|
last_response.header["X-Health"].should == "100"
|
172
|
+
last_response.header.should_not have_key("X-Health-Forced")
|
158
173
|
last_response.body.should match(/Health: 100/)
|
159
174
|
last_response.body.should match(/AlwaysAvailableDependency: OK/)
|
160
175
|
last_response.body.should include("ConstantMetric(100): 100")
|
@@ -189,6 +204,7 @@ describe LitmusPaper::App do
|
|
189
204
|
get "/test/status"
|
190
205
|
|
191
206
|
last_response.status.should == 503
|
207
|
+
last_response.headers["X-Health-Forced"].should == "down"
|
192
208
|
last_response.body.should match(/Down for testing/)
|
193
209
|
end
|
194
210
|
|
@@ -201,6 +217,7 @@ describe LitmusPaper::App do
|
|
201
217
|
get "/test/status"
|
202
218
|
|
203
219
|
last_response.status.should == 200
|
220
|
+
last_response.headers["X-Health-Forced"].should == "up"
|
204
221
|
last_response.body.should match(/Up for testing/)
|
205
222
|
end
|
206
223
|
|
@@ -213,6 +230,7 @@ describe LitmusPaper::App do
|
|
213
230
|
get "/test/status"
|
214
231
|
|
215
232
|
last_response.status.should == 200
|
233
|
+
last_response.headers["X-Health-Forced"].should == "up"
|
216
234
|
last_response.body.should match(/Up for testing/)
|
217
235
|
end
|
218
236
|
|
@@ -226,6 +244,7 @@ describe LitmusPaper::App do
|
|
226
244
|
get "/test/status"
|
227
245
|
|
228
246
|
last_response.status.should == 503
|
247
|
+
last_response.headers["X-Health-Forced"].should == "down"
|
229
248
|
last_response.body.should match(/Down for testing/)
|
230
249
|
end
|
231
250
|
|
@@ -238,6 +257,7 @@ describe LitmusPaper::App do
|
|
238
257
|
get "/test/status"
|
239
258
|
|
240
259
|
last_response.status.should == 503
|
260
|
+
last_response.headers["X-Health-Forced"].should == "down"
|
241
261
|
last_response.body.should match(/Down for testing/)
|
242
262
|
end
|
243
263
|
|
@@ -250,6 +270,7 @@ describe LitmusPaper::App do
|
|
250
270
|
get "/test/status"
|
251
271
|
|
252
272
|
last_response.status.should == 200
|
273
|
+
last_response.headers["X-Health-Forced"].should == "up"
|
253
274
|
last_response.body.should match(/Up for testing/)
|
254
275
|
end
|
255
276
|
|
@@ -25,6 +25,8 @@ 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,
|
|
25
25
|
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
26
|
DATA
|
27
27
|
socket.close
|
28
|
+
rescue Errno::EPIPE
|
29
|
+
# client closed the connection before we got to write
|
28
30
|
rescue Errno::EINVAL
|
29
31
|
# client closed connection because of timeout
|
30
32
|
end
|
metadata
CHANGED
@@ -1,145 +1,137 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: litmus_paper
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 6
|
9
|
-
- 1
|
10
|
-
version: 0.6.1
|
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
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-10-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: sinatra
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 31
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 3
|
32
|
-
- 2
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 1.3.2
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: facter
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
25
|
none: false
|
41
|
-
requirements:
|
26
|
+
requirements:
|
42
27
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.3.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: facter
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
49
37
|
version: 1.6.7
|
50
38
|
type: :runtime
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: SyslogLogger
|
54
39
|
prerelease: false
|
55
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
41
|
none: false
|
57
|
-
requirements:
|
42
|
+
requirements:
|
58
43
|
- - ~>
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.6.7
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: SyslogLogger
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
65
53
|
version: 1.4.1
|
66
54
|
type: :runtime
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
name: rspec
|
70
55
|
prerelease: false
|
71
|
-
|
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: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
72
65
|
none: false
|
73
|
-
requirements:
|
66
|
+
requirements:
|
74
67
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
hash: 43
|
77
|
-
segments:
|
78
|
-
- 2
|
79
|
-
- 9
|
80
|
-
- 0
|
68
|
+
- !ruby/object:Gem::Version
|
81
69
|
version: 2.9.0
|
82
70
|
type: :development
|
83
|
-
version_requirements: *id004
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: rack-test
|
86
71
|
prerelease: false
|
87
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
73
|
none: false
|
89
|
-
requirements:
|
74
|
+
requirements:
|
90
75
|
- - ~>
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.9.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rack-test
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
97
85
|
version: 0.6.1
|
98
86
|
type: :development
|
99
|
-
version_requirements: *id005
|
100
|
-
- !ruby/object:Gem::Dependency
|
101
|
-
name: rake
|
102
87
|
prerelease: false
|
103
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.6.1
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rake
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
104
97
|
none: false
|
105
|
-
requirements:
|
98
|
+
requirements:
|
106
99
|
- - ~>
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
hash: 11
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
- 9
|
112
|
-
- 2
|
113
|
-
- 2
|
100
|
+
- !ruby/object:Gem::Version
|
114
101
|
version: 0.9.2.2
|
115
102
|
type: :development
|
116
|
-
version_requirements: *id006
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: rake_commit
|
119
103
|
prerelease: false
|
120
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.9.2.2
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rake_commit
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
121
113
|
none: false
|
122
|
-
requirements:
|
114
|
+
requirements:
|
123
115
|
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
|
126
|
-
segments:
|
127
|
-
- 0
|
128
|
-
- 13
|
129
|
-
version: "0.13"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.13'
|
130
118
|
type: :development
|
131
|
-
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0.13'
|
132
126
|
description: Backend health tester for HA Services
|
133
|
-
email:
|
127
|
+
email:
|
134
128
|
- code@getbraintree.com
|
135
|
-
executables:
|
129
|
+
executables:
|
136
130
|
- litmus
|
137
131
|
- litmusctl
|
138
132
|
extensions: []
|
139
|
-
|
140
133
|
extra_rdoc_files: []
|
141
|
-
|
142
|
-
files:
|
134
|
+
files:
|
143
135
|
- .gitignore
|
144
136
|
- .rake_commit
|
145
137
|
- .rvmrc
|
@@ -206,38 +198,29 @@ files:
|
|
206
198
|
- spec/support/test.d.config
|
207
199
|
homepage: https://github.com/braintree/litmus_paper
|
208
200
|
licenses: []
|
209
|
-
|
210
201
|
post_install_message:
|
211
202
|
rdoc_options: []
|
212
|
-
|
213
|
-
require_paths:
|
203
|
+
require_paths:
|
214
204
|
- lib
|
215
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
205
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
216
206
|
none: false
|
217
|
-
requirements:
|
218
|
-
- -
|
219
|
-
- !ruby/object:Gem::Version
|
220
|
-
|
221
|
-
|
222
|
-
- 0
|
223
|
-
version: "0"
|
224
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - ! '>='
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: '0'
|
211
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
212
|
none: false
|
226
|
-
requirements:
|
227
|
-
- -
|
228
|
-
- !ruby/object:Gem::Version
|
229
|
-
|
230
|
-
segments:
|
231
|
-
- 0
|
232
|
-
version: "0"
|
213
|
+
requirements:
|
214
|
+
- - ! '>='
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
version: '0'
|
233
217
|
requirements: []
|
234
|
-
|
235
218
|
rubyforge_project:
|
236
|
-
rubygems_version: 1.8.
|
219
|
+
rubygems_version: 1.8.23
|
237
220
|
signing_key:
|
238
221
|
specification_version: 3
|
239
222
|
summary: Backend health tester for HA Services, partner project of big_brother
|
240
|
-
test_files:
|
223
|
+
test_files:
|
241
224
|
- spec/litmus_paper/app_spec.rb
|
242
225
|
- spec/litmus_paper/cli/admin_spec.rb
|
243
226
|
- spec/litmus_paper/cli/server_spec.rb
|