wavefront-cli 2.18.0 → 3.0.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/.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
|