hawkular-client 0.2.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/.yardopts +1 -0
  4. data/CHANGES.rdoc +17 -4
  5. data/README.rdoc +15 -6
  6. data/api_breaking_changes.rdoc +79 -0
  7. data/hawkularclient.gemspec +6 -5
  8. data/lib/{alerts → hawkular/alerts}/alerts_api.rb +168 -7
  9. data/lib/{hawkular.rb → hawkular/base_client.rb} +7 -44
  10. data/lib/hawkular/hawkular_client.rb +60 -0
  11. data/lib/hawkular/hawkular_client_utils.rb +40 -0
  12. data/lib/{inventory → hawkular/inventory}/inventory_api.rb +167 -142
  13. data/lib/{metrics → hawkular/metrics}/metric_api.rb +1 -0
  14. data/lib/{metrics → hawkular/metrics}/metrics_client.rb +4 -4
  15. data/lib/{metrics → hawkular/metrics}/tenant_api.rb +0 -0
  16. data/lib/{metrics → hawkular/metrics}/types.rb +0 -0
  17. data/lib/{operations → hawkular/operations}/operations_api.rb +11 -8
  18. data/lib/{tokens → hawkular/tokens}/tokens_api.rb +1 -1
  19. data/lib/{version.rb → hawkular/version.rb} +1 -1
  20. data/spec/integration/alerts_spec.rb +200 -0
  21. data/spec/integration/hawkular_client_spec.rb +228 -0
  22. data/spec/integration/inventory_spec.rb +246 -160
  23. data/spec/integration/metric_spec.rb +52 -59
  24. data/spec/integration/operations_spec.rb +53 -29
  25. data/spec/spec_helper.rb +109 -8
  26. data/spec/unit/base_spec.rb +9 -0
  27. data/spec/unit/canonical_path_spec.rb +2 -2
  28. data/spec/vcr/vcr_setup.rb +6 -0
  29. data/spec/vcr_cassettes/Alert/Events/Should_create_an_event.yml +50 -0
  30. data/spec/vcr_cassettes/Alert/Groups/Should_operate_a_complex_group_trigger.yml +1726 -0
  31. data/spec/vcr_cassettes/Counter_metrics/Should_get_metrics_as_bucketed_results.yml +190 -0
  32. data/spec/vcr_cassettes/Counter_metrics/Should_get_metrics_with_limit_and_order.yml +30 -42
  33. data/spec/vcr_cassettes/HawkularClient/and_Inventory_client/Should_both_create_and_delete_feed.yml +287 -0
  34. data/spec/vcr_cassettes/{Inventory/Should_list_URLs.yml → HawkularClient/and_Inventory_client/Should_both_list_WildFlys.yml} +35 -33
  35. data/spec/vcr_cassettes/{Inventory/Should_list_types_with_bad_feed.yml → HawkularClient/and_Inventory_client/Should_both_list_types_with_bad_feed.yml} +16 -19
  36. data/spec/vcr_cassettes/HawkularClient/and_Inventory_client/Should_list_same_types_when_param_is_given.yml +245 -0
  37. data/spec/vcr_cassettes/{Inventory/Should_list_feeds.yml → HawkularClient/and_Inventory_client/Should_list_the_same_feeds.yml} +20 -20
  38. data/spec/vcr_cassettes/HawkularClient/and_Inventory_client/Should_list_the_same_resource_types.yml +249 -0
  39. data/spec/vcr_cassettes/HawkularClient/and_Metrics_client/Should_both_create_and_retrieve_tags_for_Availability.yml +155 -0
  40. data/spec/vcr_cassettes/HawkularClient/and_Metrics_client/Should_both_create_and_return_Availability_using_Hash_parameter.yml +155 -0
  41. data/spec/vcr_cassettes/HawkularClient/and_Metrics_client/Should_both_return_the_version.yml +89 -0
  42. data/spec/vcr_cassettes/HawkularClient/and_Metrics_client/Should_both_work_the_same_way_when_pushing_metric_data_to_non-existing_counter.yml +114 -0
  43. data/spec/vcr_cassettes/{Inventory/Should_list_WildFlys_with_props.yml → HawkularClient/and_Operations_client/Should_both_work_the_same_way.yml} +28 -50
  44. data/spec/vcr_cassettes/HawkularClient/and_Operations_client_Should_both_work_the_same_way.json +44 -0
  45. data/spec/vcr_cassettes/Inventory/Helpers/create_url.yml +48 -0
  46. data/spec/vcr_cassettes/Inventory/Helpers/generate_some_events_for_websocket.yml +4446 -0
  47. data/spec/vcr_cassettes/Inventory/Helpers/get_feeds.yml +54 -0
  48. data/spec/vcr_cassettes/Inventory/Templates/Client_should_listen_on_various_inventory_events.json +47 -0
  49. data/spec/vcr_cassettes/Inventory/{Should_create_a_resourcetype.yml → Templates/Client_should_listen_on_various_inventory_events.yml} +47 -61
  50. data/spec/vcr_cassettes/Inventory/Templates/Helpers/generate_some_events_for_websocket.yml +542 -0
  51. data/spec/vcr_cassettes/Inventory/{Should_List_datasources_with_no_props.yml → Templates/Should_List_datasources_with_no_props.yml} +26 -85
  52. data/spec/vcr_cassettes/Inventory/Templates/Should_create_a_feed.yml +54 -0
  53. data/spec/vcr_cassettes/Inventory/Templates/Should_create_a_feed_again.yml +164 -0
  54. data/spec/vcr_cassettes/Inventory/{Should_create_a_nested_resource_and_metric_on_it.yml → Templates/Should_create_a_nested_resource_and_metric_on_it.yml} +93 -74
  55. data/spec/vcr_cassettes/Inventory/{Should_create_a_resource_.yml → Templates/Should_create_a_resource.yml} +103 -76
  56. data/spec/vcr_cassettes/Inventory/{Should_create_a_resource_with_metric.yml → Templates/Should_create_a_resource_with_metric.yml} +91 -197
  57. data/spec/vcr_cassettes/Inventory/Templates/Should_create_a_resourcetype.yml +154 -0
  58. data/spec/vcr_cassettes/Inventory/Templates/Should_create_and_delete_feed.yml +145 -0
  59. data/spec/vcr_cassettes/Inventory/{Should_create_and_get_a_resource.yml → Templates/Should_create_and_get_a_resource.yml} +35 -20
  60. data/spec/vcr_cassettes/Inventory/Templates/Should_list_URLs.yml +65 -0
  61. data/spec/vcr_cassettes/Inventory/Templates/Should_list_WildFlys.yml +61 -0
  62. data/spec/vcr_cassettes/Inventory/{Should_list_WildFlys.yml → Templates/Should_list_WildFlys_with_props.yml} +36 -33
  63. data/spec/vcr_cassettes/Inventory/Templates/Should_list_all_the_resource_types.yml +126 -0
  64. data/spec/vcr_cassettes/Inventory/{Should_list_children_of_WildFly.yml → Templates/Should_list_children_of_WildFly.yml} +66 -112
  65. data/spec/vcr_cassettes/Inventory/{Should_list_children_of_nested_resource.yml → Templates/Should_list_children_of_nested_resource.yml} +13 -13
  66. data/spec/vcr_cassettes/Inventory/Templates/Should_list_feeds.yml +54 -0
  67. data/spec/vcr_cassettes/Inventory/Templates/Should_list_heap_metrics_for_WildFlys.yml +712 -0
  68. data/spec/vcr_cassettes/Inventory/Templates/Should_list_metrics_for_WildFlys.yml +278 -0
  69. data/spec/vcr_cassettes/Inventory/Templates/Should_list_metrics_of_given_metric_type.yml +530 -0
  70. data/spec/vcr_cassettes/Inventory/Templates/Should_list_metrics_of_given_resource_type.yml +278 -0
  71. data/spec/vcr_cassettes/Inventory/Templates/Should_list_operation_definitions_of_given_resource.yml +185 -0
  72. data/spec/vcr_cassettes/Inventory/Templates/Should_list_operation_definitions_of_given_resource_type.yml +126 -0
  73. data/spec/vcr_cassettes/Inventory/Templates/Should_list_recursive_children_of_WildFly.yml +2369 -0
  74. data/spec/vcr_cassettes/Inventory/Templates/Should_list_relationships_of_WildFly.yml +415 -0
  75. data/spec/vcr_cassettes/Inventory/Templates/Should_list_types_with_bad_feed.yml +51 -0
  76. data/spec/vcr_cassettes/Inventory/Templates/Should_list_types_with_feed.yml +124 -0
  77. data/spec/vcr_cassettes/Inventory/{Should_not_find_an_unknown_resource.yml → Templates/Should_not_find_an_unknown_resource.yml} +14 -13
  78. data/spec/vcr_cassettes/Inventory/{Should_return_config_data_of_given_nested_resource.yml → Templates/Should_return_config_data_of_given_nested_resource.yml} +4 -4
  79. data/spec/vcr_cassettes/Inventory/{Should_return_config_data_of_given_resource.yml → Templates/Should_return_config_data_of_given_resource.yml} +4 -4
  80. data/spec/vcr_cassettes/Inventory/Tenants/Should_Get_Tenant_For_Explicit_Credentials.yml +50 -0
  81. data/spec/vcr_cassettes/Inventory/Tenants/Should_Get_Tenant_For_Implicit_Credentials.yml +50 -0
  82. data/spec/vcr_cassettes/Operation/Helpers/get_feed.yml +54 -0
  83. data/spec/vcr_cassettes/Operation/Helpers/get_tenant.yml +50 -0
  84. data/spec/vcr_cassettes/Operation/Operation/Add_JDBC_driver_should_add_the_driver.json +26 -0
  85. data/spec/vcr_cassettes/Operation/Operation/Add_datasource_should_be_doable.json +26 -0
  86. data/spec/vcr_cassettes/Operation/Operation/Add_deployment_should_be_doable.json +26 -0
  87. data/spec/vcr_cassettes/Operation/Operation/Redeploy_can_be_run_multiple_times_in_parallel.json +40 -0
  88. data/spec/vcr_cassettes/Operation/Operation/Redeploy_should_be_performed_and_eventually_respond_with_success.json +26 -0
  89. data/spec/vcr_cassettes/Operation/Operation/Redeploy_should_not_be_performed_if_resource_path_is_wrong.json +26 -0
  90. data/spec/vcr_cassettes/Operation/Operation/Remove_JDBC_driver_should_be_performed_and_eventually_respond_with_success.json +26 -0
  91. data/spec/vcr_cassettes/Operation/Operation/Remove_datasource_should_be_performed_and_eventually_respond_with_success.json +26 -0
  92. data/spec/vcr_cassettes/Operation/Operation/Remove_deployment_should_be_performed_and_eventually_respond_with_success.json +26 -0
  93. data/spec/vcr_cassettes/Operation/Operation/Undeploy_should_be_performed_and_eventually_respond_with_success.json +26 -0
  94. data/spec/vcr_cassettes/Operation/Operation/should_not_be_possible_to_perform_on_closed_client.json +12 -0
  95. data/spec/vcr_cassettes/Operation/Websocket_connection/should_be_established.json +9 -0
  96. metadata +171 -72
  97. data/lib/hawkular_all.rb +0 -9
  98. data/spec/vcr_cassettes/Inventory/Should_create_a_feed.yml +0 -107
  99. data/spec/vcr_cassettes/Inventory/Should_create_a_feed_again.yml +0 -211
  100. data/spec/vcr_cassettes/Inventory/Should_create_and_delete_feed.yml +0 -201
  101. data/spec/vcr_cassettes/Inventory/Should_list_all_the_resource_types.yml +0 -177
  102. data/spec/vcr_cassettes/Inventory/Should_list_heap_metrics_for_WildFlys.yml +0 -775
  103. data/spec/vcr_cassettes/Inventory/Should_list_metrics_for_WildFlys.yml +0 -333
  104. data/spec/vcr_cassettes/Inventory/Should_list_metrics_of_given_metric_type.yml +0 -613
  105. data/spec/vcr_cassettes/Inventory/Should_list_metrics_of_given_resource_type.yml +0 -333
  106. data/spec/vcr_cassettes/Inventory/Should_list_recursive_children_of_WildFly.yml +0 -2064
  107. data/spec/vcr_cassettes/Inventory/Should_list_relationships_of_WildFly.yml +0 -460
  108. data/spec/vcr_cassettes/Inventory/Should_list_types_with_feed.yml +0 -175
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3f91327af0cba7955ceeabb25999cafb2e29331
4
- data.tar.gz: 8b6efcd11c9fbab70e57f4a36b6b4f8babafb38a
3
+ metadata.gz: f5ef004e3d7f65c23d6519f703d3fe8cec0f02da
4
+ data.tar.gz: 8e3c54a206009a3e4aa9028a5dcf763156883bc4
5
5
  SHA512:
