wavefront-cli 4.2.1 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
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