wavefront-cli 4.2.1 → 4.3.0

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.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -0
  3. data/.rubocop.yml +1 -14
  4. data/.travis.yml +4 -4
  5. data/Gemfile +2 -0
  6. data/HISTORY.md +82 -60
  7. data/Rakefile +2 -0
  8. data/bin/wf +1 -0
  9. data/lib/wavefront-cli/alert.rb +13 -5
  10. data/lib/wavefront-cli/apitoken.rb +2 -0
  11. data/lib/wavefront-cli/base.rb +95 -47
  12. data/lib/wavefront-cli/cloudintegration.rb +6 -0
  13. data/lib/wavefront-cli/command_mixins/acl.rb +6 -1
  14. data/lib/wavefront-cli/command_mixins/tag.rb +2 -0
  15. data/lib/wavefront-cli/commands/.rubocop.yml +3 -4
  16. data/lib/wavefront-cli/commands/alert.rb +2 -1
  17. data/lib/wavefront-cli/commands/apitoken.rb +6 -0
  18. data/lib/wavefront-cli/commands/base.rb +30 -21
  19. data/lib/wavefront-cli/commands/cloudintegration.rb +2 -0
  20. data/lib/wavefront-cli/commands/config.rb +2 -0
  21. data/lib/wavefront-cli/commands/dashboard.rb +2 -0
  22. data/lib/wavefront-cli/commands/derivedmetric.rb +2 -0
  23. data/lib/wavefront-cli/commands/event.rb +3 -1
  24. data/lib/wavefront-cli/commands/integration.rb +2 -1
  25. data/lib/wavefront-cli/commands/link.rb +2 -0
  26. data/lib/wavefront-cli/commands/message.rb +2 -0
  27. data/lib/wavefront-cli/commands/metric.rb +2 -0
  28. data/lib/wavefront-cli/commands/notificant.rb +2 -0
  29. data/lib/wavefront-cli/commands/proxy.rb +2 -0
  30. data/lib/wavefront-cli/commands/query.rb +2 -0
  31. data/lib/wavefront-cli/commands/savedsearch.rb +2 -0
  32. data/lib/wavefront-cli/commands/serviceaccount.rb +58 -0
  33. data/lib/wavefront-cli/commands/settings.rb +2 -0
  34. data/lib/wavefront-cli/commands/source.rb +3 -1
  35. data/lib/wavefront-cli/commands/user.rb +4 -1
  36. data/lib/wavefront-cli/commands/usergroup.rb +3 -0
  37. data/lib/wavefront-cli/commands/webhook.rb +2 -0
  38. data/lib/wavefront-cli/commands/window.rb +2 -0
  39. data/lib/wavefront-cli/commands/write.rb +2 -0
  40. data/lib/wavefront-cli/config.rb +23 -12
  41. data/lib/wavefront-cli/constants.rb +10 -4
  42. data/lib/wavefront-cli/controller.rb +53 -22
  43. data/lib/wavefront-cli/dashboard.rb +3 -0
  44. data/lib/wavefront-cli/derivedmetric.rb +12 -11
  45. data/lib/wavefront-cli/display/alert.rb +7 -4
  46. data/lib/wavefront-cli/display/apitoken.rb +2 -0
  47. data/lib/wavefront-cli/display/base.rb +34 -8
  48. data/lib/wavefront-cli/display/cloudintegration.rb +4 -2
  49. data/lib/wavefront-cli/display/dashboard.rb +2 -0
  50. data/lib/wavefront-cli/display/derivedmetric.rb +2 -0
  51. data/lib/wavefront-cli/display/distribution.rb +2 -0
  52. data/lib/wavefront-cli/display/event.rb +2 -0
  53. data/lib/wavefront-cli/display/externallink.rb +2 -0
  54. data/lib/wavefront-cli/display/integration.rb +2 -0
  55. data/lib/wavefront-cli/display/maintenancewindow.rb +2 -0
  56. data/lib/wavefront-cli/display/message.rb +7 -3
  57. data/lib/wavefront-cli/display/metric.rb +3 -1
  58. data/lib/wavefront-cli/display/notificant.rb +3 -1
  59. data/lib/wavefront-cli/display/printer/long.rb +36 -11
  60. data/lib/wavefront-cli/display/printer/sparkline.rb +3 -0
  61. data/lib/wavefront-cli/display/printer/terse.rb +6 -1
  62. data/lib/wavefront-cli/display/proxy.rb +2 -0
  63. data/lib/wavefront-cli/display/query.rb +35 -24
  64. data/lib/wavefront-cli/display/savedsearch.rb +2 -0
  65. data/lib/wavefront-cli/display/serviceaccount.rb +60 -0
  66. data/lib/wavefront-cli/display/settings.rb +2 -0
  67. data/lib/wavefront-cli/display/source.rb +18 -4
  68. data/lib/wavefront-cli/display/user.rb +56 -10
  69. data/lib/wavefront-cli/display/usergroup.rb +25 -19
  70. data/lib/wavefront-cli/display/webhook.rb +2 -0
  71. data/lib/wavefront-cli/display/write.rb +6 -2
  72. data/lib/wavefront-cli/event.rb +83 -62
  73. data/lib/wavefront-cli/exception.rb +3 -0
  74. data/lib/wavefront-cli/externallink.rb +6 -4
  75. data/lib/wavefront-cli/integration.rb +2 -0
  76. data/lib/wavefront-cli/maintenancewindow.rb +28 -17
  77. data/lib/wavefront-cli/message.rb +4 -0
  78. data/lib/wavefront-cli/metric.rb +4 -1
  79. data/lib/wavefront-cli/notificant.rb +2 -0
  80. data/lib/wavefront-cli/opt_handler.rb +2 -0
  81. data/lib/wavefront-cli/output/base.rb +8 -3
  82. data/lib/wavefront-cli/output/csv.rb +2 -0
  83. data/lib/wavefront-cli/output/csv/base.rb +2 -0
  84. data/lib/wavefront-cli/output/csv/query.rb +14 -7
  85. data/lib/wavefront-cli/output/hcl.rb +2 -0
  86. data/lib/wavefront-cli/output/hcl/alert.rb +2 -0
  87. data/lib/wavefront-cli/output/hcl/base.rb +10 -4
  88. data/lib/wavefront-cli/output/hcl/dashboard.rb +17 -8
  89. data/lib/wavefront-cli/output/hcl/notificant.rb +2 -0
  90. data/lib/wavefront-cli/output/hcl/stdlib/array.rb +2 -0
  91. data/lib/wavefront-cli/output/hcl/stdlib/string.rb +2 -0
  92. data/lib/wavefront-cli/output/json.rb +2 -0
  93. data/lib/wavefront-cli/output/ruby.rb +2 -0
  94. data/lib/wavefront-cli/output/wavefront.rb +2 -0
  95. data/lib/wavefront-cli/output/wavefront/query.rb +7 -4
  96. data/lib/wavefront-cli/output/yaml.rb +2 -0
  97. data/lib/wavefront-cli/proxy.rb +15 -3
  98. data/lib/wavefront-cli/query.rb +14 -12
  99. data/lib/wavefront-cli/savedsearch.rb +2 -0
  100. data/lib/wavefront-cli/serviceaccount.rb +179 -0
  101. data/lib/wavefront-cli/settings.rb +2 -0
  102. data/lib/wavefront-cli/source.rb +2 -0
  103. data/lib/wavefront-cli/stdlib/array.rb +3 -0
  104. data/lib/wavefront-cli/stdlib/string.rb +17 -11
  105. data/lib/wavefront-cli/user.rb +10 -4
  106. data/lib/wavefront-cli/usergroup.rb +4 -2
  107. data/lib/wavefront-cli/version.rb +3 -1
  108. data/lib/wavefront-cli/webhook.rb +2 -0
  109. data/lib/wavefront-cli/write.rb +80 -46
  110. data/spec/.rubocop.yml +3 -16
  111. data/spec/constants.rb +21 -0
  112. data/spec/spec_helper.rb +8 -422
  113. data/spec/support/command_base.rb +82 -0
  114. data/spec/support/minitest_assertions.rb +262 -0
  115. data/spec/support/output_tester.rb +32 -0
  116. data/spec/support/supported_commands.rb +19 -0
  117. data/spec/test_mixins/acl.rb +169 -0
  118. data/spec/test_mixins/delete.rb +25 -0
  119. data/spec/test_mixins/deleteundelete.rb +106 -0
  120. data/spec/test_mixins/describe.rb +24 -0
  121. data/spec/test_mixins/dump.rb +43 -0
  122. data/spec/test_mixins/general.rb +11 -0
  123. data/spec/test_mixins/history.rb +35 -0
  124. data/spec/test_mixins/import.rb +65 -0
  125. data/spec/test_mixins/list.rb +29 -0
  126. data/spec/test_mixins/search.rb +98 -0
  127. data/spec/test_mixins/set.rb +47 -0
  128. data/spec/test_mixins/tag.rb +99 -0
  129. data/spec/wavefront-cli/alert_spec.rb +288 -111
  130. data/spec/wavefront-cli/apitoken_spec.rb +53 -24
  131. data/spec/wavefront-cli/base_spec.rb +9 -27
  132. data/spec/wavefront-cli/cloudintegration_spec.rb +65 -29
  133. data/spec/wavefront-cli/commands/alert_spec.rb +1 -0
  134. data/spec/wavefront-cli/commands/base_spec.rb +15 -13
  135. data/spec/wavefront-cli/commands/cloudintegration_spec.rb +1 -0
  136. data/spec/wavefront-cli/commands/config_spec.rb +3 -0
  137. data/spec/wavefront-cli/commands/dashboard_spec.rb +1 -0
  138. data/spec/wavefront-cli/commands/derivedmetric_spec.rb +1 -0
  139. data/spec/wavefront-cli/commands/event_spec.rb +1 -0
  140. data/spec/wavefront-cli/commands/link_spec.rb +1 -0
  141. data/spec/wavefront-cli/commands/message_spec.rb +1 -0
  142. data/spec/wavefront-cli/commands/metric_spec.rb +1 -0
  143. data/spec/wavefront-cli/commands/proxy_spec.rb +1 -0
  144. data/spec/wavefront-cli/commands/query_spec.rb +1 -0
  145. data/spec/wavefront-cli/commands/webhook_spec.rb +1 -0
  146. data/spec/wavefront-cli/commands/window_spec.rb +1 -0
  147. data/spec/wavefront-cli/commands/write_spec.rb +1 -0
  148. data/spec/wavefront-cli/config_spec.rb +25 -14
  149. data/spec/wavefront-cli/controller_spec.rb +13 -3
  150. data/spec/wavefront-cli/dashboard_spec.rb +125 -76
  151. data/spec/wavefront-cli/derivedmetric_spec.rb +83 -67
  152. data/spec/wavefront-cli/display/base_spec.rb +5 -7
  153. data/spec/wavefront-cli/display/printer/long_spec.rb +20 -16
  154. data/spec/wavefront-cli/display/printer/terse_spec.rb +5 -4
  155. data/spec/wavefront-cli/event_spec.rb +360 -18
  156. data/spec/wavefront-cli/externallink_spec.rb +92 -58
  157. data/spec/wavefront-cli/integration_spec.rb +129 -31
  158. data/spec/wavefront-cli/maintenancewindow_spec.rb +270 -32
  159. data/spec/wavefront-cli/message_spec.rb +73 -30
  160. data/spec/wavefront-cli/metric_spec.rb +60 -22
  161. data/spec/wavefront-cli/notificant_spec.rb +45 -32
  162. data/spec/wavefront-cli/opt_handler_spec.rb +4 -1
  163. data/spec/wavefront-cli/output/csv/query_spec.rb +21 -19
  164. data/spec/wavefront-cli/output/csv_spec.rb +5 -2
  165. data/spec/wavefront-cli/output/hcl_spec.rb +5 -2
  166. data/spec/wavefront-cli/output/helpers.rb +18 -0
  167. data/spec/wavefront-cli/output/json_spec.rb +3 -1
  168. data/spec/wavefront-cli/output/ruby_spec.rb +3 -1
  169. data/spec/wavefront-cli/output/wavefront/query_spec.rb +3 -1
  170. data/spec/wavefront-cli/output/wavefront_spec.rb +6 -4
  171. data/spec/wavefront-cli/output/yaml_spec.rb +3 -1
  172. data/spec/wavefront-cli/proxy_spec.rb +49 -27
  173. data/spec/wavefront-cli/query_spec.rb +174 -92
  174. data/spec/wavefront-cli/resources/responses/query.json +1 -0
  175. data/spec/wavefront-cli/resources/updates/alert.json +15 -0
  176. data/spec/wavefront-cli/resources/updates/dashboard.json +1 -0
  177. data/spec/wavefront-cli/savedsearch_spec.rb +35 -18
  178. data/spec/wavefront-cli/serviceaccount_spec.rb +399 -0
  179. data/spec/wavefront-cli/settings_spec.rb +42 -11
  180. data/spec/wavefront-cli/source_spec.rb +120 -23
  181. data/spec/wavefront-cli/stdlib/array_spec.rb +2 -1
  182. data/spec/wavefront-cli/stdlib/string_spec.rb +9 -6
  183. data/spec/wavefront-cli/user_spec.rb +278 -108
  184. data/spec/wavefront-cli/usergroup_spec.rb +152 -102
  185. data/spec/wavefront-cli/webhook_spec.rb +30 -15
  186. data/spec/wavefront-cli/write_spec.rb +25 -1
  187. data/wavefront-cli.gemspec +5 -3
  188. metadata +65 -21
  189. data/spec/wavefront-cli/commands/spec_helper.rb +0 -3
  190. data/spec/wavefront-cli/display/spec_helper.rb +0 -3
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module WavefrontCli
2
4
  #
