wavefront-cli 2.18.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +7 -0
- data/.travis.yml +4 -5
- data/HISTORY.md +20 -1
- data/README.md +79 -29
- data/lib/wavefront-cli/base.rb +26 -2
- data/lib/wavefront-cli/commands/alert.rb +10 -10
- data/lib/wavefront-cli/commands/base.rb +15 -2
- data/lib/wavefront-cli/commands/cloudintegration.rb +3 -3
- data/lib/wavefront-cli/commands/config.rb +2 -1
- data/lib/wavefront-cli/commands/dashboard.rb +8 -6
- data/lib/wavefront-cli/commands/derivedmetric.rb +5 -5
- data/lib/wavefront-cli/commands/event.rb +3 -3
- data/lib/wavefront-cli/commands/integration.rb +5 -5
- data/lib/wavefront-cli/commands/link.rb +3 -3
- data/lib/wavefront-cli/commands/message.rb +2 -2
- data/lib/wavefront-cli/commands/metric.rb +1 -1
- data/lib/wavefront-cli/commands/notificant.rb +3 -3
- data/lib/wavefront-cli/commands/proxy.rb +3 -3
- data/lib/wavefront-cli/commands/query.rb +3 -3
- data/lib/wavefront-cli/commands/savedsearch.rb +3 -3
- data/lib/wavefront-cli/commands/settings.rb +22 -0
- data/lib/wavefront-cli/commands/source.rb +3 -3
- data/lib/wavefront-cli/commands/user.rb +4 -4
- data/lib/wavefront-cli/commands/usergroup.rb +5 -8
- data/lib/wavefront-cli/commands/webhook.rb +3 -3
- data/lib/wavefront-cli/commands/window.rb +3 -3
- data/lib/wavefront-cli/commands/write.rb +6 -4
- data/lib/wavefront-cli/config.rb +14 -0
- data/lib/wavefront-cli/controller.rb +2 -0
- data/lib/wavefront-cli/dashboard.rb +133 -14
- data/lib/wavefront-cli/display/base.rb +28 -7
- data/lib/wavefront-cli/display/dashboard.rb +32 -8
- data/lib/wavefront-cli/display/distribution.rb +4 -1
- data/lib/wavefront-cli/display/printer/long.rb +149 -140
- data/lib/wavefront-cli/display/printer/terse.rb +19 -42
- data/lib/wavefront-cli/display/query.rb +6 -0
- data/lib/wavefront-cli/display/settings.rb +21 -0
- data/lib/wavefront-cli/display/write.rb +12 -5
- data/lib/wavefront-cli/event.rb +1 -1
- data/lib/wavefront-cli/exception.rb +1 -0
- data/lib/wavefront-cli/settings.rb +37 -0
- data/lib/wavefront-cli/stdlib/array.rb +20 -0
- data/lib/wavefront-cli/stdlib/string.rb +8 -0
- data/lib/wavefront-cli/user.rb +1 -1
- data/lib/wavefront-cli/version.rb +1 -1
- data/lib/wavefront-cli/write.rb +310 -10
- data/spec/.rubocop.yml +3 -0
- data/spec/spec_helper.rb +81 -1
- data/spec/wavefront-cli/alert_spec.rb +1 -0
- data/spec/wavefront-cli/cloudintegration_spec.rb +1 -0
- data/spec/wavefront-cli/dashboard_spec.rb +47 -4
- data/spec/wavefront-cli/derivedmetric_spec.rb +1 -0
- data/spec/wavefront-cli/display/base_spec.rb +16 -9
- data/spec/wavefront-cli/display/printer/long_spec.rb +75 -106
- data/spec/wavefront-cli/display/printer/terse_spec.rb +33 -21
- data/spec/wavefront-cli/event_spec.rb +1 -0
- data/spec/wavefront-cli/externallink_spec.rb +1 -0
- data/spec/wavefront-cli/integration_spec.rb +1 -0
- data/spec/wavefront-cli/maintenancewindow_spec.rb +1 -0
- data/spec/wavefront-cli/proxy_spec.rb +2 -0
- data/spec/wavefront-cli/query_spec.rb +9 -0
- data/spec/wavefront-cli/resources/display/alert-human-long +24 -0
- data/spec/wavefront-cli/resources/display/alert-input.json +37 -0
- data/spec/wavefront-cli/resources/display/alerts-human-terse +9 -0
- data/spec/wavefront-cli/resources/display/alerts-input.json +1 -0
- data/spec/wavefront-cli/resources/display/user-human-long +19 -0
- data/spec/wavefront-cli/resources/display/user-human-long-no_sep +18 -0
- data/spec/wavefront-cli/resources/display/user-input.json +1 -0
- data/spec/wavefront-cli/resources/responses/README.md +2 -0
- data/spec/wavefront-cli/resources/responses/alert-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/backups.json +1 -0
- data/spec/wavefront-cli/resources/responses/cloudintegration-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/dashboard-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/derivedmetric-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/event-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/integration-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/link-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/notificant-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/proxy-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/query-cpu.json +1 -0
- data/spec/wavefront-cli/resources/responses/savedsearch-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/user-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/usergroup-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/webhook-list.json +1 -0
- data/spec/wavefront-cli/resources/responses/window-list.json +1 -0
- data/spec/wavefront-cli/savedsearch_spec.rb +1 -0
- data/spec/wavefront-cli/settings_spec.rb +19 -0
- data/spec/wavefront-cli/stdlib/array_spec.rb +20 -0
- data/spec/wavefront-cli/stdlib/string_spec.rb +13 -1
- data/spec/wavefront-cli/user_spec.rb +1 -0
- data/spec/wavefront-cli/usergroup_spec.rb +1 -0
- data/spec/wavefront-cli/webhook_spec.rb +1 -0
- data/spec/wavefront-cli/write_spec.rb +167 -0
- data/wavefront-cli.gemspec +3 -4
- metadata +65 -31
- data/.gitlab-ci.yml +0 -16
- data/lib/wavefront-cli/base_write.rb +0 -298
- data/lib/wavefront-cli/commands/report.rb +0 -37
- data/lib/wavefront-cli/display/printer/base.rb +0 -24
- data/lib/wavefront-cli/display/report.rb +0 -17
- data/lib/wavefront-cli/report.rb +0 -18
- data/spec/wavefront-cli/display/printer/base_spec.rb +0 -20
@@ -8,15 +8,15 @@ class WavefrontCommandEvent < WavefrontCommandBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _commands
|
11
|
-
["list #{CMN} [-l] [-O fields] [-
|
11
|
+
["list #{CMN} [-l] [-O fields] [-s start] [-e end] " \
|
12
12
|
'[-L limit] [-o cursor]',
|
13
|
-
"describe #{CMN}
|
13
|
+
"describe #{CMN} <id>",
|
14
14
|
"create #{CMN} [-d description] [-s time] [-i | -e time] " \
|
15
15
|
'[-S severity] [-T type] [-H host...] [-g tag...] [-N] <event>',
|
16
16
|
"close #{CMN} [<id>]",
|
17
17
|
"delete #{CMN} <id>",
|
18
18
|
"update #{CMN} <key=value> <id>",
|
19
|
-
"search #{CMN} [-
|
19
|
+
"search #{CMN} [-o offset] [-L limit] [-l] <condition>...",
|
20
20
|
"wrap #{CMN} [-C command] [-d description] [-S severity] [-T type] " \
|
21
21
|
'[-H host...] [-g tag...] <event>',
|
22
22
|
tag_commands,
|
@@ -8,8 +8,8 @@ class WavefrontCommandIntegration < WavefrontCommandBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _commands
|
11
|
-
["list #{CMN} [-al] [-O fields] [-
|
12
|
-
"describe #{CMN}
|
11
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
12
|
+
"describe #{CMN} <id>",
|
13
13
|
"install #{CMN} <id>",
|
14
14
|
"uninstall #{CMN} <id>",
|
15
15
|
"manifests #{CMN}",
|
@@ -17,9 +17,9 @@ class WavefrontCommandIntegration < WavefrontCommandBase
|
|
17
17
|
"statuses #{CMN}",
|
18
18
|
"alert install #{CMN} <id>",
|
19
19
|
"alert uninstall #{CMN} <id>",
|
20
|
-
"installed #{CMN}
|
21
|
-
"manifests #{CMN}
|
22
|
-
"search #{CMN} [-al] [-
|
20
|
+
"installed #{CMN}",
|
21
|
+
"manifests #{CMN}",
|
22
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>..."]
|
23
23
|
end
|
24
24
|
|
25
25
|
def _options
|
@@ -16,14 +16,14 @@ class WavefrontCommandLink < WavefrontCommandBase
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def _commands
|
19
|
-
["list #{CMN} [-al] [-O fields] [-
|
20
|
-
"describe #{CMN}
|
19
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
20
|
+
"describe #{CMN} <id>",
|
21
21
|
"create #{CMN} [-m regex] [-s regex] [-p str=regex...] <name> " \
|
22
22
|
'<description> <template>',
|
23
23
|
"delete #{CMN} <id>",
|
24
24
|
"import #{CMN} <file>",
|
25
25
|
"update #{CMN} <key=value> <id>",
|
26
|
-
"search #{CMN} [-al] [-
|
26
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>..."]
|
27
27
|
end
|
28
28
|
|
29
29
|
def _options
|
@@ -8,8 +8,8 @@ class WavefrontCommandMessage < WavefrontCommandBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _commands
|
11
|
-
["list #{CMN} [-al] [-O fields] [-
|
12
|
-
"mark #{CMN}
|
11
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
12
|
+
"mark #{CMN} <id>"]
|
13
13
|
end
|
14
14
|
|
15
15
|
def _options
|
@@ -8,13 +8,13 @@ class WavefrontCommandNotificant < WavefrontCommandBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _commands
|
11
|
-
["list #{CMN} [-al] [-O fields] [-
|
12
|
-
"describe #{CMN}
|
11
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
12
|
+
"describe #{CMN} <id>",
|
13
13
|
"import #{CMN} <file>",
|
14
14
|
"delete #{CMN} <id>",
|
15
15
|
"test #{CMN} <id>",
|
16
16
|
"update #{CMN} <key=value> <id>",
|
17
|
-
"search #{CMN} [-al] [-
|
17
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>..."]
|
18
18
|
end
|
19
19
|
|
20
20
|
def _options
|
@@ -8,12 +8,12 @@ class WavefrontCommandProxy < WavefrontCommandBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _commands
|
11
|
-
["list #{CMN} [-al] [-O fields] [-
|
12
|
-
"describe #{CMN}
|
11
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
12
|
+
"describe #{CMN} <id>",
|
13
13
|
"delete #{CMN} <id>",
|
14
14
|
"undelete #{CMN} <id>",
|
15
15
|
"rename #{CMN} <id> <name>",
|
16
|
-
"search #{CMN} [-al] [-
|
16
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>...",
|
17
17
|
"versions #{CMN}"]
|
18
18
|
end
|
19
19
|
|
@@ -9,11 +9,11 @@ class WavefrontCommandQuery < WavefrontCommandBase
|
|
9
9
|
|
10
10
|
def _commands
|
11
11
|
['aliases [-DV] [-c file] [-P profile]',
|
12
|
-
"#{CMN} [-g granularity] [-s time] [-e time]
|
12
|
+
"#{CMN} [-g granularity] [-s time] [-e time] " \
|
13
13
|
'[-WikvO] [-S mode] [-N name] [-p points] [-F options] <query>',
|
14
|
-
"raw #{CMN} [-H host] [-s time] [-e time]
|
14
|
+
"raw #{CMN} [-H host] [-s time] [-e time] " \
|
15
15
|
'[-F options] <metric>',
|
16
|
-
"run #{CMN} [-g granularity] [-s time] [-e time]
|
16
|
+
"run #{CMN} [-g granularity] [-s time] [-e time] " \
|
17
17
|
'[-F options] [-WkivO] [-S mode] [-N name] [-p points] <alias>']
|
18
18
|
end
|
19
19
|
|
@@ -16,11 +16,11 @@ class WavefrontCommandSavedsearch < WavefrontCommandBase
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def _commands
|
19
|
-
["list #{CMN} [-al] [-O fields] [-
|
20
|
-
"describe #{CMN}
|
19
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
20
|
+
"describe #{CMN} <id>",
|
21
21
|
"delete #{CMN} <id>",
|
22
22
|
"import #{CMN} <file>",
|
23
|
-
"search #{CMN} [-al] [-
|
23
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>..."]
|
24
24
|
end
|
25
25
|
|
26
26
|
def _options
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
# Define the settings command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandSettings < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'view and manage system preferences'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _commands
|
11
|
+
["list permissions #{CMN} [-l] [-O fields]",
|
12
|
+
"show preferences #{CMN} [-l] [-O fields]",
|
13
|
+
"update #{CMN} <key=value>...",
|
14
|
+
"default usergroups #{CMN} [-l] [-O fields]"]
|
15
|
+
end
|
16
|
+
|
17
|
+
def _options
|
18
|
+
[common_options,
|
19
|
+
'-l, --long list derived metrics in detail',
|
20
|
+
'-O, --fields=F1,F2,... only show given fields']
|
21
|
+
end
|
22
|
+
end
|
@@ -8,12 +8,12 @@ class WavefrontCommandSource < WavefrontCommandBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _commands
|
11
|
-
["list #{CMN} [-l] [-O fields] [-
|
12
|
-
"describe #{CMN}
|
11
|
+
["list #{CMN} [-l] [-O fields] [-o cursor] [-L limit] [-a]",
|
12
|
+
"describe #{CMN} <id>",
|
13
13
|
"description set #{CMN} <id> <description>",
|
14
14
|
"description clear #{CMN} <id>",
|
15
15
|
"clear #{CMN} <id>",
|
16
|
-
"search #{CMN} [-
|
16
|
+
"search #{CMN} [-o offset] [-L limit] [-l] <condition>...",
|
17
17
|
tag_commands]
|
18
18
|
end
|
19
19
|
|
@@ -13,9 +13,9 @@ class WavefrontCommandUser < WavefrontCommandBase
|
|
13
13
|
#
|
14
14
|
def _commands
|
15
15
|
["list #{CMN} [-l] [-O fields]",
|
16
|
-
"describe #{CMN}
|
17
|
-
"create #{CMN} [-e] [-m permission...] [-g group...]
|
18
|
-
"invite #{CMN} [-m permission...] [-g group...]
|
16
|
+
"describe #{CMN} <id>",
|
17
|
+
"create #{CMN} [-e] [-m permission...] [-g group...] <id>",
|
18
|
+
"invite #{CMN} [-m permission...] [-g group...] <id>",
|
19
19
|
"update #{CMN} <key=value> <id>",
|
20
20
|
"delete #{CMN} <user>...",
|
21
21
|
"import #{CMN} <file>",
|
@@ -24,7 +24,7 @@ class WavefrontCommandUser < WavefrontCommandBase
|
|
24
24
|
"leave #{CMN} <id> <group>...",
|
25
25
|
"grant #{CMN} <privilege> to <id>",
|
26
26
|
"revoke #{CMN} <privilege> from <id>",
|
27
|
-
"search #{CMN} [-al] [-
|
27
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>..."]
|
28
28
|
end
|
29
29
|
|
30
30
|
def _options
|
@@ -16,8 +16,8 @@ class WavefrontCommandUsergroup < WavefrontCommandBase
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def _commands
|
19
|
-
["list #{CMN} [-al] [-O fields] [-
|
20
|
-
"describe #{CMN}
|
19
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
20
|
+
"describe #{CMN} <id>",
|
21
21
|
"create #{CMN} [-p permission...] <name>",
|
22
22
|
"delete #{CMN} <id>",
|
23
23
|
"import #{CMN} <file>",
|
@@ -28,7 +28,7 @@ class WavefrontCommandUsergroup < WavefrontCommandBase
|
|
28
28
|
"remove user #{CMN} <id> <user>...",
|
29
29
|
"grant #{CMN} <permission> to <id>",
|
30
30
|
"revoke #{CMN} <permission> from <id>",
|
31
|
-
"search #{CMN} [-al] [-
|
31
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>..."]
|
32
32
|
end
|
33
33
|
|
34
34
|
def _options
|
@@ -43,10 +43,7 @@ class WavefrontCommandUsergroup < WavefrontCommandBase
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def postscript
|
46
|
-
'
|
47
|
-
'
|
48
|
-
'events_management, external_links_management, host_tag_management, ' \
|
49
|
-
'metrics_management, and user_management. Check the API docs for ' \
|
50
|
-
'an up-to-date list.'.fold(TW, 0)
|
46
|
+
"'wf settings list permissions' will give you a list of all " \
|
47
|
+
'currently supported permissions.'.fold(TW, 0)
|
51
48
|
end
|
52
49
|
end
|
@@ -8,12 +8,12 @@ class WavefrontCommandWebhook < WavefrontCommandBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _commands
|
11
|
-
["list #{CMN} [-al] [-O fields] [-
|
12
|
-
"describe #{CMN}
|
11
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
12
|
+
"describe #{CMN} <id>",
|
13
13
|
"delete #{CMN} <id>",
|
14
14
|
"import #{CMN} <file>",
|
15
15
|
"update #{CMN} <key=value> <id>",
|
16
|
-
"search #{CMN} [-al] [-
|
16
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>..."]
|
17
17
|
end
|
18
18
|
|
19
19
|
def _options
|
@@ -16,8 +16,8 @@ class WavefrontCommandWindow < WavefrontCommandBase
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def _commands
|
19
|
-
["list #{CMN} [-al] [-O fields] [-
|
20
|
-
"describe #{CMN}
|
19
|
+
["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
|
20
|
+
"describe #{CMN} <id>",
|
21
21
|
"create #{CMN} -d reason [-s time] [-e time] " \
|
22
22
|
'[-A alert_tag...] [-T host_tag...] [-H host...] <title>',
|
23
23
|
"close #{CMN} <id>",
|
@@ -25,7 +25,7 @@ class WavefrontCommandWindow < WavefrontCommandBase
|
|
25
25
|
"delete #{CMN} <id>",
|
26
26
|
"import #{CMN} <file>",
|
27
27
|
"update #{CMN} <key=value> <id>",
|
28
|
-
"search #{CMN} [-al] [-
|
28
|
+
"search #{CMN} [-al] [-o offset] [-L limit] <condition>...",
|
29
29
|
"ongoing #{CMN}",
|
30
30
|
"pending #{CMN} [<hours>]"]
|
31
31
|
end
|
@@ -10,10 +10,10 @@ class WavefrontCommandWrite < WavefrontCommandBase
|
|
10
10
|
def _commands
|
11
11
|
['point [-DnViq] [-c file] [-P profile] [-E proxy] [-t time] ' \
|
12
12
|
'[-p port] [-H host] [-T tag...] [-u method] [-S socket] <metric> ' \
|
13
|
-
'<value>',
|
13
|
+
'[--] <value>',
|
14
14
|
'distribution [-DnViq] [-c file] [-P profile] [-E proxy] [-H host] ' \
|
15
15
|
'[-p port] [-T tag...] [-u method] [-S socket] [-I interval] ' \
|
16
|
-
'<metric> <val>...',
|
16
|
+
'<metric> [--] <val>...',
|
17
17
|
'file [-DnViq] [-c file] [-P profile] [-E proxy] [-H host] ' \
|
18
18
|
'[-p port] [-F infileformat] [-m metric] [-T tag...] [-I interval] ' \
|
19
19
|
'[-u method] [-S socket] <file>']
|
@@ -43,7 +43,9 @@ class WavefrontCommandWrite < WavefrontCommandBase
|
|
43
43
|
"with the '-F' option. Use 't' for timestamp, 'm' for metric " \
|
44
44
|
"name, 'v' for value, 's' for source, 'd' for a comma-separated " \
|
45
45
|
"distribution, and 'T' for tags. Put 'T' last. Currently " \
|
46
|
-
"supported transport methods are 'socket' (the
|
47
|
-
"
|
46
|
+
"supported transport methods are 'socket' (write to a proxy: the " \
|
47
|
+
"default); 'api' (write directly to Wavefront); 'http' (write to " \
|
48
|
+
"a proxy over HTTP); and 'unix' (write to a local Unix socket)."
|
49
|
+
.cmd_fold(TW, 0)
|
48
50
|
end
|
49
51
|
end
|
data/lib/wavefront-cli/config.rb
CHANGED
@@ -53,6 +53,20 @@ module WavefrontCli
|
|
53
53
|
puts IO.read(config_file)
|
54
54
|
end
|
55
55
|
|
56
|
+
def do_about
|
57
|
+
require 'wavefront-sdk/defs/version'
|
58
|
+
require_relative 'display/base'
|
59
|
+
|
60
|
+
info = { 'wf version': WF_CLI_VERSION,
|
61
|
+
'wf path': CMD.realpath.to_s,
|
62
|
+
'SDK version': WF_SDK_VERSION,
|
63
|
+
'SDK location': WF_SDK_LOCATION.to_s,
|
64
|
+
'Ruby version': RUBY_VERSION,
|
65
|
+
'Ruby platform': Gem::Platform.local.os.capitalize }
|
66
|
+
|
67
|
+
WavefrontDisplay::Base.new(info).long_output
|
68
|
+
end
|
69
|
+
|
56
70
|
def base_config
|
57
71
|
return read_config if config_file.exist?
|
58
72
|
|
@@ -136,6 +136,8 @@ class WavefrontCliController
|
|
136
136
|
abort e.message
|
137
137
|
rescue WavefrontCli::Exception::UnsupportedNoop
|
138
138
|
abort 'Multiple API call operations cannot be performed as no-ops.'
|
139
|
+
rescue WavefrontCli::Exception::UserGroupNotFound => e
|
140
|
+
abort "Cannot find user group '#{e.message}'."
|
139
141
|
rescue Wavefront::Exception::UnsupportedWriter => e
|
140
142
|
abort "Unsupported writer '#{e.message}'."
|
141
143
|
rescue StandardError => e
|
@@ -43,33 +43,152 @@ module WavefrontCli
|
|
43
43
|
resp.tap { |r| r.response.items = queries }
|
44
44
|
end
|
45
45
|
|
46
|
+
def do_favs
|
47
|
+
require 'wavefront-sdk/search'
|
48
|
+
wfs = Wavefront::Search.new(mk_creds, mk_opts)
|
49
|
+
query = conds_to_query(['favorite=true'])
|
50
|
+
wfs.search(:dashboard, query, limit: :all, sort_field: :id)
|
51
|
+
end
|
52
|
+
|
46
53
|
def do_fav
|
47
54
|
wf.favorite(options[:'<id>'])
|
55
|
+
do_favs
|
48
56
|
end
|
49
57
|
|
50
58
|
def do_unfav
|
51
59
|
wf.unfavorite(options[:'<id>'])
|
60
|
+
do_favs
|
61
|
+
end
|
62
|
+
|
63
|
+
def do_acls
|
64
|
+
wf.acls([options[:'<id>']])
|
65
|
+
end
|
66
|
+
|
67
|
+
def do_acl_clear
|
68
|
+
wf.acl_set(options[:'<id>'], [], [id: everyone_id, name: 'Everyone'])
|
69
|
+
do_acls
|
70
|
+
end
|
71
|
+
|
72
|
+
def do_acl_grant
|
73
|
+
acl_action(:grant_to)
|
74
|
+
end
|
75
|
+
|
76
|
+
def do_acl_revoke
|
77
|
+
acl_action(:revoke_from)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Based on command-line options, return an array describing the
|
81
|
+
# users or groups (entities) which will be granted or revoked a
|
82
|
+
# privilege.
|
83
|
+
# @return [Array] [type_of_entity, [Hash]...]
|
84
|
+
#
|
85
|
+
def acl_entities
|
86
|
+
acl_type = options[:modify] ? :modify : :view
|
87
|
+
|
88
|
+
if options[:user]
|
89
|
+
[:users, user_lists(acl_type, options[:'<name>'])]
|
90
|
+
else
|
91
|
+
[:groups, group_lists(acl_type, options[:'<name>'])]
|
92
|
+
end
|
52
93
|
end
|
53
94
|
|
54
|
-
#
|
55
|
-
#
|
56
|
-
# @param
|
57
|
-
# @
|
95
|
+
# Make a list of users to be given to the SDK ACL methods. Users
|
96
|
+
# are defined as a Hash, with keys :id and :name.
|
97
|
+
# @param acl_type [Symbol] :view or :modify
|
98
|
+
# @param users [Array] user names
|
99
|
+
# @return [Array[Hash]]
|
58
100
|
#
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
101
|
+
def user_lists(acl_type, users)
|
102
|
+
{ view: [], modify: [] }.tap do |l|
|
103
|
+
l[acl_type] = users.map { |u| { id: u, name: u } }
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Generate arrays ready for passing to the SDK acl methods
|
108
|
+
# @return see #user_lists, but name and id are not the same.
|
109
|
+
#
|
110
|
+
def group_lists(acl_type, groups)
|
111
|
+
{ view: [], modify: [] }.tap do |l|
|
112
|
+
l[acl_type] = groups.each_with_object([]) do |g, a|
|
113
|
+
name = group_name(g)
|
114
|
+
|
115
|
+
if name.nil?
|
116
|
+
puts "Cannot find group with id '#{g}'."
|
117
|
+
next
|
66
118
|
end
|
119
|
+
|
120
|
+
a.<< ({ id: g, name: name })
|
67
121
|
end
|
68
|
-
elsif obj.is_a?(Array)
|
69
|
-
obj.each { |e| extract_values(e, key, aggr) }
|
70
122
|
end
|
123
|
+
end
|
71
124
|
|
72
|
-
|
125
|
+
private
|
126
|
+
|
127
|
+
# When given an ACL action (grant or revoke), call the right
|
128
|
+
# method with the right arguments.
|
129
|
+
# @param action [Symbol] :grant_to or :revoke_from
|
130
|
+
# @return [Wavefront::Response]
|
131
|
+
#
|
132
|
+
def acl_action(action)
|
133
|
+
entity_type, entities = acl_entities
|
134
|
+
|
135
|
+
resp = send(format('%s_%s', action, entity_type),
|
136
|
+
options[:'<id>'],
|
137
|
+
entities)
|
138
|
+
|
139
|
+
print_status(resp.status)
|
140
|
+
do_acls
|
141
|
+
end
|
142
|
+
|
143
|
+
# The #grant_to_ and #revoke_from_ methods are called by
|
144
|
+
# #acl_action, and speak to the SDK. They all return a
|
145
|
+
# Wavefront::Response object.
|
146
|
+
#
|
147
|
+
def grant_to_users(id, lists)
|
148
|
+
wf.acl_add(id, lists[:view], lists[:modify])
|
149
|
+
end
|
150
|
+
|
151
|
+
def revoke_from_users(id, lists)
|
152
|
+
wf.acl_delete(id, lists[:view], lists[:modify])
|
153
|
+
end
|
154
|
+
|
155
|
+
def grant_to_groups(id, lists)
|
156
|
+
wf.acl_add(id, lists[:view], lists[:modify])
|
157
|
+
end
|
158
|
+
|
159
|
+
def revoke_from_groups(id, lists)
|
160
|
+
wf.acl_delete(id, lists[:view], lists[:modify])
|
161
|
+
end
|
162
|
+
|
163
|
+
def print_status(status)
|
164
|
+
puts status.message unless status.message.empty?
|
165
|
+
rescue NoMethodError
|
166
|
+
nil
|
167
|
+
end
|
168
|
+
|
169
|
+
# Get the name of a user group, given the ID.
|
170
|
+
# @param group_id [String] UUID of a group
|
171
|
+
# @return [String, Nil] name of group, nil if it does not exist
|
172
|
+
#
|
173
|
+
def group_name(group_id)
|
174
|
+
require 'wavefront-sdk/usergroup'
|
175
|
+
wfs = Wavefront::UserGroup.new(mk_creds, mk_opts)
|
176
|
+
wfs.describe(group_id).response.name
|
177
|
+
rescue RuntimeError
|
178
|
+
nil
|
179
|
+
end
|
180
|
+
|
181
|
+
# @return [String] UUID of 'Everyone' group
|
182
|
+
# @raise WavefrontCli::Exception::UserGroupNotFound if group
|
183
|
+
# does not exist. This is caught in the controller.
|
184
|
+
#
|
185
|
+
def everyone_id
|
186
|
+
require 'wavefront-sdk/search'
|
187
|
+
wfs = Wavefront::Search.new(mk_creds, mk_opts)
|
188
|
+
query = conds_to_query(['name=Everyone'])
|
189
|
+
wfs.search(:usergroup, query).response.items.first.id
|
190
|
+
rescue RuntimeError
|
191
|
+
raise WavefrontCli::Exception::UserGroupNotFound, 'Everyone'
|
73
192
|
end
|
74
193
|
end
|
75
194
|
end
|