wavefront-sdk 3.6.1 → 3.7.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
  SHA256:
3
- metadata.gz: b39db1a4f6e5f1899b8ae8f5fef5c2d0364775de94860054101a352b71e6abf4
4
- data.tar.gz: a28e17f8e36429c3a954de36baa05ede7ba6a2972d0d30dede00a490fb4a05af
3
+ metadata.gz: e89654234db4200e7ec25767b81eeda772092642cb238d9cf908e38e851a8755
4
+ data.tar.gz: 4de9bfd19d39da4b6e2d6b529614cc1962d8c5915ba92c82bfed736737fc7d28
5
5
  SHA512:
6
- metadata.gz: b56fad2f699a16dff96774c857a04b4aad1ad559147bbd50d79b0316c24c0b217e2aa3fdbb5d17aced23b99b1498d820f889003f60cc5287c4389e2fd75d003b
7
- data.tar.gz: 0b1bcbc888ebfe63fd96cbcd0c4d8569e22552ad416cdf4dc2bb216f76dc517300daf7954d345d24c253d57250ca5f8d9812545b2619f9199575f84a76b0525d
6
+ metadata.gz: 34cf2716c935b469ec385e84445b8f2dec33e29679b6bd3cbe5bd11fff459301535c2acaf06fcfc682854df418577a810b20f4a579d1208fd63542af97ea2dee
7
+ data.tar.gz: 1d5c66c6b47015f66a07cc64acdef74e8e661fbdda138746028d3885023e36cafb895950ac6d633c27012f5a13c2380f8827072dca2a59afef8a583a2b3a1453
data/HISTORY.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.7.0 (2020-01-23)
4
+ * Add `Account`, `Usage` and `IngestionPolicy` classes.
5
+ * Allow modification of `Wavefront::Response`'s `response` object.
6
+ * Add `User#validate_users` method.
7
+
3
8
  ## 3.6.1 (2020-01-15)
4
9
  * Test build against, and fix warning messages on, Ruby 2.7.0
5
10
 