3
5
  # CLI-specific exceptions. These should generally be caught in the
@@ -11,6 +13,7 @@ module WavefrontCli
11
13
  class ImpossibleSearch < RuntimeError; end
12
14
  class InsufficientData < RuntimeError; end
13
15
  class InvalidInput < RuntimeError; end
16
+ class InvalidQuery < RuntimeError; end
14
17
  class InvalidValue < RuntimeError; end
15
18
  class ProfileExists < RuntimeError; end
16
19
  class ProfileNotFound < RuntimeError; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontCli
@@ -14,12 +16,12 @@ module WavefrontCli
14
16
  end
15
17
 
16
18
  def do_create
17
- body = { name: options[:'<name>'],
18
- template: options[:'<template>'],
19
- description: options[:'<description>'],
19
+ body = { name: options[:'<name>'],
20
+ template: options[:'<template>'],
21
+ description: options[:'<description>'],
20
22
  metricFilterRegex: options[:metricregex],
21
23
  sourceFilterRegex: options[:sourceregex],
22
- pointFilterRegex: point_filter_regexes }
24
+ pointFilterRegex: point_filter_regexes }
23
25
 
24
26
  wf.create(body.select { |_k, v| v })
25
27
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontCli
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'wavefront-sdk/support/mixins'
2
4
  require_relative 'base'
