wavefront-sdk 1.6.0 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -2
- data/HISTORY.md +11 -0
- data/lib/wavefront-sdk/base.rb +31 -46
- data/lib/wavefront-sdk/base_write.rb +28 -29
- data/lib/wavefront-sdk/event.rb +11 -7
- data/lib/wavefront-sdk/exception.rb +1 -0
- data/lib/wavefront-sdk/externallink.rb +2 -1
- data/lib/wavefront-sdk/logger.rb +65 -0
- data/lib/wavefront-sdk/metric.rb +5 -6
- data/lib/wavefront-sdk/mixins.rb +16 -5
- data/lib/wavefront-sdk/response.rb +36 -25
- data/lib/wavefront-sdk/search.rb +2 -2
- data/lib/wavefront-sdk/stdlib/hash.rb +6 -1
- data/lib/wavefront-sdk/validators.rb +123 -115
- data/lib/wavefront-sdk/version.rb +1 -1
- data/lib/wavefront-sdk/write.rb +0 -1
- data/spec/wavefront-sdk/base_write_spec.rb +82 -0
- data/spec/wavefront-sdk/logger_spec.rb +62 -0
- data/spec/wavefront-sdk/mixins_spec.rb +17 -0
- data/spec/wavefront-sdk/resources/dummy_points.rb +20 -0
- data/spec/wavefront-sdk/write_spec.rb +3 -79
- data/wavefront-sdk.gemspec +1 -0
- metadata +9 -2
@@ -1 +1 @@
|
|
1
|
-
WF_SDK_VERSION = '1.6.
|
1
|
+
WF_SDK_VERSION = '1.6.1'.freeze
|
data/lib/wavefront-sdk/write.rb
CHANGED
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../../lib/wavefront-sdk/base_write.rb'
|
4
|
+
require_relative '../spec_helper'
|
5
|
+
require_relative 'resources/dummy_points'
|
6
|
+
|
7
|
+
# rubocop:disable Style/MutableConstant
|
8
|
+
WBWT_CREDS = { endpoint: 'stub.wavefront.com', token: 'tkn' }
|
9
|
+
# rubocop:enable Style/MutableConstant
|
10
|
+
|
11
|
+
class WavefrontBaseWriteTest < MiniTest::Test
|
12
|
+
attr_reader :wf, :wf_tags
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@wf = Wavefront::BaseWrite.new(WBWT_CREDS)
|
16
|
+
# @wf_noop = Wavefront::Write.new(W_CREDS, noop: true)
|
17
|
+
@wf_tags = Wavefront::BaseWrite.new(WBWT_CREDS, tags: TAGS)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_summary_string
|
21
|
+
assert_equal('OK', wf.summary_string(unsent: 0, rejected: 0))
|
22
|
+
assert_equal('ERROR', wf.summary_string(unsent: 0, rejected: 1))
|
23
|
+
assert_equal('ERROR', wf.summary_string(unsent: 1, rejected: 0))
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_prepped_points
|
27
|
+
assert_equal wf.prepped_points(%w[p1 p2 p3 p4]), %w[p1 p2 p3 p4]
|
28
|
+
assert_equal wf.prepped_points([%w[p1 p2 p3 p4]]), %w[p1 p2 p3 p4]
|
29
|
+
assert_equal wf.prepped_points('p1'), %w[p1]
|
30
|
+
assert_equal wf.prepped_points(
|
31
|
+
[{ path: 'p1' }, { path: 'p2' }, { path: 'p3' }], 'prefix'
|
32
|
+
),
|
33
|
+
[{ path: 'prefix.p1' }, { path: 'prefix.p2' },
|
34
|
+
{ path: 'prefix.p3' }]
|
35
|
+
|
36
|
+
assert_equal wf.prepped_points({ path: 'p1' }, 'prefix'),
|
37
|
+
[{ path: 'prefix.p1' }]
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_paths_to_deltas
|
41
|
+
x = wf.paths_to_deltas(POINTS.dup)
|
42
|
+
assert_equal(x.size, 2)
|
43
|
+
|
44
|
+
x.each do |p|
|
45
|
+
assert_instance_of(Hash, p)
|
46
|
+
assert(p[:path].start_with?(DELTA))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_hash_to_wf
|
51
|
+
assert_equal(wf.hash_to_wf(POINT),
|
52
|
+
'test.metric 123456 1469987572 ' \
|
53
|
+
'source=testhost t1="v1" t2="v2"')
|
54
|
+
assert_equal(wf_tags.hash_to_wf(POINT),
|
55
|
+
'test.metric 123456 1469987572 ' \
|
56
|
+
'source=testhost t1="v1" t2="v2" ' \
|
57
|
+
'gt1="gv1" gt2="gv2"')
|
58
|
+
|
59
|
+
p1 = POINT.dup
|
60
|
+
p1.delete(:ts)
|
61
|
+
assert_equal(wf.hash_to_wf(p1),
|
62
|
+
'test.metric 123456 source=testhost t1="v1" t2="v2"')
|
63
|
+
|
64
|
+
p2 = POINT.dup
|
65
|
+
p2.delete(:tags)
|
66
|
+
assert_equal(wf.hash_to_wf(p2),
|
67
|
+
'test.metric 123456 1469987572 source=testhost')
|
68
|
+
|
69
|
+
%i[value path].each do |k|
|
70
|
+
p3 = POINT.dup
|
71
|
+
p3.delete(k)
|
72
|
+
|
73
|
+
assert_raises(Wavefront::Exception::InvalidPoint) do
|
74
|
+
wf.hash_to_wf(p3)
|
75
|
+
end
|
76
|
+
|
77
|
+
assert_raises(Wavefront::Exception::InvalidPoint) do
|
78
|
+
wf_tags.hash_to_wf(p3)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require_relative '../spec_helper'
|
5
|
+
require_relative '../../lib/wavefront-sdk/logger'
|
6
|
+
|
7
|
+
# Test SDK logger class
|
8
|
+
#
|
9
|
+
class WavefrontLoggerTest < MiniTest::Test
|
10
|
+
attr_reader :wfl
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@wfl = Wavefront::Logger.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_format_message
|
17
|
+
assert_equal('SDK INFO: some text', wfl.format_message(:info,
|
18
|
+
'some text'))
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_log_no_logger_debug
|
22
|
+
l = Wavefront::Logger.new(debug: true)
|
23
|
+
assert_output("SDK DEBUG: my message\n") { l.log('my message', :debug) }
|
24
|
+
assert_output("SDK INFO: my message\n") { l.log('my message', :info) }
|
25
|
+
out, err = capture_io { l.log('my message', :error) }
|
26
|
+
assert_equal("SDK ERROR: my message\n", err)
|
27
|
+
assert_empty(out)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_log_no_logger_no_debug
|
31
|
+
l = Wavefront::Logger.new(debug: false, verbose: false)
|
32
|
+
assert_silent { l.log('my message', :debug) }
|
33
|
+
assert_output("SDK INFO: my message\n") { l.log('my message', :info) }
|
34
|
+
out, err = capture_io { l.log('my message', :error) }
|
35
|
+
assert_equal("SDK ERROR: my message\n", err)
|
36
|
+
assert_empty(out)
|
37
|
+
out, err = capture_io { l.log('my message', :warn) }
|
38
|
+
assert_equal("SDK WARN: my message\n", err)
|
39
|
+
assert_empty(out)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_log_logger_debug
|
43
|
+
l = Wavefront::Logger.new(logger: Logger.new(STDOUT))
|
44
|
+
out, err = capture_subprocess_io { l.log('my message', :debug) }
|
45
|
+
assert_match(/DEBUG -- : my message$/, out)
|
46
|
+
assert_empty(err)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_log_logger_info
|
50
|
+
l = Wavefront::Logger.new(logger: Logger.new(STDOUT))
|
51
|
+
out, err = capture_subprocess_io { l.log('my message', :info) }
|
52
|
+
assert_match(/INFO -- : my message$/, out)
|
53
|
+
assert_empty(err)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_log_logger_error
|
57
|
+
l = Wavefront::Logger.new(logger: Logger.new(STDOUT))
|
58
|
+
out, err = capture_subprocess_io { l.log('my message', :error) }
|
59
|
+
assert_match(/ERROR -- : my message$/, out)
|
60
|
+
assert_empty(err)
|
61
|
+
end
|
62
|
+
end
|
@@ -55,6 +55,23 @@ class WavefrontMixinsTest < MiniTest::Test
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
def test_valid_relative_time?
|
59
|
+
assert valid_relative_time?('+1h')
|
60
|
+
assert valid_relative_time?('+1m')
|
61
|
+
assert valid_relative_time?('-1s')
|
62
|
+
assert valid_relative_time?('-10d')
|
63
|
+
assert valid_relative_time?('+1.3h')
|
64
|
+
assert valid_relative_time?('+1h')
|
65
|
+
assert valid_relative_time?('-1h')
|
66
|
+
assert valid_relative_time?('-1.142w')
|
67
|
+
assert valid_relative_time?('+0.002y')
|
68
|
+
refute valid_relative_time?('1h')
|
69
|
+
refute valid_relative_time?('1m')
|
70
|
+
refute valid_relative_time?('-1t')
|
71
|
+
refute valid_relative_time?('-dd')
|
72
|
+
refute valid_relative_time?('-1.1.1d')
|
73
|
+
end
|
74
|
+
|
58
75
|
def test_parse_relative_time
|
59
76
|
assert_equal parse_relative_time('-5s'), -5
|
60
77
|
assert_equal parse_relative_time('-5s', true), -5000
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Constants used in the write tests
|
2
|
+
#
|
3
|
+
TAGS = { gt1: 'gv1', gt2: 'gv2' }.freeze
|
4
|
+
|
5
|
+
POINT = { path: 'test.metric',
|
6
|
+
value: 123_456,
|
7
|
+
ts: 1_469_987_572,
|
8
|
+
source: 'testhost',
|
9
|
+
tags: { t1: 'v1', t2: 'v2' } }.freeze
|
10
|
+
|
11
|
+
POINT_L = 'test.metric 123456 1469987572 source=testhost t1="v1" ' \
|
12
|
+
't2="v2"'.freeze
|
13
|
+
|
14
|
+
POINT_A = [POINT,
|
15
|
+
POINT.dup.update(ts: 1_469_987_588, value: 54_321)].freeze
|
16
|
+
|
17
|
+
POINTS = [POINT.dup, { path: 'test.other_metric',
|
18
|
+
value: 89,
|
19
|
+
ts: 1_469_987_572,
|
20
|
+
source: 'otherhost' }].freeze
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require_relative '../../lib/wavefront-sdk/write.rb'
|
4
|
+
require_relative 'resources/dummy_points'
|
4
5
|
require 'minitest/autorun'
|
5
6
|
require 'webmock/minitest'
|
6
7
|
require 'spy'
|
@@ -9,26 +10,6 @@ require 'socket'
|
|
9
10
|
|
10
11
|
W_CREDS = { proxy: 'wavefront', port: 2878 }.freeze
|
11
12
|
|
12
|
-
TAGS = { gt1: 'gv1', gt2: 'gv2' }.freeze
|
13
|
-
|
14
|
-
POINT = { path: 'test.metric',
|
15
|
-
value: 123_456,
|
16
|
-
ts: 1_469_987_572,
|
17
|
-
source: 'testhost',
|
18
|
-
tags: { t1: 'v1', t2: 'v2' } }.freeze
|
19
|
-
|
20
|
-
POINT_L = 'test.metric 123456 1469987572 source=testhost t1="v1" t2="v2"'.freeze
|
21
|
-
|
22
|
-
POINT_A = [
|
23
|
-
POINT, POINT.dup.update(ts: 1_469_987_588, value: 54_321)
|
24
|
-
].freeze
|
25
|
-
|
26
|
-
POINTS = [POINT.dup,
|
27
|
-
{ path: 'test.other_metric',
|
28
|
-
value: 89,
|
29
|
-
ts: 1_469_987_572,
|
30
|
-
source: 'otherhost' }].freeze
|
31
|
-
|
32
13
|
# This class is sufficiently different to the API calling classes
|
33
14
|
# that it doesn't use spec helper or inherit anything.
|
34
15
|
#
|
@@ -85,20 +66,6 @@ class WavefrontWriteTest < MiniTest::Test
|
|
85
66
|
assert mocket_spy.has_been_called?
|
86
67
|
end
|
87
68
|
|
88
|
-
def test_prepped_points
|
89
|
-
assert_equal wf.prepped_points(%w[p1 p2 p3 p4]), %w[p1 p2 p3 p4]
|
90
|
-
assert_equal wf.prepped_points([%w[p1 p2 p3 p4]]), %w[p1 p2 p3 p4]
|
91
|
-
assert_equal wf.prepped_points('p1'), %w[p1]
|
92
|
-
assert_equal wf.prepped_points(
|
93
|
-
[{ path: 'p1' }, { path: 'p2' }, { path: 'p3' }], 'prefix'
|
94
|
-
),
|
95
|
-
[{ path: 'prefix.p1' }, { path: 'prefix.p2' },
|
96
|
-
{ path: 'prefix.p3' }]
|
97
|
-
|
98
|
-
assert_equal wf.prepped_points({ path: 'p1' }, 'prefix'),
|
99
|
-
[{ path: 'prefix.p1' }]
|
100
|
-
end
|
101
|
-
|
102
69
|
def test_write_array
|
103
70
|
mocket = Mocket.new
|
104
71
|
Spy.on(TCPSocket, :new).and_return(mocket)
|
@@ -108,55 +75,12 @@ class WavefrontWriteTest < MiniTest::Test
|
|
108
75
|
assert mocket_spy.has_been_called?
|
109
76
|
end
|
110
77
|
|
111
|
-
def
|
112
|
-
x = wf.paths_to_deltas(POINTS.dup)
|
113
|
-
assert_equal(x.size, 2)
|
114
|
-
|
115
|
-
x.each do |p|
|
116
|
-
assert_instance_of(Hash, p)
|
117
|
-
assert(p[:path].start_with?(DELTA))
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_hash_to_wf
|
122
|
-
assert_equal(wf.hash_to_wf(POINT),
|
123
|
-
'test.metric 123456 1469987572 ' \
|
124
|
-
'source=testhost t1="v1" t2="v2"')
|
125
|
-
assert_equal(wf_tags.hash_to_wf(POINT),
|
126
|
-
'test.metric 123456 1469987572 ' \
|
127
|
-
'source=testhost t1="v1" t2="v2" ' \
|
128
|
-
'gt1="gv1" gt2="gv2"')
|
129
|
-
|
130
|
-
p1 = POINT.dup
|
131
|
-
p1.delete(:ts)
|
132
|
-
assert_equal(wf.hash_to_wf(p1),
|
133
|
-
'test.metric 123456 source=testhost t1="v1" t2="v2"')
|
134
|
-
|
135
|
-
p2 = POINT.dup
|
136
|
-
p2.delete(:tags)
|
137
|
-
assert_equal(wf.hash_to_wf(p2),
|
138
|
-
'test.metric 123456 1469987572 source=testhost')
|
139
|
-
|
140
|
-
%i[value path].each do |k|
|
141
|
-
p3 = POINT.dup
|
142
|
-
p3.delete(k)
|
143
|
-
|
144
|
-
assert_raises(Wavefront::Exception::InvalidPoint) do
|
145
|
-
wf.hash_to_wf(p3)
|
146
|
-
end
|
147
|
-
|
148
|
-
assert_raises(Wavefront::Exception::InvalidPoint) do
|
149
|
-
wf_tags.hash_to_wf(p3)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
def test_send_point
|
78
|
+
def test_really_send_point
|
155
79
|
mocket = Mocket.new
|
156
80
|
Spy.on(TCPSocket, :new).and_return(mocket)
|
157
81
|
mocket_spy = Spy.on(mocket, :puts)
|
158
82
|
wf.open
|
159
|
-
wf.
|
83
|
+
wf.really_send_point(POINT_L)
|
160
84
|
assert mocket_spy.has_been_called_with?(POINT_L)
|
161
85
|
end
|
162
86
|
|
data/wavefront-sdk.gemspec
CHANGED
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: 1.6.
|
4
|
+
version: 1.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Fisher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -205,6 +205,7 @@ files:
|
|
205
205
|
- lib/wavefront-sdk/exception.rb
|
206
206
|
- lib/wavefront-sdk/externallink.rb
|
207
207
|
- lib/wavefront-sdk/integration.rb
|
208
|
+
- lib/wavefront-sdk/logger.rb
|
208
209
|
- lib/wavefront-sdk/maintenancewindow.rb
|
209
210
|
- lib/wavefront-sdk/message.rb
|
210
211
|
- lib/wavefront-sdk/metric.rb
|
@@ -232,6 +233,7 @@ files:
|
|
232
233
|
- spec/spec_helper.rb
|
233
234
|
- spec/wavefront-sdk/alert_spec.rb
|
234
235
|
- spec/wavefront-sdk/base_spec.rb
|
236
|
+
- spec/wavefront-sdk/base_write_spec.rb
|
235
237
|
- spec/wavefront-sdk/cloudintegration_spec.rb
|
236
238
|
- spec/wavefront-sdk/credentials_spec.rb
|
237
239
|
- spec/wavefront-sdk/dashboard_spec.rb
|
@@ -239,6 +241,7 @@ files:
|
|
239
241
|
- spec/wavefront-sdk/event_spec.rb
|
240
242
|
- spec/wavefront-sdk/externallink_spec.rb
|
241
243
|
- spec/wavefront-sdk/integration_spec.rb
|
244
|
+
- spec/wavefront-sdk/logger_spec.rb
|
242
245
|
- spec/wavefront-sdk/maintenancewindow_spec.rb
|
243
246
|
- spec/wavefront-sdk/message_spec.rb
|
244
247
|
- spec/wavefront-sdk/metric_spec.rb
|
@@ -248,6 +251,7 @@ files:
|
|
248
251
|
- spec/wavefront-sdk/proxy_spec.rb
|
249
252
|
- spec/wavefront-sdk/query_spec.rb
|
250
253
|
- spec/wavefront-sdk/report_spec.rb
|
254
|
+
- spec/wavefront-sdk/resources/dummy_points.rb
|
251
255
|
- spec/wavefront-sdk/resources/test.conf
|
252
256
|
- spec/wavefront-sdk/resources/test2.conf
|
253
257
|
- spec/wavefront-sdk/response_spec.rb
|
@@ -291,6 +295,7 @@ test_files:
|
|
291
295
|
- spec/spec_helper.rb
|
292
296
|
- spec/wavefront-sdk/alert_spec.rb
|
293
297
|
- spec/wavefront-sdk/base_spec.rb
|
298
|
+
- spec/wavefront-sdk/base_write_spec.rb
|
294
299
|
- spec/wavefront-sdk/cloudintegration_spec.rb
|
295
300
|
- spec/wavefront-sdk/credentials_spec.rb
|
296
301
|
- spec/wavefront-sdk/dashboard_spec.rb
|
@@ -298,6 +303,7 @@ test_files:
|
|
298
303
|
- spec/wavefront-sdk/event_spec.rb
|
299
304
|
- spec/wavefront-sdk/externallink_spec.rb
|
300
305
|
- spec/wavefront-sdk/integration_spec.rb
|
306
|
+
- spec/wavefront-sdk/logger_spec.rb
|
301
307
|
- spec/wavefront-sdk/maintenancewindow_spec.rb
|
302
308
|
- spec/wavefront-sdk/message_spec.rb
|
303
309
|
- spec/wavefront-sdk/metric_spec.rb
|
@@ -307,6 +313,7 @@ test_files:
|
|
307
313
|
- spec/wavefront-sdk/proxy_spec.rb
|
308
314
|
- spec/wavefront-sdk/query_spec.rb
|
309
315
|
- spec/wavefront-sdk/report_spec.rb
|
316
|
+
- spec/wavefront-sdk/resources/dummy_points.rb
|
310
317
|
- spec/wavefront-sdk/resources/test.conf
|
311
318
|
- spec/wavefront-sdk/resources/test2.conf
|
312
319
|
- spec/wavefront-sdk/response_spec.rb
|