@@ -0,0 +1,202 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'core/api'
4
+ require_relative 'api_mixins/user'
5
+
6
+ module Wavefront
7
+ #
8
+ # Manage and query Wavefront accounts. '/account/serviceaccount' API paths
9
+ # are covered in the Wavefront::ServiceAccount class.
10
+ #
11
+ # Many of these methods are duplicated in the User class. This reflects the
12
+ # layout of the API.
13
+ #
14
+ class Account < CoreApi
15
+ include Wavefront::Mixin::User
16
+ #
17
+ # GET /api/v2/account
18
+ # Get all accounts (users and service accounts) of a customer
19
+ # @param offset [Int] account at which the list begins
20
+ # @param limit [Int] the number of accounts to return
21
+ # @return [Wavefront::Response]
22
+ #
23
+ def list(offset = 0, limit = 100)
24
+ api.get('', offset: offset, limit: limit)
25
+ end
26
+
27
+ # DELETE /api/v2/account/{id}
28
+ # Deletes an account (user or service account) identified by id
29
+ # @param id [String] ID of the account
30
+ # @return [Wavefront::Response]
31
+ #
32
+ def delete(id)
33
+ wf_account_id?(id)
34
+ api.delete(id)
35
+ end
36
+
37
+ # GET /api/v2/account/{id}
38
+ # Get a specific account (user or service account)
39
+ # @param id [String] ID of the proxy
40
+ # @return [Wavefront::Response]
41
+ #
42
+ def describe(id)
43
+ wf_account_id?(id)
44
+ api.get(id)
45
+ end
46
+
47
+ # POST /api/v2/account/{id}/addUserGroups
48
+ # Adds specific user groups to the account (user or service account)
49
+ # @param id [String] ID of the account
50
+ # @param group_list [Array[String]] list of groups to add
51
+ # @return [Wavefront::Response]
52
+ #
53
+ def add_user_groups(id, group_list)
54
+ wf_account_id?(id)
55
+ validate_usergroup_list(group_list)
56
+ api.post([id, 'addUserGroups'].uri_concat, group_list,
57
+ 'application/json')
58
+ end
59
+
60
+ # GET /api/v2/account/{id}/businessFunctions
61
+ # Returns business functions of a specific account (user or service
62
+ # account).
63
+ # @param id [String] user ID
64
+ # @return [Wavefront::Response]
65
+ #
66
+ def business_functions(id)
67
+ wf_account_id?(id)
68
+ api.get([id, 'businessFunctions'].uri_concat)
69
+ end
70
+
71
+ # POST /api/v2/account/{id}/removeUserGroups
72
+ # Removes specific user groups from the account (user or service account)
73
+ # @param id [String] ID of the account
74
+ # @param group_list [Array[String]] list of groups to add
75
+ # @return [Wavefront::Response]
76
+ #
77
+ def remove_user_groups(id, group_list)
78
+ wf_account_id?(id)
79
+ validate_usergroup_list(group_list)
80
+ api.post([id, 'removeUserGroups'].uri_concat, group_list,
81
+ 'application/json')
82
+ end
83
+
84
+ # POST /api/v2/account/{id}/grant/{permission}
85
+ # Grants a specific permission to account (user or service account)
86
+ # POST /api/v2/account/grant/{permission}
87
+ # Grants a specific permission to multiple accounts (users or service
88
+ # accounts)
89
+ # @param id_list [Array[String],String] single account ID or list of
90
+ # account IDs
91
+ # @param permission [String] permission group to grant to user.
92
+ # @return [Wavefront::Response]
93
+ #
94
+ def grant(id, permission)
95
+ if id.is_a?(String)
96
+ grant_to_id(id, permission)
97
+ else
98
+ grant_to_multiple(id, permission)
99
+ end
100
+ end
101
+
102
+ # POST /api/v2/account/{id}/revoke/{permission}
103
+ # Revokes a specific permission from account (user or service account)
104
+ # POST /api/v2/account/revoke/{permission}
105
+ # Revokes a specific permission from multiple accounts (users or service
106
+ # accounts
107
+ # @param id [String,Array[String]] ID of the user, or list of user IDs
108
+ # @param permission [String] permission group to revoke from user.
109
+ # @return [Wavefront::Response]
110
+ #
111
+ def revoke(id, permission)
112
+ if id.is_a?(String)
113
+ revoke_from_id(id, permission)
114
+ else
115
+ revoke_from_multiple(id, permission)
116
+ end
117
+ end
118
+
119
+ # POST /api/v2/account/addingestionpolicy
120
+ # Add a specific ingestion policy to multiple accounts
121
+ # @param policy_id [String] ID of the ingestion policy
122
+ # @param id_list [Array[String]] list of accounts to be put in policy
123
+ # @return [Wavefront::Response]
124
+ #
125
+ def add_ingestion_policy(policy_id, id_list)
126
+ wf_ingestionpolicy_id?(policy_id)
127
+ validate_account_list(id_list)
128
+ api.post('addingestionpolicy',
129
+ { ingestionPolicyId: policy_id,
130
+ accounts: id_list },
131
+ 'application/json')
132
+ end
133
+
134
+ # POST /api/v2/account/removeingestionpolicies
135
+ # Removes ingestion policies from multiple accounts
136
+ # @param policy_id [String] ID of the ingestion policy
137
+ # @param id_list [Array[String]] list of accounts to be put in policy
138
+ # @return [Wavefront::Response]
139
+ #
140
+ def remove_ingestion_policy(policy_id, id_list)
141
+ wf_ingestionpolicy_id?(policy_id)
142
+ validate_account_list(id_list)
143
+ api.post('removeingestionpolicy',
144
+ { ingestionPolicyId: policy_id,
145
+ accounts: id_list },
146
+ 'application/json')
147
+ end
148
+
149
+ # POST /api/v2/account/deleteAccounts
150
+ # Deletes multiple accounts (users or service accounts)
151
+ # @param id [String] ID of the account
152
+ # @param group_list [Array[String]] list of accounts to delete
153
+ # @return [Wavefront::Response]
154
+ #
155
+ def delete_accounts(id_list)
156
+ validate_account_list(id_list)
157
+ api.post('deleteAccounts', id_list, 'application/json')
158
+ end
159
+
160
+ private
161
+
162
+ # @param id [String] ID of the user
163
+ # @param permission [String] permission group to grant to user.
164
+ # @return [Wavefront::Response]
165
+ #
166
+ def grant_to_id(id, permission)
167
+ wf_account_id?(id)
168
+ wf_permission?(permission)
169
+ api.post([id, 'grant', permission].uri_concat)
170
+ end
171
+
172
+ # @param id_list [Array[String]] list of account IDs
173
+ # @param permission [String] permission group to grant to user.
174
+ # @return [Wavefront::Response]
175
+ #
176
+ def grant_to_multiple(id_list, permission)
177
+ validate_account_list(id_list)
178
+ wf_permission?(permission)
179
+ api.post(['grant', permission].uri_concat, id_list, 'application/json')
180
+ end
181
+
182
+ # @param id [String] ID of the user
183
+ # @param permission [String] permission group to revoke from user.
184
+ # @return [Wavefront::Response]
185
+ #
186
+ def revoke_from_id(id, permission)
187
+ wf_account_id?(id)
188
+ wf_permission?(permission)
189
+ api.post([id, 'revoke', permission].uri_concat)
190
+ end
191
+
192
+ # @param id_list [Array[String]] list of account IDs
193
+ # @param permission [String] permission group to revoke from user.
194
+ # @return [Wavefront::Response]
195
+ #
196
+ def revoke_from_multiple(id_list, permission)
197
+ validate_account_list(id_list)
198
+ wf_permission?(permission)
199
+ api.post(['revoke', permission].uri_concat, id_list, 'application/json')
200
+ end
201
+ end
202
+ end
@@ -25,6 +25,16 @@ module Wavefront
25
25
 
