xymonclient 0.3.0 → 0.4.0

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