3
5
 
@@ -29,9 +31,9 @@ module WavefrontCli
29
31
  end
30
32
 
31
33
  def build_body
32
- ret = { title: options[:'<title>'],
34
+ ret = { title: options[:'<title>'],
33
35
  startTimeInSeconds: window_start,
34
- endTimeInSeconds: window_end }
36
+ endTimeInSeconds: window_end }
35
37
 
36
38
  ret[:reason] = options[:desc] if options[:desc]
37
39
  ret
@@ -60,21 +62,25 @@ module WavefrontCli
60
62
  end
61
63
 
62
64
  def do_extend_by
63
- begin
64
- to_add = options[:'<time>'].to_seconds
65
- rescue ArgumentError
66
- abort "Could not parse time range '#{options[:'<time>']}'."
67
- end
68
-
65
+ cannot_noop!
66
+ to_add = parse_range_to_add
69
67
  old_end = wf.describe(options[:'<id>']).response.endTimeInSeconds
70
68
  change_end_time(old_end + to_add)
71
69
  end
72
70
 
71
+ def parse_range_to_add
72
+ options[:'<time>'].to_seconds
73
+ rescue ArgumentError
74
+ abort "Could not parse time range '#{options[:'<time>']}'."
75
+ end
76
+
73
77
  def do_extend_to