6
- metadata.gz: fe4775cc86dff4e7778df1c6fafc48dda3da8581a2afcb02ed3f1be0a8c76ba251da0a7a49b60e17bcd816325b67fbaa0c9bfbd1f669a89679774f6d7b465ea6
7
- data.tar.gz: 40143d8e9afefdb08eac2b1ff8ee0c6c9f4dd1116283cddf17a5fcb5869172380421d652ccebbdbb0f5e7899a4d157d682ac1230627e3cf842ef6575f9e2bc60
6
+ metadata.gz: da305496d926efb03b970a52ce00f20109dfc08a1952bfe63fd8d0d5289c156ab0ae1a1f625ed2c1720a38e30c4d45b8992b397652bcb3f22bd0dea0f216f0db
7
+ data.tar.gz: 3b1674b21b0fc2d4defc566f5666dbbcf923fe8752ccaf97d64256a633a2ac5541b11d6037ee3a70583227d3a0bbdb8b6d2183cf4a81ca7d389ccbed7932413c
data/.rubocop.yml CHANGED
@@ -5,7 +5,10 @@
5
5
  # Overrides
6
6
  #
7
7
  CyclomaticComplexity:
8
+ Max: 9
8
9
  Severity: refactor
10
+ PerceivedComplexity:
11
+ Max: 9
9
12
  Metrics/LineLength:
