wavefront-cli 1.0.1 → 1.0.2

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
  SHA1:
3
- metadata.gz: 8b927f378e45604265322586b41adfc505f6f817
4
- data.tar.gz: 04c4a0d7ac7a0c8f09d956a45d130ceee0380fde
3
+ metadata.gz: d5fe5e6006694e0e3683bcc58dbb55e1ad703ff8
4
+ data.tar.gz: 96154590a344297b93be93b7e3cad81f42ffbb4d
5
5
  SHA512:
6
- metadata.gz: 1c761352761708b57c2d1244317324e3ffa2abed5363b28ca76208aef41ad7ce59861e566784ae82d361653b0245a0fd2c27ab672cd5af137594934454dc0ddd
7
- data.tar.gz: 22a3fb23be4711fa52b39a6c57708f01c5a9993748b7d0d6849a2697b86897aaf7b3b269c2ba01d94fd2d92957bb4d7ee7a3ba13ed9a2f046c7ed22b9a9837bd
6
+ metadata.gz: 981838fe6e017bd0bb1d1c14612ef2cec3ff746bcceb90cbac243c9b245aeb02010f76eadb6aac1d75b2c4e3945186c771e49f1a52465948e161dea62c7aa3ab
7
+ data.tar.gz: b760924a3672f4e1ff8b909940feb2d13cd9003d83a1be7188e2330d71ada5b134af80e9ae4e5abae3817023d40ab37da27bf351e9287592ad04b2c65dff8811
data/README.md CHANGED
@@ -5,8 +5,20 @@
5
5
  This package provides a command-line interface to Wavefront's API. Each API path
6
6
  is covered by a different command keyword.
7
7
 