78
+ cannot_noop!
74
79
  change_end_time(parse_time(options[:'<time>']))
75
80
  end
76
81
 
77
82
  def do_close
83
+ cannot_noop!
78
84
  change_end_time(Time.now.to_i)
79
85
  end
80
86
 
@@ -83,22 +89,27 @@ module WavefrontCli
83
89
  end
84
90
 
85
91
  def do_ongoing
86
- w = wf.ongoing
87
- ok_exit('No maintenance windows currently ongoing.') if w.empty?
88
- w
92
+ ret = wf.ongoing
93
+
94
+ exit if options[:noop]
95
+
96
+ return ret unless ret.is_a?(Wavefront::Response) && ret.empty?
97
+
98
+ ok_exit('No maintenance windows currently ongoing.')
89
99
  end
90
100
 
91
101
  def do_pending
92
102
  range = options[:'<hours>'].to_f
93
103
  range = 24 unless range.positive?
94
104
 
95
- w = wf.pending(range)
105
+ ret = wf.pending(range)
96
106
 
97
- if w.empty?
98
- ok_exit(format('No maintenance windows in the next %s hours.',
99
- range))
100
- end
101
- w
107
+ exit if options[:noop]
108
+
109
+ return ret unless ret.is_a?(Wavefront::Response) && ret.empty?
110
+
111
+ ok_exit(format('No maintenance windows in the next %<range>s hours.',
112
+ range: range))
102
113
  end
