hawkular-client 2.1.0 → 2.2.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: a881d3c60a017681d81648d65397217c78f5c30f
4
- data.tar.gz: 4ab68c65b422bcc0eaa5075c4ce8ac873af54d03
3
+ metadata.gz: b9461b58571db98a5be62adf87a4b0eecb7e817f
4
+ data.tar.gz: 3aa940779ef467732f5d1176a06be0194341f1d7
5
5
  SHA512:
6
- metadata.gz: 2b463dbb1267dd39f7701e09491f85f5341baa29f72b492a5df090461b12a4ac8e2a934f13dcc18fa65cedae37f0f7de3d5c8b022fc13bda9c6b54adf0734996
7
- data.tar.gz: 780f5436eebc3149df30ed2329b4a7ee7d1245163e10fd8078e112b266be8f43758a3f3e1cd0d636525f1f197160c201bffd187fdd2a77000bbd3a3818268a17
6
+ metadata.gz: 07a86f9b9b326c22dabfa8dc746a45bf5db6c3483643b85bac616bf904e07bca3f256cf97c4c8a8b2ecedbe709b1e8d2e7c62f5727ebd37633377378f614eca0
7
+ data.tar.gz: 0582a5844edf3bc3657f8a6e56d133b2704fa8c4b5446aceb0372b1a5852b3aeb766e4e9628d46bc5018dff3d0f283bbeaa8aaf1edc09ba9d0f476a0297d153f
@@ -28,3 +28,5 @@ ModuleLength:
28
28
  Enabled: false
29
29
  Style/ClassAndModuleChildren:
30
30
  Enabled: false
31
+ Style/BracesAroundHashParameters:
32
+ EnforcedStyle: context_dependent
@@ -3,6 +3,19 @@
3
3
  This document describes the relevant changes between releases of the
4
4
  _hawkular-client_ project.
5
5
 
6
+ === V 2.2.0
7
+
8
+ This release is needed to work with hawkular-services v0.0.5+
9
+
10
+ * Support the changed api endpoint (/deprecated) for Hawkular-inventory 0.17+ along the old version
11
+ * Add two missing fields (firing_match and auto_resolve) on Alert-triggers
12
+ * Add distinct parameter when getting availability data points
13
+ * Remove all defaulting/fallback to localhost:8080 in the APIs
14
+ * Allow to fetch multiple raw data items from Hawkular-metrics in one call. Requires Metrics v0.17+
15
+ * Corectly use the enabled flag for deployment operations
16
+
17
+ Full list of items can be found at https://github.com/hawkular/hawkular-client-ruby/issues?q=milestone%3A2.2.0+is%3Aclosed
18
+
6
19
  === V 2.1.0
7
20
  * Fix an issue where the operations endpoint constructor expected a host to be passed, which was not.
8
21
  * Add authentication to the websocket setup in Operations sub-client.
