litmus_paper 0.9.5 → 0.9.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -45,14 +45,16 @@ module LitmusPaper
45
45
  else
46
46
  case health.direction
47
47
  when :up, :health
48
- output << "ready"
48
+ output << "ready" # administrative state
49
+ output << "up" # operational state
49
50
  when :down
50
- output << "drain"
51
+ output << "drain" # administrative state
51
52
  when :none
52
53
  if health.ok?
53
- output << "ready"
54
+ output << "ready" # administrative state
55
+ output << "up" # operational state
54
56
  else
55
- output << "down"
57
+ output << "down" # operational state
56
58
  end
57
59
  end
58
60
  output << "#{health.value.to_s}%"
@@ -5,7 +5,7 @@ module LitmusPaper
5
5
  @weight = weight
6
6
  @hosts = hosts
7
7
  @options = options
8
- @timeout = options.fetch(:timeout_seconds, 5)
8
+ @timeout = options.fetch(:timeout_seconds, 5) / @hosts.length.to_f
9
9
  end
10
10
 
11
11
  def tcp_connect?(host, port)
@@ -15,7 +15,7 @@ module LitmusPaper
15
15
  end
16
16
  true
17
17
  rescue Timeout::Error
18
- LitmusPaper.logger.info("Timeout connecting to #{host}:#{port}")
18
+ LitmusPaper.logger.info("Timed out connecting to #{host}:#{port} after #{@timeout}s")
19
19
  false
20
20
  rescue => e
21
21
  LitmusPaper.logger.info("TCP connect to #{host}:#{port} failed with #{e.message}")
@@ -1,3 +1,3 @@
1
1
  module LitmusPaper
2
- VERSION = "0.9.5"
2
+ VERSION = "0.9.6"
3
3
  end
@@ -18,20 +18,20 @@ describe LitmusPaper::CLI::AgentCheck do
18
18
  test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
19
19
  LitmusPaper.services['test'] = test_service
20
20
  LitmusPaper::StatusFile.service_health_file("test").create("Forcing health", 88)
21
- agent_check("test").should == "ready\t88%\r\n"
21
+ agent_check("test").should == "ready\tup\t88%\r\n"
22
22
  end
23
23
 
24
24
  it "returns the actual health value for an unhealthy service when the measured health is less than the forced value" do
25
25
  test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
26
26
  LitmusPaper.services['test'] = test_service
27
27
  LitmusPaper::StatusFile.service_health_file("test").create("Forcing health", 88)
28
- agent_check("test").should == "ready\t0%\r\n"
28
+ agent_check("test").should == "ready\tup\t0%\r\n"
29
29
  end
30
30
 
31
31
  it "is 'ready' when the service is passing" do
32
32
  test_service = LitmusPaper::Service.new('test', [AlwaysAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
33
33
  LitmusPaper.services['test'] = test_service
34
- agent_check("test").should == "ready\t100%\r\n"
34
+ agent_check("test").should == "ready\tup\t100%\r\n"
35
35
  end
36
36
 
37
37
  it "is 'down' when the check fails" do
@@ -64,7 +64,7 @@ describe LitmusPaper::CLI::AgentCheck do
64
64
  test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
65
65
  LitmusPaper.services['test'] = test_service
66
66
  LitmusPaper::StatusFile.service_up_file("test").create("Up for testing")
67
- agent_check("test").should == "ready\t100%\r\n"
67
+ agent_check("test").should == "ready\tup\t100%\r\n"
68
68
  end
69
69
 
70
70
  it "is 'drain' when a global down file exists" do
@@ -78,7 +78,7 @@ describe LitmusPaper::CLI::AgentCheck do
78
78
  test_service = LitmusPaper::Service.new('test', [NeverAvailableDependency.new], [LitmusPaper::Metric::ConstantMetric.new(100)])
79
79
  LitmusPaper.services['test'] = test_service
80
80
  LitmusPaper::StatusFile.global_up_file.create("Up for testing")
81
- agent_check("test").should == "ready\t100%\r\n"
81
+ agent_check("test").should == "ready\tup\t100%\r\n"
82
82
  end
83
83
  end
84
84
  end
@@ -95,6 +95,61 @@ describe LitmusPaper::Dependency::TCP do
95
95
  internet_health.current_health.should == 0
96
96
  end
97
97
 
98
+ it "returns shortly after the timeout provided when all hosts timeout" do
99
+ TCPSocket.stub(:new) do
100
+ sleep(5)
101
+ end
102
+ internet_health = LitmusPaper::Metric::InternetHealth.new(
103
+ 100,
104
+ ["127.0.0.1:6000",
105
+ "127.0.0.1:6000",
106
+ "127.0.0.1:6000",
107
+ "127.0.0.1:6000"],
108
+ { :timeout_seconds => 2 },
109
+ )
110
+ health = nil
111
+ Timeout.timeout(3) do
112
+ health = internet_health.current_health
113
+ end
114
+ health.should == 0
115
+ end
116
+
117
+ it "returns shortly after the timeout provided when one of many hosts timeout" do
118
+ TCPSocket.stub(:new) do
119
+ TCPSocket.unstub(:new)
120
+ sleep(5)
121
+ end
122
+ internet_health = LitmusPaper::Metric::InternetHealth.new(
123
+ 100,
124
+ ["127.0.0.1:6000",
125
+ "127.0.0.1:6000",
126
+ "127.0.0.1:6000",
127
+ "127.0.0.1:6000"],
128
+ { :timeout_seconds => 2 },
129
+ )
130
+ health = nil
131
+ Timeout.timeout(3) do
132
+ health = internet_health.current_health
133
+ end
134
+ health.should == 0
135
+ end
136
+
137
+ it "returns shortly after the timeout when one host times out" do
138
+ TCPSocket.stub(:new) do
139
+ sleep(5)
140
+ end
141
+ internet_health = LitmusPaper::Metric::InternetHealth.new(
142
+ 100,
143
+ ["127.0.0.1:6000"],
144
+ { :timeout_seconds => 2 },
145
+ )
146
+ health = nil
147
+ Timeout.timeout(3) do
148
+ health = internet_health.current_health
149
+ end
150
+ health.should == 0
151
+ end
152
+
98
153
  it "logs exceptions and returns 0" do
99
154
  internet_health = LitmusPaper::Metric::InternetHealth.new(100, ["127.0.0.1:6000"])
100
155
  LitmusPaper.logger.should_receive(:info)
metadata CHANGED
@@ -1,153 +1,174 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: litmus_paper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.6
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Braintreeps
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2017-05-03 00:00:00.000000000 Z
12
+ date: 2017-05-17 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: sinatra
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - "~>"
19
+ - - ~>
18
20
  - !ruby/object:Gem::Version
19
21
  version: 1.3.2
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - "~>"
27
+ - - ~>
25
28
  - !ruby/object:Gem::Version
26
29
  version: 1.3.2
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: facter
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - "~>"
35
+ - - ~>
32
36
  - !ruby/object:Gem::Version
33
37
  version: 1.7.5
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - "~>"
43
+ - - ~>
39
44
  - !ruby/object:Gem::Version
40
45
  version: 1.7.5
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: remote_syslog_logger
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - "~>"
51
+ - - ~>
46
52
  - !ruby/object:Gem::Version
47
53
  version: 1.0.3
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - "~>"
59
+ - - ~>
53
60
  - !ruby/object:Gem::Version
54
61
  version: 1.0.3
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: popen4
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - "~>"
67
+ - - ~>
60
68
  - !ruby/object:Gem::Version
61
69
  version: 0.1.2
62
70
  type: :runtime
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - "~>"
75
+ - - ~>
67
76
  - !ruby/object:Gem::Version
68
77
  version: 0.1.2
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: unicorn
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - "~>"
83
+ - - ~>
74
84
  - !ruby/object:Gem::Version
75
85
  version: 4.6.2
76
86
  type: :runtime
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - "~>"
91
+ - - ~>
81
92
  - !ruby/object:Gem::Version
82
93
  version: 4.6.2
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: colorize
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - ">="
99
+ - - ! '>='
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0'
90
102
  type: :runtime
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - ">="
107
+ - - ! '>='
95
108
  - !ruby/object:Gem::Version
96
109
  version: '0'
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: rspec
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - "~>"
115
+ - - ~>
102
116
  - !ruby/object:Gem::Version
103
117
  version: 2.9.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - "~>"
123
+ - - ~>
109
124
  - !ruby/object:Gem::Version
110
125
  version: 2.9.0
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: rack-test
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
- - - "~>"
131
+ - - ~>
116
132
  - !ruby/object:Gem::Version
117
133
  version: 0.6.1
118
134
  type: :development
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
121
138
  requirements:
122
- - - "~>"
139
+ - - ~>
123
140
  - !ruby/object:Gem::Version
124
141
  version: 0.6.1
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: rake
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
- - - "~>"
147
+ - - ~>
130
148
  - !ruby/object:Gem::Version
131
149
  version: 0.9.2.2
132
150
  type: :development
133
151
  prerelease: false
134
152
  version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
135
154
  requirements:
136
- - - "~>"
155
+ - - ~>
137
156
  - !ruby/object:Gem::Version
138
157
  version: 0.9.2.2
139
158
  - !ruby/object:Gem::Dependency
140
159
  name: rake_commit
141
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
142
162
  requirements:
143
- - - "~>"
163
+ - - ~>
144
164
  - !ruby/object:Gem::Version
145
165
  version: '0.13'
146
166
  type: :development
147
167
  prerelease: false
148
168
  version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
149
170
  requirements:
150
- - - "~>"
171
+ - - ~>
151
172
  - !ruby/object:Gem::Version
152
173
  version: '0.13'
153
174
  description: Backend health tester for HA Services
@@ -160,10 +181,10 @@ executables:
160
181
  extensions: []
161
182
  extra_rdoc_files: []
162
183
  files:
163
- - ".gitignore"
164
- - ".rake_commit"
165
- - ".ruby-version"
166
- - ".travis.yml"
184
+ - .gitignore
185
+ - .rake_commit
186
+ - .ruby-version
187
+ - .travis.yml
167
188
  - Gemfile
168
189
  - LICENSE
169
190
  - README.md
@@ -241,26 +262,27 @@ files:
241
262
  - xinetd.conf
242
263
  homepage: https://github.com/braintree/litmus_paper
243
264
  licenses: []
244
- metadata: {}
245
265
  post_install_message:
246
266
  rdoc_options: []
247
267
  require_paths:
248
268
  - lib
249
269
  required_ruby_version: !ruby/object:Gem::Requirement
270
+ none: false
250
271
  requirements:
251
- - - ">="
272
+ - - ! '>='
252
273
  - !ruby/object:Gem::Version
253
274
  version: '0'
254
275
  required_rubygems_version: !ruby/object:Gem::Requirement
276
+ none: false
255
277
  requirements:
256
- - - ">="
278
+ - - ! '>='
257
279
  - !ruby/object:Gem::Version
258
280
  version: '0'
259
281
  requirements: []
260
282
  rubyforge_project:
261
- rubygems_version: 2.2.2
283
+ rubygems_version: 1.8.23
262
284
  signing_key:
263
- specification_version: 4
285
+ specification_version: 3
264
286
  summary: Backend health tester for HA Services, partner project of big_brother
265
287
  test_files:
266
288
  - spec/litmus_paper/app_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 80c1178aa0a49a68ec67e4b71ad73603c08261e4
4
- data.tar.gz: ccaebee4045e40b60b41352bab17097199d92d6f
5
- SHA512:
6
- metadata.gz: dc60ac971f97332058e36ebb69069c0abb284fdab25b1a9f0acbd86835c7f2498b0356c70dca25ae6eb18471b8ebab500a7b160d2f9bc9f5375b0a43bd593670
7
- data.tar.gz: 29cba90319890e85159b2fa30d1d740378da6754ae5f8a31ba1f9a6816c4e4fb0a63832e3317b411e7245af3fc748037c91053f9d98ddeb33c8f0e691943b80e