26
26
  list.each { |id| wf_usergroup_id?(id) }
27
27
  end
28
+
29
+ # Validate a list of accounts.
30
+ # @param list [Array[String]] list of account IDs
31
+ # @raise Wavefront::Exception::InvalidAccount
32
+ #
33
+ def validate_account_list(list)
34
+ raise ArgumentError unless list.is_a?(Array)
35
+
36
+ list.each { |id| wf_account_id?(id) }
37
+ end
28
38
  end
29
39
  end
30
40
  end
@@ -8,6 +8,7 @@ module Wavefront
8
8
  class CredentialError < RuntimeError; end
9
9
  class EmptyMetricName < RuntimeError; end
10
10
  class EnumerableError < RuntimeError; end
11
+ class InvalidAccountId < RuntimeError; end
11
12
  class InvalidAlertId < RuntimeError; end
12
13
  class InvalidAlertSeverity < RuntimeError; end
13
14
  class InvalidApiTokenId < RuntimeError; end
@@ -23,6 +24,7 @@ module Wavefront
23
24
  class InvalidExternalLinkId < RuntimeError; end
24
25
  class InvalidGranularity < RuntimeError; end
25
26
  class InvalidHostname < RuntimeError; end
27
+ class InvalidIngestionPolicyId < RuntimeError; end
26
28
  class InvalidIntegrationId < RuntimeError; end
27
29
  class InvalidLinkTemplate < RuntimeError; end
28
30
  class InvalidMaintenanceWindowId < RuntimeError; end
@@ -25,7 +25,8 @@ module Wavefront
25
25
  #
26
26
  class Response
27
27
  include Wavefront::Mixins
28
- attr_reader :status, :response, :opts, :logger
28
+ attr_reader :status, :opts, :logger
29
+ attr_accessor :response
29
30
 
30
31
  # Create and return a Wavefront::Response object
31
32
  # @param json [String] a raw response body from the Wavefront API
@@ -2,5 +2,5 @@
2
2
 
3
3
  require 'pathname'
4
4
 
