wavefront-sdk 3.3.3 → 3.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -17
- data/Gemfile +2 -0
- data/HISTORY.md +4 -0
- data/Rakefile +2 -0
- data/lib/wavefront-sdk/alert.rb +5 -2
- data/lib/wavefront-sdk/api_mixins/acl.rb +3 -0
- data/lib/wavefront-sdk/api_mixins/tag.rb +2 -0
- data/lib/wavefront-sdk/api_mixins/user.rb +4 -0
- data/lib/wavefront-sdk/apitoken.rb +2 -0
- data/lib/wavefront-sdk/cloudintegration.rb +4 -0
- data/lib/wavefront-sdk/core/api.rb +3 -0
- data/lib/wavefront-sdk/core/api_caller.rb +16 -10
- data/lib/wavefront-sdk/core/exception.rb +2 -0
- data/lib/wavefront-sdk/core/logger.rb +6 -3
- data/lib/wavefront-sdk/core/response.rb +6 -3
- data/lib/wavefront-sdk/credentials.rb +5 -2
- data/lib/wavefront-sdk/dashboard.rb +3 -0
- data/lib/wavefront-sdk/defs/constants.rb +3 -1
- data/lib/wavefront-sdk/defs/version.rb +3 -1
- data/lib/wavefront-sdk/derivedmetric.rb +3 -0
- data/lib/wavefront-sdk/distribution.rb +36 -16
- data/lib/wavefront-sdk/event.rb +16 -12
- data/lib/wavefront-sdk/externallink.rb +3 -0
- data/lib/wavefront-sdk/integration.rb +2 -0
- data/lib/wavefront-sdk/maintenancewindow.rb +4 -1
- data/lib/wavefront-sdk/message.rb +2 -0
- data/lib/wavefront-sdk/metric.rb +3 -0
- data/lib/wavefront-sdk/metric_helper.rb +6 -4
- data/lib/wavefront-sdk/notificant.rb +3 -0
- data/lib/wavefront-sdk/paginator/base.rb +5 -0
- data/lib/wavefront-sdk/paginator/delete.rb +2 -0
- data/lib/wavefront-sdk/paginator/get.rb +2 -0
- data/lib/wavefront-sdk/paginator/post.rb +2 -0
- data/lib/wavefront-sdk/paginator/put.rb +2 -0
- data/lib/wavefront-sdk/proxy.rb +2 -0
- data/lib/wavefront-sdk/query.rb +6 -3
- data/lib/wavefront-sdk/report.rb +2 -0
- data/lib/wavefront-sdk/savedsearch.rb +4 -0
- data/lib/wavefront-sdk/search.rb +4 -1
- data/lib/wavefront-sdk/settings.rb +2 -0
- data/lib/wavefront-sdk/source.rb +3 -0
- data/lib/wavefront-sdk/stdlib/array.rb +2 -0
- data/lib/wavefront-sdk/stdlib/hash.rb +5 -1
- data/lib/wavefront-sdk/stdlib/string.rb +2 -0
- data/lib/wavefront-sdk/support/mixins.rb +5 -1
- data/lib/wavefront-sdk/support/parse_time.rb +3 -0
- data/lib/wavefront-sdk/types/status.rb +4 -0
- data/lib/wavefront-sdk/user.rb +18 -8
- data/lib/wavefront-sdk/usergroup.rb +3 -0
- data/lib/wavefront-sdk/validators.rb +28 -0
- data/lib/wavefront-sdk/webhook.rb +3 -0
- data/lib/wavefront-sdk/write.rb +43 -28
- data/lib/wavefront-sdk/writers/api.rb +2 -0
- data/lib/wavefront-sdk/writers/core.rb +21 -4
- data/lib/wavefront-sdk/writers/http.rb +9 -2
- data/lib/wavefront-sdk/writers/socket.rb +11 -9
- data/lib/wavefront-sdk/writers/summary.rb +2 -0
- data/lib/wavefront-sdk/writers/unix.rb +10 -7
- data/lib/wavefront_sdk.rb +3 -1
- data/spec/.rubocop.yml +10 -14
- data/spec/constants.rb +10 -8
- data/spec/spec_helper.rb +2 -0
- data/spec/support/bad_mocket.rb +2 -0
- data/spec/support/hash.rb +2 -0
- data/spec/support/minitest_assertions.rb +2 -0
- data/spec/support/mocket.rb +2 -0
- data/spec/test_mixins/acl.rb +2 -0
- data/spec/test_mixins/general.rb +2 -0
- data/spec/test_mixins/tag.rb +2 -0
- data/spec/test_mixins/update_keys.rb +2 -0
- data/spec/wavefront-sdk/alert_spec.rb +10 -9
- data/spec/wavefront-sdk/api_mixins/user_mixins_spec.rb +1 -0
- data/spec/wavefront-sdk/apitoken_spec.rb +1 -0
- data/spec/wavefront-sdk/cloudintegration_spec.rb +2 -1
- data/spec/wavefront-sdk/core/api_caller_spec.rb +1 -0
- data/spec/wavefront-sdk/core/api_spec.rb +1 -0
- data/spec/wavefront-sdk/core/logger_spec.rb +1 -0
- data/spec/wavefront-sdk/core/response_spec.rb +4 -3
- data/spec/wavefront-sdk/credentials_spec.rb +1 -0
- data/spec/wavefront-sdk/dashboard_spec.rb +1 -0
- data/spec/wavefront-sdk/derivedmetric_spec.rb +1 -0
- data/spec/wavefront-sdk/distribution_spec.rb +6 -5
- data/spec/wavefront-sdk/event_spec.rb +8 -7
- data/spec/wavefront-sdk/externallink_spec.rb +5 -4
- data/spec/wavefront-sdk/integration_spec.rb +1 -0
- data/spec/wavefront-sdk/maintenancewindow_spec.rb +6 -5
- data/spec/wavefront-sdk/message_spec.rb +2 -1
- data/spec/wavefront-sdk/metric_helper_spec.rb +10 -9
- data/spec/wavefront-sdk/metric_spec.rb +1 -0
- data/spec/wavefront-sdk/notificant_spec.rb +1 -0
- data/spec/wavefront-sdk/paginator/base_spec.rb +1 -0
- data/spec/wavefront-sdk/paginator/post_spec.rb +1 -0
- data/spec/wavefront-sdk/proxy_spec.rb +1 -0
- data/spec/wavefront-sdk/query_spec.rb +1 -0
- data/spec/wavefront-sdk/report_spec.rb +1 -0
- data/spec/wavefront-sdk/resources/dummy_points.rb +10 -8
- data/spec/wavefront-sdk/savedsearch_spec.rb +1 -0
- data/spec/wavefront-sdk/search_spec.rb +5 -4
- data/spec/wavefront-sdk/settings_spec.rb +1 -0
- data/spec/wavefront-sdk/source_spec.rb +3 -2
- data/spec/wavefront-sdk/stdlib/array_spec.rb +1 -0
- data/spec/wavefront-sdk/stdlib/hash_spec.rb +1 -0
- data/spec/wavefront-sdk/stdlib/string_spec.rb +1 -0
- data/spec/wavefront-sdk/support/mixins_spec.rb +1 -0
- data/spec/wavefront-sdk/support/parse_time_spec.rb +1 -2
- data/spec/wavefront-sdk/user_spec.rb +1 -0
- data/spec/wavefront-sdk/usergroup_spec.rb +2 -1
- data/spec/wavefront-sdk/validators_spec.rb +1 -2
- data/spec/wavefront-sdk/webhook_spec.rb +7 -6
- data/spec/wavefront-sdk/write_spec.rb +50 -30
- data/spec/wavefront-sdk/writers/api_spec.rb +1 -0
- data/spec/wavefront-sdk/writers/core_spec.rb +1 -0
- data/spec/wavefront-sdk/writers/http_spec.rb +2 -1
- data/spec/wavefront-sdk/writers/socket_spec.rb +1 -0
- data/spec/wavefront-sdk/writers/summary_spec.rb +1 -0
- data/wavefront-sdk.gemspec +4 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69e5b7ef712204907db606287f0d84d3c89a2784e9d8edbc53415b2277311081
|
4
|
+
data.tar.gz: e1f7e4c28c8c1d42194cff7c5ce6a5ec55b25dd838883159fba2b8e2a0faa6ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c55603c0db5ad279802221f3f7eb945e04f861743fb9599c4bbd97e03d51ca6902956ac9aa35202ef1271a6a0d13ee9d96d8cd26b0f89eb81192d2b65772b33
|
7
|
+
data.tar.gz: 2e922eb985d685075076ad3da8100296ae891fb645f00211b8ddb4a03b05f16708ed3f8a5a45761277cebec2394a3bc00cbf63b76b70291e94e456f10cb442cb
|
data/.rubocop.yml
CHANGED
@@ -1,22 +1,7 @@
|
|
1
1
|
---
|
2
|
+
|
2
3
|
AllCops:
|
3
|
-
DisplayStyleGuide: true
|
4
4
|
TargetRubyVersion: 2.3
|
5
5
|
|
6
|
-
Style/FrozenStringLiteralComment:
|
7
|
-
Enabled: false
|
8
|
-
|
9
|
-
Style/FormatStringToken:
|
10
|
-
Enabled: false
|
11
|
-
|
12
6
|
Metrics/ClassLength:
|
13
|
-
|
14
|
-
|
15
|
-
Metrics/MethodLength:
|
16
|
-
Max: 13
|
17
|
-
|
18
|
-
Style/DoubleNegation:
|
19
|
-
Enabled: false
|
20
|
-
|
21
|
-
Style/NumericLiterals:
|
22
|
-
Enabled: false
|
7
|
+
Max: 124
|
data/Gemfile
CHANGED
data/HISTORY.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 3.3.4 (2019-09-18)
|
4
|
+
* Upgrade Rubocop dev dependency to 0.74.0, and make codebase compliant with
|
5
|
+
those standards. No interfaces are changed.
|
6
|
+
|
3
7
|
## 3.3.3 (2019-09-10)
|
4
8
|
* Fix slightly misleading verbose message when using recursive or
|
5
9
|
lazy calls
|
data/Rakefile
CHANGED
data/lib/wavefront-sdk/alert.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'defs/constants'
|
2
4
|
require_relative 'core/api'
|
3
5
|
require_relative 'api_mixins/acl'
|
@@ -38,6 +40,7 @@ module Wavefront
|
|
38
40
|
#
|
39
41
|
def create(body)
|
40
42
|
raise ArgumentError unless body.is_a?(Hash)
|
43
|
+
|
41
44
|
api.post('', body, 'application/json')
|
42
45
|
end
|
43
46
|
|
@@ -120,9 +123,9 @@ module Wavefront
|
|
120
123
|
wf_version?(version) if version
|
121
124
|
|
122
125
|
api.post([id, 'clone'].uri_concat,
|
123
|
-
{ id:
|
126
|
+
{ id: id,
|
124
127
|
name: nil,
|
125
|
-
v:
|
128
|
+
v: version }, 'application/json')
|
126
129
|
end
|
127
130
|
|
128
131
|
# GET /api/v2/alert/id/history
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Wavefront
|
2
4
|
module Mixin
|
3
5
|
#
|
@@ -10,6 +12,7 @@ module Wavefront
|
|
10
12
|
#
|
11
13
|
def validate_user_list(list)
|
12
14
|
raise ArgumentError unless list.is_a?(Array)
|
15
|
+
|
13
16
|
list.each { |id| wf_user_id?(id) }
|
14
17
|
end
|
15
18
|
|
@@ -19,6 +22,7 @@ module Wavefront
|
|
19
22
|
#
|
20
23
|
def validate_usergroup_list(list)
|
21
24
|
raise ArgumentError unless list.is_a?(Array)
|
25
|
+
|
22
26
|
list.each { |id| wf_usergroup_id?(id) }
|
23
27
|
end
|
24
28
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'core/api'
|
2
4
|
|
3
5
|
module Wavefront
|
@@ -26,6 +28,7 @@ module Wavefront
|
|
26
28
|
#
|
27
29
|
def create(body)
|
28
30
|
raise ArgumentError unless body.is_a?(Hash)
|
31
|
+
|
29
32
|
api.post('', body, 'application/json')
|
30
33
|
end
|
31
34
|
|
@@ -64,6 +67,7 @@ module Wavefront
|
|
64
67
|
def update(id, body)
|
65
68
|
wf_cloudintegration_id?(id)
|
66
69
|
raise ArgumentError unless body.is_a?(Hash)
|
70
|
+
|
67
71
|
api.put(id, body)
|
68
72
|
end
|
69
73
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'logger'
|
2
4
|
require_relative 'api_caller'
|
3
5
|
require_relative 'exception'
|
@@ -75,6 +77,7 @@ module Wavefront
|
|
75
77
|
def time_to_ms(time)
|
76
78
|
return false unless time.is_a?(Integer)
|
77
79
|
return time if time.to_s.size == 13
|
80
|
+
|
78
81
|
(time.to_f * 1000).round
|
79
82
|
end
|
80
83
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
require 'faraday'
|
3
5
|
require 'addressable'
|
@@ -45,9 +47,11 @@ module Wavefront
|
|
45
47
|
# @return [URI::HTTPS]
|
46
48
|
#
|
47
49
|
def mk_conn(path, headers = {}, opts = {})
|
48
|
-
url = format('
|
49
|
-
|
50
|
-
|
50
|
+
url = format('%<scheme>s://%<endpoint>s%<path>s',
|
51
|
+
scheme: net[:scheme],
|
52
|
+
endpoint: net[:endpoint],
|
53
|
+
path: [net[:api_base], path].uri_concat)
|
54
|
+
set_opts = { url: Addressable::URI.encode(url),
|
51
55
|
headers: net[:headers].merge(headers) }
|
52
56
|
Faraday.new(set_opts.merge(opts))
|
53
57
|
end
|
@@ -79,7 +83,7 @@ module Wavefront
|
|
79
83
|
request: {
|
80
84
|
params_encoder: Faraday::FlatParamsEncoder
|
81
85
|
},
|
82
|
-
params:
|
86
|
+
params: query)
|
83
87
|
|
84
88
|
make_call(conn, :get)
|
85
89
|
end
|
@@ -149,7 +153,9 @@ module Wavefront
|
|
149
153
|
def verbosity(conn, method, *args)
|
150
154
|
return unless noop || verbose
|
151
155
|
|
152
|
-
log format('uri:
|
156
|
+
log format('uri: %<method>s %<path>s',
|
157
|
+
method: method.upcase,
|
158
|
+
path: conn.url_prefix)
|
153
159
|
|
154
160
|
return unless args.last && !args.last.empty?
|
155
161
|
|
@@ -160,8 +166,8 @@ module Wavefront
|
|
160
166
|
|
161
167
|
def paginator_class(method)
|
162
168
|
require_relative File.join('..', 'paginator', method.to_s)
|
163
|
-
Object.const_get(format('Wavefront::Paginator
|
164
|
-
method.to_s.capitalize))
|
169
|
+
Object.const_get(format('Wavefront::Paginator::%<method>s',
|
170
|
+
method: method.to_s.capitalize))
|
165
171
|
end
|
166
172
|
|
167
173
|
# A dispatcher for making API calls. We now have three methods
|
@@ -206,8 +212,8 @@ module Wavefront
|
|
206
212
|
creds[:agent] = "wavefront-sdk #{WF_SDK_VERSION}"
|
207
213
|
end
|
208
214
|
|
209
|
-
@net = { headers:
|
210
|
-
scheme:
|
215
|
+
@net = { headers: headers(creds),
|
216
|
+
scheme: opts[:scheme] || 'https',
|
211
217
|
endpoint: creds[:endpoint],
|
212
218
|
api_base: calling_class.api_path }
|
213
219
|
end
|
@@ -230,7 +236,7 @@ module Wavefront
|
|
230
236
|
%w[endpoint token].each do |k|
|
231
237
|
unless creds.key?(k.to_sym)
|
232
238
|
raise(Wavefront::Exception::CredentialError,
|
233
|
-
format('credentials must contain
|
239
|
+
format('credentials must contain %<key>s', key: k))
|
234
240
|
end
|
235
241
|
end
|
236
242
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Wavefront
|
2
4
|
#
|
3
5
|
# Log to a user-supplied Ruby logger, or to standard output.
|
@@ -30,19 +32,20 @@ module Wavefront
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def print_message(level, msg)
|
33
|
-
method = format('print_
|
35
|
+
method = format('print_%<level>s_message', level: level).to_sym
|
34
36
|
msg = format_message(level, msg)
|
35
37
|
|
36
38
|
if respond_to?(:method)
|
37
39
|
send(method, msg)
|
38
40
|
else
|
39
|
-
print_warn_message(format('undefined message level
|
41
|
+
print_warn_message(format('undefined message level:%<level>s',
|
42
|
+
level: level))
|
40
43
|
print_warn_message(msg)
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
47
|
def format_message(level, msg)
|
45
|
-
format('SDK
|
48
|
+
format('SDK %<level>s: %<msg>s', level: level.to_s.upcase, msg: msg)
|
46
49
|
end
|
47
50
|
|
48
51
|
def print_debug_message(msg)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
require 'map'
|
3
5
|
require_relative 'logger'
|
@@ -40,7 +42,7 @@ module Wavefront
|
|
40
42
|
@response = build_response(raw)
|
41
43
|
logger.log(self, :debug)
|
42
44
|
rescue StandardError => e
|
43
|
-
logger.log(format("could not parse:\n
|
45
|
+
logger.log(format("could not parse:\n%<str>s", str: json), :debug)
|
44
46
|
logger.log(e.message.to_s, :debug)
|
45
47
|
raise Wavefront::Exception::UnparseableResponse
|
46
48
|
end
|
@@ -64,8 +66,7 @@ module Wavefront
|
|
64
66
|
# @return [Bool]
|
65
67
|
#
|
66
68
|
def more_items?
|
67
|
-
|
68
|
-
!!response.moreItems
|
69
|
+
response.moreItems ? true : false
|
69
70
|
rescue StandardError
|
70
71
|
false
|
71
72
|
end
|
@@ -78,6 +79,7 @@ module Wavefront
|
|
78
79
|
def next_item
|
79
80
|
return nil unless more_items?
|
80
81
|
return response.cursor if response.respond_to?(:cursor)
|
82
|
+
|
81
83
|
response.offset + response.limit
|
82
84
|
rescue StandardError
|
83
85
|
nil
|
@@ -116,6 +118,7 @@ module Wavefront
|
|
116
118
|
return Map.new unless raw.is_a?(Hash)
|
117
119
|
return Map.new(raw) unless raw.key?(:response)
|
118
120
|
return raw[:response] unless raw[:response].is_a?(Hash)
|
121
|
+
|
119
122
|
Map(raw[:response])
|
120
123
|
end
|
121
124
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pathname'
|
2
4
|
require 'inifile'
|
3
5
|
require 'map'
|
@@ -45,8 +47,8 @@ module Wavefront
|
|
45
47
|
#
|
46
48
|
def env_override(raw)
|
47
49
|
{ endpoint: 'WAVEFRONT_ENDPOINT',
|
48
|
-
token:
|
49
|
-
proxy:
|
50
|
+
token: 'WAVEFRONT_TOKEN',
|
51
|
+
proxy: 'WAVEFRONT_PROXY' }.each { |k, v| raw[k] = ENV[v] if ENV[v] }
|
50
52
|
raw
|
51
53
|
end
|
52
54
|
|
@@ -88,6 +90,7 @@ module Wavefront
|
|
88
90
|
|
89
91
|
files.each do |f|
|
90
92
|
next unless f.exist? && f.file?
|
93
|
+
|
91
94
|
ret = load_profile(f, profile)
|
92
95
|
ret[:file] = f
|
93
96
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'core/api'
|
2
4
|
require_relative 'api_mixins/acl'
|
3
5
|
require_relative 'api_mixins/tag'
|
@@ -34,6 +36,7 @@ module Wavefront
|
|
34
36
|
#
|
35
37
|
def create(body)
|
36
38
|
raise ArgumentError unless body.is_a?(Hash)
|
39
|
+
|
37
40
|
api.post('', body, 'application/json')
|
38
41
|
end
|
39
42
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'core/api'
|
2
4
|
require_relative 'api_mixins/tag'
|
3
5
|
|
@@ -28,6 +30,7 @@ module Wavefront
|
|
28
30
|
#
|
29
31
|
def create(body)
|
30
32
|
raise ArgumentError unless body.is_a?(Hash)
|
33
|
+
|
31
34
|
api.post('', body, 'application/json')
|
32
35
|
end
|
33
36
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'write'
|
2
4
|
require_relative 'support/mixins'
|
3
5
|
|
@@ -38,39 +40,57 @@ module Wavefront
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def default_port
|
41
|
-
|
43
|
+
40_000
|
44
|
+
end
|
45
|
+
|
46
|
+
def data_format
|
47
|
+
:histogram
|
42
48
|
end
|
43
49
|
|
44
50
|
# Convert a validated point to a string conforming to
|
45
51
|
# https://docs.wavefront.com/proxies_histograms.html. No
|
46
52
|
# validation is done here.
|
47
53
|
#
|
48
|
-
# @param
|
54
|
+
# @param dist [Hash] a hash describing a distribution. See
|
49
55
|
# #write() for the format.
|
50
56
|
#
|
51
|
-
# rubocop:disable Metrics/AbcSize
|
52
57
|
def hash_to_wf(dist)
|
53
58
|
logger.log("writer subclass #{writer}", :debug)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
dist[:path] || raise,
|
61
|
-
dist.fetch(:source, HOSTNAME),
|
62
|
-
dist[:tags]&.to_wf_tag,
|
63
|
-
opts[:tags]&.to_wf_tag).squeeze(' ').strip
|
64
|
-
rescue StandardError
|
59
|
+
|
60
|
+
raise unless dist.key?(:interval) && dist.key?(:path)
|
61
|
+
|
62
|
+
format('!%<interval>s %<ts>i %<value>s %<path>s source=%<source>s ' \
|
63
|
+
'%<tags>s %<opttags>s', dist_hash(dist)).squeeze(' ').strip
|
64
|
+
rescue RuntimeError
|
65
65
|
raise Wavefront::Exception::InvalidDistribution
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
|
+
def dist_hash(dist)
|
69
|
+
dist.dup.tap do |d|
|
70
|
+
d[:interval] = distribution_interval(dist)
|
71
|
+
d[:ts] = distribution_timestamp(dist)
|
72
|
+
d[:value] = array2dist(dist[:value])
|
73
|
+
d[:source] ||= HOSTNAME
|
74
|
+
d[:tags] = tags_or_nothing(d[:tags])
|
75
|
+
d[:opttags] = tags_or_nothing(opts[:tags])
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def distribution_timestamp(dist)
|
80
|
+
parse_time(dist.fetch(:ts, Time.now))
|
81
|
+
end
|
82
|
+
|
83
|
+
def distribution_interval(dist)
|
84
|
+
dist[:interval].to_s.upcase
|
85
|
+
end
|
68
86
|
|
69
87
|
# Turn an array of arrays into a the values part of a distribution
|
70
88
|
# @return [String]
|
71
89
|
#
|
72
90
|
def array2dist(values)
|
73
|
-
values.map
|
91
|
+
values.map do |x, v|
|
92
|
+
format('#%<count>i %<value>s', count: x, value: v)
|
93
|
+
end.join(' ')
|
74
94
|
end
|
75
95
|
end
|
76
96
|
end
|