hawkular-client 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +2 -1
- data/.rubocop.yml +19 -6
- data/CHANGES.rdoc +13 -3
- data/README.rdoc +9 -3
- data/hawkularclient.gemspec +8 -4
- data/lib/alerts/alerts_api.rb +202 -32
- data/lib/hawkular.rb +35 -67
- data/lib/hawkular_all.rb +2 -0
- data/lib/inventory/inventory_api.rb +459 -130
- data/lib/metrics/metric_api.rb +14 -9
- data/lib/operations/operations_api.rb +247 -0
- data/lib/tokens/tokens_api.rb +33 -0
- data/lib/version.rb +1 -1
- data/spec/integration/alerts_spec.rb +272 -20
- data/spec/integration/hello-world-definitions.json +46 -0
- data/spec/integration/inventory_spec.rb +253 -89
- data/spec/integration/metric_spec.rb +36 -0
- data/spec/integration/operations_spec.rb +420 -0
- data/spec/integration/tokens_spec.rb +45 -0
- data/spec/resources/driver.jar +0 -0
- data/spec/resources/sample.war +0 -0
- data/spec/spec_helper.rb +30 -6
- data/spec/unit/base_spec.rb +22 -1
- data/spec/unit/canonical_path_spec.rb +92 -0
- data/spec/vcr/vcr_setup.rb +3 -4
- data/spec/vcr_cassettes/Alert/EndToEnd/Should_create_and_fire_a_trigger.yml +1187 -0
- data/spec/vcr_cassettes/Alert/Events/Should_list_events.yml +101 -0
- data/spec/vcr_cassettes/Alert/Events/Should_list_events_using_criteria.yml +79 -0
- data/spec/vcr_cassettes/Alert/Events/Should_not_list_events_using_criteria.yml +49 -0
- data/spec/vcr_cassettes/Alert/Triggers/Should_bulk_load_triggers.yml +225 -0
- data/spec/vcr_cassettes/Alert/Triggers/Should_create_a_basic_trigger_with_action.yml +355 -0
- data/spec/vcr_cassettes/Alert/Triggers/Should_create_an_action.yml +134 -0
- data/spec/vcr_cassettes/Alert/Triggers/Should_create_an_action_for_webhooks.yml +220 -0
- data/spec/vcr_cassettes/Alert/Triggers/Should_get_the_action_definitions.yml +218 -0
- data/spec/vcr_cassettes/Alert/Triggers/Should_not_create_an_action_for_unknown_plugin.yml +46 -0
- data/spec/vcr_cassettes/Alert/Triggers/Should_not_create_an_action_for_unknown_properties.yml +134 -0
- data/spec/vcr_cassettes/Counter_metrics/Should_get_metrics_with_limit_and_order.yml +270 -0
- data/spec/vcr_cassettes/Inventory/Client_should_listen_on_various_inventory_events.json +47 -0
- data/spec/vcr_cassettes/Inventory/Client_should_listen_on_various_inventory_events.yml +191 -0
- data/spec/vcr_cassettes/Inventory/Helpers/generate_some_events_for_websocket.yml +507 -0
- data/spec/vcr_cassettes/Inventory/Should_List_datasources_with_no_props.yml +74 -69
- data/spec/vcr_cassettes/Inventory/{Should_list_types_without_feed.yml → Should_create_a_feed.yml} +29 -32
- data/spec/vcr_cassettes/Inventory/Should_create_a_feed_again.yml +211 -0
- data/spec/vcr_cassettes/Inventory/Should_create_a_resource_.yml +355 -0
- data/spec/vcr_cassettes/Inventory/Should_create_a_resource_with_metric.yml +786 -0
- data/spec/vcr_cassettes/Inventory/Should_create_a_resourcetype.yml +205 -0
- data/spec/vcr_cassettes/Inventory/Should_create_and_delete_feed.yml +201 -0
- data/spec/vcr_cassettes/Inventory/Should_create_and_get_a_resource.yml +419 -0
- data/spec/vcr_cassettes/Inventory/Should_list_URLs.yml +39 -27
- data/spec/vcr_cassettes/Inventory/Should_list_WildFlys.yml +37 -29
- data/spec/vcr_cassettes/Inventory/Should_list_WildFlys_with_props.yml +53 -45
- data/spec/vcr_cassettes/Inventory/Should_list_all_the_resource_types.yml +177 -0
- data/spec/vcr_cassettes/Inventory/Should_list_children_of_WildFly.yml +230 -56
- data/spec/vcr_cassettes/Inventory/Should_list_feeds.yml +27 -24
- data/spec/vcr_cassettes/Inventory/Should_list_heap_metrics_for_WildFlys.yml +586 -119
- data/spec/vcr_cassettes/Inventory/Should_list_metrics_for_WildFlys.yml +220 -59
- data/spec/vcr_cassettes/Inventory/Should_list_metrics_of_given_metric_type.yml +613 -0
- data/spec/vcr_cassettes/Inventory/Should_list_metrics_of_given_resource_type.yml +333 -0
- data/spec/vcr_cassettes/Inventory/Should_list_recursive_children_of_WildFly.yml +2064 -0
- data/spec/vcr_cassettes/Inventory/Should_list_relationships_of_WildFly.yml +460 -0
- data/spec/vcr_cassettes/Inventory/Should_list_types_with_bad_feed.yml +26 -25
- data/spec/vcr_cassettes/Inventory/Should_list_types_with_feed.yml +102 -36
- data/spec/vcr_cassettes/Inventory/Should_not_find_an_unknown_resource.yml +54 -0
- data/spec/vcr_cassettes/Inventory/Tenants/Should_Get_Tenant_For_Explicit_Credentials.yml +50 -0
- data/spec/vcr_cassettes/Inventory/Tenants/Should_Get_Tenant_For_Implicit_Credentials.yml +50 -0
- data/spec/vcr_cassettes/Operation/Helpers/get_tenant.yml +50 -0
- data/spec/vcr_cassettes/Operation/Operation/Add_JDBC_driver_should_add_the_driver.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/Add_datasource_should_be_doable.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/Add_deployment_should_be_doable.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/Redeploy_can_be_run_multiple_times_in_parallel.json +40 -0
- data/spec/vcr_cassettes/Operation/Operation/Redeploy_should_be_performed_and_eventually_respond_with_success.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/Redeploy_should_not_be_performed_if_resource_path_is_wrong.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/Remove_JDBC_driver_should_be_performed_and_eventually_respond_with_success.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/Remove_datasource_should_be_performed_and_eventually_respond_with_success.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/Remove_deployment_should_be_performed_and_eventually_respond_with_success.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/Undeploy_should_be_performed_and_eventually_respond_with_success.json +26 -0
- data/spec/vcr_cassettes/Operation/Operation/should_not_be_possible_to_perform_on_closed_client.json +12 -0
- data/spec/vcr_cassettes/Operation/Websocket_connection/should_be_established.json +9 -0
- data/spec/vcr_cassettes/Tokens/Should_be_able_to_create_a_new_token_for_an_actual_user.yml +57 -0
- data/spec/vcr_cassettes/Tokens/Should_be_able_to_list_the_available_tokens.yml +49 -0
- data/spec/vcr_cassettes/Tokens/Should_get_a_401_when_attempting_to_create_a_token_with_a_wrong_password.yml +56 -0
- data/spec/vcr_cassettes/Tokens/Should_get_a_401_when_attempting_to_create_a_token_without_a_password.yml +55 -0
- metadata +175 -11
- data/lib/metrics/version.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bb18420ad9844b7c10d6e5e4e0df657dce7c172
|
4
|
+
data.tar.gz: 1bcac0ba50a633ecbf512a225c78aae0fb06fdf1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2adc059140248e2a9abea8c4000ae4df32b6004534b7eb1c1eb02a2f234b5a3294993142abb4e37cc8f4d5319f47a45729fbb1f4c335aac66d978852b271ee8
|
7
|
+
data.tar.gz: 0945f21efb375d356404683b19888fecadc3698dd55e496eb33a727d9cd411caabd2a883e23e13fe77dd829578f4c082d107fbefd8de5756379226133daa51ba
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
/test/version_tmp/
|
10
10
|
/tmp/
|
11
11
|
spec/vcr.log
|
12
|
+
Gemfile.lock
|
12
13
|
|
13
14
|
## Specific to RubyMotion:
|
14
15
|
.dat*
|
@@ -28,7 +29,7 @@ build/
|
|
28
29
|
|
29
30
|
# for a library or gem, you might want to ignore these files since the code is
|
30
31
|
# intended to run in multiple environments; otherwise, check them in:
|
31
|
-
|
32
|
+
Gemfile.lock
|
32
33
|
# .ruby-version
|
33
34
|
# .ruby-gemset
|
34
35
|
|
data/.rubocop.yml
CHANGED
@@ -1,14 +1,27 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# possible values:
|
2
|
+
# https://github.com/bbatsov/rubocop/blob/master/config/
|
3
|
+
|
4
|
+
#
|
5
|
+
# Overrides
|
6
|
+
#
|
7
|
+
CyclomaticComplexity:
|
8
|
+
Severity: refactor
|
9
|
+
Metrics/LineLength:
|
10
|
+
Max: 120
|
11
|
+
Metrics/ParameterLists:
|
12
|
+
Max: 8
|
13
|
+
#
|
14
|
+
# Enabled/Disabled
|
15
|
+
#
|
3
16
|
ClassLength:
|
4
17
|
Enabled: false
|
5
|
-
|
18
|
+
Documentation:
|
19
|
+
Enabled: false
|
20
|
+
MethodLength:
|
6
21
|
Enabled: false
|
7
22
|
Metrics/AbcSize:
|
8
23
|
Enabled: false
|
9
|
-
|
24
|
+
ModuleLength:
|
10
25
|
Enabled: false
|
11
26
|
Style/ClassAndModuleChildren:
|
12
27
|
Enabled: false
|
13
|
-
Metrics/LineLength:
|
14
|
-
Max: 100
|
data/CHANGES.rdoc
CHANGED
@@ -1,12 +1,22 @@
|
|
1
1
|
== Changes
|
2
2
|
|
3
|
-
This document describes the relevant changes
|
3
|
+
This document describes the relevant changes between releases of the
|
4
4
|
_hawkular-client_ project.
|
5
5
|
|
6
|
+
=== V 0.2.1
|
7
|
+
|
8
|
+
* Add support to create items in inventory
|
9
|
+
* Add support to percentiles, limit and order parameters in Metrics API
|
10
|
+
* Add support to run operations on WildFly agent via websockets
|
11
|
+
* Add support to create items in alerts
|
12
|
+
* Add support for auth tokens (can be created by the client on the server)
|
13
|
+
* Add support to consume inventory events via websockets
|
14
|
+
* Add support to (offline) test websockets by recorded communication (VCR)
|
15
|
+
|
6
16
|
=== V 0.2.0
|
7
17
|
|
8
18
|
* Add support for Hawkular-Inventory and Hawkular-Alerts
|
9
|
-
*
|
19
|
+
* Reshuffling of inner classes
|
10
20
|
* The sub-url that is passed to `http_*` methods is escaped via
|
11
21
|
`Addressable::URI.escape()`
|
12
22
|
|
@@ -18,5 +28,5 @@ _hawkular-client_ project.
|
|
18
28
|
=== V 0.1.1
|
19
29
|
|
20
30
|
* Add VCR tests
|
21
|
-
* Metrics::Client.new now
|
31
|
+
* Metrics::Client.new now requires a hash for credentials
|
22
32
|
* Code cleanup and enforcement via RuboCop
|
data/README.rdoc
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
{<img src="https://coveralls.io/repos/github/hawkular/hawkular-client-ruby/badge.svg?branch=master" alt="Coverage Status" />}[https://coveralls.io/github/hawkular/hawkular-client-ruby?branch=master]
|
2
|
+
{<img src="https://travis-ci.org/hawkular/hawkular-client-ruby.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/hawkular/hawkular-client-ruby]
|
3
|
+
|
1
4
|
= hawkular-client-ruby
|
2
5
|
|
3
6
|
A Ruby Hawkular Client.
|
@@ -10,7 +13,7 @@ A Ruby Hawkular Client.
|
|
10
13
|
* Start a feature/bugfix branch
|
11
14
|
* Commit and push until you are happy with your contribution
|
12
15
|
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
13
|
-
* Run your code through RuboCop (which is default when running
|
16
|
+
* Run your code through RuboCop (which is default when running +rake+) and fix complaints.
|
14
17
|
* When you open a pull request, watch out for failures on Travis.
|
15
18
|
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is
|
16
19
|
otherwise necessary, that is fine, but please isolate to its own commit so we can cherry-pick around it.
|
@@ -20,11 +23,14 @@ A Ruby Hawkular Client.
|
|
20
23
|
Integration tests are recorded and played against cassettes recorded with VCR
|
21
24
|
(http://www.relishapp.com/vcr/vcr/docs)
|
22
25
|
|
23
|
-
* Edit the endpoint properties in the file
|
26
|
+
* Edit the endpoint properties in the file +spec/endpoint.yml+ (user, password and host name) if needed
|
24
27
|
* From command line run
|
25
28
|
rake spec
|
26
|
-
* To run the tests against a live server, set VCR_OFF to 1 as in
|
29
|
+
* To run the tests against a live server, set +VCR_OFF+ to +1+ as in
|
27
30
|
VCR_OFF=1 rake spec
|
31
|
+
* To run the tests for operations against a live server using the WebSockets, set +WEBSOCKET_ON+ to +1+ as in
|
32
|
+
WEBSOCKET_ON=1 rake spec
|
33
|
+
(WebSocket communication can't be recorded by VCR)
|
28
34
|
|
29
35
|
== Logging
|
30
36
|
|
data/hawkularclient.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'version'
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = 'hawkular-client'
|
8
8
|
gem.version = Hawkular::VERSION
|
9
|
-
gem.authors = ['Libor Zoubek', 'Heiko W. Rupp', 'Federico Simoncelli']
|
10
|
-
gem.email = %w(lzoubek@redhat.com hrupp@redhat.com)
|
9
|
+
gem.authors = ['Libor Zoubek', 'Heiko W. Rupp', 'Jirka Kremser', 'Federico Simoncelli']
|
10
|
+
gem.email = %w(lzoubek@redhat.com hrupp@redhat.com jkremser@redhat.com)
|
11
11
|
gem.homepage = 'https://github.com/hawkular/hawkular-client-ruby'
|
12
12
|
gem.summary = 'A Ruby client for Hawkular'
|
13
13
|
gem.license = 'ASL 2.0'
|
@@ -22,13 +22,17 @@ Gem::Specification.new do |gem|
|
|
22
22
|
gem.require_paths = ['lib']
|
23
23
|
|
24
24
|
gem.add_runtime_dependency('rest-client')
|
25
|
+
gem.add_runtime_dependency('websocket-client-simple', '~> 0.3.0')
|
26
|
+
gem.add_runtime_dependency('addressable')
|
25
27
|
gem.add_development_dependency('shoulda')
|
26
|
-
gem.add_development_dependency('rspec-rails', '~>
|
27
|
-
gem.add_development_dependency('rake')
|
28
|
+
gem.add_development_dependency('rspec-rails', '~> 3.0')
|
29
|
+
gem.add_development_dependency('rake', '< 11')
|
30
|
+
gem.add_development_dependency('simple-websocket-vcr', '= 0.0.4')
|
28
31
|
gem.add_development_dependency('yard')
|
29
32
|
gem.add_development_dependency('webmock')
|
30
33
|
gem.add_development_dependency('vcr')
|
31
34
|
gem.add_development_dependency('rubocop', '= 0.34.2')
|
35
|
+
gem.add_development_dependency('coveralls')
|
32
36
|
|
33
37
|
gem.rdoc_options << '--title' << gem.name <<
|
34
38
|
'--main' << 'README.rdoc' << '--line-numbers' << '--inline-source'
|
data/lib/alerts/alerts_api.rb
CHANGED
@@ -2,8 +2,10 @@ require 'hawkular'
|
|
2
2
|
require 'ostruct'
|
3
3
|
|
4
4
|
# Alerts module provides access to Hawkular-Alerts.
|
5
|
-
# There are
|
6
|
-
#
|
5
|
+
# There are three main parts here:
|
6
|
+
# Triggers, that define alertable conditions
|
7
|
+
# Alerts, that represent a fired Alert trigger
|
8
|
+
# Events, that represent a fired Event trigger or an externally injected event (hawkular, not miq event)
|
7
9
|
# @see http://www.hawkular.org/docs/rest/rest-alerts.html
|
8
10
|
module Hawkular::Alerts
|
9
11
|
# Interface to use to talk to the Hawkular-Alerts component.
|
@@ -11,7 +13,7 @@ module Hawkular::Alerts
|
|
11
13
|
# http://localhost:8080/hawkular/alerts
|
12
14
|
# @param credentials [Hash{String=>String}] Hash of username, password, token(optional)
|
13
15
|
class AlertsClient < Hawkular::BaseClient
|
14
|
-
def initialize(entrypoint =
|
16
|
+
def initialize(entrypoint = 'http://localhost:8080/hawkular/alerts', credentials = {})
|
15
17
|
@entrypoint = entrypoint
|
16
18
|
|
17
19
|
super(entrypoint, credentials)
|
@@ -53,6 +55,88 @@ module Hawkular::Alerts
|
|
53
55
|
trigger
|
54
56
|
end
|
55
57
|
|
58
|
+
# Import multiple trigger or action definitions specified as a hash to the server.
|
59
|
+
# @param [Hash] hash The hash with the trigger and action definitions.
|
60
|
+
# see the https://git.io/va5UO for more details about the structure
|
61
|
+
# @return [Hash] The newly entities as hash
|
62
|
+
def bulk_import_triggers(hash)
|
63
|
+
http_post 'import/all', hash
|
64
|
+
end
|
65
|
+
|
66
|
+
# Creates the trigger definition.
|
67
|
+
# @param [Trigger] trigger The trigger to be created
|
68
|
+
# @param [Array<Condition>] conditions Array of associated conditions
|
69
|
+
# @param [Array<Dampening>] dampenings Array of associated dampenings
|
70
|
+
# @return [Trigger] The newly created trigger
|
71
|
+
def create_trigger(trigger, conditions = [], dampenings = [], _actions = [])
|
72
|
+
full_trigger = {}
|
73
|
+
full_trigger[:trigger] = trigger.to_h
|
74
|
+
conds = []
|
75
|
+
conditions.each { |c| conds.push(c.to_h) }
|
76
|
+
full_trigger[:conditions] = conds
|
77
|
+
damps = []
|
78
|
+
dampenings.each { |d| damps.push(d.to_h) } unless dampenings.nil?
|
79
|
+
full_trigger[:dampenings] = damps
|
80
|
+
|
81
|
+
http_post 'triggers/trigger', full_trigger
|
82
|
+
end
|
83
|
+
|
84
|
+
# Deletes the trigger definition.
|
85
|
+
# @param [String] trigger_id Id of the trigger to delete
|
86
|
+
def delete_trigger(trigger_id)
|
87
|
+
http_delete "/triggers/#{trigger_id}"
|
88
|
+
end
|
89
|
+
|
90
|
+
# Obtains action definition/plugin from the server.
|
91
|
+
# @param [String] action_plugin Id of the action plugin to fetch. If nil, all the plugins are fetched
|
92
|
+
def get_action_definition(action_plugin = nil)
|
93
|
+
if action_plugin.nil?
|
94
|
+
plugins = http_get('plugins')
|
95
|
+
else
|
96
|
+
plugins = [action_plugin]
|
97
|
+
end
|
98
|
+
ret = {}
|
99
|
+
plugins.each do |p|
|
100
|
+
ret[p] = http_get("/plugins/#{p}")
|
101
|
+
end
|
102
|
+
ret
|
103
|
+
end
|
104
|
+
|
105
|
+
# Creates the action.
|
106
|
+
# @param [String] plugin The id of action definition/plugin
|
107
|
+
# @param [String] action_id The id of action
|
108
|
+
# @param [Hash] properties Troperties of action
|
109
|
+
# @return [Action] The newly created action
|
110
|
+
def create_action(plugin, action_id, properties = {})
|
111
|
+
the_plugin = hawk_escape plugin
|
112
|
+
# Check if plugin exists
|
113
|
+
http_get("/plugins/#{the_plugin}")
|
114
|
+
|
115
|
+
payload = { actionId: action_id, actionPlugin: plugin, properties: properties }
|
116
|
+
ret = http_post('/actions', payload)
|
117
|
+
Trigger::Action.new(ret)
|
118
|
+
end
|
119
|
+
|
120
|
+
# Obtains one action of given action plugin from the server.
|
121
|
+
# @param [String] plugin Id of the action plugin
|
122
|
+
# @param [String] action_id Id of the action
|
123
|
+
# @return [Action] the selected trigger
|
124
|
+
def get_action(plugin, action_id)
|
125
|
+
the_plugin = hawk_escape plugin
|
126
|
+
the_action_id = hawk_escape action_id
|
127
|
+
ret = http_get "/actions/#{the_plugin}/#{the_action_id}"
|
128
|
+
Trigger::Action.new(ret)
|
129
|
+
end
|
130
|
+
|
131
|
+
# Deletes the action of given action plugin.
|
132
|
+
# @param [String] plugin Id of the action plugin
|
133
|
+
# @param [String] action_id Id of the action
|
134
|
+
def delete_action(plugin, action_id)
|
135
|
+
the_plugin = hawk_escape plugin
|
136
|
+
the_action_id = hawk_escape action_id
|
137
|
+
http_delete "/actions/#{the_plugin}/#{the_action_id}"
|
138
|
+
end
|
139
|
+
|
56
140
|
# Obtain the alerts for the Trigger with the passed id
|
57
141
|
# @param [String] trigger_id Id of the trigger that has fired the alerts
|
58
142
|
# @return [Array<Alert>] List of alerts for the trigger. Can be empty
|
@@ -67,9 +151,11 @@ module Hawkular::Alerts
|
|
67
151
|
end
|
68
152
|
|
69
153
|
# List fired alerts
|
154
|
+
# @param [Hash]criteria optional query criteria
|
70
155
|
# @return [Array<Alert>] List of alerts in the system. Can be empty
|
71
|
-
def list_alerts
|
72
|
-
|
156
|
+
def list_alerts(criteria = {})
|
157
|
+
query = generate_query_params(criteria)
|
158
|
+
ret = http_get('/' + query)
|
73
159
|
val = []
|
74
160
|
ret.each { |a| val.push(Alert.new(a)) }
|
75
161
|
val
|
@@ -109,20 +195,42 @@ module Hawkular::Alerts
|
|
109
195
|
|
110
196
|
true
|
111
197
|
end
|
198
|
+
|
199
|
+
# List Events given optional criteria. Criteria keys are strings (not symbols):
|
200
|
+
# startTime numeric, milliseconds from epoch
|
201
|
+
# endTime numeric, milliseconds from epoch
|
202
|
+
# eventIds array of strings
|
203
|
+
# triggerIds array of strings
|
204
|
+
# categories array of strings
|
205
|
+
# tags array of strings, each tag of format 'name|value'. Specify '*' for value to match all values
|
206
|
+
# thin boolean, return lighter events (omits triggering data for trigger-generated events)
|
207
|
+
# @param [Hash] criteria optional query criteria
|
208
|
+
# @return [Array<Event>] List of events. Can be empty
|
209
|
+
def list_events(*criteria)
|
210
|
+
query = generate_query_params(*criteria)
|
211
|
+
http_get('/events' + query).map { |e| Event.new(e) }
|
212
|
+
end
|
112
213
|
end
|
113
214
|
|
114
215
|
# Representation of one Trigger
|
216
|
+
## (22 known properties: "enabled", "autoResolveMatch", "name", "memberOf", "autoEnable",
|
217
|
+
# "firingMatch", "tags", "id", "source", "tenantId", "eventText", "context", "eventType",
|
218
|
+
# "autoResolveAlerts", "dataIdMap", "eventCategory", "autoDisable", "type", "description",
|
219
|
+
# "severity", "autoResolve", "actions"])
|
115
220
|
class Trigger
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
attr_reader :conditions, :dampenings
|
120
|
-
attr_accessor :enabled
|
221
|
+
attr_accessor :id, :name, :context, :actions, :auto_disable, :auto_enable
|
222
|
+
attr_accessor :auto_resolve, :auto_resolve_alerts, :tags, :type
|
223
|
+
attr_accessor :tenant, :description, :group, :severity, :event_type
|
224
|
+
attr_reader :conditions, :dampenings
|
225
|
+
attr_accessor :enabled, :actions
|
121
226
|
|
122
227
|
def initialize(trigger_hash)
|
228
|
+
return if trigger_hash.nil?
|
229
|
+
|
123
230
|
@_hash = trigger_hash
|
124
231
|
@conditions = []
|
125
232
|
@dampenings = []
|
233
|
+
@actions = []
|
126
234
|
@id = trigger_hash['id']
|
127
235
|
@name = trigger_hash['name']
|
128
236
|
@enabled = trigger_hash['enabled']
|
@@ -134,41 +242,71 @@ module Hawkular::Alerts
|
|
134
242
|
@description = trigger_hash['description']
|
135
243
|
@auto_enable = trigger_hash['autoEnable']
|
136
244
|
@auto_disable = trigger_hash['autoDisable']
|
245
|
+
@context = trigger_hash['context']
|
246
|
+
@type = trigger_hash['type']
|
247
|
+
@tags = trigger_hash['tags']
|
248
|
+
# acts = trigger_hash['actions']
|
249
|
+
# acts.each { |a| @actions.push(Action.new(a)) } unless acts.nil?
|
137
250
|
end
|
138
251
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
252
|
+
def to_h
|
253
|
+
trigger_hash = {}
|
254
|
+
to_camel = lambda do |x|
|
255
|
+
ret = x.to_s.split('_').collect(&:capitalize).join
|
256
|
+
ret[0, 1].downcase + ret[1..-1]
|
257
|
+
end
|
258
|
+
fields = [:id, :name, :enabled, :severity, :auto_resolve, :auto_resolve_alerts, :event_type,
|
259
|
+
:description, :auto_enable, :auto_disable, :context, :type, :tags]
|
260
|
+
|
261
|
+
fields.each do |field|
|
262
|
+
camelized_field = to_camel.call(field)
|
263
|
+
field_value = __send__ field
|
264
|
+
trigger_hash[camelized_field] = field_value unless field_value.nil?
|
265
|
+
end
|
266
|
+
|
267
|
+
trigger_hash['tenantId'] = @tenant unless @tenant.nil?
|
268
|
+
trigger_hash['actions'] = []
|
269
|
+
@actions.each { |d| trigger_hash['actions'].push d.to_h }
|
270
|
+
|
271
|
+
trigger_hash
|
272
|
+
end
|
151
273
|
|
152
274
|
# Representing of one Condition
|
153
275
|
class Condition
|
154
|
-
|
155
|
-
|
276
|
+
attr_accessor :condition_id, :type, :operator, :threshold
|
277
|
+
attr_accessor :trigger_mode, :data_id
|
278
|
+
attr_reader :condition_set_size, :condition_set_index, :trigger_id
|
156
279
|
|
157
280
|
def initialize(cond_hash)
|
158
281
|
@condition_id = cond_hash['conditionId']
|
159
282
|
@type = cond_hash['type']
|
160
|
-
@
|
161
|
-
@
|
162
|
-
@
|
163
|
-
@
|
164
|
-
@
|
283
|
+
@operator = cond_hash['operator']
|
284
|
+
@threshold = cond_hash['threshold']
|
285
|
+
@type = cond_hash['type']
|
286
|
+
@trigger_mode = cond_hash['triggerMode']
|
287
|
+
@data_id = cond_hash['dataId']
|
288
|
+
@trigger_id = cond_hash['triggerId']
|
289
|
+
end
|
290
|
+
|
291
|
+
def to_h
|
292
|
+
cond_hash = {}
|
293
|
+
cond_hash['conditionId'] = @condition_id
|
294
|
+
cond_hash['type'] = @type
|
295
|
+
cond_hash['operator'] = @operator
|
296
|
+
cond_hash['threshold'] = @threshold
|
297
|
+
cond_hash['type'] = @type
|
298
|
+
cond_hash['triggerMode'] = @trigger_mode
|
299
|
+
cond_hash['dataId'] = @data_id
|
300
|
+
cond_hash['triggerId'] = @trigger_id
|
301
|
+
cond_hash
|
165
302
|
end
|
166
303
|
end
|
167
304
|
|
168
305
|
# Representation of one Dampening setting
|
169
306
|
class Dampening
|
170
|
-
|
171
|
-
|
307
|
+
attr_accessor :dampening_id, :type, :eval_true_setting, :eval_total_setting,
|
308
|
+
:eval_time_setting
|
309
|
+
attr_accessor :current_evals
|
172
310
|
|
173
311
|
def initialize(damp_hash)
|
174
312
|
@current_evals = {}
|
@@ -179,15 +317,47 @@ module Hawkular::Alerts
|
|
179
317
|
@eval_time_setting = damp_hash['evalTimeSetting']
|
180
318
|
end
|
181
319
|
end
|
320
|
+
|
321
|
+
class Action
|
322
|
+
attr_accessor :action_plugin, :action_id, :states, :tenant_id
|
323
|
+
|
324
|
+
def initialize(action_hash)
|
325
|
+
return if action_hash.nil?
|
326
|
+
|
327
|
+
@action_plugin = action_hash['actionPlugin']
|
328
|
+
@action_id = action_hash['actionId']
|
329
|
+
@tenant_id = action_hash['tenantId']
|
330
|
+
@states = action_hash['states']
|
331
|
+
end
|
332
|
+
|
333
|
+
def to_h
|
334
|
+
action_hash = {}
|
335
|
+
action_hash['actionPlugin'] = @action_plugin
|
336
|
+
action_hash['actionId'] = @action_id
|
337
|
+
action_hash['tenantId'] = @tenant_id
|
338
|
+
action_hash['states'] = @states
|
339
|
+
action_hash
|
340
|
+
end
|
341
|
+
end
|
182
342
|
end
|
183
343
|
|
184
344
|
# Representation of one alert.
|
185
345
|
# The name of the members are literally what they are in the JSON sent from the
|
186
|
-
# server and not 'rubyfied'. So 'alertId' and not '
|
346
|
+
# server and not 'rubyfied'. So 'alertId' and not 'alert_id'
|
187
347
|
# Check http://www.hawkular.org/docs/rest/rest-alerts.html#Alert for details
|
188
348
|
class Alert < OpenStruct
|
189
349
|
def initialize(alert_hash)
|
190
350
|
super(alert_hash)
|
191
351
|
end
|
192
352
|
end
|
353
|
+
|
354
|
+
# Representation of one event.
|
355
|
+
# The name of the members are literally what they are in the JSON sent from the
|
356
|
+
# server and not 'rubyfied'. So 'eventId' and not 'event_id'
|
357
|
+
# Check http://www.hawkular.org/docs/rest/rest-alerts.html#Event for details
|
358
|
+
class Event < OpenStruct
|
359
|
+
def initialize(event_hash)
|
360
|
+
super(event_hash)
|
361
|
+
end
|
362
|
+
end
|
193
363
|
end
|