5
- WF_SDK_VERSION = '3.6.1'
5
+ WF_SDK_VERSION = '3.7.0'
6
6
  WF_SDK_LOCATION = Pathname.new(__dir__).parent.parent.parent
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'core/api'
4
+
5
+ module Wavefront
6
+ #
7
+ # View and manage Wavefront ingestion policies.
8
+ #
9
+ # These use the Usage API path.
10
+ #
11
+ class IngestionPolicy < CoreApi
12
+ def api_base
13
+ '/usage/ingestionpolicy'
14
+ end
15
+
16
+ # GET /api/v2/usage/ingestionpolicy
17
+ # Get all ingestion policies for a customer
18
+ #
19
+ # @return [Wavefront::Response]
20
+ #
21
+ # @param offset [Int] ingestion policy at which the list begins
22
+ # @param limit [Int] the number of ingestion policies to return
23
+ # @return [Wavefront::Response]
24
+ #
25
+ def list(offset = 0, limit = 100)
26
+ api.get('', offset: offset, limit: limit)
27
+ end
28
+
29
+ # POST /api/v2/usage/ingestionpolicy
30
+ # Create a specific ingestion policy
31
+ #
32
+ # @param body [Hash] description of ingestion policy
33
+ # @return [Wavefront::Response]
34
+ #
35
+ def create(body)
36
+ raise ArgumentError unless body.is_a?(Hash)
37
+
38
+ api.post('', body, 'application/json')
39
+ end
40
+
41
+ # DELETE /api/v2/usage/ingestionpolicy/{id}
42
+ # Delete a specific ingestion policy
43
+ #
44
+ # @param id [String] ID of the alert
45
+ # @return [Wavefront::Response]
46
+ #
47
+ def delete(id)
48
+ wf_ingestionpolicy_id?(id)
49
+ api.delete(id)
50
+ end
51
+
52
+ # GET /api/v2/usage/ingestionpolicy/{id}
53
+ # Get a specific ingestion policy
54
+ #
55
+ # @return [Wavefront::Response]
56
+ # @param id [String] ID of the proxy
57
+ # @return [Wavefront::Response]
58
+ #
59
+ def describe(id)
60
+ wf_ingestionpolicy_id?(id)
61
+ api.get(id)
62
+ end
63
+
64
+ # PUT /api/v2/usage/ingestionpolicy/{id}
65
+ # Update a specific ingestion policy
66
+ #
67
+ # @param id [String] a Wavefront alert ID
68
+ # @param body [Hash] key-value hash of the parameters you wish
69
+ # to change
70
+ # @param modify [true, false] if true, use {#describe()} to get
71
+ # a hash describing the existing object, and modify that with
72
+ # the new body. If false, pass the new body straight through.
73
+ # @return [Wavefront::Response]
74
+ #
75
+ def update(id, body, modify = true)
76
+ wf_ingestionpolicy_id?(id)
77
+ raise ArgumentError unless body.is_a?(Hash)
78
+
79
+ return api.put(id, body, 'application/json') unless modify
80
+
81
+ api.put(id, hash_for_update(describe(id).response, body),
82
+ 'application/json')
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'core/api'
4
+
5
+ module Wavefront
6
+ #
7
+ # View and manage Wavefront usage.
8
+ #
9
+ # Ingestion policy shares this API path, but has its own SDK class.
10
+ #
11
+ class Usage < CoreApi
12
+ # GET /api/v2/usage/exportcsv
13
+ # Export a CSV report
14
+ #
15
+ # @param t_start [Integer] start time in epoch seconds
16
+ # @param t_end [Integer] end time in epoch seconds, nil being "now".
17
+ # @return [Wavefront::Response]
18
+ #
19
+ def export_csv(t_start, t_end = nil)
20
+ wf_epoch?(t_start)
21
+ args = { startTime: t_start }
22
+
23
+ if t_end
24
+ wf_epoch?(t_end)
25
+ args[:endTime] = t_end
26
+ end
27
+
28
+ api.get('exportcsv', args)
29
+ end
30
+ end
31
+ end
@@ -212,6 +212,16 @@ module Wavefront
212
212
  api.get([id, 'businessFunctions'].uri_concat)
213
213
  end
214
214
 
215
+ # POST /api/v2/user/validateUsers
216
+ # Returns valid users and service accounts, also invalid identifiers from
217
+ # the given list
218
+ # @param id_list [Array[String]] list of user IDs
219
+ # @return [Wavefront::Response]
220
+ #
221
+ def validate_users(id_list)
222
+ api.post('validateUsers', id_list, 'application/json')
223
+ end
224
+
215
225
  # Fake a response which looks like we get from all the other
216
226
  # paths. I'm expecting the user response model to be made
217
227
  # consistent with others in the future.
@@ -568,6 +568,32 @@ module Wavefront
568
568
 
569
569
  raise Wavefront::Exception::InvalidPermission, id, id
570
570
  end
