wavefront-sdk 3.3.2 → 3.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY.md +42 -35
- data/README.md +5 -5
- data/lib/wavefront-sdk/alert.rb +2 -0
- data/lib/wavefront-sdk/core/api_caller.rb +6 -3
- data/lib/wavefront-sdk/defs/version.rb +2 -2
- data/lib/wavefront-sdk/derivedmetric.rb +7 -0
- data/lib/wavefront-sdk/externallink.rb +2 -2
- data/lib/wavefront-sdk/maintenancewindow.rb +6 -2
- data/lib/wavefront-sdk/notificant.rb +7 -0
- data/lib/wavefront-sdk/paginator/base.rb +8 -0
- data/lib/wavefront-sdk/search.rb +11 -2
- data/lib/wavefront-sdk/user.rb +39 -8
- data/lib/wavefront-sdk/webhook.rb +1 -1
- data/spec/constants.rb +30 -0
- data/spec/spec_helper.rb +12 -237
- data/spec/support/bad_mocket.rb +15 -0
- data/spec/support/hash.rb +9 -0
- data/spec/support/minitest_assertions.rb +110 -0
- data/spec/support/mocket.rb +19 -0
- data/spec/test_mixins/acl.rb +78 -0
- data/spec/test_mixins/general.rb +120 -0
- data/spec/test_mixins/tag.rb +55 -0
- data/spec/test_mixins/update_keys.rb +11 -0
- data/spec/wavefront-sdk/alert_spec.rb +88 -136
- data/spec/wavefront-sdk/apitoken_spec.rb +26 -13
- data/spec/wavefront-sdk/cloudintegration_spec.rb +42 -44
- data/spec/wavefront-sdk/dashboard_spec.rb +53 -72
- data/spec/wavefront-sdk/derivedmetric_spec.rb +23 -49
- data/spec/wavefront-sdk/distribution_spec.rb +14 -14
- data/spec/wavefront-sdk/event_spec.rb +39 -48
- data/spec/wavefront-sdk/externallink_spec.rb +19 -50
- data/spec/wavefront-sdk/integration_spec.rb +33 -38
- data/spec/wavefront-sdk/maintenancewindow_spec.rb +18 -33
- data/spec/wavefront-sdk/message_spec.rb +19 -4
- data/spec/wavefront-sdk/metric_spec.rb +13 -9
- data/spec/wavefront-sdk/notificant_spec.rb +16 -15
- data/spec/wavefront-sdk/proxy_spec.rb +20 -25
- data/spec/wavefront-sdk/query_spec.rb +50 -24
- data/spec/wavefront-sdk/report_spec.rb +3 -6
- data/spec/wavefront-sdk/resources/user_responses/add_user_groups.json +1 -0
- data/spec/wavefront-sdk/resources/user_responses/create.json +28 -0
- data/spec/wavefront-sdk/resources/user_responses/delete_multiple.json +1 -0
- data/spec/wavefront-sdk/resources/user_responses/describe.json +1 -0
- data/spec/wavefront-sdk/resources/user_responses/grant.json +1 -0
- data/spec/wavefront-sdk/resources/user_responses/list.json +1 -0
- data/spec/wavefront-sdk/savedsearch_spec.rb +41 -35
- data/spec/wavefront-sdk/search_spec.rb +35 -29
- data/spec/wavefront-sdk/settings_spec.rb +18 -12
- data/spec/wavefront-sdk/source_spec.rb +29 -32
- data/spec/wavefront-sdk/user_spec.rb +101 -74
- data/spec/wavefront-sdk/usergroup_spec.rb +56 -67
- data/spec/wavefront-sdk/webhook_spec.rb +22 -34
- data/spec/wavefront-sdk/write_spec.rb +2 -0
- data/spec/wavefront-sdk/writers/core_spec.rb +2 -0
- data/spec/wavefront-sdk/writers/summary_spec.rb +2 -0
- data/wavefront-sdk.gemspec +5 -5
- metadata +44 -13
@@ -1,31 +1,44 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require_relative '../spec_helper'
|
4
|
-
|
5
|
-
API_TOKEN_ID = '17db4cc1-65f6-40a8-a1fa-6fcae460c4bd'.freeze
|
4
|
+
require_relative '../test_mixins/general'
|
6
5
|
|
7
6
|
# Unit tests for API token class
|
8
7
|
#
|
9
8
|
class WavefrontApiTokenTest < WavefrontTestBase
|
9
|
+
include WavefrontTest::Delete
|
10
|
+
|
10
11
|
def test_list
|
11
|
-
|
12
|
+
assert_gets('/api/v2/apitoken') { wf.list }
|
12
13
|
end
|
13
14
|
|
14
15
|
def test_create
|
15
|
-
|
16
|
+
assert_posts('/api/v2/apitoken', 'null') { wf.create }
|
16
17
|
assert_raises(ArgumentError) { wf.create('test') }
|
17
18
|
end
|
18
19
|
|
19
|
-
def test_delete
|
20
|
-
should_work(:delete, API_TOKEN_ID, API_TOKEN_ID, :delete)
|
21
|
-
should_be_invalid(:delete)
|
22
|
-
end
|
23
|
-
|
24
20
|
def test_rename
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
assert_puts("/api/v2/apitoken/#{id}",
|
22
|
+
tokenID: id, tokenName: 'token name') do
|
23
|
+
wf.rename(id, 'token name')
|
24
|
+
end
|
25
|
+
|
26
|
+
assert_invalid_id { wf.rename(invalid_id, 'token name') }
|
29
27
|
assert_raises(ArgumentError) { wf.rename }
|
28
|
+
assert_raises(ArgumentError) { wf.rename(id) }
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def id
|
34
|
+
'17db4cc1-65f6-40a8-a1fa-6fcae460c4bd'
|
35
|
+
end
|
36
|
+
|
37
|
+
def invalid_id
|
38
|
+
'__rubbish__'
|
39
|
+
end
|
40
|
+
|
41
|
+
def api_class
|
42
|
+
'apitoken'
|
30
43
|
end
|
31
44
|
end
|
@@ -1,66 +1,64 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require_relative '../spec_helper'
|
4
|
-
|
5
|
-
CLOUD = '3b56f61d-1a79-46f6-905c-d75a0f613d10'.freeze
|
6
|
-
CLOUD_BODY = {
|
7
|
-
name: 'SDK test Cloudwatch Integration',
|
8
|
-
service: 'CLOUDWATCH',
|
9
|
-
cloudWatch: {
|
10
|
-
baseCredentials: {
|
11
|
-
roleArn: 'arn:aws:iam::<accountid>:role/<rolename>',
|
12
|
-
externalId: 'wave123'
|
13
|
-
}
|
14
|
-
},
|
15
|
-
metricFilterRegex: '^aws.(sqs|ec2|ebs|elb).*$'
|
16
|
-
}.freeze
|
4
|
+
require_relative '../test_mixins/general'
|
17
5
|
|
18
6
|
# Unit tests for CloudIntegration class
|
19
7
|
#
|
20
8
|
class WavefrontCloudIntegrationTest < WavefrontTestBase
|
21
|
-
|
22
|
-
|
23
|
-
|
9
|
+
include WavefrontTest::List
|
10
|
+
include WavefrontTest::Create
|
11
|
+
include WavefrontTest::Describe
|
12
|
+
include WavefrontTest::Update
|
13
|
+
include WavefrontTest::DeleteUndelete
|
14
|
+
|
15
|
+
def test_update
|
16
|
+
assert_puts("/api/v2/cloudintegration/#{id}", payload) do
|
17
|
+
wf.update(id, payload)
|
18
|
+
end
|
24
19
|
|
25
|
-
|
26
|
-
|
27
|
-
CLOUD_BODY.to_json)
|
28
|
-
assert_raises(ArgumentError) { wf.create }
|
29
|
-
assert_raises(ArgumentError) { wf.create('test') }
|
20
|
+
assert_invalid_id { wf.update(invalid_id, payload) }
|
21
|
+
assert_raises(ArgumentError) { wf.update }
|
30
22
|
end
|
31
23
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
24
|
+
def test_enable
|
25
|
+
assert_posts("/api/v2/cloudintegration/#{id}/enable") { wf.enable(id) }
|
26
|
+
assert_invalid_id { wf.enable(invalid_id) }
|
27
|
+
assert_raises(ArgumentError) { wf.enable }
|
35
28
|
end
|
36
29
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
30
|
+
def test_disable
|
31
|
+
assert_posts("/api/v2/cloudintegration/#{id}/disable") do
|
32
|
+
wf.disable(id)
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_invalid_id { wf.disable(invalid_id) }
|
36
|
+
assert_raises(ArgumentError) { wf.disable }
|
40
37
|
end
|
41
38
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
assert_raises(ArgumentError) { wf.update }
|
39
|
+
private
|
40
|
+
|
41
|
+
def id
|
42
|
+
'3b56f61d-1a79-46f6-905c-d75a0f613d10'
|
47
43
|
end
|
48
44
|
|
49
|
-
def
|
50
|
-
|
51
|
-
POST_HEADERS)
|
52
|
-
should_be_invalid(:undelete)
|
45
|
+
def invalid_id
|
46
|
+
'__rubbish__'
|
53
47
|
end
|
54
48
|
|
55
|
-
def
|
56
|
-
|
57
|
-
|
58
|
-
|
49
|
+
def payload
|
50
|
+
{ name: 'SDK test Cloudwatch Integration',
|
51
|
+
service: 'CLOUDWATCH',
|
52
|
+
cloudWatch: {
|
53
|
+
baseCredentials: {
|
54
|
+
roleArn: 'arn:aws:iam::<accountid>:role/<rolename>',
|
55
|
+
externalId: 'wave123'
|
56
|
+
}
|
57
|
+
},
|
58
|
+
metricFilterRegex: '^aws.(sqs|ec2|ebs|elb).*$' }
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
62
|
-
|
63
|
-
POST_HEADERS)
|
64
|
-
should_be_invalid(:enable)
|
61
|
+
def api_class
|
62
|
+
'cloudintegration'
|
65
63
|
end
|
66
64
|
end
|
@@ -1,95 +1,76 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require_relative '../spec_helper'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
id: 'sdk-test',
|
9
|
-
description: 'dummy test dashboard',
|
10
|
-
sections: [
|
11
|
-
name: 'Section 1',
|
12
|
-
rows: [
|
13
|
-
{ charts: [
|
14
|
-
name: 'S1 Chart1',
|
15
|
-
description: 'chart',
|
16
|
-
sources: [
|
17
|
-
{ name: 'S1 C1 Source 1',
|
18
|
-
query: 'ts("some.series")' }
|
19
|
-
]
|
20
|
-
] }
|
21
|
-
]
|
22
|
-
]
|
23
|
-
}.freeze
|
4
|
+
require_relative '../test_mixins/acl'
|
5
|
+
require_relative '../test_mixins/tag'
|
6
|
+
require_relative '../test_mixins/update_keys'
|
7
|
+
require_relative '../test_mixins/general'
|
24
8
|
|
25
9
|
# Unit tests for dashboard class
|
26
10
|
#
|
27
11
|
class WavefrontDashboardTest < WavefrontTestBase
|
28
|
-
|
29
|
-
|
30
|
-
|
12
|
+
include WavefrontTest::Acl
|
13
|
+
include WavefrontTest::Create
|
14
|
+
include WavefrontTest::DeleteUndelete
|
15
|
+
include WavefrontTest::Describe
|
16
|
+
include WavefrontTest::History
|
17
|
+
include WavefrontTest::List
|
18
|
+
include WavefrontTest::Tag
|
19
|
+
include WavefrontTest::Update
|
20
|
+
include WavefrontTest::UpdateKeys
|
31
21
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
assert_raises(ArgumentError) { wf.
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
def test_describe
|
40
|
-
should_work(:describe, DASHBOARD, DASHBOARD)
|
41
|
-
assert_raises(ArgumentError) { wf.describe }
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_describe_v
|
45
|
-
should_work(:describe, [DASHBOARD, 4], "#{DASHBOARD}/history/4")
|
22
|
+
def test_favorite
|
23
|
+
assert_posts("/api/v2/dashboard/#{id}/favorite") { wf.favorite(id) }
|
24
|
+
assert_invalid_id { wf.favorite(invalid_id) }
|
25
|
+
assert_raises(ArgumentError) { wf.favorite }
|
26
|
+
assert_posts("/api/v2/dashboard/#{id}/favorite") { wf.favourite(id) }
|
27
|
+
assert_invalid_id { wf.favourite(invalid_id) }
|
28
|
+
assert_raises(ArgumentError) { wf.favourite }
|
46
29
|
end
|
47
30
|
|
48
|
-
def
|
49
|
-
|
50
|
-
|
51
|
-
|
31
|
+
def test_unfavorite
|
32
|
+
assert_posts("/api/v2/dashboard/#{id}/unfavorite") { wf.unfavorite(id) }
|
33
|
+
assert_invalid_id { wf.unfavorite(invalid_id) }
|
34
|
+
assert_raises(ArgumentError) { wf.unfavorite }
|
52
35
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
DASHBOARD_BODY.to_json)
|
57
|
-
should_be_invalid(:update, ['!invalid dash!', DASHBOARD_BODY])
|
58
|
-
assert_raises(ArgumentError) { wf.update }
|
59
|
-
end
|
36
|
+
assert_posts("/api/v2/dashboard/#{id}/unfavorite") do
|
37
|
+
wf.unfavourite(id)
|
38
|
+
end
|
60
39
|
|
61
|
-
|
62
|
-
|
63
|
-
nil], :post, POST_HEADERS)
|
64
|
-
should_work(:favourite, DASHBOARD, ["#{DASHBOARD}/favorite",
|
65
|
-
nil], :post, POST_HEADERS)
|
66
|
-
should_be_invalid(:favorite)
|
40
|
+
assert_invalid_id { wf.unfavourite(invalid_id) }
|
41
|
+
assert_raises(ArgumentError) { wf.unfavourite }
|
67
42
|
end
|
68
43
|
|
69
|
-
|
70
|
-
should_work(:history, DASHBOARD, "#{DASHBOARD}/history")
|
71
|
-
should_be_invalid(:history)
|
72
|
-
end
|
44
|
+
private
|
73
45
|
|
74
|
-
def
|
75
|
-
|
46
|
+
def api_class
|
47
|
+
'dashboard'
|
76
48
|
end
|
77
49
|
|
78
|
-
def
|
79
|
-
|
50
|
+
def id
|
51
|
+
'test_dashboard'
|
80
52
|
end
|
81
53
|
|
82
|
-
def
|
83
|
-
|
84
|
-
nil], :post, POST_HEADERS)
|
85
|
-
should_be_invalid(:undelete)
|
54
|
+
def invalid_id
|
55
|
+
'a bad dashboard name'
|
86
56
|
end
|
87
57
|
|
88
|
-
def
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
58
|
+
def payload
|
59
|
+
{ name: 'SDK Dashboard test',
|
60
|
+
id: 'sdk-test',
|
61
|
+
description: 'dummy test dashboard',
|
62
|
+
sections: [
|
63
|
+
name: 'Section 1',
|
64
|
+
rows: [
|
65
|
+
{ charts: [
|
66
|
+
name: 'S1 Chart1',
|
67
|
+
description: 'chart',
|
68
|
+
sources: [
|
69
|
+
{ name: 'S1 C1 Source 1',
|
70
|
+
query: 'ts("some.series")' }
|
71
|
+
]
|
72
|
+
] }
|
73
|
+
]
|
74
|
+
] }
|
94
75
|
end
|
95
76
|
end
|
@@ -1,66 +1,40 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require_relative '../spec_helper'
|
4
|
-
|
5
|
-
|
6
|
-
DERIVED_METRIC_BODY = {
|
7
|
-
minutes: 5,
|
8
|
-
name: 'test_1',
|
9
|
-
query: 'aliasMetric(ts("test.metric"), "derived.test_1")',
|
10
|
-
tags: { customerTags: ['test'] },
|
11
|
-
includeObsoleteMetrics: false,
|
12
|
-
processRateMinutes: 1
|
13
|
-
}.freeze
|
4
|
+
require_relative '../test_mixins/general'
|
5
|
+
require_relative '../test_mixins/tag'
|
14
6
|
|
15
7
|
# Unit tests for derived metric class
|
16
8
|
#
|
17
9
|
class WavefrontDerivedMetricTest < WavefrontTestBase
|
18
|
-
|
19
|
-
|
20
|
-
|
10
|
+
include WavefrontTest::Create
|
11
|
+
include WavefrontTest::DeleteUndelete
|
12
|
+
include WavefrontTest::Describe
|
13
|
+
include WavefrontTest::History
|
14
|
+
include WavefrontTest::List
|
15
|
+
include WavefrontTest::Tag
|
16
|
+
include WavefrontTest::Update
|
21
17
|
|
22
|
-
|
23
|
-
should_work(:create, DERIVED_METRIC_BODY, '', :post,
|
24
|
-
JSON_POST_HEADERS, DERIVED_METRIC_BODY.to_json)
|
25
|
-
assert_raises(ArgumentError) { wf.create }
|
26
|
-
assert_raises(ArgumentError) { wf.create('test') }
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_describe
|
30
|
-
should_work(:describe, DERIVED_METRIC, DERIVED_METRIC)
|
31
|
-
assert_raises(ArgumentError) { wf.describe }
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_describe_v
|
35
|
-
should_work(:describe, [DERIVED_METRIC, 4], "#{DERIVED_METRIC}/history/4")
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_delete
|
39
|
-
should_work(:delete, DERIVED_METRIC, DERIVED_METRIC, :delete)
|
40
|
-
should_be_invalid(:delete)
|
41
|
-
end
|
18
|
+
private
|
42
19
|
|
43
|
-
def
|
44
|
-
|
45
|
-
should_be_invalid(:history)
|
20
|
+
def id
|
21
|
+
'1529926075038'
|
46
22
|
end
|
47
23
|
|
48
|
-
def
|
49
|
-
|
50
|
-
DERIVED_METRIC, :put, JSON_POST_HEADERS,
|
51
|
-
DERIVED_METRIC_BODY.to_json)
|
52
|
-
should_be_invalid(:update, ['!invalid derived metric!',
|
53
|
-
DERIVED_METRIC_BODY])
|
54
|
-
assert_raises(ArgumentError) { wf.update }
|
24
|
+
def invalid_id
|
25
|
+
'! invalid derived metric !'
|
55
26
|
end
|
56
27
|
|
57
|
-
def
|
58
|
-
|
28
|
+
def payload
|
29
|
+
{ minutes: 5,
|
30
|
+
name: 'test_1',
|
31
|
+
query: 'aliasMetric(ts("test.metric"), "derived.test_1")',
|
32
|
+
tags: { customerTags: ['test'] },
|
33
|
+
includeObsoleteMetrics: false,
|
34
|
+
processRateMinutes: 1 }
|
59
35
|
end
|
60
36
|
|
61
|
-
def
|
62
|
-
|
63
|
-
nil], :post, POST_HEADERS)
|
64
|
-
should_be_invalid(:undelete)
|
37
|
+
def api_class
|
38
|
+
'derivedmetric'
|
65
39
|
end
|
66
40
|
end
|
@@ -3,20 +3,11 @@
|
|
3
3
|
require_relative '../spec_helper'
|
4
4
|
require_relative '../../lib/wavefront-sdk/distribution'
|
5
5
|
|
6
|
-
DIST = {
|
7
|
-
interval: :m,
|
8
|
-
path: 'test.distribution',
|
9
|
-
value: [[5, 11], [15, 2.533], [8, -15], [12, 1e6]],
|
10
|
-
ts: 1_538_865_613,
|
11
|
-
source: 'minitest',
|
12
|
-
tags: { tag1: 'val1', tag2: 'val2' }
|
13
|
-
}.freeze
|
14
|
-
|
15
6
|
# Most of the distribution methods are inherited from the Write
|
16
7
|
# class so they aren't tested again here.
|
17
8
|
#
|
18
9
|
class WavefrontDistributionTest < MiniTest::Test
|
19
|
-
attr_reader :wf
|
10
|
+
attr_reader :wf
|
20
11
|
|
21
12
|
def setup
|
22
13
|
@wf = Wavefront::Distribution.new(W_CREDS)
|
@@ -39,19 +30,19 @@ class WavefrontDistributionTest < MiniTest::Test
|
|
39
30
|
end
|
40
31
|
|
41
32
|
def test_hash_to_wf
|
42
|
-
assert_equal(wf.hash_to_wf(
|
33
|
+
assert_equal(wf.hash_to_wf(distribution),
|
43
34
|
'!M 1538865613 #5 11 #15 2.533 #8 -15 #12 1000000.0 ' \
|
44
35
|
'test.distribution source=minitest ' \
|
45
36
|
'tag1="val1" tag2="val2"')
|
46
37
|
|
47
|
-
d2 =
|
38
|
+
d2 = distribution.dup
|
48
39
|
d2[:tags] = {}
|
49
40
|
|
50
41
|
assert_equal(wf.hash_to_wf(d2),
|
51
42
|
'!M 1538865613 #5 11 #15 2.533 #8 -15 #12 1000000.0 ' \
|
52
43
|
'test.distribution source=minitest')
|
53
44
|
|
54
|
-
d3 =
|
45
|
+
d3 = distribution.dup
|
55
46
|
d3[:ts] = Time.at(1_538_865_613)
|
56
47
|
d3 = d3.tap { |d| d.delete(:source) }
|
57
48
|
|
@@ -60,7 +51,7 @@ class WavefrontDistributionTest < MiniTest::Test
|
|
60
51
|
"test.distribution source=#{Socket.gethostname} " \
|
61
52
|
'tag1="val1" tag2="val2"')
|
62
53
|
|
63
|
-
bad_dist =
|
54
|
+
bad_dist = distribution.dup
|
64
55
|
bad_dist.delete(:interval)
|
65
56
|
|
66
57
|
assert_raises(Wavefront::Exception::InvalidDistribution) do
|
@@ -72,4 +63,13 @@ class WavefrontDistributionTest < MiniTest::Test
|
|
72
63
|
assert_equal(wf.array2dist([[1, 4], [6, 5]]), '#1 4 #6 5')
|
73
64
|
assert_equal(wf.array2dist([[12, 4.235]]), '#12 4.235')
|
74
65
|
end
|
66
|
+
|
67
|
+
def distribution
|
68
|
+
{ interval: :m,
|
69
|
+
path: 'test.distribution',
|
70
|
+
value: [[5, 11], [15, 2.533], [8, -15], [12, 1e6]],
|
71
|
+
ts: 1_538_865_613,
|
72
|
+
source: 'minitest',
|
73
|
+
tags: { tag1: 'val1', tag2: 'val2' } }
|
74
|
+
end
|
75
75
|
end
|