hawkular-client 2.0.0 → 2.1.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/lib/hawkular/alerts/alerts_api.rb +7 -0
- data/lib/hawkular/operations/operations_api.rb +23 -5
- data/lib/hawkular/version.rb +1 -1
- data/spec/integration/alerts_spec.rb +10 -7
- data/spec/integration/hawkular_client_spec.rb +1 -1
- data/spec/integration/operations_spec.rb +82 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/vcr_cassettes/Alerts/Should_return_the_version.yml +40 -0
- data/spec/vcr_cassettes/Operation/Websocket_connection/should_bail_with_no_host.json +3 -0
- data/spec/vcr_cassettes/Operation/Websocket_connection/should_be_established_via_entrypoint.json +9 -0
- data/spec/vcr_cassettes/Operation/Websocket_connection/should_run_into_error_callback.json +13 -0
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a881d3c60a017681d81648d65397217c78f5c30f
|
4
|
+
data.tar.gz: 4ab68c65b422bcc0eaa5075c4ce8ac873af54d03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b463dbb1267dd39f7701e09491f85f5341baa29f72b492a5df090461b12a4ac8e2a934f13dcc18fa65cedae37f0f7de3d5c8b022fc13bda9c6b54adf0734996
|
7
|
+
data.tar.gz: 780f5436eebc3149df30ed2329b4a7ee7d1245163e10fd8078e112b266be8f43758a3f3e1cd0d636525f1f197160c201bffd187fdd2a77000bbd3a3818268a17
|
data/CHANGES.rdoc
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
This document describes the relevant changes between releases of the
|
4
4
|
_hawkular-client_ project.
|
5
5
|
|
6
|
+
=== V 2.1.0
|
7
|
+
* Fix an issue where the operations endpoint constructor expected a host to be passed, which was not.
|
8
|
+
* Add authentication to the websocket setup in Operations sub-client.
|
9
|
+
* Add a status endpoint call for the Alerts sub-client
|
10
|
+
|
6
11
|
=== V 2.0.0
|
7
12
|
* This version is compatible with hawkular-services[https://github.com/hawkular/hawkular-services]
|
8
13
|
* By default no Tenant-Header is send in the requests, which is compatible with the old versions of Hawkular. However,
|
@@ -20,6 +20,13 @@ module Hawkular::Alerts
|
|
20
20
|
super(entrypoint, credentials, options)
|
21
21
|
end
|
22
22
|
|
23
|
+
# Return version and status information for the used version of Hawkular-Alerting
|
24
|
+
# @return [Hash{String=>String}]
|
25
|
+
# ('Implementation-Version', 'Built-From-Git-SHA1', 'status')
|
26
|
+
def fetch_version_and_status
|
27
|
+
http_get('/status')
|
28
|
+
end
|
29
|
+
|
23
30
|
# Lists defined triggers in the system
|
24
31
|
# @param [Array] ids List of trigger ids. If provided, limits to the given triggers
|
25
32
|
# @param [Array] tags List of tags. If provided, limits to the given tags. Individual
|
@@ -43,9 +43,12 @@ module Hawkular::Operations
|
|
43
43
|
|
44
44
|
# Initialize new OperationsClient
|
45
45
|
#
|
46
|
-
# @param [Hash] args Arguments for client
|
46
|
+
# @param [Hash] args Arguments for client.
|
47
|
+
# There are two ways of passing in the target host/port: via :host and via :entrypoint. If
|
48
|
+
# both are given, then :entrypoint will be used.
|
47
49
|
#
|
48
|
-
# @option args [String]
|
50
|
+
# @option args [String] :entrypoint Base URL of the hawkular server e.g. http://localhost:8080.
|
51
|
+
# @option args [String] :host base host:port pair of Hawkular - e.g localhost:8080
|
49
52
|
# @option args [Hash{String=>String}] :credentials Hash of (username password) or token
|
50
53
|
# @option args [Hash{String=>String}] :options Additional rest client options
|
51
54
|
# @option args [Fixnum] :wait_time Time in seconds describing how long the constructor should block - handshake
|
@@ -53,14 +56,29 @@ module Hawkular::Operations
|
|
53
56
|
# @example
|
54
57
|
# Hawkular::Operations::OperationsClient.new(credentials: {username: 'jdoe', password: 'password'})
|
55
58
|
def initialize(args)
|
56
|
-
args[:
|
59
|
+
ep = args[:entrypoint]
|
60
|
+
|
61
|
+
unless ep.nil?
|
62
|
+
uri = URI.parse ep
|
63
|
+
args[:host] ||= "#{uri.host}:#{uri.port}"
|
64
|
+
end
|
65
|
+
|
66
|
+
fail 'no parameter ":host" or ":entrypoint" given' if args[:host].nil?
|
57
67
|
args[:credentials] ||= {}
|
58
68
|
args[:options] ||= {}
|
59
69
|
args[:wait_time] ||= 0.5
|
60
70
|
super(args[:host], args[:credentials], args[:options])
|
61
71
|
# note: if we start using the secured WS, change the protocol to wss://
|
62
|
-
url = "ws://#{
|
63
|
-
|
72
|
+
url = "ws://#{args[:host]}/hawkular/command-gateway/ui/ws"
|
73
|
+
ws_options = {}
|
74
|
+
creds = args[:credentials]
|
75
|
+
base64_creds = ["#{creds[:username]}:#{creds[:password]}"].pack('m').delete("\r\n")
|
76
|
+
ws_options[:headers] = { 'Authorization' => 'Basic ' + base64_creds,
|
77
|
+
'Hawkular-Tenant' => args[:options][:tenant],
|
78
|
+
'Accept' => 'application/json'
|
79
|
+
}
|
80
|
+
|
81
|
+
@ws = Simple.connect url, ws_options do |client|
|
64
82
|
client.on(:message, once: true) do |msg|
|
65
83
|
parsed_message = msg.data.to_msg_hash
|
66
84
|
puts parsed_message if ENV['HAWKULARCLIENT_LOG_RESPONSE']
|
data/lib/hawkular/version.rb
CHANGED
@@ -424,13 +424,16 @@ module Hawkular::Alerts::RSpec
|
|
424
424
|
end
|
425
425
|
end
|
426
426
|
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
427
|
+
describe 'Alerts', vcr: { decode_compressed_response: true } do
|
428
|
+
before(:each) do
|
429
|
+
@client = Hawkular::Alerts::AlertsClient.new(ALERTS_BASE, creds)
|
430
|
+
end
|
431
|
+
|
432
|
+
it 'Should return the version' do
|
433
|
+
data = @client.fetch_version_and_status
|
434
|
+
expect(data).not_to be_nil
|
435
|
+
end
|
436
|
+
end
|
434
437
|
|
435
438
|
describe 'Alert/Events', :vcr do
|
436
439
|
VCR.configure do |c|
|
@@ -188,7 +188,7 @@ module Hawkular::Client::RSpec
|
|
188
188
|
}
|
189
189
|
|
190
190
|
actual_data = {}
|
191
|
-
client = Hawkular::Operations::OperationsClient.new(credentials: @creds)
|
191
|
+
client = Hawkular::Operations::OperationsClient.new(entrypoint: 'http://localhost:8080', credentials: @creds)
|
192
192
|
client.invoke_generic_operation(redeploy) do |on|
|
193
193
|
on.success do |data|
|
194
194
|
actual_data[:data] = data
|
@@ -20,16 +20,95 @@ module Hawkular::Operations::RSpec
|
|
20
20
|
|
21
21
|
WebSocketVCR.record(example, self) do
|
22
22
|
client = OperationsClient.new(host: HOST,
|
23
|
+
wait_time: WebSocketVCR.live? ? 1.5 : 2,
|
24
|
+
credentials: {
|
25
|
+
username: 'jdoe',
|
26
|
+
password: 'password'
|
27
|
+
},
|
28
|
+
options: {
|
29
|
+
tenant: 'hawkular'
|
30
|
+
})
|
31
|
+
ws = client.ws
|
32
|
+
expect(ws).not_to be nil
|
33
|
+
expect(ws.open?).to be true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should be established via entrypoint' do
|
38
|
+
WebSocketVCR.configure do |c|
|
39
|
+
c.hook_uris = ['127.0.0.1:8080']
|
40
|
+
end
|
41
|
+
|
42
|
+
WebSocketVCR.record(example, self) do
|
43
|
+
ep = URI::HTTP.build(host: '127.0.0.1', port: 8080).to_s
|
44
|
+
|
45
|
+
client = OperationsClient.new(entrypoint: ep,
|
23
46
|
wait_time: WebSocketVCR.live? ? 1.5 : 0,
|
24
47
|
credentials: {
|
25
48
|
username: 'jdoe',
|
26
49
|
password: 'password'
|
50
|
+
},
|
51
|
+
options: {
|
52
|
+
tenant: 'hawkular'
|
27
53
|
})
|
28
54
|
ws = client.ws
|
29
55
|
expect(ws).not_to be nil
|
30
56
|
expect(ws.open?).to be true
|
31
57
|
end
|
32
58
|
end
|
59
|
+
|
60
|
+
it 'should run into error callback' do
|
61
|
+
WebSocketVCR.configure do |c|
|
62
|
+
c.hook_uris = [HOST]
|
63
|
+
end
|
64
|
+
|
65
|
+
WebSocketVCR.record(example, self) do
|
66
|
+
client = OperationsClient.new(host: HOST,
|
67
|
+
wait_time: WebSocketVCR.live? ? 1.5 : 2,
|
68
|
+
credentials: {
|
69
|
+
username: 'jdoe',
|
70
|
+
password: 'password'
|
71
|
+
},
|
72
|
+
options: {
|
73
|
+
tenant: 'hawkular'
|
74
|
+
})
|
75
|
+
|
76
|
+
noop = { operationName: 'noop', resourcePath: '/bla' }
|
77
|
+
|
78
|
+
client.invoke_generic_operation(noop) do |on|
|
79
|
+
on.success do |_data|
|
80
|
+
fail 'This should have failed'
|
81
|
+
end
|
82
|
+
on.failure do |error|
|
83
|
+
puts 'error callback was correctly called, reason: ' + error.to_s
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should bail with no host' do
|
90
|
+
WebSocketVCR.configure do |c|
|
91
|
+
c.hook_uris = [HOST]
|
92
|
+
end
|
93
|
+
|
94
|
+
WebSocketVCR.record(example, self) do
|
95
|
+
begin
|
96
|
+
OperationsClient.new(
|
97
|
+
wait_time: WebSocketVCR.live? ? 1.5 : 2,
|
98
|
+
credentials: {
|
99
|
+
username: 'jdoe',
|
100
|
+
password: 'password'
|
101
|
+
},
|
102
|
+
options: {
|
103
|
+
tenant: 'hawkular'
|
104
|
+
})
|
105
|
+
rescue
|
106
|
+
puts 'We got an exception and this is good'
|
107
|
+
else
|
108
|
+
fail 'Should have failed as no host was given'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
33
112
|
end
|
34
113
|
|
35
114
|
describe 'Operation/Operation', :websocket, vcr: { decode_compressed_response: true } do
|
@@ -51,7 +130,8 @@ module Hawkular::Operations::RSpec
|
|
51
130
|
|
52
131
|
before(:each) do |ex|
|
53
132
|
unless ex.metadata[:skip_open]
|
54
|
-
@client = OperationsClient.new(
|
133
|
+
@client = OperationsClient.new(entrypoint: 'http://localhost:8080',
|
134
|
+
credentials: @creds,
|
55
135
|
wait_time: WebSocketVCR.live? ? 1.5 : 0)
|
56
136
|
@ws = @client.ws
|
57
137
|
end
|
@@ -235,7 +315,7 @@ module Hawkular::Operations::RSpec
|
|
235
315
|
@client.close_connection! unless @client.nil?
|
236
316
|
|
237
317
|
# open the connection
|
238
|
-
operations_client = OperationsClient.new(credentials: @creds)
|
318
|
+
operations_client = OperationsClient.new(entrypoint: 'http://localhost:8080', credentials: @creds)
|
239
319
|
|
240
320
|
redeploy = {
|
241
321
|
operationName: 'Redeploy',
|
data/spec/spec_helper.rb
CHANGED
@@ -165,7 +165,7 @@ RSpec.configure do |config|
|
|
165
165
|
if ENV['VCR_OFF'] == '1'
|
166
166
|
VCR.eject_cassette
|
167
167
|
VCR.turn_off!(ignore_cassettes: true)
|
168
|
-
WebSocketVCR.turn_off!
|
168
|
+
WebSocketVCR.turn_off! # TODO: this does not work as the impl is empty
|
169
169
|
WebMock.allow_net_connect!
|
170
170
|
puts 'VCR is turned off!'
|
171
171
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://jdoe:password@localhost:8080/hawkular/alerts/status
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
User-Agent:
|
17
|
+
- Ruby
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
X-Powered-By:
|
26
|
+
- Undertow/1
|
27
|
+
Server:
|
28
|
+
- WildFly/10
|
29
|
+
Content-Type:
|
30
|
+
- application/json
|
31
|
+
Content-Length:
|
32
|
+
- '124'
|
33
|
+
Date:
|
34
|
+
- Tue, 21 Jun 2016 07:58:51 GMT
|
35
|
+
body:
|
36
|
+
encoding: UTF-8
|
37
|
+
string: '{"Implementation-Version":"1.1.1.Final","Built-From-Git-SHA1":"d5381ab686932023c5a2e136dc25a4848bd7ba43","status":"STARTED"}'
|
38
|
+
http_version:
|
39
|
+
recorded_at: Tue, 21 Jun 2016 07:58:51 GMT
|
40
|
+
recorded_with: VCR 3.0.1
|
@@ -0,0 +1,13 @@
|
|
1
|
+
[
|
2
|
+
[
|
3
|
+
{
|
4
|
+
"operation": "read",
|
5
|
+
"type": "text",
|
6
|
+
"data": "WelcomeResponse={\"sessionId\":\"r4OAdkbOPYTA5HRnjgKW2vsq1TCGjZNT-Y3_qpco\"}"
|
7
|
+
},
|
8
|
+
{
|
9
|
+
"operation": "write",
|
10
|
+
"data": "ExecuteOperationRequest={\"operationName\":\"noop\",\"resourcePath\":\"/bla\",\"authentication\":{\"username\":\"jdoe\",\"password\":\"password\"}}"
|
11
|
+
}
|
12
|
+
]
|
13
|
+
]
|
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: 2.
|
4
|
+
version: 2.1.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: 2016-06-
|
14
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
@@ -181,8 +181,7 @@ dependencies:
|
|
181
181
|
- - ">="
|
182
182
|
- !ruby/object:Gem::Version
|
183
183
|
version: '0'
|
184
|
-
description:
|
185
|
-
A Ruby client for Hawkular
|
184
|
+
description: " A Ruby client for Hawkular\n"
|
186
185
|
email:
|
187
186
|
- lzoubek@redhat.com
|
188
187
|
- hrupp@redhat.com
|
@@ -258,6 +257,7 @@ files:
|
|
258
257
|
- spec/vcr_cassettes/Alert/Triggers/Should_get_the_action_definitions.yml
|
259
258
|
- spec/vcr_cassettes/Alert/Triggers/Should_not_create_an_action_for_unknown_plugin.yml
|
260
259
|
- spec/vcr_cassettes/Alert/Triggers/Should_not_create_an_action_for_unknown_properties.yml
|
260
|
+
- spec/vcr_cassettes/Alerts/Should_return_the_version.yml
|
261
261
|
- spec/vcr_cassettes/Availability_metrics/Should_create_Availability_definition_using_MetricDefinition_parameter.yml
|
262
262
|
- spec/vcr_cassettes/Availability_metrics/Should_create_and_return_Availability_using_Hash_parameter.yml
|
263
263
|
- spec/vcr_cassettes/Availability_metrics/Should_push_metric_data_to_non-existing_Availability.yml
|
@@ -344,7 +344,10 @@ files:
|
|
344
344
|
- spec/vcr_cassettes/Operation/Operation/Remove_deployment_should_be_performed_and_eventually_respond_with_success.json
|
345
345
|
- spec/vcr_cassettes/Operation/Operation/Undeploy_should_be_performed_and_eventually_respond_with_success.json
|
346
346
|
- spec/vcr_cassettes/Operation/Operation/should_not_be_possible_to_perform_on_closed_client.json
|
347
|
+
- spec/vcr_cassettes/Operation/Websocket_connection/should_bail_with_no_host.json
|
347
348
|
- spec/vcr_cassettes/Operation/Websocket_connection/should_be_established.json
|
349
|
+
- spec/vcr_cassettes/Operation/Websocket_connection/should_be_established_via_entrypoint.json
|
350
|
+
- spec/vcr_cassettes/Operation/Websocket_connection/should_run_into_error_callback.json
|
348
351
|
- spec/vcr_cassettes/Simple/Should_be_Cool.yml
|
349
352
|
- spec/vcr_cassettes/Tenants/Should_Get_Tenant_For_Explicit_Credentials.yml
|
350
353
|
- spec/vcr_cassettes/Tenants/Should_Get_Tenant_For_Implicit_Credentials.yml
|
@@ -425,6 +428,7 @@ test_files:
|
|
425
428
|
- spec/vcr_cassettes/Alert/Triggers/Should_get_the_action_definitions.yml
|
426
429
|
- spec/vcr_cassettes/Alert/Triggers/Should_not_create_an_action_for_unknown_plugin.yml
|
427
430
|
- spec/vcr_cassettes/Alert/Triggers/Should_not_create_an_action_for_unknown_properties.yml
|
431
|
+
- spec/vcr_cassettes/Alerts/Should_return_the_version.yml
|
428
432
|
- spec/vcr_cassettes/Availability_metrics/Should_create_Availability_definition_using_MetricDefinition_parameter.yml
|
429
433
|
- spec/vcr_cassettes/Availability_metrics/Should_create_and_return_Availability_using_Hash_parameter.yml
|
430
434
|
- spec/vcr_cassettes/Availability_metrics/Should_push_metric_data_to_non-existing_Availability.yml
|
@@ -511,7 +515,10 @@ test_files:
|
|
511
515
|
- spec/vcr_cassettes/Operation/Operation/Remove_deployment_should_be_performed_and_eventually_respond_with_success.json
|
512
516
|
- spec/vcr_cassettes/Operation/Operation/Undeploy_should_be_performed_and_eventually_respond_with_success.json
|
513
517
|
- spec/vcr_cassettes/Operation/Operation/should_not_be_possible_to_perform_on_closed_client.json
|
518
|
+
- spec/vcr_cassettes/Operation/Websocket_connection/should_bail_with_no_host.json
|
514
519
|
- spec/vcr_cassettes/Operation/Websocket_connection/should_be_established.json
|
520
|
+
- spec/vcr_cassettes/Operation/Websocket_connection/should_be_established_via_entrypoint.json
|
521
|
+
- spec/vcr_cassettes/Operation/Websocket_connection/should_run_into_error_callback.json
|
515
522
|
- spec/vcr_cassettes/Simple/Should_be_Cool.yml
|
516
523
|
- spec/vcr_cassettes/Tenants/Should_Get_Tenant_For_Explicit_Credentials.yml
|
517
524
|
- spec/vcr_cassettes/Tenants/Should_Get_Tenant_For_Implicit_Credentials.yml
|