571
+
572
+ # Ensure the given argument is a valid ingestion policy ID
573
+ # @param id [String]
574
+ # @raise Wavefront::Exception::InvalidIngestionPolicyId if the
575
+ # ID is not valid
576
+ #
577
+ def wf_ingestionpolicy_id?(id)
578
+ return true if id.is_a?(String) && id =~ /^[a-z0-9\-_]+-\d{13}$/
579
+
580
+ raise Wavefront::Exception::InvalidIngestionPolicyId, id
581
+ end
582
+
583
+ # Ensure the given argument is a valid User or SystemAccount ID.
584
+ # @param id [String]
585
+ # @raise Wavefront::Exception::InvalidAccountId if the
586
+ # ID is not valid
587
+ #
588
+ def wf_account_id?(id)
589
+ return true if wf_user_id?(id)
590
+ rescue Wavefront::Exception::InvalidUserId
591
+ begin
592
+ return true if wf_serviceaccount_id?(id)
593
+ rescue Wavefront::Exception::InvalidServiceAccountId
594
+ raise Wavefront::Exception::InvalidAccountId, id
595
+ end
596
+ end
571
597
  end
572
598
  # rubocop:enable Metrics/ModuleLength
573
599
  end
data/spec/.rubocop.yml CHANGED
@@ -5,7 +5,7 @@ Metrics/AbcSize:
5
5
  # Offense count: 5
6
6
  # Configuration parameters: CountComments.
7
7
  Metrics/ClassLength:
8
- Max: 300
8
+ Max: 400
9
9
 
10
10
  # Offense count: 46