10
13
  Max: 120
11
14
  Metrics/ParameterLists:
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ - CHANGES.rdoc api_breaking_changes.rdoc
data/CHANGES.rdoc CHANGED
@@ -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 1.0.0
7
+ * This major release contains changes that <b>may break the backward compatibility</b>, more info here: link:api_breaking_changes.rdoc
8
+ * To use the client use the <code>require 'hawkular/hawkular_client'</code> instead of <code>require 'hawkular_all'</code>
9
+ * Inventory client has been rewritten to use the cannonical paths
10
+ * New supoort for group triggers in alert sub-client
11
+ * New method for creating event in the hawkular alert component
12
+ * New method for listing the available operation types on a resource type in inventory
13
+ * Hawkular-Tenant HTTP header is automatically added to each HTTP request
14
+ * New support for proxy option in the internal rest_client
15
+ * Improved VCR tests - some changing parameters in the data can be parametrized and the cassettes are stored as templates. Now, it's also possible to record those templates with <code>VCR_UPDATE=1</code>
16
+ * Tests are run also on ruby 2.3.0
17
+ * Couple of new tests
18
+
6
19
  === V 0.2.2
7
20
 
8
21
  * Bug fix to correctly read resource info for resources that are not directly below a feed.
@@ -22,16 +35,16 @@ _hawkular-client_ project.
22
35
 
