hawkular-client 3.0.2 → 4.0.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 +4 -4
- data/CHANGES.rdoc +5 -0
- data/README.rdoc +1 -1
- data/lib/hawkular/base_client.rb +14 -23
- data/lib/hawkular/client_utils.rb +18 -0
- data/lib/hawkular/hawkular_client.rb +4 -2
- data/lib/hawkular/inventory/entities.rb +4 -2
- data/lib/hawkular/inventory/inventory_api.rb +43 -21
- data/lib/hawkular/metrics/metrics_client.rb +3 -2
- data/lib/hawkular/operations/operations_api.rb +41 -26
- data/lib/hawkular/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29d98c76e5262c54b3c0949ebfd998051e3abb81
|
4
|
+
data.tar.gz: b7c63829113d7bd814d5a300f3e6d8da36b48195
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e3c7e6e3ccc5bdd7357dfa435046bf428f7f5a88800222d4dedddcd6e525a28a348a6af6d725096c49b71b8c724ceed0263948b2ec85b9a963b31f2761dd92a
|
7
|
+
data.tar.gz: 50aa5323c03caf2704e1d5848c7311ef7d9c640a7c73583aa911da9d8976262f75bc6139a385a8f541f58cdf1c1b5dd843e642ce4d9367523c5062370d2d214b
|
data/CHANGES.rdoc
CHANGED
@@ -4,6 +4,11 @@ This document describes the relevant changes between releases of the
|
|
4
4
|
_hawkular-client_ project.
|
5
5
|
|
6
6
|
|
7
|
+
=== v 4.0.0
|
8
|
+
* Standardized Exceptions under the Hawkular namespace, and the old names were deprecated, here is the list:
|
9
|
+
1. <code>Hawkular::BaseClient::HawkularException</code> -> <code>Hawkular::Exception</code>
|
10
|
+
2. <code>Hawkular::BaseClient::HawkularConnectionException</code> -> <code>Hawkular::ConnectionException</code>
|
11
|
+
|
7
12
|
=== v 3.0.2
|
8
13
|
* Adding <code>URI.unescape</code> in the <code>list_metrics_for_resource</code> method to fix the behavior of the method
|
9
14
|
|
data/README.rdoc
CHANGED
data/lib/hawkular/base_client.rb
CHANGED
@@ -9,6 +9,9 @@ module Hawkular
|
|
9
9
|
# that inherit from it. You should not directly use it,
|
10
10
|
# but through the more specialized clients.
|
11
11
|
class BaseClient
|
12
|
+
HawkularException = Hawkular::Exception
|
13
|
+
HawkularConnectionException = Hawkular::ConnectionException
|
14
|
+
|
12
15
|
include ClientUtils
|
13
16
|
|
14
17
|
# @!visibility private
|
@@ -34,7 +37,7 @@ module Hawkular
|
|
34
37
|
|
35
38
|
@logger = Hawkular::Logger.new
|
36
39
|
|
37
|
-
fail 'You need to provide an entrypoint' if entrypoint.nil?
|
40
|
+
fail Hawkular::ArgumentError, 'You need to provide an entrypoint' if entrypoint.nil?
|
38
41
|
end
|
39
42
|
|
40
43
|
def http_get(suburl, headers = {})
|
@@ -141,7 +144,8 @@ module Hawkular
|
|
141
144
|
# @param suffix_path [String] sufix path to be added if it doesn't exist
|
142
145
|
# @return [String] URL with path attached to it at the end
|
143
146
|
def normalize_entrypoint_url(entrypoint, suffix_path)
|
144
|
-
fail ArgumentError, 'suffix_path must not be empty' if suffix_path.empty?
|
147
|
+
fail Hawkular::ArgumentError, 'suffix_path must not be empty' if suffix_path.empty?
|
148
|
+
|
145
149
|
strip_path = suffix_path.gsub(%r{/$}, '')
|
146
150
|
strip_path.nil? || suffix_path = strip_path
|
147
151
|
strip_path = suffix_path.gsub(%r{^/}, '')
|
@@ -165,21 +169,6 @@ module Hawkular
|
|
165
169
|
url.to_s.sub(/^http(s?)/, 'ws\1')
|
166
170
|
end
|
167
171
|
|
168
|
-
# Specialized exception to be thrown
|
169
|
-
# when the interaction with Hawkular fails
|
170
|
-
class HawkularException < StandardError
|
171
|
-
def initialize(message, status_code = 0)
|
172
|
-
@message = message
|
173
|
-
@status_code = status_code
|
174
|
-
super(message)
|
175
|
-
end
|
176
|
-
|
177
|
-
attr_reader :message, :status_code
|
178
|
-
end
|
179
|
-
|
180
|
-
class HawkularConnectionException < HawkularException
|
181
|
-
end
|
182
|
-
|
183
172
|
def admin_header
|
184
173
|
headers = {}
|
185
174
|
headers[:'Hawkular-Admin-Token'] = @admin_token unless @admin_token.nil?
|
@@ -201,17 +190,18 @@ module Hawkular
|
|
201
190
|
# @!visibility private
|
202
191
|
def connect_error(fault)
|
203
192
|
if fault.is_a?(SocketError)
|
204
|
-
|
193
|
+
Hawkular::ConnectionException.new(fault.to_s)
|
205
194
|
elsif [Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::EHOSTUNREACH,
|
206
195
|
Errno::EADDRNOTAVAIL, Errno::ENETDOWN, Errno::ENETUNREACH,
|
207
196
|
Errno::ETIMEDOUT].include?(fault.class)
|
208
|
-
|
197
|
+
Hawkular::ConnectionException.new(fault.to_s, fault.class::Errno)
|
209
198
|
end
|
210
199
|
end
|
211
200
|
|
212
201
|
def handle_fault(f)
|
213
202
|
http_code = (f.respond_to?(:http_code) ? f.http_code : 0)
|
214
|
-
fail
|
203
|
+
fail Hawkular::Exception.new('Unauthorized', http_code) if f.instance_of? RestClient::Unauthorized
|
204
|
+
|
215
205
|
if f.respond_to?(:http_body) && !f.http_body.nil?
|
216
206
|
begin
|
217
207
|
json_body = JSON.parse(f.http_body)
|
@@ -219,11 +209,12 @@ module Hawkular
|
|
219
209
|
rescue JSON::ParserError
|
220
210
|
fault_message = f.http_body
|
221
211
|
end
|
222
|
-
|
212
|
+
|
213
|
+
fail Hawkular::Exception.new(fault_message, http_code)
|
223
214
|
elsif (connect_error_exception = connect_error(f))
|
224
|
-
fail connect_error_exception
|
215
|
+
fail Hawkular::ConnectionException, connect_error_exception
|
225
216
|
else
|
226
|
-
fail f
|
217
|
+
fail Hawkular::Exception, f
|
227
218
|
end
|
228
219
|
end
|
229
220
|
end
|
@@ -1,4 +1,22 @@
|
|
1
1
|
module Hawkular
|
2
|
+
# Specialized exception to be thrown
|
3
|
+
# when the interaction with Hawkular fails
|
4
|
+
class Exception < StandardError
|
5
|
+
def initialize(message, status_code = 0)
|
6
|
+
@message = message
|
7
|
+
@status_code = status_code
|
8
|
+
super(message)
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :message, :status_code
|
12
|
+
end
|
13
|
+
|
14
|
+
class ConnectionException < Hawkular::Exception
|
15
|
+
end
|
16
|
+
|
17
|
+
class ArgumentError < Hawkular::Exception
|
18
|
+
end
|
19
|
+
|
2
20
|
module ClientUtils
|
3
21
|
# Escapes the passed url part. This is necessary,
|
4
22
|
# as many ids inside Hawkular can contain characters
|
@@ -12,7 +12,9 @@ module Hawkular
|
|
12
12
|
def initialize(hash)
|
13
13
|
hash[:credentials] ||= {}
|
14
14
|
hash[:options] ||= {}
|
15
|
-
|
15
|
+
|
16
|
+
fail Hawkular::ArgumentError, 'no parameter ":entrypoint" given' if hash[:entrypoint].nil?
|
17
|
+
|
16
18
|
@state = hash
|
17
19
|
end
|
18
20
|
|
@@ -24,7 +26,7 @@ module Hawkular
|
|
24
26
|
when /^operations_/ then operations
|
25
27
|
when /^tokens_/ then tokens
|
26
28
|
else
|
27
|
-
fail "unknown method prefix `#{name}`, allowed prefixes:"\
|
29
|
+
fail Hawkular::ArgumentError, "unknown method prefix `#{name}`, allowed prefixes:"\
|
28
30
|
'`inventory_`, `metrics_`,`alerts_`,`operations_`, `tokens_`'
|
29
31
|
end
|
30
32
|
method = name.to_s.sub(/^[^_]+_/, '')
|
@@ -181,7 +181,8 @@ module Hawkular::Inventory
|
|
181
181
|
end
|
182
182
|
|
183
183
|
def self.parse(path)
|
184
|
-
fail 'CanonicalPath must not be nil or empty' if path.to_s.strip.length == 0
|
184
|
+
fail Hawkular::ArgumentError, 'CanonicalPath must not be nil or empty' if path.to_s.strip.length == 0
|
185
|
+
|
185
186
|
CanonicalPath.new(path_to_h path)
|
186
187
|
end
|
187
188
|
|
@@ -257,7 +258,8 @@ module Hawkular::Inventory
|
|
257
258
|
end
|
258
259
|
|
259
260
|
def to_tags
|
260
|
-
fail 'Missing feed_id' if @feed_id.nil?
|
261
|
+
fail Hawkular::ArgumentError, 'Missing feed_id' if @feed_id.nil?
|
262
|
+
|
261
263
|
tags = "module:inventory,feed:#{Regexp.quote(@feed_id)}"
|
262
264
|
tags += ",type:rt,id:#{Regexp.quote(@resource_type_id)}" if @resource_type_id
|
263
265
|
tags += ",type:mt,id:#{Regexp.quote(@metric_type_id)}" if @metric_type_id
|
@@ -34,7 +34,8 @@ module Hawkular::Inventory
|
|
34
34
|
# entrypoint: http://localhost:8080/hawkular/inventory
|
35
35
|
# and another sub-hash containing the hash with username[String], password[String], token(optional)
|
36
36
|
def self.create(hash)
|
37
|
-
fail 'no parameter ":entrypoint" given' unless hash[:entrypoint]
|
37
|
+
fail Hawkular::ArgumentError, 'no parameter ":entrypoint" given' unless hash[:entrypoint]
|
38
|
+
|
38
39
|
hash[:credentials] ||= {}
|
39
40
|
hash[:options] ||= {}
|
40
41
|
Client.new(hash[:entrypoint], hash[:credentials], hash[:options])
|
@@ -52,7 +53,8 @@ module Hawkular::Inventory
|
|
52
53
|
# @param [String] feed_id The id of the feed the type lives under
|
53
54
|
# @return [Array<ResourceType>] List of types, that can be empty
|
54
55
|
def list_resource_types(feed_id)
|
55
|
-
fail 'Feed id must be given' unless feed_id
|
56
|
+
fail Hawkular::ArgumentError, 'Feed id must be given' unless feed_id
|
57
|
+
|
56
58
|
feed_path = feed_cp(feed_id)
|
57
59
|
response = http_post(
|
58
60
|
'/strings/raw/query',
|
@@ -70,7 +72,8 @@ module Hawkular::Inventory
|
|
70
72
|
# @param [String] feed_id The id of the feed the type lives under
|
71
73
|
# @return [Array<MetricType>] List of types, that can be empty
|
72
74
|
def list_metric_types(feed_id)
|
73
|
-
fail 'Feed id must be given' unless feed_id
|
75
|
+
fail Hawkular::ArgumentError, 'Feed id must be given' unless feed_id
|
76
|
+
|
74
77
|
feed_path = feed_cp(feed_id)
|
75
78
|
response = http_post(
|
76
79
|
'/strings/raw/query',
|
@@ -89,7 +92,8 @@ module Hawkular::Inventory
|
|
89
92
|
# @param [Boolean] fetch_properties Should the config data be fetched too
|
90
93
|
# @return [Array<Resource>] List of resources, which can be empty.
|
91
94
|
def list_resources_for_feed(feed_id, fetch_properties = false, filter = {})
|
92
|
-
fail 'Feed id must be given' unless feed_id
|
95
|
+
fail Hawkular::ArgumentError, 'Feed id must be given' unless feed_id
|
96
|
+
|
93
97
|
feed_path = feed_cp(feed_id)
|
94
98
|
response = http_post(
|
95
99
|
'/strings/raw/query',
|
@@ -113,8 +117,9 @@ module Hawkular::Inventory
|
|
113
117
|
# @return [Array<Resource>] List of resources. Can be empty
|
114
118
|
def list_resources_for_type(resource_type_path, fetch_properties = false)
|
115
119
|
path = CanonicalPath.parse_if_string(resource_type_path)
|
116
|
-
|
117
|
-
fail '
|
120
|
+
|
121
|
+
fail Hawkular::ArgumentError, 'Feed id must be given' unless path.feed_id
|
122
|
+
fail Hawkular::ArgumentError, 'Resource type must be given' unless path.resource_type_id
|
118
123
|
|
119
124
|
# Fetch metrics by tag
|
120
125
|
feed_path = feed_cp(URI.unescape(path.feed_id))
|
@@ -151,7 +156,9 @@ module Hawkular::Inventory
|
|
151
156
|
def list_child_resources(parent_res_path, recursive = false)
|
152
157
|
path = CanonicalPath.parse_if_string(parent_res_path)
|
153
158
|
feed_id = path.feed_id
|
154
|
-
|
159
|
+
|
160
|
+
fail Hawkular::ArgumentError, 'Feed id must be given' unless feed_id
|
161
|
+
|
155
162
|
entity_hash = get_raw_entity_hash(path)
|
156
163
|
extract_child_resources([], path.to_s, entity_hash, recursive) if entity_hash
|
157
164
|
end
|
@@ -163,8 +170,10 @@ module Hawkular::Inventory
|
|
163
170
|
# @return [Array<Metric>] List of metrics. Can be empty
|
164
171
|
def list_metrics_for_metric_type(metric_type_path)
|
165
172
|
path = CanonicalPath.parse_if_string(metric_type_path)
|
166
|
-
|
167
|
-
fail '
|
173
|
+
|
174
|
+
fail Hawkular::ArgumentError, 'Feed id must be given' unless path.feed_id
|
175
|
+
fail Hawkular::ArgumentError, 'Metric type id must be given' unless path.metric_type_id
|
176
|
+
|
168
177
|
feed_id = URI.unescape(path.feed_id)
|
169
178
|
metric_type_id = URI.unescape(path.metric_type_id)
|
170
179
|
|
@@ -224,10 +233,11 @@ module Hawkular::Inventory
|
|
224
233
|
def get_resource(resource_path, fetch_properties = true)
|
225
234
|
path = CanonicalPath.parse_if_string(resource_path)
|
226
235
|
raw_hash = get_raw_entity_hash(path)
|
236
|
+
|
227
237
|
unless raw_hash
|
228
|
-
|
229
|
-
fail exception
|
238
|
+
fail Hawkular::Exception, "Resource not found: #{resource_path}"
|
230
239
|
end
|
240
|
+
|
231
241
|
entity_hash = entity_json_to_hash(-> (_) { path }, raw_hash, fetch_properties)
|
232
242
|
Resource.new(entity_hash)
|
233
243
|
end
|
@@ -237,10 +247,11 @@ module Hawkular::Inventory
|
|
237
247
|
def get_resource_type(resource_type_path)
|
238
248
|
path = CanonicalPath.parse_if_string(resource_type_path)
|
239
249
|
raw_hash = get_raw_entity_hash(path)
|
250
|
+
|
240
251
|
unless raw_hash
|
241
|
-
|
242
|
-
fail exception
|
252
|
+
fail Hawkular::Exception, "Resource type not found: #{resource_type_path}"
|
243
253
|
end
|
254
|
+
|
244
255
|
entity_hash = entity_json_to_hash(-> (_) { path }, raw_hash, false)
|
245
256
|
ResourceType.new(entity_hash)
|
246
257
|
end
|
@@ -250,10 +261,11 @@ module Hawkular::Inventory
|
|
250
261
|
def get_metric_type(metric_type_path)
|
251
262
|
path = CanonicalPath.parse_if_string(metric_type_path)
|
252
263
|
raw_hash = get_raw_entity_hash(path)
|
264
|
+
|
253
265
|
unless raw_hash
|
254
|
-
|
255
|
-
fail exception
|
266
|
+
fail Hawkular::Exception, "Metric type not found: #{metric_type_path}"
|
256
267
|
end
|
268
|
+
|
257
269
|
entity_hash = entity_json_to_hash(-> (_) { path }, raw_hash, false)
|
258
270
|
MetricType.new(entity_hash)
|
259
271
|
end
|
@@ -263,8 +275,10 @@ module Hawkular::Inventory
|
|
263
275
|
# @return [Array<String>] List of operation type ids
|
264
276
|
def list_operation_definitions(resource_type_path)
|
265
277
|
path = CanonicalPath.parse_if_string(resource_type_path)
|
266
|
-
|
267
|
-
fail 'Missing
|
278
|
+
|
279
|
+
fail Hawkular::ArgumentError, 'Missing feed_id in resource_type_path' unless path.feed_id
|
280
|
+
fail Hawkular::ArgumentError, 'Missing resource_type_id in resource_type_path' unless path.resource_type_id
|
281
|
+
|
268
282
|
response = http_post(
|
269
283
|
'/strings/raw/query',
|
270
284
|
fromEarliest: true,
|
@@ -445,26 +459,34 @@ module Hawkular::Inventory
|
|
445
459
|
end
|
446
460
|
|
447
461
|
def extract_structures_from_body(response_body_array)
|
448
|
-
response_body_array.map { |element| rebuild_from_chunks(element['data']) }
|
462
|
+
response_body_array.map { |element| Client.rebuild_from_chunks(element['data']) }
|
449
463
|
.select { |full| full } # evict nil
|
450
|
-
.map { |full| decompress(full) }
|
464
|
+
.map { |full| Client.decompress(full) }
|
451
465
|
end
|
452
466
|
|
453
|
-
def rebuild_from_chunks(data_node)
|
467
|
+
def self.rebuild_from_chunks(data_node)
|
454
468
|
return if data_node.empty?
|
455
469
|
master_data = data_node[0]
|
456
470
|
return Base64.decode64(master_data['value']) unless (master_data.key? 'tags') &&
|
457
471
|
(master_data['tags'].key? 'chunks')
|
472
|
+
master_timestamp = master_data['timestamp']
|
458
473
|
last_chunk = master_data['tags']['chunks'].to_i - 1
|
459
474
|
all = Base64.decode64(master_data['value'])
|
460
475
|
return if all.empty?
|
461
476
|
(1..last_chunk).inject(all) do |full, chunk_id|
|
462
477
|
slave_data = data_node[chunk_id]
|
478
|
+
# Race condition: slave_data might be nil if not all chunks have been written yet on DB
|
479
|
+
# Consider the object is not there yet
|
480
|
+
return nil unless slave_data
|
481
|
+
# The same race condition could give us an expirated slave_data; do sanity check to cover that
|
482
|
+
# Timestamps are useful here, they're in consecutive, decreasing order
|
483
|
+
slave_timestamp = slave_data['timestamp']
|
484
|
+
return nil unless slave_timestamp == master_timestamp - chunk_id
|
463
485
|
full.concat(Base64.decode64(slave_data['value']))
|
464
486
|
end
|
465
487
|
end
|
466
488
|
|
467
|
-
def decompress(raw)
|
489
|
+
def self.decompress(raw)
|
468
490
|
gz = Zlib::GzipReader.new(StringIO.new(raw))
|
469
491
|
JSON.parse(gz.read)
|
470
492
|
end
|
@@ -35,11 +35,12 @@ module Hawkular::Metrics
|
|
35
35
|
|
36
36
|
def check_version
|
37
37
|
version_status_hash = fetch_version_and_status
|
38
|
+
|
38
39
|
fail_version_msg = 'Unable to determine implementation version for metrics'
|
39
|
-
fail fail_version_msg if version_status_hash['Implementation-Version'].nil?
|
40
|
+
fail Hawkular::Exception, fail_version_msg if version_status_hash['Implementation-Version'].nil?
|
40
41
|
version = version_status_hash['Implementation-Version']
|
41
42
|
major, minor = version.scan(/\d+/).map(&:to_i)
|
42
|
-
fail fail_version_msg if major.nil? || minor.nil?
|
43
|
+
fail Hawkular::Exception, fail_version_msg if major.nil? || minor.nil?
|
43
44
|
@legacy_api = (major == 0 && minor < 16)
|
44
45
|
end
|
45
46
|
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
require 'monitor'
|
3
|
+
|
1
4
|
require 'hawkular/base_client'
|
2
5
|
require 'websocket-client-simple'
|
3
6
|
require 'json'
|
@@ -13,14 +16,7 @@ class Proc
|
|
13
16
|
method_name = callable.to_sym
|
14
17
|
define_method(method_name) { |&block| block.nil? ? true : block.call(result) }
|
15
18
|
define_method("#{method_name}?") { true }
|
16
|
-
|
17
|
-
# method_missing is here because we are not forcing the client to provide both success and error callbacks
|
18
|
-
# rubocop:disable Lint/NestedMethodDefinition
|
19
|
-
# https://github.com/bbatsov/rubocop/issues/2704
|
20
|
-
def method_missing(_method_name, *_args, &_block)
|
21
|
-
PerformMethodMissing
|
22
|
-
end
|
23
|
-
# rubocop:enable Lint/NestedMethodDefinition
|
19
|
+
define_method(:method_missing) { |*| PerformMethodMissing }
|
24
20
|
end.new)
|
25
21
|
end
|
26
22
|
end
|
@@ -30,6 +26,7 @@ module Hawkular::Operations
|
|
30
26
|
# Client class to interact with the agent via websockets
|
31
27
|
class Client < Hawkular::BaseClient
|
32
28
|
include WebSocket::Client
|
29
|
+
include MonitorMixin
|
33
30
|
|
34
31
|
attr_accessor :ws, :session_id, :logger
|
35
32
|
|
@@ -75,26 +72,36 @@ module Hawkular::Operations
|
|
75
72
|
args[:use_secure_connection] = %w(https wss).include?(uri.scheme) ? true : false
|
76
73
|
end
|
77
74
|
|
78
|
-
fail 'no parameter ":host" or ":entrypoint" given' if args[:host].nil?
|
75
|
+
fail Hawkular::ArgumentError, 'no parameter ":host" or ":entrypoint" given' if args[:host].nil?
|
79
76
|
|
80
77
|
super(args[:host], args[:credentials], args[:options])
|
81
78
|
|
82
|
-
|
79
|
+
@logger = Hawkular::Logger.new
|
80
|
+
|
81
|
+
@url = "ws#{args[:use_secure_connection] ? 's' : ''}://#{args[:host]}/hawkular/command-gateway/ui/ws"
|
82
|
+
@credentials = args[:credentials]
|
83
|
+
@tenant = args[:options][:tenant]
|
84
|
+
@wait_time = args[:wait_time]
|
85
|
+
end
|
86
|
+
|
87
|
+
def base64_credentials
|
88
|
+
["#{@credentials[:username]}:#{@credentials[:password]}"].pack('m').delete("\r\n")
|
89
|
+
end
|
83
90
|
|
84
|
-
|
85
|
-
|
91
|
+
def connect
|
92
|
+
return if @connecting || (@ws && @ws.open?)
|
93
|
+
|
94
|
+
@connecting = true
|
86
95
|
|
87
96
|
ws_options = {
|
88
97
|
headers: {
|
89
|
-
'Authorization' => 'Basic ' +
|
90
|
-
'Hawkular-Tenant' =>
|
98
|
+
'Authorization' => 'Basic ' + base64_credentials,
|
99
|
+
'Hawkular-Tenant' => @tenant,
|
91
100
|
'Accept' => 'application/json'
|
92
101
|
}
|
93
102
|
}
|
94
103
|
|
95
|
-
@
|
96
|
-
|
97
|
-
@ws = Simple.connect url, ws_options do |client|
|
104
|
+
@ws = Simple.connect @url, ws_options do |client|
|
98
105
|
client.on(:message, once: true) do |msg|
|
99
106
|
parsed_message = msg.data.to_msg_hash
|
100
107
|
|
@@ -107,12 +114,14 @@ module Hawkular::Operations
|
|
107
114
|
end
|
108
115
|
end
|
109
116
|
|
110
|
-
sleep
|
117
|
+
Timeout.timeout(@wait_time) { sleep 0.1 until @ws.open? }
|
118
|
+
ensure
|
119
|
+
@connecting = false
|
111
120
|
end
|
112
121
|
|
113
122
|
# Closes the WebSocket connection
|
114
123
|
def close_connection!
|
115
|
-
@ws.close
|
124
|
+
@ws && @ws.close
|
116
125
|
end
|
117
126
|
|
118
127
|
# Invokes a generic operation on the WildFly agent
|
@@ -136,7 +145,7 @@ module Hawkular::Operations
|
|
136
145
|
# RemoveDatasource (and not RemoveDatasourceRequest)
|
137
146
|
# @param callback [Block] callback that is run after the operation is done
|
138
147
|
def invoke_specific_operation(operation_payload, operation_name, &callback)
|
139
|
-
fail 'Operation must be specified' if operation_name.nil?
|
148
|
+
fail Hawkular::ArgumentError, 'Operation must be specified' if operation_name.nil?
|
140
149
|
required = [:resourcePath]
|
141
150
|
check_pre_conditions operation_payload, required, &callback
|
142
151
|
|
@@ -297,7 +306,7 @@ module Hawkular::Operations
|
|
297
306
|
# @param [String] resource_path canonical path of the WildFly server
|
298
307
|
# @param callback [Block] callback that is run after the operation is done
|
299
308
|
def export_jdr(resource_path, &callback)
|
300
|
-
fail 'resource_path must be specified' if resource_path.nil?
|
309
|
+
fail Hawkular::ArgumentError, 'resource_path must be specified' if resource_path.nil?
|
301
310
|
check_pre_conditions(&callback)
|
302
311
|
|
303
312
|
invoke_specific_operation({ resourcePath: resource_path }, 'ExportJdr', &callback)
|
@@ -322,6 +331,8 @@ module Hawkular::Operations
|
|
322
331
|
private
|
323
332
|
|
324
333
|
def invoke_operation_helper(operation_payload, operation_name = nil, binary_content = nil, &callback)
|
334
|
+
synchronize { connect }
|
335
|
+
|
325
336
|
# fallback to generic 'ExecuteOperation' if nothing is specified
|
326
337
|
operation_name ||= 'ExecuteOperation'
|
327
338
|
add_credentials! operation_payload
|
@@ -332,19 +343,23 @@ module Hawkular::Operations
|
|
332
343
|
payload = "#{operation_name}Request=#{operation_payload.to_json}"
|
333
344
|
payload += binary_content unless binary_content.nil?
|
334
345
|
@ws.send payload, type: binary_content.nil? ? :text : :binary
|
346
|
+
rescue => e
|
347
|
+
callback.perform(:failure, "#{e.class} - #{e.message}")
|
335
348
|
end
|
336
349
|
|
337
350
|
def check_pre_conditions(hash = {}, params = [], &callback)
|
338
|
-
fail '
|
339
|
-
fail '
|
340
|
-
fail 'callback must have the perform method defined. include Hawkular::Operations' unless
|
351
|
+
fail Hawkular::ArgumentError, 'Hash cannot be nil.' if hash.nil?
|
352
|
+
fail Hawkular::ArgumentError, 'callback must have the perform method defined. include Hawkular::Operations' unless
|
341
353
|
callback.nil? || callback.respond_to?('perform')
|
354
|
+
|
342
355
|
params.each do |property|
|
343
356
|
next unless hash[property].nil?
|
344
357
|
err_callback = 'You need to specify error callback'
|
345
358
|
err_message = "Hash property #{property} must be specified"
|
346
|
-
|
347
|
-
|
359
|
+
|
360
|
+
if !callback || callback.perform(:failure, err_message) == Proc::PerformMethodMissing
|
361
|
+
fail(Hawkular::ArgumentError, err_callback)
|
362
|
+
end
|
348
363
|
end
|
349
364
|
end
|
350
365
|
|
data/lib/hawkular/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hawkular-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Libor Zoubek
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2017-
|
14
|
+
date: 2017-06-27 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
@@ -145,14 +145,14 @@ dependencies:
|
|
145
145
|
requirements:
|
146
146
|
- - "~>"
|
147
147
|
- !ruby/object:Gem::Version
|
148
|
-
version:
|
148
|
+
version: '3.0'
|
149
149
|
type: :development
|
150
150
|
prerelease: false
|
151
151
|
version_requirements: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
153
|
- - "~>"
|
154
154
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
155
|
+
version: '3.0'
|
156
156
|
- !ruby/object:Gem::Dependency
|
157
157
|
name: vcr
|
158
158
|
requirement: !ruby/object:Gem::Requirement
|