11
11
  # Configuration parameters: CountComments, ExcludedMethods.
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../spec_helper'
5
+ require_relative '../test_mixins/general'
6
+
7
+ # Unit tests for Account class
8
+ #
9
+ class WavefrontAccountTest < WavefrontTestBase
10
+ include WavefrontTest::List
11
+ include WavefrontTest::Delete
12
+ include WavefrontTest::Describe
13
+
14
+ def test_add_user_groups
15
+ assert_posts("/api/v2/account/#{id}/addUserGroups", groups.to_json) do
16
+ wf.add_user_groups(id, groups)
17
+ end
18
+
19
+ assert_invalid_id { wf.add_user_groups(invalid_id, groups) }
20
+ end
21
+
22
+ def test_business_functions
23
+ assert_gets("/api/v2/account/#{id}/businessFunctions") do
24
+ wf.business_functions(id)
25
+ end
26
+
27
+ assert_raises(ArgumentError) { wf.business_functions }
28
+ end
29
+
30
+ def test_grant_to_single_user
31
+ assert_posts("/api/v2/account/#{id}/grant/#{permission}") do
32
+ wf.grant(id, permission)
33
+ end
34
+ end
35
+
36
+ def test_grant_to_multiple_users
37
+ assert_posts("/api/v2/account/grant/#{permission}", id_list.to_json) do
38
+ wf.grant(id_list, permission)
39
+ end
40
+ end
41
+
42
+ def test_remove_user_groups
43
+ assert_posts("/api/v2/account/#{id}/removeUserGroups", groups.to_json) do
44
+ wf.remove_user_groups(id, groups)
45
+ end
46
+
47
+ assert_invalid_id { wf.remove_user_groups(invalid_id, groups) }
48
+ end
49
+
50
+ def test_revoke_from_single_user
51
+ assert_posts("/api/v2/account/#{id}/revoke/#{permission}") do
52
+ wf.revoke(id, permission)
53
+ end
54
+ end
55
+
56
+ def test_revoke_from_multiple_users
57
+ assert_posts("/api/v2/account/revoke/#{permission}", id_list.to_json) do
58
+ wf.revoke(id_list, permission)
59
+ end
60
+ end
61
+
62
+ def test_delete_accounts
63
+ assert_posts('/api/v2/account/deleteAccounts', id_list.to_json) do
64
+ wf.delete_accounts(id_list)
65
+ end
66
+
67
+ assert_invalid_id { wf.delete_accounts([invalid_id]) }
68
+ end
69
+
70
+ def test_add_ingestion_policy
71
+ assert_posts('/api/v2/account/addingestionpolicy',
72
+ { ingestionPolicyId: policy_id,
73
+ accounts: id_list }.to_json) do
74
+ wf.add_ingestion_policy(policy_id, id_list)
75
+ end
76
+
77
+ assert_raises Wavefront::Exception::InvalidIngestionPolicyId do
78
+ wf.add_ingestion_policy(invalid_policy_id, id_list)
79
+ end
80
+
81
+ assert_invalid_id { wf.add_ingestion_policy(policy_id, [invalid_id]) }
82
+ end
83
+
84
+ def test_remove_ingestion_policy
85
+ assert_posts('/api/v2/account/removeingestionpolicy',
86
+ { ingestionPolicyId: policy_id,
87
+ accounts: id_list }.to_json) do
88
+ wf.remove_ingestion_policy(policy_id, id_list)
89
+ end
90
+
91
+ assert_raises Wavefront::Exception::InvalidIngestionPolicyId do
92
+ wf.add_ingestion_policy(invalid_policy_id, id_list)
93
+ end
94
+
95
+ assert_invalid_id { wf.add_ingestion_policy(policy_id, [invalid_id]) }
96
+ end
97
+
98
+ private
99
+
100
+ def api_class
101
+ 'account'
102
+ end
103
+
104
+ def id
105
+ 'sa::tester'
106
+ end
107
+
108
+ def invalid_id
109
+ 'bad_id' * 1000
110
+ end
111
+
112
+ def groups
113
+ %w[f8dc0c14-91a0-4ca9-8a2a-7d47f4db4672
114
+ 2659191e-aad4-4302-a94e-9667e1517127]
115
+ end
116
+
117
+ def id_list
118
+ %w[sa:test user@example.com]
119
+ end
120
+
121
+ def permission
122
+ 'agent_management'
123
+ end
124
+
125
+ def policy_id
126
+ 'testpolicy-1579537565010'
127
+ end
128
+
129
+ def invalid_policy_id
130
+ 'badpolicy'
131
+ end
132
+ end
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../spec_helper'
5
+ require_relative '../test_mixins/general'
6
+
7
+ # Unit tests for IngestionPolicy class
8
+ #
9
+ class WavefrontIngestionPolicyTest < WavefrontTestBase
10
+ include WavefrontTest::List
11
+ include WavefrontTest::Describe
12
+ include WavefrontTest::Update
13
+ include WavefrontTest::Delete
14
+
15
+ private
16
+
17
+ def payload
18
+ { sampledUserAccounts: ['string'],
19
+ userAccountCount: 0,
20
+ sampledServiceAccounts: [
21
+ 'string'
22
+ ],
23
+ serviceAccountCount: 0,
24
+ name: 'string',
25
+ id: 'string',
26
+ description: 'string',
27
+ customer: 'string',
28
+ lastUpdatedMs: 0,
29
+ lastUpdatedAccountId: 'string' }
30
+ end
31
+
32
+ def api_class
33
+ 'usage/ingestionpolicy'
34
+ end
35
+
36
+ def id
37
+ 'test-ingestion-policy-1579538401492'
38
+ end
39
+
40
+ def invalid_id
41
+ 'bad_id'
42
+ end
43
+ end
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../spec_helper'
5
+ require_relative '../test_mixins/general'
6
+
7
+ # Unit tests for Usage class
8
+ #
9
+ class WavefrontUsageTest < WavefrontTestBase
10
+ def test_export_csv
11
+ assert_raises(ArgumentError) { wf.export_csv }
12
+
13
+ assert_gets("/api/v2/usage/exportcsv?startTime=#{t_start}") do
14
+ wf.export_csv(t_start)
15
+ end
16
+
17
+ assert_gets(
18
+ "/api/v2/usage/exportcsv?startTime=#{t_start}&endTime=#{t_end}"
19
+ ) do
20
+ wf.export_csv(t_start, t_end)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def t_start
27
+ 1_577_890_000
28
+ end
29
+
30
+ def t_end
31
+ 1_577_899_999
32
+ end
33
+ end
@@ -110,6 +110,14 @@ class WavefrontUserTest < WavefrontTestBase
110
110
  assert_raises(ArgumentError) { wf.business_functions }
111
111
  end
112
112
 
113
+ def test_validate_users
114
+ assert_posts('/api/v2/user/validateUsers', id_list.to_json) do
115
+ wf.validate_users(id_list)
116
+ end
117
+
118
+ assert_raises(ArgumentError) { wf.validate_users }
119
+ end
120
+
113
121
  def test_response_shim
114
122
  (RESOURCE_DIR + 'user_responses').each_child do |input|
115
123
  # Ugly hack for the 202 in the 'create' file
