wavefront-cli 2.13.0 → 2.15.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 +4 -4
- data/HISTORY.md +14 -0
- data/lib/wavefront-cli/alert.rb +14 -2
- data/lib/wavefront-cli/base.rb +23 -2
- data/lib/wavefront-cli/cloudintegration.rb +8 -0
- data/lib/wavefront-cli/commands/alert.rb +3 -1
- data/lib/wavefront-cli/commands/cloudintegration.rb +2 -0
- data/lib/wavefront-cli/commands/dashboard.rb +5 -2
- data/lib/wavefront-cli/commands/integration.rb +4 -0
- data/lib/wavefront-cli/controller.rb +2 -0
- data/lib/wavefront-cli/dashboard.rb +15 -2
- data/lib/wavefront-cli/display/cloudintegration.rb +8 -0
- data/lib/wavefront-cli/display/dashboard.rb +8 -0
- data/lib/wavefront-cli/display/integration.rb +12 -0
- data/lib/wavefront-cli/integration.rb +16 -0
- data/lib/wavefront-cli/version.rb +1 -1
- data/spec/wavefront-cli/alert_spec.rb +5 -0
- data/spec/wavefront-cli/cloudintegration_spec.rb +8 -1
- data/spec/wavefront-cli/dashboard_spec.rb +4 -0
- data/spec/wavefront-cli/integration_spec.rb +22 -1
- data/wavefront-cli.gemspec +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acd004964f7c14a26b9857cdb8f2fc1781b52cfa1a1deee654db16a501203b69
|
4
|
+
data.tar.gz: 141f7be085e49e02624348da8edb1c37c5adac283ffd15d8574015c5230c6ad4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c88f783fe7710432538c7a583df5789034a583736cbcb2bc3356e4a1e3d6b4f415aa282aa710c0f72f5c6e9210f0fd173a0a54579b90d1578fefeff3b9adf212
|
7
|
+
data.tar.gz: 7dce2b8ac086b16353f1a73280398874e858e906893cd81a0d948e144727f8ebdcaf94c9001532bf8e1ca86f6b21fa4b959f6801c54405271d92800af85d9522
|
data/HISTORY.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 2.15.0 (18/12/2018)
|
4
|
+
* Gracefully handle ctrl-c.
|
5
|
+
* Add `install` and `uninstall` subcommands to `wf alert`.
|
6
|
+
* Add `enable` and `disable` subcommands to `wf cloudintegration`.
|
7
|
+
* Add `fav` and `unfav` commands to `wf dashboard`.
|
8
|
+
* Add `alert install`, `alert uninstall`, `installed`, and
|
9
|
+
`manifest` commands to `wf integration`.
|
10
|
+
* Require 2.2.0 of [wavefront-sdk](https://github.com/snltd/wavefront-sdk).
|
11
|
+
|
12
|
+
## 2.14.0 (15/12/2018)
|
13
|
+
* Add `-n` to `dashboard`'s `list` and `queries` commands to omit
|
14
|
+
system-owned dashboards.
|
15
|
+
* Let `queries` subcommand accept an optional ID.
|
16
|
+
|
3
17
|
## 2.13.0 (11/12/2018)
|
4
18
|
* Add CSV output for `query` command.
|
5
19
|
* Add multiple format outputs for all applicable `alert`
|
data/lib/wavefront-cli/alert.rb
CHANGED
@@ -55,11 +55,23 @@ module WavefrontCli
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def do_queries
|
58
|
-
|
59
|
-
|
58
|
+
resp, data = one_or_all
|
59
|
+
|
60
|
+
resp.tap do |r|
|
61
|
+
r.response.items = data.map do |a|
|
62
|
+
{ id: a.id, condition: a.condition }
|
63
|
+
end
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
67
|
+
def do_install
|
68
|
+
wf.install(options[:'<id>'])
|
69
|
+
end
|
70
|
+
|
71
|
+
def do_uninstall
|
72
|
+
wf.uninstall(options[:'<id>'])
|
73
|
+
end
|
74
|
+
|
63
75
|
# How many alerts are in the given state? If none, say so,
|
64
76
|
# rather than just printing nothing.
|
65
77
|
#
|
data/lib/wavefront-cli/base.rb
CHANGED
@@ -352,8 +352,13 @@ module WavefrontCli
|
|
352
352
|
# harm inheriting unneeded things. Some classes override them.
|
353
353
|
#
|
354
354
|
def do_list
|
355
|
-
|
356
|
-
|
355
|
+
list = if options[:all]
|
356
|
+
wf.list(ALL_PAGE_SIZE, :all)
|
357
|
+
else
|
358
|
+
wf.list(options[:offset] || 0, options[:limit] || 100)
|
359
|
+
end
|
360
|
+
|
361
|
+
respond_to?(:list_filter) ? list_filter(list) : list
|
357
362
|
end
|
358
363
|
|
359
364
|
def do_describe
|
@@ -457,5 +462,21 @@ module WavefrontCli
|
|
457
462
|
def import_to_create(raw)
|
458
463
|
raw.delete_if { |k, _v| k == 'id' }
|
459
464
|
end
|
465
|
+
|
466
|
+
# Return a detailed description of one item, if an ID has been
|
467
|
+
# given, or all items if it has not.
|
468
|
+
#
|
469
|
+
def one_or_all
|
470
|
+
if options[:'<id>']
|
471
|
+
resp = wf.describe(options[:'<id>'])
|
472
|
+
data = [resp.response]
|
473
|
+
else
|
474
|
+
options[:all] = true
|
475
|
+
resp = do_list
|
476
|
+
data = resp.response.items
|
477
|
+
end
|
478
|
+
|
479
|
+
[resp, data]
|
480
|
+
end
|
460
481
|
end
|
461
482
|
end
|
@@ -26,7 +26,9 @@ class WavefrontCommandAlert < WavefrontCommandBase
|
|
26
26
|
"tag add #{CMN} <id> <tag>",
|
27
27
|
"tag delete #{CMN} <id> <tag>",
|
28
28
|
"currently #{CMN} [-f format] <state>",
|
29
|
-
"queries #{CMN} [-f format] [-b]",
|
29
|
+
"queries #{CMN} [-f format] [-b] [<id>]",
|
30
|
+
"install #{CMN} <id>",
|
31
|
+
"uninstall #{CMN} <id>",
|
30
32
|
"summary #{CMN} [-f format] [-a]"]
|
31
33
|
end
|
32
34
|
|
@@ -20,6 +20,8 @@ class WavefrontCommandCloudintegration < WavefrontCommandBase
|
|
20
20
|
"describe #{CMN} [-f format] <id>",
|
21
21
|
"delete #{CMN} <id>",
|
22
22
|
"undelete #{CMN} <id>",
|
23
|
+
"enable #{CMN} <id>",
|
24
|
+
"disable #{CMN} <id>",
|
23
25
|
"import #{CMN} <file>",
|
24
26
|
"search #{CMN} [-al] [-f format] [-o offset] [-L limit] <condition>..."]
|
25
27
|
end
|
@@ -8,7 +8,7 @@ class WavefrontCommandDashboard < WavefrontCommandBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _commands
|
11
|
-
["list #{CMN} [-
|
11
|
+
["list #{CMN} [-alN] [-f format] [-o offset] [-L limit]",
|
12
12
|
"describe #{CMN} [-f format] [-v version] <id>",
|
13
13
|
"import #{CMN} [-f format] <file>",
|
14
14
|
"update #{CMN} <key=value> <id>",
|
@@ -16,7 +16,9 @@ class WavefrontCommandDashboard < WavefrontCommandBase
|
|
16
16
|
"undelete #{CMN} <id>",
|
17
17
|
"history #{CMN} [-f format] [-o offset] [-L limit] <id>",
|
18
18
|
"search #{CMN} [-al] [-f format] [-o offset] [-L limit] <condition>...",
|
19
|
-
"queries #{CMN} [-f format] [-b]",
|
19
|
+
"queries #{CMN} [-f format] [-b] [<id>]",
|
20
|
+
"fav #{CMN} <id>",
|
21
|
+
"unfav #{CMN} <id>",
|
20
22
|
tag_commands]
|
21
23
|
end
|
22
24
|
|
@@ -28,6 +30,7 @@ class WavefrontCommandDashboard < WavefrontCommandBase
|
|
28
30
|
'-L, --limit=COUNT number of dashboards or revisions to list',
|
29
31
|
'-v, --version=INTEGER version of dashboard',
|
30
32
|
'-b, --brief do not show dashboard names',
|
33
|
+
'-N, --no-system do not show system-owned dashboards',
|
31
34
|
'-f, --format=STRING output format']
|
32
35
|
end
|
33
36
|
end
|
@@ -15,6 +15,10 @@ class WavefrontCommandIntegration < WavefrontCommandBase
|
|
15
15
|
"manifests #{CMN}",
|
16
16
|
"status #{CMN} <id>",
|
17
17
|
"statuses #{CMN}",
|
18
|
+
"alert install #{CMN} <id>",
|
19
|
+
"alert uninstall #{CMN} <id>",
|
20
|
+
"installed #{CMN} [-f format]",
|
21
|
+
"manifests #{CMN} [-f format]",
|
18
22
|
"search #{CMN} [-al] [-f format] [-o offset] [-L limit] <condition>..."]
|
19
23
|
end
|
20
24
|
|
@@ -102,6 +102,8 @@ class WavefrontCliController
|
|
102
102
|
def run_command(cli_class_obj)
|
103
103
|
cli_class_obj.validate_opts
|
104
104
|
cli_class_obj.run
|
105
|
+
rescue Interrupt
|
106
|
+
abort "\nOperation aborted at user request."
|
105
107
|
rescue WavefrontCli::Exception::CredentialError => e
|
106
108
|
abort "Credential error. #{e.message}"
|
107
109
|
rescue WavefrontCli::Exception::UnsupportedOutput => e
|
@@ -5,6 +5,11 @@ module WavefrontCli
|
|
5
5
|
# CLI coverage for the v2 'dashboard' API.
|
6
6
|
#
|
7
7
|
class Dashboard < WavefrontCli::Base
|
8
|
+
def list_filter(list)
|
9
|
+
return list unless options[:nosystem]
|
10
|
+
list.tap { |l| l.response.items.delete_if { |d| d[:systemOwned] } }
|
11
|
+
end
|
12
|
+
|
8
13
|
def do_describe
|
9
14
|
wf.describe(options[:'<id>'], options[:version])
|
10
15
|
end
|
@@ -25,15 +30,23 @@ module WavefrontCli
|
|
25
30
|
end
|
26
31
|
|
27
32
|
def do_queries
|
28
|
-
resp =
|
33
|
+
resp, data = one_or_all
|
29
34
|
|
30
|
-
queries =
|
35
|
+
queries = data.each_with_object({}) do |d, a|
|
31
36
|
a[d.id] = extract_values(d, 'query')
|
32
37
|
end
|
33
38
|
|
34
39
|
resp.tap { |r| r.response.items = queries }
|
35
40
|
end
|
36
41
|
|
42
|
+
def do_fav
|
43
|
+
wf.favorite(options[:'<id>'])
|
44
|
+
end
|
45
|
+
|
46
|
+
def do_unfav
|
47
|
+
wf.unfavorite(options[:'<id>'])
|
48
|
+
end
|
49
|
+
|
37
50
|
# @param obj [Object] the thing to search
|
38
51
|
# @param key [String, Symbol] the key to search for
|
39
52
|
# @param aggr [Array] values of matched keys
|
@@ -8,5 +8,17 @@ module WavefrontDisplay
|
|
8
8
|
def do_list_brief
|
9
9
|
multicolumn(:id, :name, :description)
|
10
10
|
end
|
11
|
+
|
12
|
+
def do_installed
|
13
|
+
multicolumn(:id, :name, :description)
|
14
|
+
end
|
15
|
+
|
16
|
+
def do_install_all_alerts
|
17
|
+
puts "Installed alerts for #{options[:'<id>']}."
|
18
|
+
end
|
19
|
+
|
20
|
+
def do_uninstall_all_alerts
|
21
|
+
puts "Uninstalled alerts for #{options[:'<id>']}."
|
22
|
+
end
|
11
23
|
end
|
12
24
|
end
|
@@ -10,6 +10,10 @@ module WavefrontCli
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def do_manifests
|
13
|
+
if options[:format] == 'human'
|
14
|
+
abort 'Human-readable manifest output is not supported.'
|
15
|
+
end
|
16
|
+
|
13
17
|
wf.manifests
|
14
18
|
end
|
15
19
|
|
@@ -21,8 +25,20 @@ module WavefrontCli
|
|
21
25
|
wf.uninstall(options[:'<id>'])
|
22
26
|
end
|
23
27
|
|
28
|
+
def do_alert_install
|
29
|
+
wf.install_all_alerts(options[:'<id>'])
|
30
|
+
end
|
31
|
+
|
32
|
+
def do_alert_uninstall
|
33
|
+
wf.uninstall_all_alerts(options[:'<id>'])
|
34
|
+
end
|
35
|
+
|
24
36
|
def do_statuses
|
25
37
|
wf.statuses
|
26
38
|
end
|
39
|
+
|
40
|
+
def do_installed
|
41
|
+
wf.installed
|
42
|
+
end
|
27
43
|
end
|
28
44
|
end
|
@@ -1 +1 @@
|
|
1
|
-
WF_CLI_VERSION = '2.
|
1
|
+
WF_CLI_VERSION = '2.15.0'.freeze
|
@@ -47,9 +47,14 @@ describe "#{word} command" do
|
|
47
47
|
path: "/api/v2/#{word}/#{id}/snooze?seconds=800")
|
48
48
|
cmd_to_call(word, "unsnooze #{id}",
|
49
49
|
method: :post, path: "/api/v2/#{word}/#{id}/unsnooze")
|
50
|
+
cmd_to_call(word, "install #{id}",
|
51
|
+
method: :post, path: "/api/v2/#{word}/#{id}/install")
|
52
|
+
cmd_to_call(word, "uninstall #{id}",
|
53
|
+
method: :post, path: "/api/v2/#{word}/#{id}/uninstall")
|
50
54
|
cmd_to_call(word, 'summary', path: "/api/v2/#{word}/summary")
|
51
55
|
invalid_ids(word, ["describe #{bad_id}", "delete #{bad_id}",
|
52
56
|
"undelete #{bad_id}", "snooze #{bad_id}",
|
57
|
+
"install #{bad_id}", "uninstall #{bad_id}",
|
53
58
|
"snooze -T 500 #{bad_id}"])
|
54
59
|
tag_tests(word, id, bad_id)
|
55
60
|
end
|
@@ -28,6 +28,13 @@ describe 'cloudintegration command' do
|
|
28
28
|
cmd_to_call(word, "undelete #{id}",
|
29
29
|
{ method: :post,
|
30
30
|
path: "/api/v2/cloudintegration/#{id}/undelete" }, k)
|
31
|
+
cmd_to_call(word, "enable #{id}",
|
32
|
+
{ method: :post,
|
33
|
+
path: "/api/v2/cloudintegration/#{id}/enable" }, k)
|
34
|
+
cmd_to_call(word, "disable #{id}",
|
35
|
+
{ method: :post,
|
36
|
+
path: "/api/v2/cloudintegration/#{id}/disable" }, k)
|
31
37
|
invalid_ids(word, ["describe #{bad_id}", "delete #{bad_id}",
|
32
|
-
"undelete #{bad_id}"
|
38
|
+
"undelete #{bad_id}", "disable #{bad_id}",
|
39
|
+
"enable #{bad_id}"])
|
33
40
|
end
|
@@ -39,6 +39,10 @@ describe "#{word} command" do
|
|
39
39
|
sort: { field: 'id', ascending: true } },
|
40
40
|
headers: JSON_POST_HEADERS)
|
41
41
|
|
42
|
+
cmd_to_call(word, "fav #{id}",
|
43
|
+
method: :post, path: "/api/v2/#{word}/#{id}/favorite")
|
44
|
+
cmd_to_call(word, "unfav #{id}",
|
45
|
+
method: :post, path: "/api/v2/#{word}/#{id}/unfavorite")
|
42
46
|
cmd_to_call(word, "undelete #{id}",
|
43
47
|
method: :post, path: "/api/v2/#{word}/#{id}/undelete")
|
44
48
|
invalid_ids(word, ["describe #{bad_id}", "delete #{bad_id}",
|
@@ -12,12 +12,33 @@ describe "#{word} command" do
|
|
12
12
|
"uninstall #{id}", "status #{id}", 'statuses',
|
13
13
|
'manifests'])
|
14
14
|
list_tests(word)
|
15
|
-
|
15
|
+
|
16
|
+
cmd_to_call(word, "status #{id}", path: "/api/v2/#{word}/#{id}/status")
|
17
|
+
|
16
18
|
cmd_to_call(word, "install #{id}",
|
17
19
|
method: :post, path: "/api/v2/#{word}/#{id}/install")
|
20
|
+
|
18
21
|
cmd_to_call(word, "uninstall #{id}",
|
19
22
|
method: :post, path: "/api/v2/#{word}/#{id}/uninstall")
|
23
|
+
|
24
|
+
cmd_to_call(word, "alert install #{id}",
|
25
|
+
method: :post,
|
26
|
+
path: "/api/v2/#{word}/#{id}/install-all-alerts")
|
27
|
+
|
28
|
+
cmd_to_call(word, "alert uninstall #{id}",
|
29
|
+
method: :post,
|
30
|
+
path: "/api/v2/#{word}/#{id}/uninstall-all-alerts")
|
31
|
+
|
32
|
+
cmd_to_call(word, "describe #{id}", path: "/api/v2/#{word}/#{id}")
|
33
|
+
|
20
34
|
cmd_to_call(word, "status #{id}", path: "/api/v2/#{word}/#{id}/status")
|
35
|
+
|
36
|
+
cmd_to_call(word, 'installed', path: "/api/v2/#{word}/installed")
|
37
|
+
|
38
|
+
cmd_to_call(word, 'manifests', path: "/api/v2/#{word}/manifests")
|
39
|
+
|
21
40
|
invalid_ids(word, ["describe #{bad_id}", "install #{bad_id}",
|
41
|
+
"alert install #{bad_id}",
|
42
|
+
"alert uninstall #{bad_id}",
|
22
43
|
"uninstall #{bad_id}", "status #{bad_id}"])
|
23
44
|
end
|
data/wavefront-cli.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.require_paths = %w[lib]
|
24
24
|
|
25
25
|
gem.add_runtime_dependency 'docopt', '~> 0.6.0'
|
26
|
-
gem.add_runtime_dependency 'wavefront-sdk', '~> 2.
|
26
|
+
gem.add_runtime_dependency 'wavefront-sdk', '~> 2.2', '>= 2.2.0'
|
27
27
|
|
28
28
|
gem.add_development_dependency 'bundler', '~> 1.3'
|
29
29
|
gem.add_development_dependency 'minitest', '~> 5.11', '>= 5.11.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: 2.
|
4
|
+
version: 2.15.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: 2018-12-
|
11
|
+
date: 2018-12-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docopt
|
@@ -30,20 +30,20 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.
|
33
|
+
version: 2.2.0
|
34
34
|
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: '2.
|
36
|
+
version: '2.2'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 2.
|
43
|
+
version: 2.2.0
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '2.
|
46
|
+
version: '2.2'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|