103
114
  end
104
115
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontCli
@@ -16,6 +18,8 @@ module WavefrontCli
16
18
  end
17
19
 
18
20
  def do_read
21
+ cannot_noop!
22
+
19
23
  resp = wf.list(0, :all, false).response.items.select do |msg|
20
24
  msg[:id] == options[:'<id>']
21
25
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontCli
@@ -14,10 +16,11 @@ module WavefrontCli
14
16
 
15
17
  def extra_validation
16
18
  return unless options[:'<metric>']
19
+
17
20
  begin
18
21
  wf_metric_name?(options[:'<metric>'])
19
22
  rescue Wavefront::Exception::InvalidMetricName
20
- abort "'#{options[:'<metric>']}' is not a valid metric."
23
+ abort "'#{options[:'<metric>']}' is not a valid metric ID."
21
24
  end
22
25
  end
23
26
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontCli
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pathname'
2
4
  require 'wavefront-sdk/credentials'
3
5
  require_relative 'constants.rb'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module WavefrontOutput
2
4
  #
3
5
  # WavefrontCli::Base looks for a class WavefrontOutput::Format
@@ -33,6 +35,7 @@ module WavefrontOutput
33
35
 
34
36
  def filtered_response(resp)
35
37
  return resp unless options[:itemsonly]
38
+
36
39
  items_only(resp)
37
40
  end
38
41
 
@@ -45,8 +48,8 @@ module WavefrontOutput
45
48
  end
46
49
 
