litmus_paper 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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})\n"
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
- response_code = health.ok? ? 200 : 503
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
- _text response_code, body, { "X-Health" => health.value.to_s }
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
 
@@ -14,5 +14,9 @@ module LitmusPaper
14
14
  def ok?
15
15
  @health > 0
16
16
  end
17
+
18
+ def forced?
19
+ true
20
+ end
17
21
  end
18
22
  end
@@ -13,6 +13,10 @@ module LitmusPaper
13
13
  value > 0
14
14
  end
15
15
 
16
+ def forced?
17
+ false
18
+ end
19
+
16
20
  def value
17
21
  return 0 unless @dependencies_available
18
22
  @value
@@ -1,3 +1,3 @@
1
1
  module LitmusPaper
2
- VERSION = "0.6.1"
2
+ VERSION = "0.6.2"
3
3
  end
@@ -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
- hash: 5
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
- date: 2012-09-07 00:00:00 Z
19
- dependencies:
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
40
25
  none: false
41
- requirements:
26
+ requirements:
42
27
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 1
45
- segments:
46
- - 1
47
- - 6
48
- - 7
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
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
56
41
  none: false
57
- requirements:
42
+ requirements:
58
43
  - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 5
61
- segments:
62
- - 1
63
- - 4
64
- - 1
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
- 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: 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
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
88
73
  none: false
89
- requirements:
74
+ requirements:
90
75
  - - ~>
91
- - !ruby/object:Gem::Version
92
- hash: 5
93
- segments:
94
- - 0
95
- - 6
96
- - 1
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
- requirement: &id006 !ruby/object:Gem::Requirement
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
- requirement: &id007 !ruby/object:Gem::Requirement
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
- hash: 17
126
- segments:
127
- - 0
128
- - 13
129
- version: "0.13"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.13'
130
118
  type: :development
131
- version_requirements: *id007
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
- hash: 3
221
- segments:
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
- hash: 3
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.15
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