@@ -156,4 +164,8 @@ class WavefrontUserTest < WavefrontTestBase
156
164
  def payload
157
165
  { emailAddress: id, groups: %w[browse] }
158
166
  end
167
+
168
+ def id_list
169
+ %w[id1 id2 id3]
170
+ end
159
171
  end
@@ -323,19 +323,19 @@ class WavefrontValidatorsTest < MiniTest::Test
323
323
  end
324
324
  end
325
325
 
326
- def test_notificant_id
326
+ def test_wf_notificant_id
327
327
  good = %w[CHTo47HvsPzSaGhh]
328
328
  bad = ['CTo47HvsPzSaGhh', [], {}, nil, 'bad id']
329
329
  good_and_bad('wf_notificant_id?', 'InvalidNotificantId', good, bad)
330
330
  end
331
331
 
332
- def test_integration_id
332
+ def test_wf_integration_id
333
333
  good = %w[aws tutorial elasticsearch cassandra go]
334
334
  bad = ['CTo47HvsPzSaGhh', [], {}, nil, 'bad id']
335
335
  good_and_bad('wf_integration_id?', 'InvalidIntegrationId', good, bad)
336
336
  end
337
337
 
338
- def test_apitoken_id
338
+ def test_wf_apitoken_id
339
339
  good = %w[2bfdcac7-1c9c-4c4b-9b56-c41c22c586dc
340
340
  17db4cc1-65f6-40a8-a1fa-6fcae460c4bd
341
341
  fca312fb-5ff4-420d-862d-5d6d99ed6bcf
@@ -345,24 +345,45 @@ class WavefrontValidatorsTest < MiniTest::Test
345
345
  good_and_bad('wf_apitoken_id?', 'InvalidApiTokenId', good, bad)
346
346
  end
347
347
 
348
- def test_distribution_interval
348
+ def test_wf_distribution_interval
349
349
  good = %i[m h d]
350
350
  bad = ['m', [], {}, nil, 'bad id', :x, 'p']
351
351
  good_and_bad('wf_distribution_interval?',
352
352
  'InvalidDistributionInterval', good, bad)
353
353
  end
354
354
 
355
- def test_serviceaccount_id
355
+ def test_wf_serviceaccount_id
356
356
  good = %w[sa::my-id sa::ID]
357
357
  bad = %w[sc:id fca312fb-5ff4-420d-862d-5d6d99ed6bcf]
358
358
  good_and_bad('wf_serviceaccount_id?',
359
359
  'InvalidServiceAccountId', good, bad)
360
360
  end
361
361
 
362
- def test_permission
362
+ def test_wf_permission
363
363
  good = %w[events_management external_links_management]
364
364
  bad = ['events management', 'event_management', 'EVENT_MANAGEMENT']
365
365
  good_and_bad('wf_permission?',
366
366
  'InvalidPermission', good, bad)
367
367
  end
368
+
369
+ def test_wf_ingestionpolicy_id
370
+ good = %w[another-ingestion-policy-1579538401492
371
+ testpolicy-1579537565010
372
+ 213452-34-_-0-4-ingestion-policy-1579538556267
373
+ yet_another-ingestion-policy-1579538414190]
374
+
375
+ bad = %w[fa312fb-5ff4-420d-862d-5d6d99ed6bcf thing 123]
376
+ good_and_bad('wf_ingestionpolicy_id?',
377
+ 'InvalidIngestionPolicyId',
378
+ good,
379
+ bad)
380
+ end
381
+
382
+ def test_wf_account_id
383
+ good = %w[sa::my-id sa::ID Some.User@example.com
384
+ general99+specific@somewhere.net someone@somewhere.com a user
385
+ user-name]
386
+ bad = ['', [], {}, 'a' * 1000]
387
+ good_and_bad('wf_account_id?', 'InvalidAccountId', good, bad)
388
+ end
368
389
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wavefront-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.1
4
+ version: 3.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Fisher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-15 00:00:00.000000000 Z
11
+ date: 2020-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -179,6 +179,7 @@ files:
179
179
  - LICENSE.txt
180
180
  - README.md
181
181
  - Rakefile
182
+ - lib/wavefront-sdk/account.rb
182
183
  - lib/wavefront-sdk/alert.rb
183
184
  - lib/wavefront-sdk/api_mixins/acl.rb
184
185
  - lib/wavefront-sdk/api_mixins/tag.rb
@@ -198,6 +199,7 @@ files:
198
199
  - lib/wavefront-sdk/distribution.rb
199
200
  - lib/wavefront-sdk/event.rb
200
201
  - lib/wavefront-sdk/externallink.rb
202
+ - lib/wavefront-sdk/ingestionpolicy.rb
201
203
  - lib/wavefront-sdk/integration.rb
202
204
  - lib/wavefront-sdk/maintenancewindow.rb
203
205
  - lib/wavefront-sdk/message.rb
@@ -223,6 +225,7 @@ files:
223
225
  - lib/wavefront-sdk/support/mixins.rb
224
226
  - lib/wavefront-sdk/support/parse_time.rb
225
227
  - lib/wavefront-sdk/types/status.rb
228
+ - lib/wavefront-sdk/usage.rb
226
229
  - lib/wavefront-sdk/user.rb
227
230
  - lib/wavefront-sdk/usergroup.rb
228
231
  - lib/wavefront-sdk/validators.rb
@@ -246,6 +249,7 @@ files:
246
249
  - spec/test_mixins/general.rb
247
250
  - spec/test_mixins/tag.rb
248
251
  - spec/test_mixins/update_keys.rb
252
+ - spec/wavefront-sdk/account_spec.rb
249
253
  - spec/wavefront-sdk/alert_spec.rb
250
254
  - spec/wavefront-sdk/api_mixins/user_mixins_spec.rb
251
255
  - spec/wavefront-sdk/apitoken_spec.rb
@@ -260,6 +264,7 @@ files:
260
264
  - spec/wavefront-sdk/distribution_spec.rb
261
265
  - spec/wavefront-sdk/event_spec.rb
262
266
  - spec/wavefront-sdk/externallink_spec.rb
267
+ - spec/wavefront-sdk/ingestionpolicy_spec.rb
263
268
  - spec/wavefront-sdk/integration_spec.rb
264
269
  - spec/wavefront-sdk/maintenancewindow_spec.rb
265
270
  - spec/wavefront-sdk/message_spec.rb
@@ -291,6 +296,7 @@ files:
291
296
  - spec/wavefront-sdk/stdlib/string_spec.rb
292
297
  - spec/wavefront-sdk/support/mixins_spec.rb
293
298
  - spec/wavefront-sdk/support/parse_time_spec.rb
299
+ - spec/wavefront-sdk/usage_spec.rb
294
300
  - spec/wavefront-sdk/user_spec.rb
295
301
  - spec/wavefront-sdk/usergroup_spec.rb
296
302
  - spec/wavefront-sdk/validators_spec.rb
@@ -338,6 +344,7 @@ test_files:
338
344
  - spec/test_mixins/general.rb
339
345
  - spec/test_mixins/tag.rb
340
346
  - spec/test_mixins/update_keys.rb
347
+ - spec/wavefront-sdk/account_spec.rb
341
348
  - spec/wavefront-sdk/alert_spec.rb
342
349
  - spec/wavefront-sdk/api_mixins/user_mixins_spec.rb
343
350
  - spec/wavefront-sdk/apitoken_spec.rb
@@ -352,6 +359,7 @@ test_files:
352
359
  - spec/wavefront-sdk/distribution_spec.rb
353
360
  - spec/wavefront-sdk/event_spec.rb
354
361
  - spec/wavefront-sdk/externallink_spec.rb
362
+ - spec/wavefront-sdk/ingestionpolicy_spec.rb
355
363
  - spec/wavefront-sdk/integration_spec.rb
356
364
  - spec/wavefront-sdk/maintenancewindow_spec.rb
357
365
  - spec/wavefront-sdk/message_spec.rb
@@ -383,6 +391,7 @@ test_files:
383
391
  - spec/wavefront-sdk/stdlib/string_spec.rb
384
392
  - spec/wavefront-sdk/support/mixins_spec.rb
385
393
  - spec/wavefront-sdk/support/parse_time_spec.rb
394
+ - spec/wavefront-sdk/usage_spec.rb
386
395
  - spec/wavefront-sdk/user_spec.rb
387
396
  - spec/wavefront-sdk/usergroup_spec.rb
388
397
  - spec/wavefront-sdk/validators_spec.rb