47
50
  raise(WavefrontCli::Exception::UnsupportedOutput,
48
- format("'%s' format does not support items-only output.",
49
- my_format))
51
+ format("'%<format>s' format does not support items-only output.",
52
+ format: my_format))
50
53
  end
51
54
 
52
55
  def my_format
@@ -54,7 +57,9 @@ module WavefrontOutput
54
57
  end
55
58
 
56
59
  def command_class_name
57
- format('Wavefront%sOutput::%s', my_format.capitalize, cmd.capitalize)
60
+ format('Wavefront%<format>sOutput::%<command>s',
61
+ format: my_format.capitalize,
62
+ command: cmd.capitalize)
58
63
  end
59
64
 
60
65
  def command_file
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontOutput
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module WavefrontCsvOutput
2
4
  #
3
5
  # Standard output template
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'set'
2
4
  require_relative 'base'
3
5
 
@@ -21,8 +23,8 @@ module WavefrontCsvOutput
21
23
  def post_initialize
22
24
  @headers = []
23
25
  @formatopts = extract_formatopts
24
- @data_map = options[:raw] ? raw_output : query_output
25
- @columns = all_keys.freeze
26
+ @data_map = options[:raw] ? raw_output : query_output
27
+ @columns = all_keys.freeze
26
28
  end
27
29
 
28
30
  # @return [Array[Hash]] which goes in the @data_map
@@ -66,6 +68,7 @@ module WavefrontCsvOutput
66
68
  #
67
69
  def csv_headers
68
70
  return [] unless formatopts.include?('headers')
71
+
69
72
  [columns.map { |c| csv_value(c) }.join(',')]
70
73
  end
71
74
 
@@ -89,7 +92,7 @@ module WavefrontCsvOutput
89
92
  end
90
93
 
91
94
  def quote_value(value)