@@ -10,9 +10,101 @@ Documentation[http://www.hawkular.org/hawkular-client-ruby/]
10
10
 
11
11
  == Changelog
12
12
 
13
- See {CHANGELOG}[link:file.CHANGES.html] for a list of changes and
13
+ See {CHANGELOG}[link:file.CHANGES.html] for a list of changes and
14
14
  {API-Breaking-Changes}[link:file.api_breaking_changes.html] for a list of api-breaking changes.
15
15
 
16
+ == Overview
17
+
18
+ Ruby Hawkular Client provides a Ruby API to communicate with the following Hawkular subprojects:
19
+ * {Hawkular Alerts}[https://github.com/hawkular/hawkular-alerts]
20
+ * {Hawkular Inventory}[https://github.com/hawkular/hawkular-inventory]
21
+ * {Hawkular Metrics}[https://github.com/hawkular/hawkular-metrics]
22
+ * Invoking operations on {Hawkular Wildfly Agent}[https://github.com/hawkular/hawkular-agent].
23
+
24
+
25
+ == Usage
26
+
27
+ You must initialize the Hawkular Client with the server url, your username, password and tenant.
28
+
29
+ require 'hawkular/hawkular_client'
30
+ client = Hawkular::Client.new(
31
+ entrypoint: 'http://localhost:8080',
32
+ credentials: { username: 'jdoe', password: 'password' },
33
+ options: { tenant: 'hawkular' }
34
+ )
35
+
36
+ Each subproject API is packed in its own class, which you can access through the client object.
37
+
38
+ client.alerts # Alerts API
39
+ client.inventory # Inventory API
40
+ client.metrics # Metrics API
41
+ client.operations # Operations API
42
+
43
+ Metrics API is also subdivided to: Mixed, Availability, Counters, Gauges and Tenants.
44
+
45
+ client.metrics # Mixed API
46
+ client.metrics.avail # Availability
47
+ client.metrics.counters # Counters
48
+ client.metrics.gauges # Gauges
49
+ client.metrics.tenants # Tenants
50
+
51
+ The Mixed API is capable of handling multiple types of metrics, like the
52
+ push_data[Hawkular/Metrics/Client.html#push_data-instance_method] method, which pushes data
53
+ for multiple metrics of all supported data.
54
+
55
+ You can also access each subproject's API individually, if you would like to use only the metrics API you could do
56
+
57
+ require 'hawkular/metrics/metrics_client'
58
+ metrics_client = Hawkular::Metrics::Client.new(
59
+ entrypoint: 'http://localhost:8080/hawkular/metrics',
60
+ credentials: { username: 'jdoe', password: 'password' },
61
+ options: { tenant: 'hawkular' }
62
+ )
63
+
64
+ === Examples
65
+
66
+ Suppose you will monitor the availability of two networks to later determine which one is the best.
67
+ Every certain time, you would get the availability of each network and push them to Hawkular Metrics.
68
+
69
+ # ... Initialize client ...
70
+ is_network01_available = true
71
+ is_network02_available = false
72
+ client.metrics.push_data(availabilities: [
73
+ { id: 'network-01', data: [{ value: is_network01_available ? 'up' : 'down' }] },
74
+ { id: 'network-02', data: [{ value: is_network02_available ? 'up' : 'down' }] }
75
+ ])
76
+
77
+ At some other point you might want to access that data to analyze it
78
+
79
+ # ... Initialize client ...
80
+ # Fetches the 5 last availabilities reported in the last 8 hours.
81
+ network01_avail = client.metrics.avail.get_data('network-01', limit: 5, order: 'DESC')
82
+ network02_avail = client.metrics.avail.get_data('network-02', limit: 5, order: 'DESC')
83
+ # ... Do something with the availabilities ...
84
+
85
+ Each network01_avail will be an array like:
86
+
87
+ [
88
+ { "timestamp" => 1467312571473, "value" => "up" },
89
+ { "timestamp" => 1467312492650, "value" => "up" },
90
+ # ...
91
+ ]
92
+
93
+ You can get more info on the other parameters by checking the metrics API get_data[Hawkular/Metrics/Client/Metrics#get_data-instance_method]
94
+
95
+ === More info
96
+
97
+ Check each resource API for a detailed description of what methods are available.
98
+ * Alerts[Hawkular/Alerts/AlertsClient.html]
99
+ * Inventory[Hawkular/Inventory/InventoryClient.html]
100
+ * Metrics:
101
+ * Mixed[Hawkular/Metrics/Client.html]
102
+ * Availability[Hawkular/Metrics/Client/Availability.html]
103
+ * Counters[Hawkular/Metrics/Client/Counters.html]
104
+ * Gauges[Hawkular/Metrics/Client/Gauges.html]
105
+ * Tenants[Hawkular/Metrics/Client/Tenants.html]
106
+ * Operations[Hawkular/Operations/OperationsClient.html]
107
+
16
108
  == Contributing to hawkular-client-ruby
17
109
 
18
110
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
@@ -20,7 +112,7 @@ See {CHANGELOG}[link:file.CHANGES.html] for a list of changes and
20
112
  * Fork the project
21
113
  * Start a feature/bugfix branch
22
114
  * Commit and push until you are happy with your contribution
23
- * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
115
+ * Make sure to add tests for it. This is important so it won't break in a future version unintentionally.
24
116
  * Run your code through RuboCop (which is default when running +rake+) and fix complaints.
25
117
  * When you open a pull request, watch out for failures on Travis.
26
118
  * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is
@@ -33,6 +33,7 @@ Gem::Specification.new do |gem|
33
33
  gem.add_development_dependency('vcr')
34
34
  gem.add_development_dependency('rubocop', '= 0.34.2')
35
35
  gem.add_development_dependency('coveralls')
36
+ gem.add_development_dependency('rack', '~> 1.6.4')
36
37
 
37
38
  gem.rdoc_options << '--title' << gem.name <<
38
39
  '--main' << 'README.rdoc' << '--line-numbers' << '--inline-source'
@@ -14,7 +14,8 @@ module Hawkular::Alerts
14
14
  # @param credentials [Hash{String=>String}] Hash of username, password, token(optional)
15
15
  # @param options [Hash{String=>String}] Additional rest client options
16
16
  class AlertsClient < Hawkular::BaseClient
17
- def initialize(entrypoint = 'http://localhost:8080/hawkular/alerts', credentials = {}, options = {})
17
+ def initialize(entrypoint, credentials = {}, options = {})
18
+ entrypoint = normalize_entrypoint_url entrypoint, 'hawkular/alerts'
18
19
  @entrypoint = entrypoint
19
20
 
20
21
  super(entrypoint, credentials, options)
@@ -329,7 +330,7 @@ module Hawkular::Alerts
329
330
  attr_accessor :auto_resolve, :auto_resolve_alerts, :tags, :type
330
331
  attr_accessor :tenant, :description, :group, :severity, :event_type, :event_category, :member_of, :data_id_map
331
332
  attr_reader :conditions, :dampenings
332
- attr_accessor :enabled, :actions
333
+ attr_accessor :enabled, :actions, :firing_match, :auto_resolve_match
333
334
 
334
335
  def initialize(trigger_hash)
335
336
  return if trigger_hash.nil?
@@ -355,6 +356,8 @@ module Hawkular::Alerts
355
356
  @context = trigger_hash['context']
356
357
  @type = trigger_hash['type']
357
358
  @tags = trigger_hash['tags']
359
+ @firing_match = trigger_hash['firingMatch']
360
+ @auto_resolve_match = trigger_hash['autoResolveMatch']
358
361
  # acts = trigger_hash['actions']
359
362
  # acts.each { |a| @actions.push(Action.new(a)) } unless acts.nil?
360
363
  end
@@ -366,7 +369,8 @@ module Hawkular::Alerts
366
369
  ret[0, 1].downcase + ret[1..-1]
367
370
  end
368
371
  fields = [:id, :name, :enabled, :severity, :auto_resolve, :auto_resolve_alerts, :event_type, :event_category,
369
- :description, :auto_enable, :auto_disable, :context, :type, :tags, :member_of, :data_id_map]
372
+ :description, :auto_enable, :auto_disable, :context, :type, :tags, :member_of, :data_id_map,
373
+ :firing_match, :auto_resolve_match]
370
374
 
371
375
  fields.each do |field|
372
376
  camelized_field = to_camel.call(field)
@@ -127,6 +127,28 @@ module Hawkular
127
127
  end
128
128
  end
129
129
 
130
+ # Generate a new url with the passed sufix path if the path is not already added
131
+ # also, this function always remove the slash at the end of the URL, so if your entrypoint is
132
+ # http://localhost/hawkular/inventory/ this function will return http://localhost/hawkular/inventory
133
+ # to the URL
134
+ # @param entrypoint [String] base path
135
+ # @param suffix_path [String] sufix path to be added if it doesn't exist
136
+ # @return [String] URL with path attached to it at the end
137
+ def normalize_entrypoint_url(entrypoint, suffix_path)
138
+ strip_path = suffix_path.gsub(%r{/$}, '')
139
+ strip_path.nil? || suffix_path = strip_path
140
+ strip_path = suffix_path.gsub(%r{^/}, '')
141
+ strip_path.nil? || suffix_path = strip_path
142
+ strip_entrypoint = entrypoint.gsub(%r{/$}, '')
143
+ strip_path.nil? && strip_entrypoint = entrypoint
144
+ relative_path_rgx = Regexp.new("\/#{Regexp.quote(suffix_path)}(\/)*$")
145
+ if relative_path_rgx.match(entrypoint)
146
+ strip_entrypoint
147
+ else
148
+ "#{strip_entrypoint}/#{suffix_path}"
149
+ end
150
+ end
151
+
130
152
  # Specialized exception to be thrown
131
153
  # when the interaction with Hawkular fails
132
154
  class HawkularException < StandardError
@@ -10,9 +10,9 @@ module Hawkular
10
10
  attr_reader :inventory, :metrics, :alerts, :operations, :tokens, :state
11
11
 
12
12
  def initialize(hash)
13
- hash[:entrypoint] ||= 'http://localhost:8080'
14
13
  hash[:credentials] ||= {}
15
14
  hash[:options] ||= {}
15
+ fail 'no parameter ":entrypoint" given' if hash[:entrypoint].nil?
16
16
  @state = hash
17
17
 
18
18
  @inventory = Inventory::InventoryClient.create(entrypoint: "#{hash[:entrypoint]}/hawkular/inventory",
@@ -16,8 +16,25 @@ module Hawkular::Inventory
16
16
  # @param credentials [Hash{String=>String}] Hash of username, password, token(optional)
17
17
  # @param options [Hash{String=>String}] Additional rest client options
18
18
  def initialize(entrypoint = nil, credentials = {}, options = {})
19
+ entrypoint = normalize_entrypoint_url entrypoint, 'hawkular/inventory'
19
20
  @entrypoint = entrypoint
20
21
  super(entrypoint, credentials, options)
22
+ version = fetch_version_and_status['Implementation-Version']
23
+ major, minor = version.scan(/\d+/).map(&:to_i)
24
+ @entrypoint << '/deprecated' unless major == 0 && minor < 17
25
+ end
26
+
27
+ def fetch_version_and_status
28
+ if @entrypoint.end_with? '/deprecated'
29
+ begin
30
+ backup_entrypoint = @entrypoint
31
+ @entrypoint = @entrypoint[0...-'/deprecated'.size]
32
+ return http_get('/status')
33
+ ensure
34
+ @entrypoint = backup_entrypoint
35
+ end
36
+ end
37
+ http_get('/status')
21
38
  end
22
39
 
23
40
  # Creates a new Inventory Client
@@ -25,7 +42,7 @@ module Hawkular::Inventory
25
42
  # entrypoint: http://localhost:8080/hawkular/inventory
26
43
  # and another sub-hash containing the hash with username[String], password[String], token(optional)
27
44
  def self.create(hash)
28
- hash[:entrypoint] ||= 'http://localhost:8080/hawkular/inventory'
45
+ fail 'no parameter ":entrypoint" given' if hash[:entrypoint].nil?
29
46
  hash[:credentials] ||= {}
30
47
  hash[:options] ||= {}
31
48
  InventoryClient.new(hash[:entrypoint], hash[:credentials], hash[:options])
@@ -124,9 +124,19 @@ module Hawkular::Metrics
124
124
  order: nil)
125
125
  params = { start: starts, end: ends, bucketDuration: bucketDuration, buckets: buckets,
126
126
  percentiles: percentiles, limit: limit, order: order }
127
- resp = @client.http_get("/#{@resource}/#{ERB::Util.url_encode(id)}/data/?" +
128
- encode_params(params))
129
- resp.is_a?(Array) ? resp : [] # API returns no content (empty Hash) instead of empty array
127
+ get_data_helper(id, params)
128
+ end
129
+
130
+ # Retrieve raw data for multiple metrics.
131
+ # @param ids [Array[String]] metric definition ids
132
+ # @param starts [Integer] optional timestamp (default now - 8h)
133
+ # @param ends [Integer] optional timestamp (default now)
134
+ # @param limit [Integer] optional limit the number of data points returned
135
+ # @param order [String] optional Data point sort order, based on timestamp (ASC, DESC)
136
+ # @return [Array[Hash]] named datapoints
137
+ def raw_data(ids, starts: nil, ends: nil, limit: nil, order: nil)
138
+ params = { ids: ids, start: starts, end: ends, limit: limit, order: order }
139
+ @client.http_post("/#{@resource}/raw/query", params)
130
140
  end
131
141
 
132
142
  # Retrieve metric datapoints by tags
@@ -150,6 +160,14 @@ module Hawkular::Metrics
150
160
  def encode_params(params)
151
161
  URI.encode_www_form(params.select { |_k, v| !v.nil? })
152
162
  end
163
+
164
+ private
165
+
166
+ def get_data_helper(id, params)
167
+ resp = @client.http_get("/#{@resource}/#{ERB::Util.url_encode(id)}/data/?" +
168
+ encode_params(params))
169
+ resp.is_a?(Array) ? resp : [] # API returns no content (empty Hash) instead of empty array
170
+ end
153
171
  end
154
172
 
155
173
  # Class that interacts with "gauge" metric types
@@ -204,6 +222,24 @@ module Hawkular::Metrics
204
222
  def initialize(client)
205
223
  super(client, 'availability', 'availability')
206
224
  end
225
+
226
+ # Retrieve metric datapoints
227
+ # @param id [String] metric definition id
228
+ # @param starts [Integer] optional timestamp (default now - 8h)
229
+ # @param ends [Integer] optional timestamp (default now)
230
+ # @param buckets [Integer] optional desired number of buckets over the specified timerange
231
+ # @param bucketDuration [String] optional interval (default no aggregation)
232
+ # @param distinct [String] optional set to true to return only distinct, contiguous values
233
+ # @param limit [Integer] optional limit the number of data points returned
234
+ # @param order [String] optional Data point sort order, based on timestamp (ASC, DESC)
235
+ # @return [Array[Hash]] datapoints
236
+ # @see #push_data #push_data for datapoint detail
237
+ def get_data(id, starts: nil, ends: nil, bucketDuration: nil, buckets: nil, distinct: nil, limit: nil,
238
+ order: nil)
239
+ params = { start: starts, end: ends, bucketDuration: bucketDuration, buckets: buckets,
240
+ distinct: distinct, limit: limit, order: order }
241
+ get_data_helper(id, params)
242
+ end
207
243
  end
208
244
  end
209
245
  end
@@ -38,10 +38,10 @@ module Hawkular::Metrics
38
38
  # {username:"username",password:"password"},
39
39
  # {"tenant" => "your tenant ID"})
40
40
  #
41
- def initialize(entrypoint = 'http://localhost:8080/hawkular/metrics',
41
+ def initialize(entrypoint,
42
42
  credentials = {},
43
43
  options = {})
44
-
44
+ entrypoint = normalize_entrypoint_url entrypoint, 'hawkular/metrics'
45
45
  super(entrypoint, credentials, options)
46
46
  @tenants = Client::Tenants.new self
47
47
  @counters = Client::Counters.new self
@@ -134,7 +134,7 @@ module Hawkular::Operations
134
134
  #
135
135
  # @param callback [Block] callback that is run after the operation is done
136
136
  def add_deployment(hash, &callback)
137
- hash[:enabled] ||= true
137
+ hash[:enabled] = hash.key?(:enabled) ? hash[:enabled] : true
138
138
  required = [:resource_path, :destination_file_name, :binary_content]
139
139
  check_pre_conditions hash, required, &callback
140
140
 
@@ -8,7 +8,7 @@ module Hawkular::Token
8
8
  # @param entrypoint [String] base url of Hawkular - e.g http://localhost:8080
9
9
  # @param credentials [Hash{String=>String}] Hash of username, password
10
10
  # @param options [Hash{String=>String}] Additional rest client options
11
- def initialize(entrypoint = 'http://localhost:8080', credentials = {}, options = {})
11
+ def initialize(entrypoint, credentials = {}, options = {})
12
12
  super(entrypoint, credentials, options)
13
13
  end
14
14
 
@@ -4,5 +4,5 @@
4
4
  # @see https://github.com/hawkular
5
5
  module Hawkular
6
6
  # Version of the Hawkular Ruby Gem
7
- VERSION = '2.1.0'
7
+ VERSION = '2.2.0'
8
8
  end
@@ -4,10 +4,11 @@ require "#{File.dirname(__FILE__)}/../spec_helper"
4
4
  module Hawkular::Alerts::RSpec
5
5
  ALERTS_BASE = 'http://localhost:8080/hawkular/alerts'
6
6
  creds = { username: 'jdoe', password: 'password' }
7
+ options = { tenant: 'hawkular' }
7
8
 
8
9
  describe 'Alert/Triggers', vcr: { decode_compressed_response: true } do
9
10
  before(:each) do
10
- @client = Hawkular::Alerts::AlertsClient.new(ALERTS_BASE, creds)
11
+ @client = Hawkular::Alerts::AlertsClient.new(ALERTS_BASE, creds, options)
11
12
  end
12
13
 
13
14
  it 'Should List Triggers' do
@@ -115,6 +116,45 @@ module Hawkular::Alerts::RSpec
115
116
  end
116
117
  end
117
118
 
119
+ it 'Should create a firing ALL_ANY trigger' do
120
+ # Create the trigger
121
+ t = Hawkular::Alerts::Trigger.new({})
122
+ t.enabled = true
123
+ t.id = 'my-cool-trigger'
124
+ t.name = 'Just a trigger'
125
+ t.severity = :HIGH
126
+ t.description = 'Just a test trigger'
127
+
128
+ begin
129
+ ft = @client.create_trigger t, [], nil
130
+ expect(ft).not_to be_nil
131
+
132
+ trigger = @client.get_single_trigger t.id, true
133
+ expect(trigger.firing_match).to eq('ALL')
134
+ expect(trigger.auto_resolve_match).to eq('ALL')
135
+
136
+ @client.delete_trigger(t.id)
137
+
138
+ t.firing_match = :ANY
139
+ t.auto_resolve_match = :ANY
140
+
141
+ ft = @client.create_trigger t, [], nil
142
+ expect(ft).not_to be_nil
143
+
144
+ trigger = @client.get_single_trigger t.id, true
145
+ expect(trigger.firing_match).to eq('ANY')
146
+ expect(trigger.auto_resolve_match).to eq('ANY')
147
+ ensure
148
+ # rubocop:disable Lint/HandleExceptions
149
+ begin
150
+ @client.delete_trigger(t.id)
151
+ rescue
152
+ # I am not interested
153
+ end
154
+ # rubocop:enable Lint/HandleExceptions
155
+ end
156
+ end
157
+
118
158
  it 'Should get the action definitions' do
119
159
  ret = @client.get_action_definition
120
160
  expect(ret.size).to be(2)
@@ -4,13 +4,18 @@ require 'securerandom'
4
4
 
5
5
  # examples that tests the main client which delegates all the calls to Hawkular component clients
6
6
  module Hawkular::Client::RSpec
7
+ HOST = 'http://localhost:8080'
8
+
7
9
  describe 'HawkularClient' do
8
10
  before(:all) do
9
11
  @creds = {
10
12
  username: 'jdoe',
11
13
  password: 'password'
12
14
  }
13
- @hawkular_client = Hawkular::Client.new(credentials: @creds)
15
+ ::RSpec::Mocks.with_temporary_scope do
16
+ mock_inventory_client
17
+ @hawkular_client = Hawkular::Client.new(entrypoint: HOST, credentials: @creds)
18
+ end
14
19
  @state = {
15
20
  hostname: 'localhost.localdomain',
16
21
  feed: nil
@@ -28,7 +33,10 @@ module Hawkular::Client::RSpec
28
33
 
29
34
  context 'and Inventory client', vcr: { decode_compressed_response: true } do
30
35
  before(:all) do
31
- @client = Hawkular::Inventory::InventoryClient.create(credentials: @creds)
36
+ ::RSpec::Mocks.with_temporary_scope do
37
+ mock_inventory_client
38
+ @client = Hawkular::Inventory::InventoryClient.create(entrypoint: HOST, credentials: @creds)
39
+ end
32
40
  end
33
41
 
34
42
  it 'Should list the same feeds' do
@@ -93,7 +101,7 @@ module Hawkular::Client::RSpec
93
101
  include Hawkular::Metrics::RSpec
94
102
 
95
103
  before(:all) do
96
- @client = Hawkular::Metrics::Client.new('http://localhost:8080/hawkular/metrics', @creds)
104
+ @client = Hawkular::Metrics::Client.new(HOST, @creds)
97
105
  end
98
106
 
99
107
  it 'Should both work the same way when pushing metric data to non-existing counter' do
@@ -188,7 +196,7 @@ module Hawkular::Client::RSpec
188
196
  }
189
197
 
190
198
  actual_data = {}
191
- client = Hawkular::Operations::OperationsClient.new(entrypoint: 'http://localhost:8080', credentials: @creds)
199
+ client = Hawkular::Operations::OperationsClient.new(entrypoint: HOST, credentials: @creds)
192
200
  client.invoke_generic_operation(redeploy) do |on|
193
201
  on.success do |data|
194
202
  actual_data[:data] = data