wavefront-cli 7.1.0 → 8.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1e0ee9608157074b898b31b5c169f432e4feed2d4af31e184b80016675f73cc
4
- data.tar.gz: 4e845f4a56684903f2f1d800ee41cad9a8062a969a8fcb31e839bd51fac3891c
3
+ metadata.gz: afeb72ce32ce32e70e1f405234608ce5109d039aa6045b89e73e8351d95e459f
4
+ data.tar.gz: 06b2ab6daedba6a696b9c63208bfe9465695f224f6fab58c49c9408051f81e3f
5
5
  SHA512:
6
- metadata.gz: 4635ae95d16aeb2bcb779010fc435945300991f1853ba75488a9e2914b6860129be4257ca13d5765c004efb746ce5f03fa7d686f71bb13ec5fe860f77c4cddbe
7
- data.tar.gz: 501b3425f488c977363b42ec9d362d3e0c56ef8ba0b7cc91a2feb1da8bb2b91d2a1c27ade8cf8d3e5c01f3bde74cf0a582ead9c84f4dc4f0ae6e71c1a3691cc9
6
+ metadata.gz: 75b2159704ea25f5f1dea58b16e9e968b9b3ba17668a6f014a0ff75ce63be91179601a5cc917ab526b281a36d3c4e254ec8dbe0af9ac57f21274a4fbeeb5faab
7
+ data.tar.gz: 672954a741cf305255820402b0a62bf9ac8facafb9e5fbf63c633a3355117516253cc50e68247fb019e7b1797f6117062acf32b3e30d012e995a55e37c0bb53f
@@ -1,49 +1,18 @@
1
1
  ---
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.4
4
+ TargetRubyVersion: 2.5
5
+ NewCops: enable
5
6
 
6
7
  Metrics/ClassLength:
7
8
  Max: 400
8
9
 
9
10
  Style/IfUnlessModifier:
10
11
  Enabled: false # because it wants to make lines >80 chars
11
- Style/HashEachMethods:
12
- Enabled: true
13
- Style/HashTransformKeys:
14
- Enabled: true
15
- Style/HashTransformValues:
16
- Enabled: true
17
-
18
- # New compatabilities
19
- Layout/EmptyLinesAroundAttributeAccessor:
20
- Enabled: true
21
- Layout/SpaceAroundMethodCallOperator:
22
- Enabled: true
23
- Lint/RaiseException:
24
- Enabled: true
25
- Lint/StructNewOverride:
26
- Enabled: true
27
- Style/ExponentialNotation:
28
- Enabled: true
29
- Style/SlicingWithRange:
30
- Enabled: true
31
- Lint/DeprecatedOpenSSLConstant:
32
- Enabled: true
33
- Lint/MixedRegexpCaptureTypes:
34
- Enabled: true
35
- Style/RedundantRegexpCharacterClass:
36
- Enabled: true
37
- Style/RedundantRegexpEscape:
38
- Enabled: true
39
- Style/AccessorGrouping:
40
- Enabled: true
41
- Style/BisectedAttrAccessor:
42
- Enabled: true
43
- Style/RedundantAssignment:
44
- Enabled: true
45
- Style/RedundantFetchBlock:
46
- Enabled: true
12
+ Style/StringConcatenation:
13
+ Enabled: false
14
+ Style/OptionalBooleanParameter:
15
+ Enabled: false
47
16
 
48
17
  # Is nothing sacred?
49
18
  Layout/LineLength:
@@ -1,10 +1,9 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
- - 2.4.9
5
- - 2.5.7
6
- - 2.6.5
7
- - 2.7.0
4
+ - 2.5.8
5
+ - 2.6.6
6
+ - 2.7.1
8
7
  before_install: gem install bundler --no-document
9
8
  deploy:
10
9
  provider: rubygems
@@ -14,7 +13,7 @@ deploy:
14
13
  on:
15
14
  tags: true
16
15
  repo: snltd/wavefront-cli
17
- ruby: 2.6.5
16
+ ruby: 2.6.6
18
17
  notifications:
19
18
  email: false
20
19
  slack:
data/HISTORY.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 8.2.0 (2020-10-06)
4
+ * Display spans in human-readable query output.
5
+
6
+ ## 8.1.0 (2020-10-04)
7
+ * Display traces in human-readable query output.
8
+
9
+ ## 8.0.1 (2020-09-28)
10
+ * If the user specifies a config stanza and it is not found, exit with an
11
+ error rather than silently falling back to env vars.
12
+
13
+ ## 8.0.0 (2020-09-20
14
+ * Drop Ruby 2.4.0 support. (Breaking change.)
15
+ >>>>>>> master
16
+
17
+ ## 7.2.0 (2020-08-12)
18
+ * Add `cloudintegration awsid generate` command.
19
+ * Add `cloudintegration awsid delete <external_id>` command.
20
+ * Add `cloudintegration awsid validate <external_id>` command.
21
+ * Require 5.1.x of [the SDK](https://github.com/snltd/wavefront-sdk).
22
+
3
23
  ## 7.1.0 (2020-08-07)
4
24
  * Remove `user` command. (Breaking change.)
5
25
  * Add `account` command.
data/README.md CHANGED
@@ -15,7 +15,7 @@ $ gem install wavefront-cli
15
15
 
16
16
  It is built on [our Wavefront Ruby
17
17
  SDK](https://github.com/snltd/wavefront-sdk) and requires Ruby >=
18
- 2.4. It has no "native extension" dependencies.
18
+ 2.5. It has no "native extension" dependencies.
19
19
 
20
20
  For a far more comprehensive overview/tutorial, please read [this
21
21
  article](https://sysdef.xyz/article/wavefront-cli).
@@ -102,12 +102,10 @@ module WavefrontCli
102
102
 
103
103
  def validate_tags(key = :'<tag>')
104
104
  Array(options[key]).each do |t|
105
- begin
106
- send(:wf_tag?, t)
107
- rescue Wavefront::Exception::InvalidTag
108
- raise(WavefrontCli::Exception::InvalidInput,
109
- "'#{t}' is not a valid tag.")
110
- end
105
+ send(:wf_tag?, t)
106
+ rescue Wavefront::Exception::InvalidTag
107
+ raise(WavefrontCli::Exception::InvalidInput,
108
+ "'#{t}' is not a valid tag.")
111
109
  end
112
110
  end
113
111
 
@@ -371,9 +369,10 @@ module WavefrontCli
371
369
  def do_dump
372
370
  cannot_noop!
373
371
 
374
- if options[:format] == 'yaml'
372
+ case options[:format]
373
+ when 'yaml'
375
374
  ok_exit dump_yaml
376
- elsif options[:format] == 'json'
375
+ when 'json'
377
376
  ok_exit dump_json
378
377
  else
379
378
  abort format("Dump format must be 'json' or 'yaml'. " \
@@ -539,7 +538,8 @@ module WavefrontCli
539
538
  #
540
539
  # rubocop:disable Metrics/MethodLength
541
540
  def extract_values(obj, key, aggr = [])
542
- if obj.is_a?(Hash)
541
+ case obj.class
542
+ when Hash
543
543
  obj.each_pair do |k, v|
544
544
  if k == key && !v.to_s.empty?
545
545
  aggr.<< v
@@ -547,7 +547,7 @@ module WavefrontCli
547
547
  extract_values(v, key, aggr)
548
548
  end
549
549
  end
550
- elsif obj.is_a?(Array)
550
+ when Array
551
551
  obj.each { |e| extract_values(e, key, aggr) }
552
552
  end
553
553
 
@@ -22,5 +22,17 @@ module WavefrontCli
22
22
  def do_disable
23
23
  wf.disable(options[:'<id>'])
24
24
  end
25
+
26
+ def do_awsid_generate
27
+ wf.create_aws_external_id
28
+ end
29
+
30
+ def do_awsid_delete
31
+ wf.delete_aws_external_id(options[:'<external_id>'])
32
+ end
33
+
34
+ def do_awsid_confirm
35
+ wf.confirm_aws_external_id(options[:'<external_id>'])
36
+ end
25
37
  end
26
38
  end
@@ -1,47 +1,19 @@
1
1
  ---
2
+ AllCops:
3
+ NewCops: enable
2
4
 
3
5
  # There are long things in here, but they're fine
4
6
  #
5
7
  Metrics/MethodLength:
6
8
  Max: 25
7
9
 
8
- Style/HashEachMethods:
9
- Enabled: true
10
- Style/HashTransformKeys:
11
- Enabled: true
12
- Style/HashTransformValues:
13
- Enabled: true
14
-
15
- # new compatabilities
16
- Layout/EmptyLinesAroundAttributeAccessor:
17
- Enabled: true
18
- Layout/SpaceAroundMethodCallOperator:
19
- Enabled: true
20
- Lint/RaiseException:
21
- Enabled: true
22
- Lint/StructNewOverride:
23
- Enabled: true
24
- Style/ExponentialNotation:
25
- Enabled: true
26
- Style/SlicingWithRange:
27
- Enabled: true
28
- Lint/DeprecatedOpenSSLConstant:
29
- Enabled: true
30
- Lint/MixedRegexpCaptureTypes:
31
- Enabled: true
32
- Style/RedundantRegexpCharacterClass:
33
- Enabled: true
34
- Style/RedundantRegexpEscape:
35
- Enabled: true
36
- Style/AccessorGrouping:
37
- Enabled: true
38
- Style/BisectedAttrAccessor:
39
- Enabled: true
40
- Style/RedundantAssignment:
41
- Enabled: true
42
- Style/RedundantFetchBlock:
43
- Enabled: true
44
-
45
10
  # Is nothing sacred?
46
11
  Layout/LineLength:
47
12
  Max: 80
13
+
14
+ Style/IfUnlessModifier:
15
+ Enabled: false # because it wants to make lines >80 chars
16
+ Style/StringConcatenation:
17
+ Enabled: false
18
+ Style/OptionalBooleanParameter:
19
+ Enabled: false
@@ -26,7 +26,10 @@ class WavefrontCommandCloudintegration < WavefrontCommandBase
26
26
  "disable #{CMN} <id>",
27
27
  "dump #{CMN}",
28
28
  "import #{CMN} [-uU] <file>",
29
- "search #{CMN} [-al] [-o offset] [-L limit] [-O fields] <condition>..."]
29
+ "search #{CMN} [-al] [-o offset] [-L limit] [-O fields] <condition>...",
30
+ "awsid #{CMN} generate",
31
+ "awsid #{CMN} delete <external_id>",
32
+ "awsid #{CMN} confirm <external_id>"]
30
33
  end
31
34
 
32
35
  def _options
@@ -36,11 +36,13 @@ module WavefrontCli
36
36
 
37
37
  RX = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/.freeze
38
38
 
39
+ # rubocop:disable Lint/MissingSuper
39
40
  def initialize(options)
40
41
  @options = options
41
42
  @config_file = _config_file
42
43
  @profile = options[:'<profile>'] || 'default'
43
44
  end
45
+ # rubocop:enable Lint/MissingSuper
44
46
 
45
47
  def do_location
46
48
  puts config_file
@@ -144,7 +146,7 @@ module WavefrontCli
144
146
  # catch a ctrl-d
145
147
  #
146
148
  def read_input
147
- STDIN.gets.strip
149
+ $stdin.gets.strip
148
150
  rescue NoMethodError
149
151
  abort "\nInput aborted at user request."
150
152
  end
@@ -177,8 +177,6 @@ class WavefrontCliController
177
177
  # return [Hash] h with modified keys
178
178
  #
179
179
  def sanitize_keys(options)
180
- options.each_with_object({}) do |(k, v), r|
181
- r[k.to_s.delete('-').to_sym] = v
182
- end
180
+ options.transform_keys { |k| k.to_s.delete('-').to_sym }
183
181
  end
184
182
  end
@@ -33,6 +33,7 @@ module WavefrontDisplay
33
33
 
34
34
  @data = prioritize_keys(data, priority_keys)
35
35
  @options = options
36
+ @printer_opts = {}
36
37
  end
37
38
 
38
39
  # find the correct method to deal with the output of the user's
@@ -152,7 +153,8 @@ module WavefrontDisplay
152
153
  puts 'No data.'
153
154
  else
154
155
  require_relative 'printer/long'
155
- puts WavefrontDisplayPrinter::Long.new(data, fields, modified_data)
156
+ puts WavefrontDisplayPrinter::Long.new(data, fields, modified_data,
157
+ @printer_opts)
156
158
  pagination_line
157
159
  end
158
160
  end
@@ -25,5 +25,17 @@ module WavefrontDisplay
25
25
  def do_disable
26
26
  puts "Disabled '#{options[:'<id>']}'."
27
27
  end
28
+
29
+ def do_awsid_generate
30
+ puts data
31
+ end
32
+
33
+ def do_awsid_delete
34
+ puts "Deleted external ID '#{options[:'<external_id>']}'."
35
+ end
36
+
37
+ def do_awsid_confirm
38
+ puts "'#{data}' is a registered external ID."
39
+ end
28
40
  end
29
41
  end
@@ -29,11 +29,13 @@ module WavefrontDisplayPrinter
29
29
 
30
30
  # Default options. Can all be overridden by passing them in the
31
31
  # initializer options hash.
32
+ # After sep_depth indentations we do not print separator lines
32
33
  #
33
34
  def default_opts
34
35
  { indent: 2,
35
36
  padding: 2,
36
37
  separator: true,
38
+ sep_depth: 3,
37
39
  none: true }
38
40
  end
39
41
 
@@ -75,6 +77,7 @@ module WavefrontDisplayPrinter
75
77
  #
76
78
  # Make an array of hashes: { key, value, depth }
77
79
  #
80
+ # rubocop:disable Style/CaseLikeIf
78
81
  def make_list(data, aggr = [], depth = 0, last_key = nil)
79
82
  if data.is_a?(Hash)
80
83
  append_hash(data, aggr, depth)
@@ -84,6 +87,7 @@ module WavefrontDisplayPrinter
84
87
  aggr.<< ['', preened_value(data), depth]
85
88
  end
86
89
  end
90
+ # rubocop:enable Style/CaseLikeIf
87
91
 
88
92
  def smart_value(val)
89
93
  val.to_s.empty? && opts[:none] ? '<none>' : preened_value(val)
@@ -150,6 +154,7 @@ module WavefrontDisplayPrinter
150
154
  # @param depth [Integer]
151
155
  # @return [Array[Array]]
152
156
  #
157
+ # rubocop:disable Style/CaseLikeIf
153
158
  def append_hash(data, aggr, depth)
154
159
  data.each_pair do |k, v|
155
160
  if v.is_a?(Hash)
@@ -163,6 +168,7 @@ module WavefrontDisplayPrinter
163
168
 
164
169
  aggr
165
170
  end
171
+ # rubocop:enable Style/CaseLikeIf
166
172
 
167
173
  # Part of the #make_list recursion. Deals with arrays.
168
174
  #
@@ -175,7 +181,8 @@ module WavefrontDisplayPrinter
175
181
  data.each.with_index(1) do |element, i|
176
182
  aggr = make_list(element, aggr, depth, last_key)
177
183
 
178
- if opts[:separator] && element.is_a?(Hash) && i < data.size
184
+ if opts[:separator] && element.is_a?(Hash) && i < data.size &&
185
+ depth < opts[:sep_depth]
179
186
  aggr.<< ['', :separator, depth]
180
187
  end
181
188
  end
@@ -16,14 +16,18 @@ module WavefrontDisplay
16
16
  data[:errorMessage].split("\n").first)
17
17
  end
18
18
 
19
+ # rubocop:disable Metrics/AbcSize
19
20
  def default_data_object
20
21
  { name: data.name,
21
22
  query: data.query,
22
23
  timeseries: mk_timeseries(data),
24
+ traces: mk_traces(data),
25
+ spans: mk_spans(data),
23
26
  events: mk_events(data) }.tap do |d|
24
27
  d[:warnings] = data[:warnings] if show_warnings?
25
28
  end
26
29
  end
30
+ # rubocop:enable Metrics/AbcSize
27
31
 
28
32
  def show_warnings?
29
33
  data.key?(:warnings) && !options[:nowarn]
@@ -54,6 +58,18 @@ module WavefrontDisplay
54
58
  data[:events].map { |s| humanize_event(s) }
55
59
  end
56
60
 
61
+ def mk_traces(data)
62
+ return [] unless data.key?(:traces)
63
+
64
+ data[:traces].map { |t| humanize_trace(t) }
65
+ end
66
+
67
+ def mk_spans(data)
68
+ return [] unless data.key?(:spans)
69
+
70
+ data[:spans].map { |t| humanize_span(t) }
71
+ end
72
+
57
73
  def do_run
58
74
  do_default
59
75
  end
@@ -99,6 +115,30 @@ module WavefrontDisplay
99
115
  end
100
116
  end
101
117
 
118
+ def humanize_trace(data)
119
+ @printer_opts[:sep_depth] = 3
120
+
121
+ data.tap do |t|
122
+ t[:start] = human_time(t[:start_ms])
123
+ t[:end] = human_time(t[:end_ms])
124
+ t.delete(:start_ms)
125
+ t.delete(:end_ms)
126
+ t.delete(:startMs)
127
+ t.spans = t.spans.map { |s| humanize_trace_span(s) }
128
+ end
129
+ end
130
+
131
+ def humanize_span(data)
132
+ @printer_opts[:sep_depth] = 2
133
+ data
134
+ end
135
+
136
+ def humanize_trace_span(span)
137
+ span.tap do |s|
138
+ s[:startMs] = human_time(s[:startMs])
139
+ end
140
+ end
141
+
102
142
  def row_time_and_val(row)
103
143
  if row.is_a?(Hash)
104
144
  [human_time(row[:timestamp]), row[:value]]
@@ -97,6 +97,7 @@ module WavefrontCli
97
97
  # return [Hash] body for #create() method
98
98
  #
99
99
  # rubocop:disable Metrics/MethodLength
100
+ # rubocop:disable Metrics/AbcSize
100
101
  def create_body(opts, t_start)
101
102
  { name: opts[:'<event>'],
102
103
  startTime: t_start,
@@ -111,6 +112,7 @@ module WavefrontCli
111
112
  end
112
113
  end
113
114
  end
115
+ # rubocop:enable Metrics/AbcSize
114
116
  # rubocop:enable Metrics/MethodLength
115
117
 
116
118
  def annotations(opts)
@@ -8,7 +8,6 @@ module WavefrontCli
8
8
  # rubocop:disable Metrics/MethodLength
9
9
  # rubocop:disable Metrics/AbcSize
10
10
  # rubocop:disable Metrics/CyclomaticComplexity
11
- # rubocop:disable Metrics/PerceivedComplexity
12
11
  def exception_handler(exception)
13
12
  case exception
14
13
  when WavefrontCli::Exception::UnhandledCommand
@@ -31,6 +30,8 @@ module WavefrontCli
31
30
  abort "'#{exception}' is not a valid user group ID."
32
31
  when Wavefront::Exception::InvalidAccountId
33
32
  abort "'#{exception}' is not a valid system or user account ID."
33
+ when Wavefront::Exception::InvalidAwsExternalId
34
+ abort "'#{exception}' is not a valid AWS external ID."
34
35
  when Wavefront::Exception::InvalidRoleId
35
36
  abort "'#{exception}' is not a valid role ID."
36
37
  when Wavefront::Exception::InvalidApiTokenId
@@ -81,7 +82,6 @@ module WavefrontCli
81
82
  end
82
83
  # rubocop:enable Metrics/MethodLength
83
84
  # rubocop:enable Metrics/AbcSize
84
- # rubocop:enable Metrics/PerceivedComplexity
85
85
  # rubocop:enable Metrics/CyclomaticComplexity
86
86
  end
87
87
  end
@@ -38,12 +38,10 @@ module WavefrontCli
38
38
 
39
39
  def point_filter_regexes
40
40
  ret = options[:pointregex].each_with_object({}) do |r, a|
41
- begin
42
- k, v = r.split('=', 2)
43
- a[k.to_sym] = v
44
- rescue StandardError
45
- puts "cannot parse point regex '#{r}'. Skipping."
46
- end
41
+ k, v = r.split('=', 2)
42
+ a[k.to_sym] = v
43
+ rescue StandardError
44
+ puts "cannot parse point regex '#{r}'. Skipping."
47
45
  end
48
46
 
49
47
  ret.empty? ? nil : ret
@@ -57,7 +57,7 @@ module WavefrontCli
57
57
  # does not parse
58
58
  #
59
59
  def load_from_stdin
60
- raw = STDIN.read
60
+ raw = $stdin.read
61
61
 
62
62
  if raw.start_with?('---')
63
63
  read_yaml(raw)
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'pathname'
4
4
  require 'wavefront-sdk/credentials'
5
- require_relative 'constants.rb'
5
+ require_relative 'constants'
6
6
 
7
7
  module WavefrontCli
8
8
  #
@@ -35,6 +35,8 @@ module WavefrontCli
35
35
  abort "Configuration file '#{e}' not found."
36
36
  rescue Wavefront::Exception::InvalidConfigFile => e
37
37
  abort "Could not load configuration file '#{e.message}'."
38
+ rescue Wavefront::Exception::MissingConfigProfile => e
39
+ abort "Cannot find profile '#{e}'."
38
40
  end
39
41
 
40
42
  # Create an options hash to pass to the Wavefront::Credentials
@@ -45,7 +47,7 @@ module WavefrontCli
45
47
  # :profile
46
48
  #
47
49
  def setup_cred_opts(cli_opts)
48
- cred_opts = {}
50
+ cred_opts = { raise_on_no_profile: true }
49
51
 
50
52
  if cli_opts[:config]
51
53
  cred_opts[:file] = Pathname.new(cli_opts[:config])
@@ -69,7 +71,7 @@ module WavefrontCli
69
71
  #
70
72
  def load_profile(cred_opts)
71
73
  creds = Wavefront::Credentials.new(cred_opts).config
72
- Hash[creds.map { |k, v| [k.to_sym, v] }]
74
+ creds.transform_keys(&:to_sym)
73
75
  end
74
76
  end
75
77
  end
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- WF_CLI_VERSION = '7.1.0'
3
+ WF_CLI_VERSION = '8.2.0'
@@ -167,12 +167,10 @@ module WavefrontCli
167
167
  #
168
168
  def process_input_file(data)
169
169
  data.each_with_object([]) do |l, a|
170
- begin
171
- a.<< process_line(l)
172
- rescue WavefrontCli::Exception::UnparseableInput => e
173
- puts "Bad input. #{e.message}."
174
- next
175
- end
170
+ a.<< process_line(l)
171
+ rescue WavefrontCli::Exception::UnparseableInput => e
172
+ puts "Bad input. #{e.message}."
173
+ next
176
174
  end
177
175
  end
178
176
 
@@ -193,7 +191,7 @@ module WavefrontCli
193
191
  #
194
192
  def read_stdin
195
193
  open_connection
196
- STDIN.each_line { |l| call_write(process_line(l.strip), false) }
194
+ $stdin.each_line { |l| call_write(process_line(l.strip), false) }
197
195
  close_connection
198
196
  rescue SystemExit, Interrupt
199
197
  puts 'ctrl-c. Exiting.'
@@ -1,4 +1,7 @@
1
1
  ---
2
+ AllCops:
3
+ NewCops: enable
4
+
2
5
  Metrics/MethodLength:
3
6
  Max: 30
4
7
 
@@ -8,43 +11,13 @@ Metrics/AbcSize:
8
11
  Metrics/ClassLength:
9
12
  Max: 300
10
13
 
11
- Style/HashEachMethods:
12
- Enabled: true
13
- Style/HashTransformKeys:
14
- Enabled: true
15
- Style/HashTransformValues:
16
- Enabled: true
17
-
18
- # new compatabilities
19
- Layout/EmptyLinesAroundAttributeAccessor:
20
- Enabled: true
21
- Layout/SpaceAroundMethodCallOperator:
22
- Enabled: true
23
- Lint/RaiseException:
24
- Enabled: true
25
- Lint/StructNewOverride:
26
- Enabled: true
27
- Style/ExponentialNotation:
28
- Enabled: true
29
- Style/SlicingWithRange:
30
- Enabled: true
31
- Lint/DeprecatedOpenSSLConstant:
32
- Enabled: true
33
- Lint/MixedRegexpCaptureTypes:
34
- Enabled: true
35
- Style/RedundantRegexpCharacterClass:
36
- Enabled: true
37
- Style/RedundantRegexpEscape:
38
- Enabled: true
39
- Style/AccessorGrouping:
40
- Enabled: true
41
- Style/BisectedAttrAccessor:
42
- Enabled: true
43
- Style/RedundantAssignment:
44
- Enabled: true
45
- Style/RedundantFetchBlock:
46
- Enabled: true
47
-
48
14
  # Is nothing sacred?
49
15
  Layout/LineLength:
50
16
  Max: 80
17
+
18
+ Style/IfUnlessModifier:
19
+ Enabled: false # because it wants to make lines >80 chars
20
+ Style/StringConcatenation:
21
+ Enabled: false
22
+ Style/OptionalBooleanParameter:
23
+ Enabled: false
@@ -105,11 +105,9 @@ module Minitest
105
105
  "performed as no-ops.\n", err)
106
106
  end
107
107
 
108
- def assert_repeated_output(msg)
108
+ def assert_repeated_output(msg, &block)
109
109
  begin
110
- out, err = capture_io do
111
- yield
112
- end
110
+ out, err = capture_io(&block)
113
111
  rescue SystemExit => e
114
112
  puts e.backtrace
115
113
  p e
@@ -7,12 +7,11 @@ require_relative '../../lib/wavefront-cli/cloudintegration'
7
7
  # Ensure 'cloudintegration' commands produce the correct API calls.
8
8
  #
9
9
  class CloudIntegrationEndToEndTest < EndToEndTest
10
- include WavefrontCliTest::DeleteUndelete
11
- include WavefrontCliTest::Describe
12
- include WavefrontCliTest::Dump
13
- include WavefrontCliTest::List
14
- # include WavefrontCliTest::Import
15
- include WavefrontCliTest::Search
10
+ # include WavefrontCliTest::DeleteUndelete
11
+ # include WavefrontCliTest::Describe
12
+ # include WavefrontCliTest::Dump
13
+ # include WavefrontCliTest::List
14
+ # include WavefrontCliTest::Search
16
15
 
17
16
  def test_enable
18
17
  assert_repeated_output("Enabled '#{id}'.") do
@@ -46,6 +45,20 @@ class CloudIntegrationEndToEndTest < EndToEndTest
46
45
  'body: null')
47
46
  end
48
47
 
48
+ def test_aws_id_generate
49
+ # assert_repeated_output("Disabled '#{id}'.") do
50
+ # assert_cmd_posts("disable #{id}",
51
+ # "/api/v2/cloudintegration/#{id}/disable")
52
+ # end
53
+
54
+ assert_abort_on_missing_creds('awsid generate')
55
+
56
+ assert_noop('awsid generate',
57
+ 'uri: POST https://default.wavefront.com/api/v2/' \
58
+ 'cloudintegration/awsExternalId',
59
+ 'body: null')
60
+ end
61
+
49
62
  private
50
63
 
51
64
  def id
@@ -48,7 +48,7 @@ class WavefrontCliConfigTest < MiniTest::Test
48
48
 
49
49
  def test_read_input
50
50
  ["value \n", " value\n", " value \t\n", "value\n"].each do |v|
51
- STDIN.stub(:gets, v) { assert_equal('value', wf.read_input) }
51
+ $stdin.stub(:gets, v) { assert_equal('value', wf.read_input) }
52
52
  end
53
53
  end
54
54
 
@@ -79,9 +79,11 @@ end
79
79
  # so we can get at the methods without triggering one of the things
80
80
  # tested above.
81
81
  #
82
+ # rubocop:disable Lint/MissingSuper
82
83
  class Giblets < WavefrontCliController
83
84
  def initialize; end
84
85
  end
86
+ # rubocop:enable Lint/MissingSuper
85
87
 
86
88
  # Here's the subclass
87
89
  #
@@ -52,12 +52,14 @@ class TestWavefrontDisplayPrinterLong < MiniTest::Test
52
52
  assert_equal({ indent: 4,
53
53
  padding: 3,
54
54
  separator: true,
55
+ sep_depth: 3,
55
56
  none: true }, pr.opts)
56
57
 
57
58
  pr = WavefrontDisplayPrinter::Long.new({}, nil, nil, none: false)
58
59
  assert_equal({ indent: 2,
59
60
  padding: 2,
60
61
  separator: true,
62
+ sep_depth: 3,
61
63
  none: false }, pr.opts)
62
64
  end
63
65
 
@@ -26,14 +26,14 @@ Gem::Specification.new do |gem|
26
26
 
27
27
  gem.add_runtime_dependency 'docopt', '~> 0.6.0'
28
28
  gem.add_runtime_dependency 'inifile', '~> 3.0'
29
- gem.add_runtime_dependency 'wavefront-sdk', '~> 5.0', '>= 5.0.1'
29
+ gem.add_runtime_dependency 'wavefront-sdk', '~> 5.2'
30
30
 
31
- gem.add_development_dependency 'minitest', '~> 5.11', '>= 5.11.0'
31
+ gem.add_development_dependency 'minitest', '~> 5.14'
32
32
  gem.add_development_dependency 'rake', '~> 13.0'
33
- gem.add_development_dependency 'rubocop', '0.87.1'
33
+ gem.add_development_dependency 'rubocop', '0.91.0'
34
34
  gem.add_development_dependency 'spy', '~> 1.0.0'
35
- gem.add_development_dependency 'webmock', '~> 3.7'
35
+ gem.add_development_dependency 'webmock', '~> 3.8'
36
36
  gem.add_development_dependency 'yard', '~> 0.9.5'
37
37
 
38
- gem.required_ruby_version = Gem::Requirement.new('>= 2.4.0')
38
+ gem.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
39
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wavefront-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.0
4
+ version: 8.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Fisher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-07 00:00:00.000000000 Z
11
+ date: 2020-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docopt
@@ -44,40 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 5.0.1
47
+ version: '5.2'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '5.0'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 5.0.1
54
+ version: '5.2'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: minitest
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: 5.11.0
68
59
  - - "~>"
69
60
  - !ruby/object:Gem::Version
70
- version: '5.11'
61
+ version: '5.14'
71
62
  type: :development
72
63
  prerelease: false
73
64
  version_requirements: !ruby/object:Gem::Requirement
74
65
  requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- version: 5.11.0
78
66
  - - "~>"
79
67
  - !ruby/object:Gem::Version
80
- version: '5.11'
68
+ version: '5.14'
81
69
  - !ruby/object:Gem::Dependency
82
70
  name: rake
83
71
  requirement: !ruby/object:Gem::Requirement
@@ -98,14 +86,14 @@ dependencies:
98
86
  requirements:
99
87
  - - '='
100
88
  - !ruby/object:Gem::Version
101
- version: 0.87.1
89
+ version: 0.91.0
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
93
  requirements:
106
94
  - - '='
107
95
  - !ruby/object:Gem::Version
108
- version: 0.87.1
96
+ version: 0.91.0
109
97
  - !ruby/object:Gem::Dependency
110
98
  name: spy
111
99
  requirement: !ruby/object:Gem::Requirement
@@ -126,14 +114,14 @@ dependencies:
126
114
  requirements:
127
115
  - - "~>"
128
116
  - !ruby/object:Gem::Version
129
- version: '3.7'
117
+ version: '3.8'
130
118
  type: :development
131
119
  prerelease: false
132
120
  version_requirements: !ruby/object:Gem::Requirement
133
121
  requirements:
134
122
  - - "~>"
135
123
  - !ruby/object:Gem::Version
136
- version: '3.7'
124
+ version: '3.8'
137
125
  - !ruby/object:Gem::Dependency
138
126
  name: yard
139
127
  requirement: !ruby/object:Gem::Requirement
@@ -408,7 +396,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
408
396
  requirements:
409
397
  - - ">="
410
398
  - !ruby/object:Gem::Version
411
- version: 2.4.0
399
+ version: 2.5.0
412
400
  required_rubygems_version: !ruby/object:Gem::Requirement
413
401
  requirements:
414
402
  - - ">="