92
- format('"%s"', value.to_s.gsub(/"/, '\"'))
95
+ format('"%<value>s"', value: value.to_s.gsub(/"/, '\"'))
93
96
  end
94
97
 
95
98
  # Turn a string of output options into an easy-to-query array
@@ -102,10 +105,10 @@ module WavefrontCsvOutput
102
105
  # Tags have their keys removed.
103
106
  #
104
107
  def csv_format(path, value, timestamp, source, tags = nil)
105
- ret = { path: path,
106
- value: value,
108
+ ret = { path: path,
109
+ value: value,
107
110
  timestamp: timestamp,
108
- source: source }
111
+ source: source }
109
112
 
110
113
  ret.tap { |r| tags.each { |k, v| r[k.to_sym] = tag_val(k, v) } }
111
114
  end
@@ -113,7 +116,11 @@ module WavefrontCsvOutput
113
116
  # We may be doing key=val or just val, depending on the formatter options
114
117
  #
115
118
  def tag_val(key, val)
116
- formatopts.include?('tagkeys') ? format('%s=%s', key, val) : val
119
+ if formatopts.include?('tagkeys')
120
+ format('%<key>s=%<value>s', key: key, value: val)
121
+ else
122
+ val
123
+ end
117
124
  end
118
125
  end
119
126
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontOutput
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontHclOutput
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'securerandom'
2
4
  require 'json'
3
5
 
@@ -27,8 +29,9 @@ module WavefrontHclOutput
27
29
  end
28
30
 
29
31
  def open_output
30
- format('resource "wavefront_%s" "%s" {', resource_name,
31
- SecureRandom.uuid)
32
+ format('resource "wavefront_%<name>s" "%<uuid>s" {',
33
+ name: resource_name,
34
+ uuid: SecureRandom.uuid)
32
35
  end
33
36
 
34
37
  def close_output
@@ -48,6 +51,7 @@ module WavefrontHclOutput
48
51
  #
49
52
  def required_fields
50
53
  return resp if hcl_fields.empty?
54
+
51
55
  resp.select { |k, _v| hcl_fields.include?(k) }
52
56
  end
53
57
 
@@ -65,7 +69,9 @@ module WavefrontHclOutput
65
69
 
66
70
  quote_handler = :quote_value unless respond_to?(quote_handler)
67
71
 
68
- format(' %s = %s', key.to_snake, send(quote_handler, val))
72
+ format(' %<key>s = %<value>s',
73
+ key: key.to_snake,
74
+ value: send(quote_handler, val))
69
75
  end
70
76
 
71
77
  # Tags need to be in an array. They aren't always called "tags"
@@ -86,7 +92,7 @@ module WavefrontHclOutput
86
92
  def quote_value(val)
87
93
  case val.class.to_s.to_sym
88
94
  when :String
89
- format('"%s"', val.gsub(/\"/, '\"'))
95
+ format('"%<value>s"', value: val.gsub(/\"/, '\"'))
90
96
  else
91
97
  val
92
98
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
  require_relative 'stdlib/string'
3
5
  require_relative 'stdlib/array'
@@ -54,7 +56,9 @@ module WavefrontHclOutput
54
56
  fields = %w[units name description]
55
57
 
56
58
  lines = chart.each_with_object([]) do |(k, v), a|
57
- a.<< format('%s = %s', k, quote_value(v)) if fields.include?(k)
59
+ next unless fields.include?(k)
60
+
61
+ a.<< format('%<key>s = %<value>s', key: k, value: quote_value(v))
58
62
  end
59
63
 
60
64
  lines.<< "source = #{handle_sources(chart[:sources])}"
@@ -66,17 +70,22 @@ module WavefrontHclOutput
66
70
  end
67
71
 
68
72
  def handle_source(source)
69
- fields = %w[name query disabled scatterPlotSource querybuilderEnabled
70
- sourceDescription]
71
-
72
73
  source.each_with_object([]) do |(k, v), a|
73
- if fields.include?(k)
74
- k = 'queryBuilderEnabled' if k == 'querybuilderEnabled'
75
- a.<< format('%s = %s', k.to_snake, quote_value(v))
76
- end
74
+ next unless source_fields.include?(k)
75
+
76
+ k = 'queryBuilderEnabled' if k == 'querybuilderEnabled'
77
+
78
+ a.<< format('%<key>s = %<value>s',
79
+ key: k.to_snake,
80
+ value: quote_value(v))
77
81
  end.to_hcl_obj(14)
78
82
  end
79
83
 
84
+ def source_fields
85
+ %w[name query disabled scatterPlotSource querybuilderEnabled
86
+ sourceDescription]
87
+ end
88
+
80
89
  def qhandle_sections(val)
81
90
  val
82
91
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontHclOutput
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #
2
4
  # Extensions to stdlib Array
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #
2
4
  # Extensions to stdlib String
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontOutput
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontOutput
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module WavefrontOutput
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'wavefront-sdk/stdlib/hash'
2
4
  require_relative '../csv/base'
3
5
 
@@ -30,19 +32,20 @@ module WavefrontWavefrontOutput
30
32
  def query_output
31
33
  check_query_response
32
34
 
33
- resp[:timeseries].each_with_object('') do |ts, a|
35
+ resp[:timeseries].each_with_object([]) do |ts, a|
34
36
  ts[:data].each do |point|
35
37
  a.<< wavefront_format(ts[:label],
36
38
  point[1],
37
39
  point[0],
38
40
  ts[:host],
39
- ts[:tags]) + "\n"
41
+ ts[:tags])
40
42
  end
41
- end
43
+ end.join("\n")
42
44
  end
43
45
 
44
46
  def wavefront_format(path, value, timestamp, source, tags = nil)
45
- arr = [path, value, timestamp, format('source=%s', source)]
47
+ arr = [path, value, timestamp, format('source=%<source>s',
48
+ source: source)]
46
49
  arr.<< tags.to_wf_tag if tags && !tags.empty?
47
50
  arr.join(' ')
48
51
  end