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