8
+ The gem is hosted [on
9
+ Rubygems](https://rubygems.org/gems/wavefront-cli) and can be
10
+ installed with
11
+
12
+ ```
13
+ $ gem install wavefront-cli
14
+ ```
15
+
8
16
  It is built on [the Wavefront Ruby
9
- SDK](https://github.com/snltd/wavefront-sdk) and requires Ruby >= 2.2.
17
+ SDK](https://github.com/snltd/wavefront-sdk) and requires Ruby >=
18
+ 2.2. It has no "native extension" dependencies.
19
+
20
+ I also maintain [a reasonably thorough
21
+ tutorial](http://sysdef.xyz/post/2017-07-26-wavefront-cli).
10
22
 
11
23
  ```
12
24
  $ wf --help
@@ -28,8 +28,8 @@ class WavefrontCommandEvent < WavefrontCommandBase
28
28
  '-l, --long list events in detail',
29
29
  '-o, --cursor=EVENT start listing from given event',
30
30
  '-L, --limit=COUNT number of events to list',
31
- '-s, --start=TIME time at which event/window begins',
32
- '-e, --end=TIME time at which even/window ends',
31
+ '-s, --start=TIME time at which event begins',
32
+ '-e, --end=TIME time at which event ends',
33
33
  '-S, --severity=SEVERITY severity of event',
34
34
  '-i, --instant create an instantaneous event',
35
35
  '-T, --type=TYPE type of event',
@@ -18,6 +18,10 @@ class WavefrontCommandWindow < WavefrontCommandBase
18
18
  def _commands
19
19
  ["list #{CMN} [-l] [-f format] [-o offset] [-L limit]",
20
20
  "describe #{CMN} [-f format] <id>",
21
+ "create #{CMN} -d reason [-s time] [-e time] " \
22
+ '[-A alert_tag...] [-T host_tag...] [-H host...] <title>',
23
+ "close #{CMN} <id>",
24
+ "extend #{CMN} (by|to) <time> <id>",
21
25
  "delete #{CMN} <id>",
22
26
  "import #{CMN} <file>",
23
27
  "update #{CMN} <key=value> <id>",
@@ -29,6 +33,12 @@ class WavefrontCommandWindow < WavefrontCommandBase
29
33
  '-l, --long list maintenance windows in detail',
30
34
  '-o, --offset=n start from nth maintenance window',
31
35
  '-L, --limit=COUNT number of maintenance windows to list',
36
+ '-d, --desc=STRING reason for maintenance window',
37
+ '-s, --start=TIME time at which window begins',
38
+ '-e, --end=TIME time at which window ends',
39
+ '-A, --atag=STRING alert tag to which window applies',
40
+ '-H, --host=STRING host to which window applies',
41
+ '-T, --htag=STRING host tag to which window applies',
32
42
  '-f, --format=STRING output format']
33
43
  end
34
44
  end
@@ -6,9 +6,9 @@ require_relative './opt_handler'
6
6
  require_relative './exception'
7
7
 
8
8
  # $LOAD_PATH.<< Pathname.new(__FILE__).dirname.realpath.parent.parent
9
- # .parent + 'lib'
9
+ # .parent + 'lib'
10
10
  # $LOAD_PATH.<< Pathname.new(__FILE__).dirname.realpath.parent.parent
11
- # .parent + 'wavefront-sdk' + 'lib'
11
+ # .parent + 'wavefront-sdk' + 'lib'
12
12
 
13
13
  CMD_DIR = Pathname.new(__FILE__).dirname + 'commands'
14
14
 
@@ -1,3 +1,4 @@
1
+ require 'wavefront-sdk/mixins'
1
2
  require_relative './base'
2
3
 
3
4
  module WavefrontCli
@@ -5,6 +6,9 @@ module WavefrontCli
5
6
  # CLI coverage for the v2 'maintenancewindow' API.
6
7
  #
7
8
  class MaintenanceWindow < WavefrontCli::Base
9
+
10
+ include Wavefront::Mixins
11
+
8
12
  def validator_method
9
13
  :wf_maintenance_window_id?
10
14
  end
@@ -12,5 +16,54 @@ module WavefrontCli
12
16
  def validator_exception
13
17
  Wavefront::Exception::InvalidMaintenanceWindowId
14
18
  end
19
+
20
+ def do_create
21
+ body = { title: options[:'<title>'] }
22
+
23
+ body[:startTimeInSeconds] = if options[:start]
24
+ parse_time(options[:start])
25
+ else
26
+ Time.now.to_i
27
+ end
28
+
29
+ body[:endTimeInSeconds] = if options[:end]
30
+ parse_time(options[:end])
31
+ else
32
+ body[:startTimeInSeconds] + 3600
33
+ end
34
+
35
+ body[:reason] = options[:desc] if options[:desc]
36
+
37
+ [%i(CustomerTags atag), %i(HostTags htag),
38
+ %i(HostNames host)].each do |key, opt|
39
+ k = ('relevant' + key.to_s).to_sym
40
+ body[k] = options[opt] unless options[opt].empty?
41
+ end
42
+
43
+ wf.create(body)
44
+ end
45
+
46
+ def do_extend_by
47
+ begin
48
+ to_add = options[:'<time>'].to_seconds
49
+ rescue
50
+ abort "Could not parse time range '#{options[:'<time>']}'."
51
+ end
52
+
53
+ old_end = wf.describe(options[:'<id>']).response.endTimeInSeconds
54
+ change_end_time(old_end + to_add)
55
+ end
56
+
57
+ def do_extend_to
58
+ change_end_time(parse_time(options[:'<time>']))
59
+ end
60
+
61
+ def do_close
62
+ change_end_time(Time.now.to_i)
63
+ end
64
+
65
+ def change_end_time(ts)
66
+ wf.update(options[:'<id>'], { endTimeInSeconds: ts })
67
+ end
15
68
  end
16
69
  end
@@ -56,4 +56,29 @@ class String
56
56
  def scan_line(width)
57
57
  scan(/\S.{0,#{width}}\S(?=\s|$)|\S+/)
58
58
  end
59
+
60
+ def to_seconds
61
+ begin
62
+ number, unit = self.match(/^(\d+)([smhdw])$/).captures
63
+ rescue
64
+ raise ArgumentError
65
+ end
66
+
67
+ factor = case unit
68
+ when 's'
69
+ 1
70
+ when 'm'
71
+ 60
72
+ when 'h'
73
+ 3600
74
+ when 'd'
75
+ 86400
76
+ when 'w'
77
+ 604800
78
+ else
79
+ raise ArgumentError
80
+ end
81
+
82
+ number.to_i * factor
83
+ end
59
84
  end
@@ -1 +1 @@
1
- WF_CLI_VERSION = '1.0.1'.freeze
1
+ WF_CLI_VERSION = '1.0.2'.freeze
@@ -17,7 +17,7 @@ describe "#{word} command" do
17
17
  { method: :delete, path: "/api/v2/maintenancewindow/#{id}" }, k)
18
18
  invalid_ids(word, ["describe #{bad_id}", "delete #{bad_id}"])
19
19
  cmd_to_call(word, "search -o 100 id=#{id}",
20
- { method: :post, path: "/api/v2/search/maintenancewindow",
20
+ { method: :post, path: '/api/v2/search/maintenancewindow',
21
21
  body: { limit: 10,
22
22
  offset: "100",
23
23
  query: [{key: 'id',
@@ -26,4 +26,12 @@ describe "#{word} command" do
26
26
  sort: {field: 'id', ascending: true}},
27
27
  headers: JSON_POST_HEADERS },
28
28
  WavefrontCli::MaintenanceWindow)
29
+
30
+ cmd_to_call(word, 'create -d testing -H shark tester',
31
+ { method: :post, path: '/api/v2/maintenancewindow',
32
+ body: {
33
+ },
34
+ headers: JSON_POST_HEADERS },
35
+ WavefrontCli::MaintenanceWindow)
36
+
29
37
  end
@@ -34,18 +34,13 @@ class StringTest < MiniTest::Test
34
34
  assert_equal(str.opt_fold(100), " #{str}\n")
35
35
  end
36
36
 
37
- #def test_fold_two_column_one_fold
38
- #str = "a reasonably long string which must be folded just once"
39
- #
40
- #assert_equal(str.fold(40), "a reasonably long string which" \
41
- #"\n must be folded just once")
42
- #
43
- ##assert_equal(" key a very long string whose very length\n" \
44
- #" means that the method is going to\n" \
45
- #" have to fold it twice",
46
- #
47
- #wf.mk_line('key', 'a very long string whose very length means that the method is going to have to fold it twice', 40))
48
- #
49
- #
50
- #end
37
+ def test_to_seconds
38
+ assert_equal(14, '14s'.to_seconds)
39
+ assert_equal(300, '5m'.to_seconds)
40
+ assert_equal(10800, '3h'.to_seconds)
41
+ assert_equal(1209600, '2w'.to_seconds)
42
+ assert_raises(ArgumentError) { 'm'.to_seconds }
43
+ assert_raises(ArgumentError) { '3m5s'.to_seconds }
44
+ end
51
45
  end
46
+
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
23
23
  gem.require_paths = %w(lib)
24
24
 
25
25
  gem.add_dependency 'docopt', '0.6.0'
26
- gem.add_dependency 'wavefront-sdk', '>= 1.0.1'
26
+ gem.add_dependency 'wavefront-sdk', '>= 1.0.2'
27
27
 
28
28
  gem.add_development_dependency 'bundler', '~> 1.3'
29
29
  gem.add_development_dependency 'rake', '~> 12.0'
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: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Fisher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-31 00:00:00.000000000 Z
11
+ date: 2017-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docopt
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.1
33
+ version: 1.0.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.1
40
+ version: 1.0.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement