wavefront-cli 2.16.0 → 2.16.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce414a92ff374362682499450746072dbe34c460c189bd66d65013286baf3f29
4
- data.tar.gz: 138bfc2d8a0a9bdc1b295c89e65b076fbfbcb546ea1431d8e1f00b22c8811164
3
+ metadata.gz: de13eb5191a726a988bf5e7527a242d15ab045cbc4a7df386476fa7ba8c2c63d
4
+ data.tar.gz: b91a909c79cbb17c5dc80782348a7113e25e11da49f522e2b28addefbfcbf3eb
5
5
  SHA512:
6
- metadata.gz: e68d2827509748ccb6b5694c95c1b33eab50c0cf093332f6dbb3acc4e41586a9949b490dc3e6017edf3b788b029bb5dd1ac38b1b29e33aa3943591324340a93c
7
- data.tar.gz: 2da872908d448dfd09624aa5200b7189ff8badf1f2361733cf90739135b4a2e85d1bfb25b7ffa53d303fb55bd90b62a39b87b8307fa3259f4ec58d44b333714d
6
+ metadata.gz: b7f3aa5ebf65c897d373325018ff2f4ddd21d209e63af7ff10867b1dd3c3a9084db8e1a150e3d1a75463a9ff27c77d584d48e58b1b523403d62382e61dffbac3
7
+ data.tar.gz: 4b5e9fddcb5e4ddf782c4b8a9a525ff7cef4565456f7d0d9ab5de77041db178f1937372aa7f6bef5e96877b8ea16b40fc69a3ae4aef3712e840c6ab9989fdc0b
data/.travis.yml CHANGED
@@ -1,11 +1,12 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
- - 2.2.10
5
- - 2.3.8
6
- - 2.4.5
7
- - 2.5.3
8
- before_install: gem install bundler --no-rdoc --no-ri
4
+ - 2.2.10
5
+ - 2.3.8
6
+ - 2.4.5
7
+ - 2.5.3
8
+ - 2.6.0
9
+ before_install: gem install bundler --no-document
9
10
  deploy:
10
11
  provider: rubygems
11
12
  api_key:
data/HISTORY.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.16.1 (29/12/2018)
4
+
5
+ * Fix regression which broke query time ranges.
6
+ * Fix regression which made `--noop` silent unless `--verbose` was
7
+ also specified.
8
+ * Fix crash if `wf metric` matched no series.
9
+ * Fix bug calculating query granularity when only one end of a
10
+ time range is specified.
11
+ * Add much more comprehensive `--noop` tests.
12
+ * Better handling of `--noop` on commands which cannot support it.
13
+
3
14
  ## 2.16.0 (23/12/2018)
4
15
  * Add `config` command to quickly set up and manage profiles.
5
16
 
@@ -17,7 +17,10 @@ module WavefrontCli
17
17
  wf.unsnooze(options[:'<id>'])
18
18
  end
19
19
 
20
+ # rubocop:disable Metrics/AbcSize
20
21
  def do_delete
22
+ cannot_noop!
23
+
21
24
  word = if wf.describe(options[:'<id>']).status.code == 200
22
25
  'Soft'
23
26
  else
@@ -27,6 +30,7 @@ module WavefrontCli
27
30
  puts "#{word} deleting alert '#{options[:'<id>']}'."
28
31
  wf.delete(options[:'<id>'])
29
32
  end
33
+ # rubocop:enable Metrics/AbcSize
30
34
 
31
35
  def do_summary
32
36
  wf.summary
@@ -123,15 +123,17 @@ module WavefrontCli
123
123
  end
124
124
 
125
125
  # Make a common wavefront-sdk options object from standard CLI
126
- # options.
126
+ # options. We force verbosity on for a noop, otherwise we get no
127
+ # output.
127
128
  #
128
129
  # @return [Hash] containing `debug`, `verbose`, and `noop`.
129
130
  #
130
131
  def mk_opts
131
132
  ret = { debug: options[:debug],
132
- verbose: options[:verbose],
133
133
  noop: options[:noop] }
134
134
 
135
+ ret[:verbose] = options[:noop] ? true : options[:verbose]
136
+
135
137
  ret.merge!(extra_options) if respond_to?(:extra_options)
136
138
  ret
137
139
  end
@@ -387,12 +389,9 @@ module WavefrontCli
387
389
  end
388
390
 
389
391
  def do_update
392
+ cannot_noop!
390
393
  k, v = options[:'<key=value>'].split('=', 2)
391
394
  wf.update(options[:'<id>'], k => v)
392
- rescue NoMethodError
393
- raise(WavefrontCli::Exception::UnsupportedOperation,
394
- 'Updates require two API calls. We cannot do the second ' \
395
- 'when -n is set.')
396
395
  end
397
396
 
398
397
  def do_search(cond = options[:'<condition>'])
@@ -478,5 +477,13 @@ module WavefrontCli
478
477
 
479
478
  [resp, data]
480
479
  end
480
+
481
+ # Operations which do require multiple operations cannot be
482
+ # perormed as a no-op. Drop in a call to this method for those
483
+ # things. The exception is caught in controller.rb
484
+ #
485
+ def cannot_noop!
486
+ raise WavefrontCli::Exception::UnsupportedNoop if options[:noop]
487
+ end
481
488
  end
482
489
  end
@@ -134,6 +134,8 @@ class WavefrontCliController
134
134
  abort "Unsupported operation.\n#{e.message}"
135
135
  rescue WavefrontCli::Exception::UnsupportedOutput => e
136
136
  abort e.message
137
+ rescue WavefrontCli::Exception::UnsupportedNoop
138
+ abort 'Multiple API call operations cannot be performed as no-ops.'
137
139
  rescue Wavefront::Exception::UnsupportedWriter => e
138
140
  abort "Unsupported writer '#{e.message}'."
139
141
  rescue StandardError => e
@@ -14,7 +14,10 @@ module WavefrontCli
14
14
  wf.describe(options[:'<id>'], options[:version])
15
15
  end
16
16
 
17
+ # rubocop:disable Metrics/AbcSize
17
18
  def do_delete
19
+ cannot_noop!
20
+
18
21
  word = if wf.describe(options[:'<id>']).status.code == 200
19
22
  'Soft'
20
23
  else
@@ -24,6 +27,7 @@ module WavefrontCli
24
27
  puts "#{word} deleting dashboard '#{options[:'<id>']}'."
25
28
  wf.delete(options[:'<id>'])
26
29
  end
30
+ # rubocop:enable Metrics/AbcSize
27
31
 
28
32
  def do_history
29
33
  wf.history(options[:'<id>'])
@@ -15,6 +15,8 @@ module WavefrontCli
15
15
 
16
16
  # rubocop:disable Metrics/AbcSize
17
17
  def do_delete
18
+ cannot_noop!
19
+
18
20
  word = if wf.describe(options[:'<id>']).status.code == 200
19
21
  'Soft'
20
22
  else
@@ -6,7 +6,7 @@ module WavefrontDisplay
6
6
  #
7
7
  class Metric < Base
8
8
  def do_describe
9
- bail_out if no_data
9
+ bail_out if no_data?
10
10
 
11
11
  @data = data['hosts'].map do |h, _aggr|
12
12
  { host: h[:host], last_update: human_time(h[:last_update]) }
@@ -14,6 +14,7 @@ module WavefrontCli
14
14
  class UnparseableInput < RuntimeError; end
15
15
  class UnparseableResponse < RuntimeError; end
16
16
  class UnsupportedFileFormat < RuntimeError; end
17
+ class UnsupportedNoop < RuntimeError; end
17
18
  class UnsupportedOperation < RuntimeError; end
18
19
  class UnsupportedOutput < RuntimeError; end
19
20
  end
@@ -47,8 +47,6 @@ module WavefrontCli
47
47
  all_aliases
48
48
  end
49
49
 
50
- private
51
-
52
50
  # @return [Hash] options for the SDK query method
53
51
  #
54
52
  # rubocop:disable Metrics/AbcSize
@@ -71,22 +69,16 @@ module WavefrontCli
71
69
  # given, that; if not, ten minutes ago
72
70
  #
73
71
  def window_start
74
- if options[:start]
75
- parse_time(options[:start], true)
76
- else
77
- (Time.now - 600).to_i
78
- end
72
+ t = options[:start] ? options[:start].dup : Time.now - 600
73
+ parse_time(t, true)
79
74
  end
80
75
 
81
76
  # @return [Integer] end of query window. If one has been
82
77
  # given, that; if not, now
83
78
  #
84
79
  def window_end
85
- if options[:end]
86
- parse_time(options[:end], true)
87
- else
88
- Time.now.to_i
89
- end
80
+ t = options[:end] ? options[:end].dup : Time.now
81
+ parse_time(t, true)
90
82
  end
91
83
 
92
84
  def granularity(t_start, t_end)
@@ -96,6 +88,8 @@ module WavefrontCli
96
88
  # Work out a sensible granularity based on the time window
97
89
  #
98
90
  def default_granularity(window)
91
+ window = window.abs / 1000
92
+
99
93
  if window < 300
100
94
  :s
101
95
  elsif window < 10_800
@@ -1 +1 @@
1
- WF_CLI_VERSION = '2.16.0'.freeze
1
+ WF_CLI_VERSION = '2.16.1'.freeze
data/spec/spec_helper.rb CHANGED
@@ -48,7 +48,7 @@ def permutations
48
48
  e: ENDPOINT }]]
49
49
  end
50
50
 
51
- # Object returned by cmd_to_call. Has just enough methods to satisy
51
+ # Object returned by cmd_to_call. Has just enough methods to satisfy
52
52
  # the SDK
53
53
  #
54
54
  class DummyResponse
@@ -74,7 +74,8 @@ CANNED_RESPONSE = DummyResponse.new
74
74
  # @param cmd [String] command line args to supply to the Wavefront
75
75
  # command
76
76
  # @param call [Hash]
77
- #
77
+ # rubocop:disable Metrics/AbcSize
78
+ # rubocop:disable Metrics/PerceivedComplexity
78
79
  def cmd_to_call(word, args, call, sdk_class = nil)
79
80
  headers = { 'Accept': /.*/,
80
81
  'Accept-Encoding': /.*/,
@@ -91,7 +92,13 @@ def cmd_to_call(word, args, call, sdk_class = nil)
91
92
  describe "with #{word} #{args}" do
92
93
  fmts.each do |fmt|
93
94
  cmd = "#{word} #{args} #{opts} #{fmt}"
94
- uri = 'https://' + vals[:e] + call[:path]
95
+
96
+ uri = if call[:regex]
97
+ Regexp.new(call[:path])
98
+ else
99
+ 'https://' + vals[:e] + call[:path]
100
+ end
101
+
95
102
  h = headers.dup
96
103
  h[:Authorization] = "Bearer #{vals[:t]}"
97
104
 
@@ -121,6 +128,65 @@ def cmd_to_call(word, args, call, sdk_class = nil)
121
128
  end
122
129
  end
123
130
  end
131
+ # rubocop:enable Metrics/PerceivedComplexity
132
+ # rubocop:enable Metrics/AbcSize
133
+
134
+ # Test no-ops
135
+ #
136
+ # @param output [Array] [URI, params]
137
+ #
138
+ def cmd_noop(word, cmd, output, sdk_class = nil)
139
+ cmd = [word] + cmd.split + ['--noop'] + ["-t #{TOKEN} -E #{ENDPOINT}"]
140
+
141
+ exit_code = output == :impossible ? 1 : 0
142
+
143
+ it "runs #{cmd.join(' ')} and gets output without an API call" do
144
+ out, err = capture_io do
145
+ sdk_class ||= Object.const_get("WavefrontCli::#{word.capitalize}")
146
+ require "wavefront-sdk/#{sdk_class.name.split('::').last.downcase}"
147
+ begin
148
+ WavefrontCliController.new(cmd).run
149
+ rescue SystemExit => e
150
+ assert_equal(exit_code, e.status)
151
+ end
152
+ end
153
+
154
+ if output == :impossible
155
+ assert_equal('Multiple API call operations cannot be performed ' \
156
+ "as no-ops.\n", err)
157
+ assert_empty(out)
158
+ else
159
+ out = out.split("\n")
160
+ refute_empty(out)
161
+ assert_equal("SDK INFO: uri: #{output.first}", out.first)
162
+ if output.size > 1
163
+ assert_equal("SDK INFO: params: #{output.last}", out.last)
164
+ end
165
+ assert_empty(err)
166
+ end
167
+ end
168
+ end
169
+
170
+ # Wrapper to standard noop tests
171
+ #
172
+ def noop_tests(cmd, id, nodelete = false, pth = nil, sdk_class = nil)
173
+ pth ||= cmd
174
+ cmd_noop(cmd, 'list',
175
+ ["GET https://metrics.wavefront.com/api/v2/#{pth}",
176
+ offset: 0, limit: 100], sdk_class)
177
+ cmd_noop(cmd, "describe #{id}",
178
+ ["GET https://metrics.wavefront.com/api/v2/#{pth}/#{id}"],
179
+ sdk_class)
180
+
181
+ if nodelete == :skip
182
+ elsif nodelete
183
+ cmd_noop(cmd, "delete #{id}", :impossible, sdk_class)
184
+ else
185
+ cmd_noop(cmd, "delete #{id}",
186
+ ["DELETE https://metrics.wavefront.com/api/v2/#{pth}/#{id}"],
187
+ sdk_class)
188
+ end
189
+ end
124
190
 
125
191
  # Run a command we expect to fail, returning stdout and stderr
126
192
  #
@@ -88,4 +88,5 @@ describe "#{word} command" do
88
88
  body: search_body('in_maintenance'))
89
89
  cmd_to_call(word, 'queries', path: "/api/v2/#{word}?limit=999&offset=0")
90
90
  tag_tests(word, id, bad_id)
91
+ noop_tests(word, id, true)
91
92
  end
@@ -12,6 +12,7 @@ describe 'cloudintegration command' do
12
12
  missing_creds(word, ['list', "describe #{id}", "delete #{id}",
13
13
  "undelete #{id}"])
14
14
  list_tests(word, 'cloudintegration', k)
15
+ noop_tests(word, id, false, 'cloudintegration', k)
15
16
  cmd_to_call(word, "describe #{id}",
16
17
  { path: "/api/v2/cloudintegration/#{id}" }, k)
17
18
  cmd_to_call(word, "delete #{id}",
@@ -11,6 +11,7 @@ describe "#{word} command" do
11
11
  missing_creds(word, ['list', "describe #{id}", "delete #{id}",
12
12
  "undelete #{id}", "history #{id}"])
13
13
  list_tests(word)
14
+ noop_tests(word, id, true)
14
15
  cmd_to_call(word, "describe #{id}", path: "/api/v2/#{word}/#{id}")
15
16
  cmd_to_call(word, "describe -v 7 #{id}",
16
17
  path: "/api/v2/#{word}/#{id}/history/7")
@@ -14,6 +14,7 @@ describe "#{word} command" do
14
14
  missing_creds(word, ['list', "describe #{id}", "delete #{id}",
15
15
  "undelete #{id}", "history #{id}"])
16
16
  list_tests(word, nil, k)
17
+ noop_tests(word, id, true, word, k)
17
18
  cmd_to_call(word, "describe #{id}", { path: "/api/v2/#{word}/#{id}" }, k)
18
19
  cmd_to_call(word, "describe -v 7 #{id}",
19
20
  { path: "/api/v2/#{word}/#{id}/history/7" }, k)
@@ -10,16 +10,12 @@ word = 'link'
10
10
 
11
11
  describe "#{word} command" do
12
12
  missing_creds(word, ['list', "describe #{id}", "delete #{id}"])
13
-
14
13
  list_tests(word, 'extlink', k)
15
-
14
+ noop_tests(word, id, false, 'extlink', k)
16
15
  cmd_to_call(word, "describe #{id}", { path: "/api/v2/extlink/#{id}" }, k)
17
-
18
16
  cmd_to_call(word, "delete #{id}",
19
17
  { method: :delete, path: "/api/v2/extlink/#{id}" }, k)
20
-
21
18
  invalid_ids(word, ["describe #{bad_id}", "delete #{bad_id}"])
22
-
23
19
  cmd_to_call(word, "search -L 100 id~#{id}",
24
20
  { method: :post,
25
21
  path: '/api/v2/search/extlink',
@@ -12,7 +12,7 @@ describe "#{word} command" do
12
12
  "uninstall #{id}", "status #{id}", 'statuses',
13
13
  'manifests'])
14
14
  list_tests(word)
15
-
15
+ noop_tests(word, id, :skip, 'integration')
16
16
  cmd_to_call(word, "status #{id}", path: "/api/v2/#{word}/#{id}/status")
17
17
 
18
18
  cmd_to_call(word, "install #{id}",
@@ -11,6 +11,7 @@ word = 'window'
11
11
  describe "#{word} command" do
12
12
  missing_creds(word, ['list', "describe #{id}", "delete #{id}"])
13
13
  list_tests(word, 'maintenancewindow', k)
14
+ noop_tests(word, id, false, 'maintenancewindow', k)
14
15
  cmd_to_call(word, "describe #{id}",
15
16
  { path: "/api/v2/maintenancewindow/#{id}" }, k)
16
17
  cmd_to_call(word, "delete #{id}",
@@ -9,6 +9,11 @@ require_relative "../../lib/wavefront-cli/#{word}"
9
9
 
10
10
  describe "#{word} command" do
11
11
  missing_creds(word, ['list', "mark #{id}"])
12
+ cmd_noop(word, 'list',
13
+ ["GET https://metrics.wavefront.com/api/v2/#{word}",
14
+ offset: 0, limit: 100, unreadOnly: true])
15
+ cmd_noop(word, "mark #{id}",
16
+ ["POST https://metrics.wavefront.com/api/v2/#{word}/#{id}/read"])
12
17
 
13
18
  cmd_to_call(word, 'list',
14
19
  path: "/api/v2/#{word}?limit=100&offset=0&unreadOnly=true")
@@ -9,6 +9,9 @@ require_relative "../../lib/wavefront-cli/#{word}"
9
9
 
10
10
  describe "#{word} command" do
11
11
  missing_creds(word, ["describe #{id}"])
12
+ cmd_noop(word, "describe #{id}",
13
+ ["GET https://metrics.wavefront.com/api/v2/chart/#{word}/detail",
14
+ [[:m, 'dev.cli.test']]])
12
15
  cmd_to_call(word, "describe #{id}",
13
16
  path: "/api/v2/chart/#{word}/detail?m=#{id}")
14
17
  cmd_to_call(word, "describe -g ptn1 #{id}",
@@ -11,6 +11,7 @@ describe "#{word} command" do
11
11
  missing_creds(word, ['list', 'versions', "describe #{id}", "delete #{id}",
12
12
  "undelete #{id}", "rename #{id} newname"])
13
13
  list_tests(word)
14
+ noop_tests(word, id)
14
15
  cmd_to_call(word, "describe #{id}", path: "/api/v2/#{word}/#{id}")
15
16
  cmd_to_call(word, 'versions', path: "/api/v2/#{word}?limit=999&offset=0")
16
17
  cmd_to_call(word, "rename #{id} newname",
@@ -15,8 +15,23 @@ t2 = parse_time('12:10', true)
15
15
  o = '-g m -s 12:00'
16
16
 
17
17
  describe "#{word} command" do
18
+ cmd_to_call(word, "-s -2h #{q}",
19
+ path: '/api/v2/chart/api\\?g=m&i=false' \
20
+ '&listMode=true&q=ts\(%22dev.cli.test%22\)' \
21
+ '&s=[0-9]{13}&sorted=true&strict=true&summarization=mean',
22
+ regex: true)
23
+
18
24
  missing_creds(word, ["-g m -s 12:00 '#{q}'", "raw #{q}"])
19
25
 
26
+ cmd_noop(word, "-s #{t1} #{q}",
27
+ ['GET https://metrics.wavefront.com/api/v2/chart/api',
28
+ i: false, summarization: 'mean', listMode: true, strict: true,
29
+ sorted: true, q: q, g: :h, s: t1])
30
+
31
+ cmd_noop(word, 'raw dev.cli.test',
32
+ ['GET https://metrics.wavefront.com/api/v2/chart/raw',
33
+ metric: 'dev.cli.test'])
34
+
20
35
  cmd_to_call(word, "#{o} #{q}",
21
36
  path: '/api/v2/chart/api?g=m&i=false&listMode=true' \
22
37
  "&q=ts(%22dev.cli.test%22)&s=#{t1}&sorted=true" \
@@ -63,3 +78,35 @@ describe "#{word} command" do
63
78
  path: '/api/v2/chart/raw?metric=dev.cli.test&source=h1' \
64
79
  "&startTime=#{t1}&endTime=#{t2}")
65
80
  end
81
+
82
+ class QueryTest < MiniTest::Test
83
+ attr_reader :wf
84
+
85
+ def setup
86
+ @wf = WavefrontCli::Query.new(endpoint: ENDPOINT)
87
+ end
88
+
89
+ def test_window_start
90
+ assert_kind_of(Numeric, wf.window_start)
91
+ assert_equal(13, wf.window_start.to_s.length)
92
+ end
93
+
94
+ def test_window_end
95
+ assert_kind_of(Numeric, wf.window_start)
96
+ assert_equal(13, wf.window_start.to_s.length)
97
+ end
98
+
99
+ def test_default_granularity
100
+ minute = 60_000
101
+ assert_equal(:s, wf.default_granularity(100))
102
+ assert_equal(:s, wf.default_granularity(10_000))
103
+ assert_equal(:m, wf.default_granularity(120 * minute))
104
+ assert_equal(:h, wf.default_granularity(4 * 60 * minute))
105
+ assert_equal(:d, wf.default_granularity(4 * 24 * 60 * minute))
106
+ assert_equal(:s, wf.default_granularity(-100))
107
+ assert_equal(:s, wf.default_granularity(-10_000))
108
+ assert_equal(:m, wf.default_granularity(-120 * minute))
109
+ assert_equal(:h, wf.default_granularity(-4 * 60 * minute))
110
+ assert_equal(:d, wf.default_granularity(-4 * 24 * 60 * minute))
111
+ end
112
+ end
@@ -11,6 +11,7 @@ k = WavefrontCli::SavedSearch
11
11
  describe "#{word} command" do
12
12
  missing_creds(word, ['list', "describe #{id}", "delete #{id}"])
13
13
  list_tests(word, 'savedsearch', k)
14
+ noop_tests(word, id, false, 'savedsearch', k)
14
15
  cmd_to_call(word, "describe #{id}", { path: "/api/v2/#{word}/#{id}" }, k)
15
16
  cmd_to_call(word, "delete #{id}",
16
17
  { method: :delete, path: "/api/v2/#{word}/#{id}" }, k)
@@ -27,4 +27,8 @@ describe "#{word} command" do
27
27
  matchingMethod: 'STARTSWITH' }],
28
28
  sort: { field: 'id', ascending: true } },
29
29
  headers: JSON_POST_HEADERS)
30
+ cmd_noop(word, 'list',
31
+ ['GET https://metrics.wavefront.com/api/v2/source'])
32
+ cmd_noop(word, 'describe src',
33
+ ['GET https://metrics.wavefront.com/api/v2/source/src'])
30
34
  end
@@ -28,4 +28,8 @@ describe "#{word} command" do
28
28
  headers: hdrs)
29
29
 
30
30
  invalid_ids(word, ["describe #{bad_id}", "delete #{bad_id}"])
31
+ cmd_noop(word, 'list',
32
+ ["GET https://metrics.wavefront.com/api/v2/#{word}"])
33
+ cmd_noop(word, 'describe rob@a.com',
34
+ ["GET https://metrics.wavefront.com/api/v2/#{word}/rob@a.com"])
31
35
  end
@@ -10,6 +10,7 @@ require_relative "../../lib/wavefront-cli/#{word}"
10
10
  describe "#{word} command" do
11
11
  missing_creds(word, ['list', "describe #{id}", "delete #{id}"])
12
12
  list_tests(word)
13
+ noop_tests(word, id)
13
14
  cmd_to_call(word, "describe #{id}", path: "/api/v2/#{word}/#{id}")
14
15
  cmd_to_call(word, "delete #{id}", method: :delete,
15
16
  path: "/api/v2/#{word}/#{id}")
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: 2.16.0
4
+ version: 2.16.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-12-24 00:00:00.000000000 Z
11
+ date: 2018-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docopt
@@ -304,7 +304,7 @@ files:
304
304
  - spec/wavefront-cli/event_spec.rb
305
305
  - spec/wavefront-cli/externallink_spec.rb
306
306
  - spec/wavefront-cli/integration_spec.rb
307
- - spec/wavefront-cli/maintanancewindow_spec.rb
307
+ - spec/wavefront-cli/maintenancewindow_spec.rb
308
308
  - spec/wavefront-cli/message_spec.rb
309
309
  - spec/wavefront-cli/metric_spec.rb
310
310
  - spec/wavefront-cli/opt_handler_spec.rb
@@ -385,7 +385,7 @@ test_files:
385
385
  - spec/wavefront-cli/event_spec.rb
386
386
  - spec/wavefront-cli/externallink_spec.rb
387
387
  - spec/wavefront-cli/integration_spec.rb
388
- - spec/wavefront-cli/maintanancewindow_spec.rb
388
+ - spec/wavefront-cli/maintenancewindow_spec.rb
389
389
  - spec/wavefront-cli/message_spec.rb
390
390
  - spec/wavefront-cli/metric_spec.rb
391
391
  - spec/wavefront-cli/opt_handler_spec.rb