xymonclient 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 433597de8de574da85cec7099ff4829917da96e5
4
- data.tar.gz: 2ff97c778a0827001f3ccb53765b9f154ca544ed
3
+ metadata.gz: b2178d1cc649bd47137710b76bfd567e3648ec39
4
+ data.tar.gz: deb2925a13f311a4a598fe524a17c41bf413248f
5
5
  SHA512:
6
- metadata.gz: 4251c26893977fa16afc8497c977c57d4ab78e1e6433896b05e7c01213ea4c6c933a18b12c61b8b8b2530a8290598ebed210f61ab03c90a08fb1378ce187ef8e
7
- data.tar.gz: bf3be7509dd5129d42dbb1d9fa1ad6600433e573c69f472c71ed89e1814b6b318707f59914611d9551ec38baf6fba106a2ae4f37b6fd0acd678b3a457ed85144
6
+ metadata.gz: 6d978c6d7d89dce1e6a1a30ba0cef55d86b03fb38c18ee3b27a3360051705ef4aec2483df5cd2e9283e790ccddae88ba019d73449a5b90a45b6cec752b6ff3d5
7
+ data.tar.gz: 9b272aece7341bd23418aa2f4b3649d12fdd6016fec6def9560bad69843caee763e05a13dc68a7db993587562b59e6a4bb5a91458f4a25d8f9c894ac80f84055
data/Gemfile.lock CHANGED
@@ -1,21 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xymonclient (0.3.0)
4
+ xymonclient (0.4.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  ast (2.3.0)
10
- codeclimate-test-reporter (1.0.5)
11
- simplecov
10
+ codeclimate-test-reporter (1.0.8)
11
+ simplecov (<= 0.13)
12
12
  diff-lcs (1.3)
13
13
  docile (1.1.5)
14
- json (2.0.2-java)
15
- parser (2.3.3.1)
14
+ json (2.1.0-java)
15
+ parser (2.4.0.0)
16
16
  ast (~> 2.2)
17
17
  powerpack (0.1.1)
18
- rainbow (2.2.1)
18
+ rainbow (2.2.2)
19
+ rake
19
20
  rake (10.5.0)
20
21
  rspec (3.5.0)
21
22
  rspec-core (~> 3.5.0)
@@ -42,7 +43,7 @@ GEM
42
43
  json (>= 1.8, < 3)
43
44
  simplecov-html (~> 0.10.0)
44
45
  simplecov-html (0.10.0)
45
- unicode-display_width (1.1.3)
46
+ unicode-display_width (1.2.1)
46
47
 
47
48
  PLATFORMS
48
49
  java
@@ -56,4 +57,4 @@ DEPENDENCIES
56
57
  xymonclient!
57
58
 
58
59
  BUNDLED WITH
59
- 1.14.2
60
+ 1.14.5
@@ -19,4 +19,10 @@ module XymonClient
19
19
 
20
20
  class InvalidServiceItem < StandardError
21
21
  end
22
+
23
+ class PartialSendFailure < StandardError
24
+ end
25
+
26
+ class SendFailure < StandardError
27
+ end
22
28
  end
@@ -1,3 +1,3 @@
1
1
  module XymonClient
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
data/lib/xymonclient.rb CHANGED
@@ -12,14 +12,18 @@ module XymonClient
12
12
  # (port default to 1984)
13
13
  class Client
14
14
  attr_reader :servers
15
+ attr_accessor :retry_count
16
+ attr_accessor :retry_interval
15
17
 
16
- def initialize(servers = [])
18
+ def initialize(servers = [], retry_count = 3, retry_interval = 5)
17
19
  @servers = \
18
20
  if servers.empty?
19
21
  XymonClient::ServerDiscovery.find_from_file
20
22
  else
21
23
  _parse_servers(servers)
22
24
  end
25
+ @retry_count = retry_count
26
+ @retry_interval = retry_interval
23
27
  end
24
28
 
25
29
  def status(host, service, status, message, lifetime = '30m')
@@ -65,21 +69,40 @@ module XymonClient
65
69
  unless XymonClient.valid_duration?(duration)
66
70
  cookies = board(host, service, ['cookie'])
67
71
  @servers.each do |server|
72
+ next if cookies[server].to_i == -1
68
73
  _send(
69
74
  server,
70
75
  "xymondack #{cookies[server].to_i} #{duration} #{message}"
71
- ) if cookies[server].to_i != -1
76
+ )
72
77
  end
73
78
  end
74
79
 
75
80
  private
76
81
 
77
82
  def _send_to_all(message)
78
- @servers.each { |server| _send(server, message) }
83
+ fail_srv = []
84
+ send_result = true
85
+ @servers.each do |server|
86
+ retry_count = 0
87
+ begin
88
+ _send(server, message)
89
+ rescue
90
+ if retry_count < @retry_count || @retry_count == -1
91
+ sleep @retry_interval
92
+ retry_count += 1
93
+ retry
94
+ else
95
+ send_result = false
96
+ fail_srv << server
97
+ end
98
+ end
99
+ end
100
+ raise XymonClient::SendFailure if fail_srv.count == @servers.count
101
+ raise XymonClient::PartialSendFailure, fail_srv \
102
+ if (1..@servers.count - 1).cover?(fail_srv.count)
79
103
  end
80
104
 
81
105
  def _send(server, message)
82
- # TODO: validate response from all servers ( and retry ?)
83
106
  socket = TCPSocket.open(server[:host], server[:port])
84
107
  socket.puts message
85
108
  socket.close_write
@@ -13,5 +13,36 @@ describe XymonClient do
13
13
  )
14
14
  client.status('my.host', 'myservice', 'green', 'all is good')
15
15
  end
16
+
17
+ it 'could not send a status to some servers' do
18
+ client.retry_count = 0
19
+ times_called = 0
20
+ allow(client).to receive(:_send) do
21
+ times_called += 1
22
+ raise Errno::ECONNREFUSED if times_called == 2
23
+ end
24
+ expect do
25
+ client.status('my.host', 'myservice', 'green', 'all is good')
26
+ end.to raise_error(XymonClient::PartialSendFailure)
27
+ end
28
+
29
+ it 'could not send a status to all servers' do
30
+ allow(client).to receive(:_send).and_raise Errno::ECONNREFUSED
31
+ expect do
32
+ client.status('my.host', 'myservice', 'green', 'all is good')
33
+ end.to raise_error(XymonClient::SendFailure)
34
+ end
35
+
36
+ it 'retry sending a status to some servers' do
37
+ client.retry_count = 2
38
+ times_called = 0
39
+ allow(client).to receive(:_send) do
40
+ times_called += 1
41
+ raise Errno::ECONNREFUSED if times_called == 1
42
+ end
43
+ expect do
44
+ client.status('my.host', 'myservice', 'green', 'all is good')
45
+ end.not_to raise_error
46
+ end
16
47
  end
17
48
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xymonclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chauviere
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-13 00:00:00.000000000 Z
11
+ date: 2017-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement