wavefront-cli 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +20 -0
- data/.gitignore +4 -0
- data/.travis.yml +16 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +65 -0
- data/README.md +221 -0
- data/Rakefile +18 -0
- data/bin/wavefront +14 -0
- data/lib/wavefront-cli/alert.rb +60 -0
- data/lib/wavefront-cli/base.rb +320 -0
- data/lib/wavefront-cli/cloudintegration.rb +12 -0
- data/lib/wavefront-cli/commands/alert.rb +38 -0
- data/lib/wavefront-cli/commands/base.rb +105 -0
- data/lib/wavefront-cli/commands/dashboard.rb +29 -0
- data/lib/wavefront-cli/commands/event.rb +44 -0
- data/lib/wavefront-cli/commands/integration.rb +33 -0
- data/lib/wavefront-cli/commands/link.rb +34 -0
- data/lib/wavefront-cli/commands/message.rb +23 -0
- data/lib/wavefront-cli/commands/metric.rb +20 -0
- data/lib/wavefront-cli/commands/proxy.rb +25 -0
- data/lib/wavefront-cli/commands/query.rb +32 -0
- data/lib/wavefront-cli/commands/savedsearch.rb +32 -0
- data/lib/wavefront-cli/commands/source.rb +27 -0
- data/lib/wavefront-cli/commands/user.rb +24 -0
- data/lib/wavefront-cli/commands/webhook.rb +25 -0
- data/lib/wavefront-cli/commands/window.rb +33 -0
- data/lib/wavefront-cli/commands/write.rb +35 -0
- data/lib/wavefront-cli/constants.rb +17 -0
- data/lib/wavefront-cli/controller.rb +134 -0
- data/lib/wavefront-cli/dashboard.rb +27 -0
- data/lib/wavefront-cli/display/alert.rb +44 -0
- data/lib/wavefront-cli/display/base.rb +304 -0
- data/lib/wavefront-cli/display/cloudintegration.rb +18 -0
- data/lib/wavefront-cli/display/dashboard.rb +21 -0
- data/lib/wavefront-cli/display/event.rb +19 -0
- data/lib/wavefront-cli/display/externallink.rb +13 -0
- data/lib/wavefront-cli/display/maintenancewindow.rb +19 -0
- data/lib/wavefront-cli/display/message.rb +8 -0
- data/lib/wavefront-cli/display/metric.rb +22 -0
- data/lib/wavefront-cli/display/proxy.rb +13 -0
- data/lib/wavefront-cli/display/query.rb +69 -0
- data/lib/wavefront-cli/display/savedsearch.rb +17 -0
- data/lib/wavefront-cli/display/source.rb +26 -0
- data/lib/wavefront-cli/display/user.rb +16 -0
- data/lib/wavefront-cli/display/webhook.rb +24 -0
- data/lib/wavefront-cli/display/write.rb +19 -0
- data/lib/wavefront-cli/event.rb +162 -0
- data/lib/wavefront-cli/exception.rb +5 -0
- data/lib/wavefront-cli/externallink.rb +16 -0
- data/lib/wavefront-cli/maintenancewindow.rb +16 -0
- data/lib/wavefront-cli/message.rb +19 -0
- data/lib/wavefront-cli/metric.rb +24 -0
- data/lib/wavefront-cli/opt_handler.rb +62 -0
- data/lib/wavefront-cli/proxy.rb +22 -0
- data/lib/wavefront-cli/query.rb +74 -0
- data/lib/wavefront-cli/savedsearch.rb +24 -0
- data/lib/wavefront-cli/source.rb +20 -0
- data/lib/wavefront-cli/user.rb +25 -0
- data/lib/wavefront-cli/version.rb +1 -0
- data/lib/wavefront-cli/webhook.rb +8 -0
- data/lib/wavefront-cli/write.rb +244 -0
- data/spec/spec_helper.rb +197 -0
- data/spec/wavefront-cli/alert_spec.rb +44 -0
- data/spec/wavefront-cli/base_spec.rb +47 -0
- data/spec/wavefront-cli/cli_help_spec.rb +47 -0
- data/spec/wavefront-cli/cloudintegration_spec.rb +24 -0
- data/spec/wavefront-cli/dashboard_spec.rb +37 -0
- data/spec/wavefront-cli/event_spec.rb +19 -0
- data/spec/wavefront-cli/externallink_spec.rb +18 -0
- data/spec/wavefront-cli/maintanancewindow_spec.rb +19 -0
- data/spec/wavefront-cli/message_spec.rb +28 -0
- data/spec/wavefront-cli/metric_spec.rb +22 -0
- data/spec/wavefront-cli/proxy_spec.rb +26 -0
- data/spec/wavefront-cli/query_spec.rb +63 -0
- data/spec/wavefront-cli/resources/conf.yaml +10 -0
- data/spec/wavefront-cli/savedsearch_spec.rb +18 -0
- data/spec/wavefront-cli/source_spec.rb +18 -0
- data/spec/wavefront-cli/user_spec.rb +31 -0
- data/spec/wavefront-cli/webhook_spec.rb +17 -0
- data/wavefront-cli.gemspec +36 -0
- metadata +279 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the Alert command
|
4
|
+
#
|
5
|
+
class WavefrontCommandAlert < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'view and manage alerts'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _commands
|
11
|
+
["list #{CMN} [-l] [-f format] [-o offset] [-L limit]",
|
12
|
+
"describe #{CMN} [-f format] [-v version] <id>",
|
13
|
+
"delete #{CMN} <id>",
|
14
|
+
"undelete #{CMN} <id>",
|
15
|
+
"history #{CMN} [-f format] [-o offset] [-L limit] <id>",
|
16
|
+
"import #{CMN} <file>",
|
17
|
+
"snooze #{CMN} [-T time] <id>",
|
18
|
+
"update #{CMN} <key=value> <id>",
|
19
|
+
"unsnooze #{CMN} <id>",
|
20
|
+
"tags #{CMN} [-f format] <id>",
|
21
|
+
"tag set #{CMN} <id> <tag>...",
|
22
|
+
"tag clear #{CMN} <id>",
|
23
|
+
"tag add #{CMN} <id> <tag>",
|
24
|
+
"tag delete #{CMN} <id> <tag>",
|
25
|
+
"summary #{CMN} [-a]"]
|
26
|
+
end
|
27
|
+
|
28
|
+
def _options
|
29
|
+
[common_options,
|
30
|
+
'-l, --long list alerts in detail',
|
31
|
+
'-v, --version=INTEGER describe only this version of alert',
|
32
|
+
'-o, --offset=n start from nth alert',
|
33
|
+
'-L, --limit=COUNT number of alerts to list',
|
34
|
+
'-T, --time=SECONDS how long to snooze (default 3600)',
|
35
|
+
'-a, --all list all alerts',
|
36
|
+
'-f, --format=STRING output format']
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
CMN = '[-DnV] [-c file] [-P profile] [-E endpoint] [-t token]'.freeze
|
2
|
+
|
3
|
+
# A base class which all command classes extend.
|
4
|
+
#
|
5
|
+
class WavefrontCommandBase
|
6
|
+
# All commands have these options
|
7
|
+
#
|
8
|
+
def global_options
|
9
|
+
['-c, --config=FILE path to configuration file',
|
10
|
+
'-P, --profile=NAME profile in configuration file',
|
11
|
+
'-D, --debug enable debug mode',
|
12
|
+
'-n, --noop do not perform API calls',
|
13
|
+
'-V, --verbose be verbose',
|
14
|
+
'-h, --help show this message']
|
15
|
+
end
|
16
|
+
|
17
|
+
# Many commands have these options
|
18
|
+
#
|
19
|
+
def common_options
|
20
|
+
['-E, --endpoint=URI cluster endpoint',
|
21
|
+
'-t, --token=TOKEN Wavefront authentication token']
|
22
|
+
end
|
23
|
+
|
24
|
+
# Anything which takes tags provides the same interface
|
25
|
+
#
|
26
|
+
def tag_commands
|
27
|
+
["tags #{CMN} [-f format] <id>",
|
28
|
+
"tag set #{CMN} <id> <tag>...",
|
29
|
+
"tag clear #{CMN} <id>",
|
30
|
+
"tag add #{CMN} <id> <tag>",
|
31
|
+
"tag delete #{CMN} <id> <tag>"]
|
32
|
+
end
|
33
|
+
|
34
|
+
# The command keyword
|
35
|
+
#
|
36
|
+
def word
|
37
|
+
self.class.name.sub(/WavefrontCommand/, '').downcase
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns the name of the SDK class which does the work for this
|
41
|
+
# command.
|
42
|
+
#
|
43
|
+
def sdk_class
|
44
|
+
word.capitalize
|
45
|
+
end
|
46
|
+
|
47
|
+
def sdk_file
|
48
|
+
word
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns a string describing the subcommands the command offers.
|
52
|
+
#
|
53
|
+
def commands
|
54
|
+
_commands.flatten.each_with_object("Usage:\n") do |cmd, ret|
|
55
|
+
ret.<< ' ' + "#{CMD} #{word} #{cmd}\n".cmd_fold + "\n"
|
56
|
+
end + " #{CMD} #{word} --help"
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns a string describing the options the command understands.
|
60
|
+
#
|
61
|
+
def options
|
62
|
+
width = column_widths
|
63
|
+
ret = "Global options:\n"
|
64
|
+
global_options.each { |o| ret.<< opt_row(o, width) }
|
65
|
+
ret.<< "\nOptions:\n"
|
66
|
+
_options.flatten.each { |o| ret.<< opt_row(o, width) }
|
67
|
+
ret
|
68
|
+
end
|
69
|
+
|
70
|
+
def opt_row(opt, width)
|
71
|
+
format(" %s %-#{width}s %s\n", *opt.split(/\s+/, 3))
|
72
|
+
end
|
73
|
+
|
74
|
+
def column_widths
|
75
|
+
(global_options + _options).flatten.map do |o|
|
76
|
+
o.split(/\s+/, 3)[0..1].join(' ').size
|
77
|
+
end.max
|
78
|
+
end
|
79
|
+
|
80
|
+
# Returns a string which will be printed underneath the options.
|
81
|
+
#
|
82
|
+
def postscript
|
83
|
+
''
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns a full options string which docopt understands
|
87
|
+
#
|
88
|
+
def docopt
|
89
|
+
commands + "\n\n" + options + "\n" + postscript
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Extensions to the String class to help with formatting.
|
94
|
+
#
|
95
|
+
class String
|
96
|
+
|
97
|
+
# Fold long command lines. We can't break on a space inside
|
98
|
+
# [square brackets] or it confuses docopt.
|
99
|
+
#
|
100
|
+
def cmd_fold(width = TW, indent = 10)
|
101
|
+
gsub(/\s(?=\w+\])/, '^').
|
102
|
+
scan(/\S.{0,#{width - 8}}\S(?=\s|$)|\S+/).join("\n" + ' ' * indent).
|
103
|
+
gsub('^', ' ')
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the dashboard command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandDashboard < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'view and manage dashboards'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _commands
|
11
|
+
["list #{CMN} [-l] [-f format] [-o offset] [-L limit]",
|
12
|
+
"describe #{CMN} [-f format] [-v version] <id>",
|
13
|
+
"import #{CMN} [-f format] [-F] <file>",
|
14
|
+
"update #{CMN} <key=value> <id>",
|
15
|
+
"delete #{CMN} <id>",
|
16
|
+
"undelete #{CMN} <id>",
|
17
|
+
"history #{CMN} [-b] [-f format] [-o offset] [-L limit] <id>",
|
18
|
+
tag_commands]
|
19
|
+
end
|
20
|
+
|
21
|
+
def _options
|
22
|
+
[common_options,
|
23
|
+
'-l, --long list dashboards in detail',
|
24
|
+
'-o, --offset=n start list from nth dashboard or revision',
|
25
|
+
'-L, --limit=COUNT number of dashboards or revisions to list',
|
26
|
+
'-v, --version=INTEGER version of dashboard',
|
27
|
+
'-f, --format=STRING output format']
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the event command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandEvent < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'open, close, view, and manage events'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _commands
|
11
|
+
["list #{CMN} [-l] [-f format] [-s start] [-e end] [-L limit] " \
|
12
|
+
'[-o offset]',
|
13
|
+
"describe #{CMN} [-f format] <id>",
|
14
|
+
"create #{CMN} [-d description] [-s time] [-i | -e time] " \
|
15
|
+
'[-S severity] [-T type] [-H host...] [-N] <event>',
|
16
|
+
"close #{CMN} [<id>]",
|
17
|
+
"delete #{CMN} <id>",
|
18
|
+
"update #{CMN} <key=value> <id>",
|
19
|
+
tag_commands,
|
20
|
+
'show [-D]']
|
21
|
+
end
|
22
|
+
|
23
|
+
def _options
|
24
|
+
[common_options,
|
25
|
+
'-l, --long list events in detail',
|
26
|
+
'-o, --offset=n start list from nth event',
|
27
|
+
'-L, --limit=COUNT number of events to list',
|
28
|
+
'-s, --start=TIME time at which event/window begins',
|
29
|
+
'-e, --end=TIME time at which even/window ends',
|
30
|
+
'-S, --severity=SEVERITY severity of event',
|
31
|
+
'-i, --instant create an instantaneous event',
|
32
|
+
'-T, --type=TYPE type of event',
|
33
|
+
'-d, --desc=STRING description of event',
|
34
|
+
'-H, --host=STRING source to which event applies',
|
35
|
+
'-N, --nostate do not create a local file recording ' \
|
36
|
+
'the event',
|
37
|
+
'-f, --format=STRING output format']
|
38
|
+
end
|
39
|
+
|
40
|
+
def postscript
|
41
|
+
"View events in detail using the 'query' command with the " \
|
42
|
+
"'events()' function."
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the cloud integration command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandIntegration < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'view and manage cloud integrations'
|
8
|
+
end
|
9
|
+
|
10
|
+
def sdk_file
|
11
|
+
'cloudintegration'
|
12
|
+
end
|
13
|
+
|
14
|
+
def sdk_class
|
15
|
+
'CloudIntegration'
|
16
|
+
end
|
17
|
+
|
18
|
+
def _commands
|
19
|
+
["list #{CMN} [-l] [-f format] [-o offset] [-L limit]",
|
20
|
+
"describe #{CMN} [-f format] <id>",
|
21
|
+
"delete #{CMN} <id>",
|
22
|
+
"undelete #{CMN} <id>",
|
23
|
+
"import #{CMN} <file>"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def _options
|
27
|
+
[common_options,
|
28
|
+
'-l, --long list integrations in detail',
|
29
|
+
'-o, --offset=n start from nth integration',
|
30
|
+
'-L, --limit=COUNT number of integrations to list',
|
31
|
+
'-f, --format=STRING output format']
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the external link command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandLink < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'view and manage external links'
|
8
|
+
end
|
9
|
+
|
10
|
+
def sdk_file
|
11
|
+
'externallink'
|
12
|
+
end
|
13
|
+
|
14
|
+
def sdk_class
|
15
|
+
'ExternalLink'
|
16
|
+
end
|
17
|
+
|
18
|
+
def _commands
|
19
|
+
["list #{CMN} [-l] [-f format] [-o offset] [-L limit]",
|
20
|
+
"describe #{CMN} [-f format] <id>",
|
21
|
+
"delete #{CMN} <id>",
|
22
|
+
"import #{CMN} <file>",
|
23
|
+
"update #{CMN} <key=value> <id>"
|
24
|
+
]
|
25
|
+
end
|
26
|
+
|
27
|
+
def _options
|
28
|
+
[common_options,
|
29
|
+
'-l, --long list external links in detail',
|
30
|
+
'-o, --offset=n start from nth external link',
|
31
|
+
'-L, --limit=COUNT number of external link to list',
|
32
|
+
'-f, --format=STRING output format']
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the message command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandMessage < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'read and mark user messages'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _commands
|
11
|
+
["list #{CMN} [-l] [-f format] [-o offset] [-L limit] [-a]",
|
12
|
+
"mark #{CMN} [-f format] <id>"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def _options
|
16
|
+
[common_options,
|
17
|
+
'-l, --long list messages in detail',
|
18
|
+
'-o, --offset=n start from nth message',
|
19
|
+
'-L, --limit=COUNT number of messages to list',
|
20
|
+
'-a, --all list all messages, not just unread',
|
21
|
+
'-f, --format=STRING output format']
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the metric command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandMetric < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'view metrics'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _commands
|
11
|
+
["describe #{CMN} [-f format] [-o offset] [-g glob...] <metric>"]
|
12
|
+
end
|
13
|
+
|
14
|
+
def _options
|
15
|
+
[common_options,
|
16
|
+
'-o, --offset=STRING value to start from if results > 1000',
|
17
|
+
'-g, --glob=STRING return sources matching this pattern',
|
18
|
+
'-f, --format=STRING output format']
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the proxy command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandProxy < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'view and manage Wavefront proxies'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _commands
|
11
|
+
["list #{CMN} [-l] [-f format] [-o offset] [-L limit]",
|
12
|
+
"describe #{CMN} [-f format] <id>",
|
13
|
+
"delete #{CMN} <id>",
|
14
|
+
"undelete #{CMN} <id>",
|
15
|
+
"rename #{CMN} <id> <name>"]
|
16
|
+
end
|
17
|
+
|
18
|
+
def _options
|
19
|
+
[common_options,
|
20
|
+
'-l, --long list proxies in detail',
|
21
|
+
'-o, --offset=n start from nth proxy',
|
22
|
+
'-f, --format=STRING output format',
|
23
|
+
'-L, --limit=COUNT number of proxies to list']
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the query command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandQuery < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'query the Wavefront API'
|
8
|
+
end
|
9
|
+
|
10
|
+
def _commands
|
11
|
+
["#{CMN} [-g granularity] [-s time] [-e time] [-f format] " \
|
12
|
+
'[-ivO] [-S mode] [-N name] [-p points] <query>',
|
13
|
+
"raw #{CMN} [-H host] [-s time] [-e time] [-f format] <metric>"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def _options
|
17
|
+
[common_options,
|
18
|
+
'-g, --granularity=STRING query granularity (d, h, m, or s)',
|
19
|
+
'-s, --start=TIME start of query window',
|
20
|
+
'-e, --end=TIME end of query window',
|
21
|
+
'-N, --name=STRING name identifying query',
|
22
|
+
'-p, --points=INTEGER maximum number of points to return',
|
23
|
+
'-i, --inclusive include matching series with no ' \
|
24
|
+
'points inside the query window',
|
25
|
+
'-v, --events include events for matching series',
|
26
|
+
'-S, --summarize=STRING summarization strategy for bucketing ' \
|
27
|
+
'points (mean, median, min, max, sum, count, last, first)',
|
28
|
+
'-O, --obsolete include metrics unreported for > 4 weeks',
|
29
|
+
'-H, --host=STRING host or source to query on',
|
30
|
+
'-f, --format=STRING output format']
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
# Define the saved search command.
|
4
|
+
#
|
5
|
+
class WavefrontCommandSavedsearch < WavefrontCommandBase
|
6
|
+
def description
|
7
|
+
'view and manage saved searches'
|
8
|
+
end
|
9
|
+
|
10
|
+
def sdk_file
|
11
|
+
'savedsearch'
|
12
|
+
end
|
13
|
+
|
14
|
+
def sdk_class
|
15
|
+
'SavedSearch'
|
16
|
+
end
|
17
|
+
|
18
|
+
def _commands
|
19
|
+
["list #{CMN} [-l] [-f format] [-o offset] [-L limit]",
|
20
|
+
"describe #{CMN} [-f format] <id>",
|
21
|
+
"delete #{CMN} <id>",
|
22
|
+
"import #{CMN} <file>"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def _options
|
26
|
+
[common_options,
|
27
|
+
'-l, --long list saved searches in detail',
|
28
|
+
'-o, --offset=n start from nth saved search',
|
29
|
+
'-L, --limit=COUNT number of saved searches to list',
|
30
|
+
'-f, --format=STRING output format']
|
31
|
+
end
|
32
|
+
end
|