23
36
  * Add support for Hawkular-Inventory and Hawkular-Alerts
24
37
  * Reshuffling of inner classes
25
- * The sub-url that is passed to `http_*` methods is escaped via
26
- `Addressable::URI.escape()`
38
+ * The sub-url that is passed to +http_*+ methods is escaped via
39
+ +Addressable::URI.escape()+
27
40
 
28
41
 
29
42
  === V 0.1.2
30
43
 
31
- * Fix exception handling - this was missing `require 'English'`
44
+ * Fix exception handling - this was missing <code>require 'English'</code>
32
45
 
33
46
  === V 0.1.1
34
47
 
35
48
  * Add VCR tests
36
- * Metrics::Client.new now requires a hash for credentials
49
+ * +Metrics::Client.new+ now requires a hash for credentials
37
50
  * Code cleanup and enforcement via RuboCop
data/README.rdoc CHANGED
@@ -1,10 +1,18 @@
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
1
  {<img src="https://travis-ci.org/hawkular/hawkular-client-ruby.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/hawkular/hawkular-client-ruby]
2
+ {<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]
3
+ {<img src="https://codeclimate.com/github/hawkular/hawkular-client-ruby/badges/gpa.svg" />}[https://codeclimate.com/github/hawkular/hawkular-client-ruby]
3
4
 
4
5
  = hawkular-client-ruby
5
6
 
6
7
  A Ruby Hawkular Client.
7
8
 
9
+ Documentation[http://www.hawkular.org/hawkular-client-ruby/]
10
+
11
+ == Changelog
12
+
13
+ See {CHANGELOG}[link:file.CHANGES.html] for a list of changes and
14
+ {API-Breaking-Changes}[link:file.api_breaking_changes.html] for a list of api-breaking changes.
15
+
8
16
  == Contributing to hawkular-client-ruby
9
17
 
10
18
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
@@ -13,7 +21,7 @@ A Ruby Hawkular Client.
13
21
  * Start a feature/bugfix branch
14
22
  * Commit and push until you are happy with your contribution
15
23
  * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
16
- * Run your code through RuboCop (which is default when running `rake`) and fix complaints.
24
+ * Run your code through RuboCop (which is default when running +rake+) and fix complaints.
17
25
  * When you open a pull request, watch out for failures on Travis.
18
26
  * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is
19
27
  otherwise necessary, that is fine, but please isolate to its own commit so we can cherry-pick around it.
@@ -23,14 +31,15 @@ A Ruby Hawkular Client.
23
31
  Integration tests are recorded and played against cassettes recorded with VCR
24
32
  (http://www.relishapp.com/vcr/vcr/docs)
25
33
 
26
- * Edit the endpoint properties in the file `spec/endpoint.yml`(user, password and host name) if needed
34
+ * Edit the endpoint properties in the file +spec/endpoint.yml+ (user, password and host name) if needed
27
35
  * From command line run
28
36
  rake spec
29
- * To run the tests against a live server, set VCR_OFF to 1 as in
37
+ * To run the tests against a live server, set +VCR_OFF+ to +1+ as in
30
38
  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
39
+ * To update the VCR tapes that supports it, set +VCR_UPDATE+ to +1+ as in
40
+ VCR_UPDATE=1 rake spec
41
+ * To run the tests for operations against a live server using the WebSockets, set +WEBSOCKET_ON+ to +1+ as in
32
42
  WEBSOCKET_ON=1 rake spec
33
- (WebSocket communication can't be recorded by VCR)
34
43
 
35
44
  == Logging
36
45
 
@@ -0,0 +1,79 @@
1
+ == Breaking changes in the major releases
2
+
3
+ === 1.0.0
4
+
5
+ To use the client use the <code>require 'hawkular/hawkular_client'</code> instead of <code>require 'hawkular_all'</code>
6
+
7
+ ---
8
+
9
+ While it's still possible to use individual component clients (inventory, alert, metrics, operation, token), the preferred way is to use
10
+ the unified client that has reference on those 'sub-clients':
11
+
12
+ <code>::Hawkular::Client.new(:entrypoint => 'http://localhost:8080', :credentials => {username: 'jdoe', password: 'password'})</code>
13
+
14
+ See the link:spec/integraion/hawkular_client_spec.rb to see more details.
15
+
16
+
17
+ ---
18
+
19
+ In the <code>lib/hawkular/inventory/inventory_api.rb</code> all following methods have different signatures (+old+ -> +new+):
20
+
21
+ <code>list_resources_for_type(feed_id, type, fetch_properties = false)</code>
22
+ ->
23
+ <code>list_resources_for_type(type_path, fetch_properties = false, filter = {})</code>
24
+
25
+
26
+ <code>get_config_data_for_resource(feed_id, res_ids)</code>
27
+ ->
28
+ <code>get_config_data_for_resource(resource_path)</code>
29
+
30
+
31
+ <code>def list_child_resources(Resource parent_resource, recursive = false)</code>
32
+ ->
33
+ <code>def list_child_resources(parent_resource_path, recursive = false)</code>
34
+
35
+
36
+ <code>list_relationships(Resource resource, named = nil)</code>
37
+ ->
38
+ <code>list_relationships(path, named = nil)</code>
39
+
40
+
41
+ <code>list_relationships_for_feed(feed_id, named = nil)</code>
42
+ ->
43
+ <code>list_relationships_for_feed(path, named = nil)</code>
44
+
45
+
46
+ <code>list_metrics_for_metric_type(feed_id, type)</code>
47
+ ->
48
+ <code>list_metrics_for_metric_type(met_type_path)</code>
49
+
50
+
51
+ <code>list_metrics_for_resource_type(feed, type)</code>
52
+ ->
53
+ <code>list_metrics_for_resource_type(res_type_path)</code>
54
+
55
+
56
+ <code>list_metrics_for_resource(Resource resource, filter = {})</code>
57
+ ->
58
+ <code>list_metrics_for_resource(resource_path, filter = {})</code>
59
+
60
+
61
+ <code>create_resource(feed_id, type_path, resource_id, resource_name = nil, properties = {})</code>
62
+ ->
63
+ <code>create_resource(type_path, resource_id, resource_name = nil, properties = {})</code>
64
+
65
+
66
+ <code>create_resource_under_resource(feed_id, type_path, parent_resource_ids, resource_id, resource_name = nil, properties = {})</code>
67
+ ->
68
+ <code>create_resource_under_resource(type_path, parent_resource_path, resource_id, resource_name = nil, properties = {})</code>
69
+
70
+
71
+ <code>get_resource(feed_id, res_ids, fetch_resource_config = true)</code>
72
+ ->
73
+ <code>get_resource(res_path, fetch_resource_config = true)</code>
74
+
75
+
76
+ <code>create_metric_for_resource(feed_id, metric_id, type_path, res_ids, metric_name = nil)</code>
77
+ ->
78
+ <code>create_metric_for_resource(metric_type_path, resource_path, metric_id, metric_name = nil)</code>
79
+
@@ -1,16 +1,16 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'version'
4
+ require 'hawkular/version'
5
5
 
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
- gem.license = 'ASL 2.0'
13
+ gem.license = 'Apache-2.0'
14
14
  gem.required_ruby_version = '>= 2.0.0'
15
15
  gem.description = <<-EOS
16
16
  A Ruby client for Hawkular
@@ -27,8 +27,9 @@ Gem::Specification.new do |gem|
27
27
  gem.add_development_dependency('shoulda')
28
28
  gem.add_development_dependency('rspec-rails', '~> 3.0')
29
29
  gem.add_development_dependency('rake', '< 11')
30
+ gem.add_development_dependency('simple-websocket-vcr', '= 0.0.7')
30
31
  gem.add_development_dependency('yard')
31
- gem.add_development_dependency('webmock')
32
+ gem.add_development_dependency('webmock', '~> 1.24.0')
32
33
  gem.add_development_dependency('vcr')
33
34
  gem.add_development_dependency('rubocop', '= 0.34.2')
34
35
  gem.add_development_dependency('coveralls')
@@ -1,4 +1,4 @@
1
- require 'hawkular'
1
+ require 'hawkular/base_client'
2
2
  require 'ostruct'
3
3
 
4
4
  # Alerts module provides access to Hawkular-Alerts.
@@ -81,12 +81,95 @@ module Hawkular::Alerts
81
81
  http_post 'triggers/trigger', full_trigger
82
82
  end
83
83
 
84
+ # Creates the group trigger definition.
85
+ # @param [Trigger] trigger The group trigger to be created
86
+ # @return [Trigger] The newly created group trigger
87
+ def create_group_trigger(trigger)
88
+ ret = http_post 'triggers/groups', trigger.to_h
89
+ Trigger.new(ret)
90
+ end
91
+
92
+ # Updates a given group trigger definition
93
+ # @param [Trigger] trigger the group trigger to be updated
94
+ # @return [Trigger] The updated group trigger
95
+ def update_group_trigger(trigger)
96
+ http_put "triggers/groups/#{trigger.id}/", trigger.to_h
97
+ get_single_trigger trigger.id, false
98
+ end
99
+
100
+ # Creates the group conditions definitions.
101
+ # @param [String] trigger_id ID of the group trigger to set conditions
102
+ # @param [String] trigger_mode Mode of the trigger where conditions are attached (:FIRING, :AUTORESOLVE)
103
+ # @param [GroupConditionsInfo] group_conditions_info the conditions to set into the group trigger with the mapping
104
+ # with the data_id members map
105
+ # @return [Array<Condition>] conditions Array of associated conditions
106
+ def set_group_conditions(trigger_id, trigger_mode, group_conditions_info)
107
+ ret = http_put "triggers/groups/#{trigger_id}/conditions/#{trigger_mode}", group_conditions_info.to_h
108
+ conditions = []
109
+ ret.each { |c| conditions.push(Trigger::Condition.new(c)) }
110
+ conditions
111
+ end
112
+
113
+ # Creates a member trigger
114
+ # @param [GroupMemberInfo] group_member_info the group member to be added
115
+ # @return [Trigger] the newly created member trigger
116
+ def create_member_trigger(group_member_info)
117
+ ret = http_post 'triggers/groups/members', group_member_info.to_h
118
+ Trigger.new(ret)
119
+ end
120
+
121
+ # Detaches a member trigger from its group trigger
122
+ # @param [String] trigger_id ID of the member trigger to detach
123
+ # @return [Trigger] the orphan trigger
124
+ def orphan_member(trigger_id)
125
+ http_post "triggers/groups/members/#{trigger_id}/orphan", {}
126
+ get_single_trigger trigger_id, false
127
+ end
128
+
129
+ # Lists members of a group trigger
130
+ # @param [String] trigger_id ID of the group trigger to list members
131
+ # @param [boolean] orphans flag to include orphans
132
+ # @return [Array<Trigger>] Members found
133
+ def list_members(trigger_id, orphans = false)
134
+ ret = http_get "triggers/groups/#{trigger_id}/members?includeOrphans=#{orphans}"
135
+ ret.collect { |t| Trigger.new(t) }
136
+ end
137
+
138
+ # Creates a dampening for a group trigger
139
+ # @param [Dampening] dampening the dampening to create
140
+ # @return [Dampening] the newly created dampening
141
+ def create_group_dampening(dampening)
142
+ ret = http_post "triggers/groups/#{dampening.trigger_id}/dampenings", dampening.to_h
143
+ Trigger::Dampening.new(ret)
144
+ end
145
+
146
+ # Updates a dampening for a group trigger
147
+ # @param [Dampening] dampening the dampening to update
148
+ # @return [Dampening] the updated dampening
149
+ def update_group_dampening(dampening)
150
+ ret = http_put "triggers/groups/#{dampening.trigger_id}/dampenings/#{dampening.dampening_id}", dampening.to_h
151
+ Trigger::Dampening.new(ret)
152
+ end
153
+
154
+ # Deletes the dampening of a group trigger
155
+ # @param [String] trigger_id ID of the group trigger
156
+ # @param [String] dampening_id ID
157
+ def delete_group_dampening(trigger_id, dampening_id)
158
+ http_delete "/triggers/groups/#{trigger_id}/dampenings/#{dampening_id}"
159
+ end
160
+
84
161
  # Deletes the trigger definition.
85
- # @param [String] trigger_id Id of the trigger to delete
162
+ # @param [String] trigger_id ID of the trigger to delete
86
163
  def delete_trigger(trigger_id)
87
164
  http_delete "/triggers/#{trigger_id}"
88
165
  end
89
166
 
167
+ # Deletes the group trigger definition.
168
+ # @param [String] trigger_id ID of the group trigger to delete
169
+ def delete_group_trigger(trigger_id)
170
+ http_delete "/triggers/groups/#{trigger_id}"
171
+ end
172
+
90
173
  # Obtains action definition/plugin from the server.
91
174
  # @param [String] action_plugin Id of the action plugin to fetch. If nil, all the plugins are fetched
92
175
  def get_action_definition(action_plugin = nil)
@@ -210,6 +293,22 @@ module Hawkular::Alerts
210
293
  query = generate_query_params(*criteria)
211
294
  http_get('/events' + query).map { |e| Event.new(e) }
212
295
  end
296
+
297
+ # Inject an event into Hawkular-alerts
298
+ # @param [String] id Id of the event must be unique
299
+ # @param [String] category Event category for further distinction
300
+ # @param [String] text Some text to the user
301
+ # @param [Hash<String,Object>] extras additional parameters
302
+ def create_event(id, category, text, extras)
303
+ event = {}
304
+ event['id'] = id
305
+ event['ctime'] = Time.now.to_i * 1000
306
+ event['category'] = category
307
+ event['text'] = text
308
+ event.merge!(extras) { |_key, v1, _v2| v1 }
309
+
310
+ http_post('/events', event)
311
+ end
213
312
  end
214
313
 
215
314
  # Representation of one Trigger
@@ -220,7 +319,7 @@ module Hawkular::Alerts
220
319
  class Trigger
221
320
  attr_accessor :id, :name, :context, :actions, :auto_disable, :auto_enable
222
321
  attr_accessor :auto_resolve, :auto_resolve_alerts, :tags, :type
223
- attr_accessor :tenant, :description, :group, :severity, :event_type
322
+ attr_accessor :tenant, :description, :group, :severity, :event_type, :event_category, :member_of, :data_id_map
224
323
  attr_reader :conditions, :dampenings
225
324
  attr_accessor :enabled, :actions
226
325
 
@@ -238,6 +337,9 @@ module Hawkular::Alerts
238
337
  @auto_resolve = trigger_hash['autoResolve']
239
338
  @auto_resolve_alerts = trigger_hash['autoResolveAlerts']
240
339
  @event_type = trigger_hash['eventType']
340
+ @event_category = trigger_hash['eventCategory']
341
+ @member_of = trigger_hash['memberOf']
342
+ @data_id_map = trigger_hash['dataIdMap']
241
343
  @tenant = trigger_hash['tenantId']
242
344
  @description = trigger_hash['description']
243
345
  @auto_enable = trigger_hash['autoEnable']
@@ -255,8 +357,8 @@ module Hawkular::Alerts
255
357
  ret = x.to_s.split('_').collect(&:capitalize).join
256
358
  ret[0, 1].downcase + ret[1..-1]
257
359
  end
258
- fields = [:id, :name, :enabled, :severity, :auto_resolve, :auto_resolve_alerts, :event_type,
259
- :description, :auto_enable, :auto_disable, :context, :type, :tags]
360
+ fields = [:id, :name, :enabled, :severity, :auto_resolve, :auto_resolve_alerts, :event_type, :event_category,
361
+ :description, :auto_enable, :auto_disable, :context, :type, :tags, :member_of, :data_id_map]
260
362
 
261
363
  fields.each do |field|
262
364
  camelized_field = to_camel.call(field)
@@ -274,7 +376,7 @@ module Hawkular::Alerts
274
376
  # Representing of one Condition
275
377
  class Condition
276
378
  attr_accessor :condition_id, :type, :operator, :threshold
277
- attr_accessor :trigger_mode, :data_id
379
+ attr_accessor :trigger_mode, :data_id, :data2_id, :data2_multiplier
278
380
  attr_reader :condition_set_size, :condition_set_index, :trigger_id
279
381
 
280
382
  def initialize(cond_hash)
@@ -285,6 +387,8 @@ module Hawkular::Alerts
285
387
  @type = cond_hash['type']
286
388
  @trigger_mode = cond_hash['triggerMode']
287
389
  @data_id = cond_hash['dataId']
390
+ @data2_id = cond_hash['data2Id']
391
+ @data2_multiplier = cond_hash['data2Multiplier']
288
392
  @trigger_id = cond_hash['triggerId']
289
393
  end
290
394
 
@@ -297,25 +401,82 @@ module Hawkular::Alerts
297
401
  cond_hash['type'] = @type
298
402
  cond_hash['triggerMode'] = @trigger_mode
299
403
  cond_hash['dataId'] = @data_id
404
+ cond_hash['data2Id'] = @data2_id
405
+ cond_hash['data2Multiplier'] = @data2_multiplier
300
406
  cond_hash['triggerId'] = @trigger_id
301
407
  cond_hash
302
408
  end
303
409
  end
304
410
 
411
+ # Representing of one GroupConditionsInfo
412
+ # - The data_id_member_map should be null if the group has no members.
413
+ # - The data_id_member_map should be null if this is a [data-driven] group trigger.
414
+ # In this case the member triggers are removed and will be re-populated as incoming data demands.
415
+ # - For [non-data-driven] group triggers with existing members the data_id_member_map is handled as follows.
416
+ # For members not included in the dataIdMemberMap their most recently supplied dataIdMap will be used.
417
+ # This means that it is not necessary to supply mappings if the new condition set uses only dataIds found
418
+ # in the old condition set. If the new conditions introduce new dataIds a full dataIdMemberMap must be supplied.
419
+ class GroupConditionsInfo
420
+ attr_accessor :conditions, :data_id_member_map
421
+
422
+ def initialize(conditions)
423
+ @conditions = conditions
424
+ @data_id_member_map = {}
425
+ end
426
+
427
+ def to_h
428
+ cond_hash = {}
429
+ cond_hash['conditions'] = []
430
+ @conditions.each { |c| cond_hash['conditions'].push(c.to_h) }
431
+ cond_hash['dataIdMemberMap'] = @data_id_member_map
432
+ cond_hash
433
+ end
434
+ end
435
+
436
+ # Representing of one GroupMemberInfo
437
+ class GroupMemberInfo
438
+ attr_accessor :group_id, :member_id, :member_name, :member_description
439
+ attr_accessor :member_context, :member_tags, :data_id_map
440
+
441
+ def to_h
442
+ cond_hash = {}
443
+ cond_hash['groupId'] = @group_id
444
+ cond_hash['memberId'] = @member_id
445
+ cond_hash['memberName'] = @member_name
446
+ cond_hash['memberDescription'] = @member_description
447
+ cond_hash['memberContext'] = @member_context
448
+ cond_hash['memberTags'] = @member_tags
449
+ cond_hash['dataIdMap'] = @data_id_map
450
+ cond_hash
451
+ end
452
+ end
453
+
305
454
  # Representation of one Dampening setting
306
455
  class Dampening
307
- attr_accessor :dampening_id, :type, :eval_true_setting, :eval_total_setting,
456
+ attr_accessor :dampening_id, :trigger_id, :type, :eval_true_setting, :eval_total_setting,
308
457
  :eval_time_setting
309
458
  attr_accessor :current_evals
310
459
 
311
460
  def initialize(damp_hash)
312
461
  @current_evals = {}
313
462
  @dampening_id = damp_hash['dampeningId']
463
+ @trigger_id = damp_hash['triggerId']
314
464
  @type = damp_hash['type']
315
465
  @eval_true_setting = damp_hash['evalTrueSetting']
316
466
  @eval_total_setting = damp_hash['evalTotalSetting']
317
467
  @eval_time_setting = damp_hash['evalTimeSetting']
318
468
  end
469
+
470
+ def to_h
471
+ cond_hash = {}
472
+ cond_hash['dampeningId'] = @dampening_id
473
+ cond_hash['triggerId'] = @trigger_id
474
+ cond_hash['type'] = @type
475
+ cond_hash['evalTrueSetting'] = @eval_true_setting
476
+ cond_hash['evalTotalSetting'] = @eval_total_setting
477
+ cond_hash['evalTimeSetting'] = @eval_time_setting
478
+ cond_hash
479
+ end
319
480
  end
320
481
 
321
482
  class Action