wavefront-sdk 7.0.0 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +3 -3
- data/.github/workflows/test.yml +1 -1
- data/.rubocop.yml +1 -1
- data/Gemfile +11 -0
- data/HISTORY.md +31 -4
- data/README.md +3 -3
- data/lib/wavefront-sdk/accesspolicy.rb +37 -0
- data/lib/wavefront-sdk/account.rb +28 -0
- data/lib/wavefront-sdk/alert.rb +29 -10
- data/lib/wavefront-sdk/api_mixins/tag.rb +12 -12
- data/lib/wavefront-sdk/apitoken.rb +29 -2
- data/lib/wavefront-sdk/cloudintegration.rb +10 -8
- data/lib/wavefront-sdk/cluster.rb +18 -0
- data/lib/wavefront-sdk/core/api_caller.rb +2 -2
- data/lib/wavefront-sdk/core/exception.rb +4 -0
- data/lib/wavefront-sdk/dashboard.rb +7 -6
- data/lib/wavefront-sdk/defs/version.rb +1 -1
- data/lib/wavefront-sdk/derivedmetric.rb +7 -6
- data/lib/wavefront-sdk/event.rb +5 -5
- data/lib/wavefront-sdk/externallink.rb +3 -3
- data/lib/wavefront-sdk/ingestionpolicy.rb +32 -5
- data/lib/wavefront-sdk/integration.rb +14 -4
- data/lib/wavefront-sdk/internals.rb +93 -0
- data/lib/wavefront-sdk/maintenancewindow.rb +3 -3
- data/lib/wavefront-sdk/message.rb +1 -1
- data/lib/wavefront-sdk/metricspolicy.rb +1 -1
- data/lib/wavefront-sdk/monitoredapplication.rb +55 -0
- data/lib/wavefront-sdk/notificant.rb +4 -4
- data/lib/wavefront-sdk/proxy.rb +26 -4
- data/lib/wavefront-sdk/role.rb +2 -2
- data/lib/wavefront-sdk/savedsearch.rb +4 -4
- data/lib/wavefront-sdk/search.rb +6 -4
- data/lib/wavefront-sdk/source.rb +6 -6
- data/lib/wavefront-sdk/spansamplingpolicy.rb +126 -0
- data/lib/wavefront-sdk/stdlib/string.rb +1 -1
- data/lib/wavefront-sdk/support/parse_time.rb +1 -1
- data/lib/wavefront-sdk/user.rb +5 -5
- data/lib/wavefront-sdk/usergroup.rb +2 -2
- data/lib/wavefront-sdk/validators.rb +28 -5
- data/lib/wavefront-sdk/webhook.rb +3 -3
- data/lib/wavefront-sdk/write.rb +1 -0
- data/lib/wavefront-sdk/writers/api.rb +31 -8
- data/lib/wavefront-sdk/writers/http.rb +2 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/wavefront-sdk/accesspolicy_spec.rb +53 -0
- data/spec/wavefront-sdk/account_spec.rb +32 -1
- data/spec/wavefront-sdk/alert_spec.rb +17 -0
- data/spec/wavefront-sdk/api_mixins/user_mixins_spec.rb +1 -1
- data/spec/wavefront-sdk/apitoken_spec.rb +12 -0
- data/spec/wavefront-sdk/cluster_spec.rb +13 -0
- data/spec/wavefront-sdk/core/api_caller_spec.rb +1 -1
- data/spec/wavefront-sdk/core/api_spec.rb +1 -1
- data/spec/wavefront-sdk/core/logger_spec.rb +1 -1
- data/spec/wavefront-sdk/core/response_spec.rb +1 -1
- data/spec/wavefront-sdk/credentials_spec.rb +2 -2
- data/spec/wavefront-sdk/distribution_spec.rb +1 -1
- data/spec/wavefront-sdk/ingestionpolicy_spec.rb +11 -0
- data/spec/wavefront-sdk/integration_spec.rb +4 -0
- data/spec/wavefront-sdk/internals_spec.rb +62 -0
- data/spec/wavefront-sdk/metric_helper_spec.rb +1 -1
- data/spec/wavefront-sdk/misc_spec.rb +1 -1
- data/spec/wavefront-sdk/monitoredapplication_spec.rb +35 -0
- data/spec/wavefront-sdk/paginator/base_spec.rb +1 -1
- data/spec/wavefront-sdk/paginator/post_spec.rb +1 -1
- data/spec/wavefront-sdk/proxy_spec.rb +14 -0
- data/spec/wavefront-sdk/resources/swagger.spec.gz +0 -0
- data/spec/wavefront-sdk/spansamplingpolicy_spec.rb +47 -0
- data/spec/wavefront-sdk/spy_spec.rb +1 -1
- data/spec/wavefront-sdk/stdlib/array_spec.rb +1 -1
- data/spec/wavefront-sdk/stdlib/hash_spec.rb +1 -1
- data/spec/wavefront-sdk/stdlib/string_spec.rb +1 -1
- data/spec/wavefront-sdk/support/mixins_spec.rb +1 -1
- data/spec/wavefront-sdk/support/parse_time_spec.rb +1 -1
- data/spec/wavefront-sdk/unstable/chart_spec.rb +1 -1
- data/spec/wavefront-sdk/usage_spec.rb +0 -1
- data/spec/wavefront-sdk/validators_spec.rb +17 -1
- data/spec/wavefront-sdk/write_spec.rb +1 -1
- data/spec/wavefront-sdk/writers/api_spec.rb +1 -1
- data/spec/wavefront-sdk/writers/core_spec.rb +1 -1
- data/spec/wavefront-sdk/writers/http_spec.rb +1 -1
- data/spec/wavefront-sdk/writers/proxy_spec.rb +1 -1
- data/spec/wavefront-sdk/writers/socket_spec.rb +1 -1
- data/spec/wavefront-sdk/writers/summary_spec.rb +1 -1
- data/wavefront-sdk.gemspec +2 -13
- metadata +17 -146
@@ -0,0 +1,126 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'defs/constants'
|
4
|
+
require_relative 'core/api'
|
5
|
+
|
6
|
+
module Wavefront
|
7
|
+
#
|
8
|
+
# View and manage the Wavefront span sampling policy.
|
9
|
+
#
|
10
|
+
class SpanSamplingPolicy < CoreApi
|
11
|
+
def update_keys
|
12
|
+
%i[name active expression description samplingPercent]
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET /api/v2/spansamplingpolicy
|
16
|
+
# Get all sampling policies for a customer
|
17
|
+
#
|
18
|
+
# @param offset [Int] policy at which the list begins
|
19
|
+
# @param limit [Int] the number of policies to return
|
20
|
+
# @return [Wavefront::Response]
|
21
|
+
#
|
22
|
+
def list(offset = 0, limit = 100)
|
23
|
+
api.get('', offset: offset, limit: limit)
|
24
|
+
end
|
25
|
+
|
26
|
+
# POST /api/v2/spansamplingpolicy
|
27
|
+
# Create a span sampling policy
|
28
|
+
#
|
29
|
+
# @param body [Hash] description of policy
|
30
|
+
# @return [Wavefront::Response]
|
31
|
+
#
|
32
|
+
def create(body)
|
33
|
+
raise ArgumentError unless body.is_a?(Hash)
|
34
|
+
|
35
|
+
api.post('', body, 'application/json')
|
36
|
+
end
|
37
|
+
|
38
|
+
# DELETE /api/v2/spansamplingpolicy/{id}
|
39
|
+
# Delete a specific span sampling policy
|
40
|
+
#
|
41
|
+
# Deleting an active policy moves it to 'trash', from where it can
|
42
|
+
# be restored with an #undelete operation. Deleting an policy in
|
43
|
+
# 'trash' removes it for ever.
|
44
|
+
#
|
45
|
+
# @param id [String] ID of the policy
|
46
|
+
# @return [Wavefront::Response]
|
47
|
+
#
|
48
|
+
def delete(id)
|
49
|
+
wf_spansamplingpolicy_id?(id)
|
50
|
+
api.delete(id)
|
51
|
+
end
|
52
|
+
|
53
|
+
# GET /api/v2/spansamplingpolicy/deleted
|
54
|
+
# Get all deleted sampling policies for a customer
|
55
|
+
# @return [Wavefront::Response]
|
56
|
+
#
|
57
|
+
def deleted
|
58
|
+
api.get('deleted')
|
59
|
+
end
|
60
|
+
|
61
|
+
# GET /api/v2/spansamplingpolicy/{id}
|
62
|
+
# GET /api/v2/spansamplingpolicy/{id}/history/{version}
|
63
|
+
# Get a specific span sampling policy
|
64
|
+
# Get a specific policy / Get a specific historical version of a specific
|
65
|
+
# sampling policy
|
66
|
+
#
|
67
|
+
# @param id [String] ID of the policy
|
68
|
+
# @param version [Integer] version of policy
|
69
|
+
# @return [Wavefront::Response]
|
70
|
+
#
|
71
|
+
def describe(id, version = nil)
|
72
|
+
wf_spansamplingpolicy_id?(id)
|
73
|
+
wf_version?(version) if version
|
74
|
+
fragments = [id]
|
75
|
+
fragments += ['history', version] if version
|
76
|
+
api.get(fragments.uri_concat)
|
77
|
+
end
|
78
|
+
|
79
|
+
# PUT /api/v2/spansamplingpolicy/{id}
|
80
|
+
# Update a specific span sampling policy
|
81
|
+
#
|
82
|
+
# @param id [String] a Wavefront span-sampling policy ID
|
83
|
+
# @param body [Hash] key-value hash of the parameters you wish
|
84
|
+
# to change
|
85
|
+
# @param modify [true, false] if true, use {#describe()} to get
|
86
|
+
# a hash describing the existing object, and modify that with
|
87
|
+
# the new body. If false, pass the new body straight through.
|
88
|
+
# @return [Wavefront::Response]
|
89
|
+
|
90
|
+
def update(id, body, modify = true)
|
91
|
+
wf_spansamplingpolicy_id?(id)
|
92
|
+
raise ArgumentError unless body.is_a?(Hash)
|
93
|
+
|
94
|
+
return api.put(id, body, 'application/json') unless modify
|
95
|
+
|
96
|
+
api.put(id, hash_for_update(describe(id).response, body),
|
97
|
+
'application/json')
|
98
|
+
end
|
99
|
+
|
100
|
+
# GET /api/v2/spansamplingpolicy/{id}/history
|
101
|
+
# Get the version history of a specific sampling policy
|
102
|
+
#
|
103
|
+
# @param id [String] ID of the policy
|
104
|
+
# @return [Wavefront::Response]
|
105
|
+
#
|
106
|
+
def history(id, offset = nil, limit = nil)
|
107
|
+
wf_spansamplingpolicy_id?(id)
|
108
|
+
qs = {}
|
109
|
+
qs[:offset] = offset if offset
|
110
|
+
qs[:limit] = limit if limit
|
111
|
+
|
112
|
+
api.get([id, 'history'].uri_concat, qs)
|
113
|
+
end
|
114
|
+
|
115
|
+
# POST /api/v2/spansamplingpolicy/{id}/undelete
|
116
|
+
# Restore a deleted span sampling policy
|
117
|
+
#
|
118
|
+
# @param id [String] ID of the policy
|
119
|
+
# @return [Wavefront::Response]
|
120
|
+
#
|
121
|
+
def undelete(id)
|
122
|
+
wf_spansamplingpolicy_id?(id)
|
123
|
+
api.post([id, 'undelete'].uri_concat)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/lib/wavefront-sdk/user.rb
CHANGED
@@ -49,7 +49,7 @@ module Wavefront
|
|
49
49
|
api.post("?sendEmail=#{send_email}", body, 'application/json')
|
50
50
|
end
|
51
51
|
|
52
|
-
# DELETE /api/v2/user/id
|
52
|
+
# DELETE /api/v2/user/{id}
|
53
53
|
# Delete a specific user. See also #delete_users.
|
54
54
|
#
|
55
55
|
# @param id [String] ID of the user
|
@@ -61,7 +61,7 @@ module Wavefront
|
|
61
61
|
api.delete(id)
|
62
62
|
end
|
63
63
|
|
64
|
-
# GET /api/v2/user/id
|
64
|
+
# GET /api/v2/user/{id}
|
65
65
|
# Retrieves a user by identifier (email addr).
|
66
66
|
#
|
67
67
|
# @param id [String] ID of the user
|
@@ -73,7 +73,7 @@ module Wavefront
|
|
73
73
|
api.get(id)
|
74
74
|
end
|
75
75
|
|
76
|
-
# PUT /api/v2/user/id
|
76
|
+
# PUT /api/v2/user/{id}
|
77
77
|
# Update a specific user definition.
|
78
78
|
#
|
79
79
|
# @param id [String] a Wavefront user ID
|
@@ -124,7 +124,7 @@ module Wavefront
|
|
124
124
|
'application/json')
|
125
125
|
end
|
126
126
|
|
127
|
-
#
|
127
|
+
# POST /api/v2/user/{id}/grant
|
128
128
|
# Grants a specific user permission.
|
129
129
|
#
|
130
130
|
# @param id [String] ID of the user
|
@@ -147,7 +147,7 @@ module Wavefront
|
|
147
147
|
'application/x-www-form-urlencoded')
|
148
148
|
end
|
149
149
|
|
150
|
-
#
|
150
|
+
# POST /api/v2/user/{id}/revoke
|
151
151
|
# Revokes a specific user permission.
|
152
152
|
#
|
153
153
|
# @param id [String] ID of the user
|
@@ -16,8 +16,8 @@ module Wavefront
|
|
16
16
|
|
17
17
|
# GET /api/v2/usergroup
|
18
18
|
# Get all user groups for a customer
|
19
|
-
# @param offset [Int]
|
20
|
-
# @param limit [Int] the number of
|
19
|
+
# @param offset [Int] usergroup at which the list begins
|
20
|
+
# @param limit [Int] the number of usergroups to return
|
21
21
|
# @return [Wavefront::Response]
|
22
22
|
#
|
23
23
|
def list(offset = 0, limit = 100)
|
@@ -164,8 +164,7 @@ module Wavefront
|
|
164
164
|
#
|
165
165
|
# @param version [Integer] the version number to validate
|
166
166
|
# @return True if the version is valid
|
167
|
-
# @raise Wavefront::Exception::InvalidVersion if the
|
168
|
-
# not valid
|
167
|
+
# @raise Wavefront::Exception::InvalidVersion if the ID is not valid
|
169
168
|
#
|
170
169
|
def wf_version?(version)
|
171
170
|
version = version.to_i if version.is_a?(String) && version =~ /^\d+$/
|
@@ -197,7 +196,7 @@ module Wavefront
|
|
197
196
|
def wf_point_tag?(key, val)
|
198
197
|
if key && val && (key.size + val.size < 254) &&
|
199
198
|
key =~ /^[\w\-.:]+$/ && val !~ /\\$/
|
200
|
-
return
|
199
|
+
return false
|
201
200
|
end
|
202
201
|
|
203
202
|
raise Wavefront::Exception::InvalidTag, "#{key}=#{val}"
|
@@ -589,10 +588,10 @@ module Wavefront
|
|
589
588
|
# ID is not valid
|
590
589
|
#
|
591
590
|
def wf_account_id?(id)
|
592
|
-
|
591
|
+
true if wf_user_id?(id)
|
593
592
|
rescue Wavefront::Exception::InvalidUserId
|
594
593
|
begin
|
595
|
-
|
594
|
+
true if wf_serviceaccount_id?(id)
|
596
595
|
rescue Wavefront::Exception::InvalidServiceAccountId
|
597
596
|
raise Wavefront::Exception::InvalidAccountId, id
|
598
597
|
end
|
@@ -609,6 +608,17 @@ module Wavefront
|
|
609
608
|
raise Wavefront::Exception::InvalidMonitoredClusterId, id
|
610
609
|
end
|
611
610
|
|
611
|
+
# Ensure the given argument is a valid monitored application ID
|
612
|
+
# @param id [String]
|
613
|
+
# @raise Wavefront::Exception::InvalidMonitoredApplicationId if the ID is
|
614
|
+
# not valid
|
615
|
+
#
|
616
|
+
def wf_monitoredapplication_id?(id)
|
617
|
+
return true if id.is_a?(String) && id.size < 256 && id =~ /^[a-z0-9\-_]+$/
|
618
|
+
|
619
|
+
raise Wavefront::Exception::InvalidMonitoredApplicationId, id
|
620
|
+
end
|
621
|
+
|
612
622
|
# Ensure the given value is a valid sampling rate.
|
613
623
|
# @param rate [Float]
|
614
624
|
# @raise Wavefront::Exception::InvalidSamplingValue
|
@@ -654,6 +664,19 @@ module Wavefront
|
|
654
664
|
|
655
665
|
raise Wavefront::Exception::InvalidMetricsPolicyId, id
|
656
666
|
end
|
667
|
+
|
668
|
+
# Ensure the given argument is a valid Wavefront Span Sampling Policy ID.
|
669
|
+
# So far as I can tell they're just strings.
|
670
|
+
#
|
671
|
+
# @param id [String] the span sampling policy ID to validate
|
672
|
+
# @return true if the ID is valid
|
673
|
+
# @raise Wavefront::Exception::InvalidSpanSamplingPolicyId if the ID is
|
674
|
+
# not valid
|
675
|
+
def wf_spansamplingpolicy_id?(id)
|
676
|
+
return true if id.is_a?(String)
|
677
|
+
|
678
|
+
raise Wavefront::Exception::InvalidSpanSamplingPolicyId, id
|
679
|
+
end
|
657
680
|
end
|
658
681
|
# rubocop:enable Metrics/ModuleLength
|
659
682
|
end
|
@@ -35,7 +35,7 @@ module Wavefront
|
|
35
35
|
api.post('', body, 'application/json')
|
36
36
|
end
|
37
37
|
|
38
|
-
# DELETE /api/v2/webhook/id
|
38
|
+
# DELETE /api/v2/webhook/{id}
|
39
39
|
# Delete a specific webhook.
|
40
40
|
#
|
41
41
|
# @param id [String, Integer] ID of the webhook
|
@@ -46,7 +46,7 @@ module Wavefront
|
|
46
46
|
api.delete(id)
|
47
47
|
end
|
48
48
|
|
49
|
-
# GET /api/v2/webhook/id
|
49
|
+
# GET /api/v2/webhook/{id}
|
50
50
|
# Get a specific webhook.
|
51
51
|
#
|
52
52
|
# @param id [String, Integer] ID of the webhook
|
@@ -57,7 +57,7 @@ module Wavefront
|
|
57
57
|
api.get(id)
|
58
58
|
end
|
59
59
|
|
60
|
-
# PUT /api/v2/webhook/id
|
60
|
+
# PUT /api/v2/webhook/{id}
|
61
61
|
# Update a specific webhook.
|
62
62
|
#
|
63
63
|
# @param id [String] a Wavefront webhook ID
|
data/lib/wavefront-sdk/write.rb
CHANGED
@@ -6,10 +6,23 @@ require_relative '../core/api_caller'
|
|
6
6
|
module Wavefront
|
7
7
|
module Writer
|
8
8
|
#
|
9
|
-
# Send points direct to Wavefront's API. This requires an
|
10
|
-
#
|
9
|
+
# Send points direct to Wavefront's API. This requires an endpoint, a
|
10
|
+
# token, and HTTPS egress.
|
11
|
+
#
|
12
|
+
# Points are sent in batches of BATCH_SIZE. We attempt to make a summary
|
13
|
+
# of how many points are sent or rejected, but it's quantized by the batch
|
14
|
+
# size.
|
15
|
+
#
|
16
|
+
# TODO I think this needs a composite response. It makes one or more API
|
17
|
+
# calls depending on the amount of metrics to be sent, and the CLI needs
|
18
|
+
# to know if there was anything other than a 200. Options are to return
|
19
|
+
# the first failure when it happens, or to try all the chunks and return
|
20
|
+
# the last non-200, or the highest numbered return code, or some other
|
21
|
+
# indication of failure.
|
11
22
|
#
|
12
23
|
class Api < Core
|
24
|
+
BATCH_SIZE = 100
|
25
|
+
|
13
26
|
def open
|
14
27
|
@conn = Wavefront::ApiCaller.new(self, creds, opts)
|
15
28
|
end
|
@@ -32,7 +45,6 @@ module Wavefront
|
|
32
45
|
|
33
46
|
def send_point(body)
|
34
47
|
_send_point(body)
|
35
|
-
summary.sent += body.size
|
36
48
|
true
|
37
49
|
rescue StandardError => e
|
38
50
|
summary.unsent += body.size
|
@@ -52,15 +64,26 @@ module Wavefront
|
|
52
64
|
send_point(body)
|
53
65
|
end
|
54
66
|
|
55
|
-
# Send points in batches of
|
56
|
-
#
|
57
|
-
#
|
67
|
+
# Send points in batches of BATCH_SIZE. I'm not sure exactly how much the
|
68
|
+
# API can cope with in a single call, so this might change.
|
69
|
+
# @return [Nil]
|
58
70
|
#
|
71
|
+
# rubocop:disable Metrics/MethodLength
|
59
72
|
def _send_point(body)
|
60
|
-
body.each_slice(
|
61
|
-
conn.post('/?f=wavefront', p.join("\n"),
|
73
|
+
body.each_slice(BATCH_SIZE) do |p|
|
74
|
+
ret = conn.post('/?f=wavefront', p.join("\n"),
|
75
|
+
'application/octet-stream')
|
76
|
+
|
77
|
+
if ret.ok?
|
78
|
+
logger.log("sent #{BATCH_SIZE} points", :debug)
|
79
|
+
summary.sent += p.count
|
80
|
+
else
|
81
|
+
logger.log("failed to send #{BATCH_SIZE} points", :debug)
|
82
|
+
summary.unsent += p.count
|
83
|
+
end
|
62
84
|
end
|
63
85
|
end
|
86
|
+
# rubocop:enable Metrics/MethodLength
|
64
87
|
end
|
65
88
|
end
|
66
89
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -10,7 +10,7 @@ require_relative 'constants'
|
|
10
10
|
|
11
11
|
# Abstract class which sets up everything needed by the API tests
|
12
12
|
#
|
13
|
-
class WavefrontTestBase <
|
13
|
+
class WavefrontTestBase < Minitest::Test
|
14
14
|
attr_reader :wf, :wf_noop, :headers, :invalid_id, :valid_id
|
15
15
|
|
16
16
|
def initialize(args)
|
@@ -0,0 +1,53 @@
|
|
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 AccessPolicy class
|
8
|
+
#
|
9
|
+
class WavefrontAccessPolicyTest < WavefrontTestBase
|
10
|
+
def test_describe
|
11
|
+
assert_gets('/api/v2/accesspolicy') { wf.describe }
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_update
|
15
|
+
assert_puts('/api/v2/accesspolicy', payload.to_json) do
|
16
|
+
wf.update(payload)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_validate
|
21
|
+
assert_gets('/api/v2/accesspolicy/validate?ip=1.2.3.4') do
|
22
|
+
wf.validate('1.2.3.4')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def api_class
|
29
|
+
'accesspolicy'
|
30
|
+
end
|
31
|
+
|
32
|
+
def payload
|
33
|
+
{
|
34
|
+
status: {
|
35
|
+
result: 'OK',
|
36
|
+
message: 'string',
|
37
|
+
code: 0
|
38
|
+
},
|
39
|
+
response: {
|
40
|
+
customer: 'string',
|
41
|
+
lastUpdatedMs: 0,
|
42
|
+
policyRules: [
|
43
|
+
{
|
44
|
+
name: 'string',
|
45
|
+
description: 'string',
|
46
|
+
subnet: 'string',
|
47
|
+
action: 'ALLOW'
|
48
|
+
}
|
49
|
+
]
|
50
|
+
}
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
@@ -179,6 +179,18 @@ class WavefrontAccountTest < WavefrontTestBase
|
|
179
179
|
assert_raises(ArgumentError) { wf.validate_accounts }
|
180
180
|
end
|
181
181
|
|
182
|
+
def test_admins
|
183
|
+
assert_gets('/api/v2/account/user/admin') { wf.admins }
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_update_perms
|
187
|
+
assert_invalid_id { wf.update_perms(invalid_id, perms_payload) }
|
188
|
+
|
189
|
+
assert_puts("/api/v2/account/user/#{user_id}", perms_payload.to_json) do
|
190
|
+
wf.update_perms(user_id, perms_payload, false)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
182
194
|
private
|
183
195
|
|
184
196
|
def api_class
|
@@ -203,6 +215,10 @@ class WavefrontAccountTest < WavefrontTestBase
|
|
203
215
|
2659191e-aad4-4302-a94e-9667e1515678]
|
204
216
|
end
|
205
217
|
|
218
|
+
def user_id
|
219
|
+
'user@example.com'
|
220
|
+
end
|
221
|
+
|
206
222
|
def invalid_role
|
207
223
|
%w[bad_role]
|
208
224
|
end
|
@@ -212,7 +228,7 @@ class WavefrontAccountTest < WavefrontTestBase
|
|
212
228
|
end
|
213
229
|
|
214
230
|
def id_list
|
215
|
-
|
231
|
+
['sa:test', user_id]
|
216
232
|
end
|
217
233
|
|
218
234
|
def invalid_permission
|
@@ -235,4 +251,19 @@ class WavefrontAccountTest < WavefrontTestBase
|
|
235
251
|
{ emailAddress: id,
|
236
252
|
groups: %w[browse] }
|
237
253
|
end
|
254
|
+
|
255
|
+
def perms_payload
|
256
|
+
{
|
257
|
+
identifier: 'user@example.com',
|
258
|
+
groups: [
|
259
|
+
'user_management'
|
260
|
+
],
|
261
|
+
userGroups: [
|
262
|
+
'8b23136b-ecd2-4cb5-8c92-62477dcc4090'
|
263
|
+
],
|
264
|
+
roles: [
|
265
|
+
'Role'
|
266
|
+
]
|
267
|
+
}
|
268
|
+
end
|
238
269
|
end
|
@@ -35,6 +35,23 @@ class WavefrontAlertTest < WavefrontTestBase
|
|
35
35
|
assert_invalid_id { wf.unsnooze(invalid_id) }
|
36
36
|
end
|
37
37
|
|
38
|
+
def test_check_query
|
39
|
+
query = {
|
40
|
+
inputQuery: 'string',
|
41
|
+
translatedInput: 'sum(http_requests_total{method="GET"})',
|
42
|
+
queryType: 'PromQL'
|
43
|
+
}
|
44
|
+
assert_posts('/api/v2/alert/checkQuery', query.to_json) do
|
45
|
+
wf.check_query(query)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_preview
|
50
|
+
assert_posts('/api/v2/alert/preview', payload.to_json) do
|
51
|
+
wf.preview(payload)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
38
55
|
def test_summary
|
39
56
|
assert_gets('/api/v2/alert/summary') { wf.summary }
|
40
57
|
end
|
@@ -10,6 +10,18 @@ class WavefrontApiTokenTest < WavefrontTestBase
|
|
10
10
|
assert_gets('/api/v2/apitoken') { wf.list }
|
11
11
|
end
|
12
12
|
|
13
|
+
def test_list_customer_tokens
|
14
|
+
assert_gets('/api/v2/apitoken/customertokens') { wf.list_customer_tokens }
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_describe_customer_token
|
18
|
+
assert_invalid_id { wf.describe_customer_token(invalid_token_id) }
|
19
|
+
|
20
|
+
assert_gets("/api/v2/apitoken/customertokens/#{token_id}") do
|
21
|
+
wf.describe_customer_token(token_id)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
13
25
|
def test_create
|
14
26
|
assert_posts('/api/v2/apitoken', 'null') { wf.create }
|
15
27
|
assert_raises(ArgumentError) { wf.create('test') }
|
@@ -0,0 +1,13 @@
|
|
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 Cluster class
|
8
|
+
#
|
9
|
+
class WavefrontClusterTest < WavefrontTestBase
|
10
|
+
def test_describe
|
11
|
+
assert_gets('/api/v2/cluster/info') { wf.describe }
|
12
|
+
end
|
13
|
+
end
|
@@ -20,7 +20,7 @@ ERR_RESP = { error: 'HTTP 415 Unsupported Media Type',
|
|
20
20
|
# Unit tests for Response class. Also indirectly tests the Status
|
21
21
|
# type.
|
22
22
|
#
|
23
|
-
class WavefrontResponseTest <
|
23
|
+
class WavefrontResponseTest < Minitest::Test
|
24
24
|
attr_reader :wfg, :wfb, :wfe
|
25
25
|
|
26
26
|
def setup
|
@@ -10,7 +10,7 @@ CONF2 = RESOURCE_DIR.join('test2.conf')
|
|
10
10
|
|
11
11
|
# Test SDK base class end-to-end
|
12
12
|
#
|
13
|
-
class WavefrontCredentialsTest <
|
13
|
+
class WavefrontCredentialsTest < Minitest::Test
|
14
14
|
def test_initialize_1
|
15
15
|
ENV.delete('WAVEFRONT_ENDPOINT')
|
16
16
|
ENV.delete('WAVEFRONT_TOKEN')
|
@@ -64,7 +64,7 @@ class Giblets < Wavefront::Credentials; end
|
|
64
64
|
|
65
65
|
# And here are the tests
|
66
66
|
#
|
67
|
-
class GibletsTest <
|
67
|
+
class GibletsTest < Minitest::Test
|
68
68
|
attr_reader :wf, :raw
|
69
69
|
|
70
70
|
def setup
|
@@ -7,7 +7,7 @@ require_relative '../../lib/wavefront-sdk/distribution'
|
|
7
7
|
# Most of the distribution methods are inherited from the Write
|
8
8
|
# class so they aren't tested again here.
|
9
9
|
#
|
10
|
-
class WavefrontDistributionTest <
|
10
|
+
class WavefrontDistributionTest < Minitest::Test
|
11
11
|
attr_reader :wf
|
12
12
|
|
13
13
|
def setup
|
@@ -11,6 +11,17 @@ class WavefrontIngestionPolicyTest < WavefrontTestBase
|
|
11
11
|
include WavefrontTest::Describe
|
12
12
|
include WavefrontTest::Update
|
13
13
|
include WavefrontTest::Delete
|
14
|
+
include WavefrontTest::History
|
15
|
+
|
16
|
+
def test_revert
|
17
|
+
assert_posts("/api/v2/usage/ingestionpolicy/#{id}/revert/5", nil, :json) do
|
18
|
+
wf.revert(id, 5)
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_raises(Wavefront::Exception::InvalidVersion) { wf.revert(id, 'v5') }
|
22
|
+
|
23
|
+
assert_invalid_id { wf.revert(invalid_id, 5) }
|
24
|
+
end
|
14
25
|
|
15
26
|
private
|
16
27
|
|
@@ -47,6 +47,10 @@ class WavefrontIntegrationTest < WavefrontTestBase
|
|
47
47
|
assert_gets('/api/v2/integration/status') { wf.statuses }
|
48
48
|
end
|
49
49
|
|
50
|
+
def test_manifests_min
|
51
|
+
assert_gets('/api/v2/integration/manifests/min') { wf.manifests_min }
|
52
|
+
end
|
53
|
+
|
50
54
|
private
|
51
55
|
|
52
56
|
def api_class
|