wavefront-cli 9.0.0 → 10.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/.github/workflows/release.yml +2 -2
- data/.github/workflows/test.yml +1 -1
- data/.rubocop.yml +1 -1
- data/Gemfile +10 -0
- data/HISTORY.md +6 -1
- data/README.md +1 -1
- data/lib/wavefront-cli/base.rb +2 -2
- data/lib/wavefront-cli/commands/base.rb +3 -1
- data/lib/wavefront-cli/commands/config.rb +3 -7
- data/lib/wavefront-cli/config.rb +28 -32
- data/lib/wavefront-cli/constants.rb +1 -1
- data/lib/wavefront-cli/display/base.rb +2 -2
- data/lib/wavefront-cli/display/cluster.rb +21 -0
- data/lib/wavefront-cli/display/printer/long.rb +0 -4
- data/lib/wavefront-cli/exception_handler.rb +4 -0
- data/lib/wavefront-cli/maintenancewindow.rb +1 -1
- data/lib/wavefront-cli/output/csv/query.rb +1 -1
- data/lib/wavefront-cli/output/hcl/base.rb +4 -4
- data/lib/wavefront-cli/output/hcl/dashboard.rb +1 -1
- data/lib/wavefront-cli/stdlib/array.rb +1 -1
- data/lib/wavefront-cli/stdlib/string.rb +1 -1
- data/lib/wavefront-cli/version.rb +1 -1
- data/lib/wavefront-cli/write.rb +2 -2
- data/spec/constants.rb +1 -1
- data/spec/support/command_base.rb +1 -1
- data/spec/wavefront-cli/base_spec.rb +1 -1
- data/spec/wavefront-cli/commands/base_spec.rb +1 -1
- data/spec/wavefront-cli/commands/config_spec.rb +4 -4
- data/spec/wavefront-cli/config_spec.rb +81 -41
- data/spec/wavefront-cli/controller_spec.rb +2 -2
- data/spec/wavefront-cli/display/base_spec.rb +1 -1
- data/spec/wavefront-cli/display/printer/long_spec.rb +1 -1
- data/spec/wavefront-cli/display/printer/terse_spec.rb +1 -1
- data/spec/wavefront-cli/event_store_spec.rb +1 -1
- data/spec/wavefront-cli/opt_handler_spec.rb +1 -1
- data/spec/wavefront-cli/output/csv/query_spec.rb +1 -1
- data/spec/wavefront-cli/output/csv_spec.rb +1 -1
- data/spec/wavefront-cli/output/hcl_spec.rb +1 -1
- data/spec/wavefront-cli/output/json_spec.rb +1 -1
- data/spec/wavefront-cli/output/ruby_spec.rb +1 -1
- data/spec/wavefront-cli/output/wavefront/query_spec.rb +1 -1
- data/spec/wavefront-cli/output/wavefront_spec.rb +1 -1
- data/spec/wavefront-cli/output/yaml_spec.rb +1 -1
- data/spec/wavefront-cli/query_spec.rb +1 -1
- data/spec/wavefront-cli/stdlib/array_spec.rb +1 -1
- data/spec/wavefront-cli/stdlib/string_spec.rb +1 -1
- data/spec/wavefront-cli/usage_spec.rb +1 -1
- data/spec/wavefront-cli/write_class_spec.rb +1 -1
- data/wavefront-cli.gemspec +2 -12
- metadata +7 -132
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '09fbd2dd451ea0b319a8d1a36ac1c0f3e95e186fc506363f47b5f8436e67d19d'
|
|
4
|
+
data.tar.gz: c2e562c485f9e520be34922d55f5b6e7dfca5c3f876cd20857ebc2030c2cfc17
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 103663abbe25ed7a75e2622e85ea1ce1e984da813b4a85b3128e8bf24aa6d2d95d63000e5efa87d5ad615211f7bdc6f3193bacc435de0c437b3134948b5078cd
|
|
7
|
+
data.tar.gz: c8bcfaafbe5da6fe7a5a3065cf51de47b67ed086a0e54f444d1e1b7260212ea22ad032325ce8c4135d5b0c36cdd62aed91e57c1e569ac63d541f2b3d9c6ca711
|
|
@@ -15,10 +15,10 @@ jobs:
|
|
|
15
15
|
- name: Set env
|
|
16
16
|
run: echo "RELEASE_VERSION=$(echo ${GITHUB_REF:10})" >> $GITHUB_ENV
|
|
17
17
|
|
|
18
|
-
- name: Set up Ruby 3.
|
|
18
|
+
- name: Set up Ruby 3.2
|
|
19
19
|
uses: ruby/setup-ruby@v1
|
|
20
20
|
with:
|
|
21
|
-
ruby-version: 3.
|
|
21
|
+
ruby-version: 3.2
|
|
22
22
|
- run: bundle install
|
|
23
23
|
|
|
24
24
|
- name: Run tests
|
data/.github/workflows/test.yml
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
|
@@ -2,3 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
source 'https://rubygems.org'
|
|
4
4
|
gemspec
|
|
5
|
+
|
|
6
|
+
gem 'minitest', '~> 5.21', group: :development
|
|
7
|
+
gem 'rake', '~> 13.0', group: :development
|
|
8
|
+
gem 'rubocop', '~> 1.60', group: :development
|
|
9
|
+
gem 'rubocop-minitest', '~> 0.26', group: :development
|
|
10
|
+
gem 'rubocop-performance', '~> 1.15', group: :development
|
|
11
|
+
gem 'rubocop-rake', '~> 0.6', group: :development
|
|
12
|
+
gem 'spy', '~> 1.0', group: :development
|
|
13
|
+
gem 'webmock', '~> 3.18', group: :development
|
|
14
|
+
gem 'yard', '~> 0.9', group: :development
|
data/HISTORY.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 10.0.0 (2024-01-19)
|
|
4
|
+
* Remove support for Ruby < 3.0 (Breaking change.)
|
|
5
|
+
* Fix HTTP proxy write bug by bumping SDK dependency.
|
|
6
|
+
* Add `config cluster` command.
|
|
7
|
+
* Revamp `config` command internals and improve tests.
|
|
4
8
|
|
|
9
|
+
## 9.0.0 (2023-01-20)
|
|
5
10
|
* Drop support for Ruby 2.5. (Breaking change.)
|
|
6
11
|
* Drop support for Ruby 2.6. (Breaking change.)
|
|
7
12
|
* Add `metricspolicy` command.
|
data/README.md
CHANGED
|
@@ -15,7 +15,7 @@ $ gem install wavefront-cli
|
|
|
15
15
|
|
|
16
16
|
It is built on [our Wavefront Ruby
|
|
17
17
|
SDK](https://github.com/snltd/wavefront-sdk) and requires Ruby >=
|
|
18
|
-
|
|
18
|
+
3.0. It has no "native extension" dependencies.
|
|
19
19
|
|
|
20
20
|
For a far more comprehensive overview/tutorial, please read [this
|
|
21
21
|
article](https://sysdef.xyz/article/wavefront-cli).
|
data/lib/wavefront-cli/base.rb
CHANGED
|
@@ -49,7 +49,7 @@ module WavefrontCli
|
|
|
49
49
|
# Overriding this method lets you map to something else.
|
|
50
50
|
#
|
|
51
51
|
def _sdk_class
|
|
52
|
-
self.class.name.sub(
|
|
52
|
+
self.class.name.sub('Cli', '')
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
# Some subcommands don't make an API call, so they don't return
|
|
@@ -85,7 +85,7 @@ module WavefrontCli
|
|
|
85
85
|
# that, override this method.
|
|
86
86
|
#
|
|
87
87
|
def validator_method
|
|
88
|
-
"wf_#{klass_word}_id?"
|
|
88
|
+
:"wf_#{klass_word}_id?"
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def validator_exception
|
|
@@ -72,7 +72,7 @@ class WavefrontCommandBase
|
|
|
72
72
|
# @return [String] the command keyword
|
|
73
73
|
#
|
|
74
74
|
def word
|
|
75
|
-
self.class.name.sub(
|
|
75
|
+
self.class.name.sub('WavefrontCommand', '').downcase
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
def thing
|
|
@@ -143,10 +143,12 @@ class WavefrontCommandBase
|
|
|
143
143
|
# columns. This is used to indent following lines
|
|
144
144
|
# @param term_width [Integer] the width of the user's terminal
|
|
145
145
|
#
|
|
146
|
+
# rubocop:disable Lint/FormatParameterMismatch
|
|
146
147
|
def opt_row(opt_str, width, term_width = TW)
|
|
147
148
|
format(" %s %-#{width}s %s",
|
|
148
149
|
*opt_str.split(/\s+/, 3)).opt_fold(term_width, width + 5)
|
|
149
150
|
end
|
|
151
|
+
# rubocop:enable Lint/FormatParameterMismatch
|
|
150
152
|
|
|
151
153
|
# @return [Integer] the width of the column containing short and
|
|
152
154
|
# long options
|
|
@@ -6,7 +6,7 @@ require_relative 'base'
|
|
|
6
6
|
#
|
|
7
7
|
class WavefrontCommandConfig < WavefrontCommandBase
|
|
8
8
|
def description
|
|
9
|
-
'create and manage local configuration'
|
|
9
|
+
'create and manage local configuration, and display debug info'
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def _commands
|
|
@@ -16,15 +16,11 @@ class WavefrontCommandConfig < WavefrontCommandBase
|
|
|
16
16
|
'setup [-D] [-c file] [<profile>]',
|
|
17
17
|
'delete [-D] [-c file] <profile>',
|
|
18
18
|
'envvars',
|
|
19
|
+
"cluster #{CMN}",
|
|
19
20
|
'about']
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
def _options
|
|
23
|
-
[
|
|
24
|
-
'-D, --debug enable debug mode']
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def global_options
|
|
28
|
-
[]
|
|
24
|
+
[common_options]
|
|
29
25
|
end
|
|
30
26
|
end
|
data/lib/wavefront-cli/config.rb
CHANGED
|
@@ -6,11 +6,7 @@ require_relative 'base'
|
|
|
6
6
|
|
|
7
7
|
module WavefrontCli
|
|
8
8
|
#
|
|
9
|
-
# Create and manage a local configuration file.
|
|
10
|
-
# fit many of the assumptions made by the Base class. (Primarily,
|
|
11
|
-
# that it will consume the SDK.) Rather than split everything up,
|
|
12
|
-
# we're going to do some bad programming and override a couple of
|
|
13
|
-
# methods in the parent class to force different behaviour.
|
|
9
|
+
# Create and manage a local configuration file.
|
|
14
10
|
#
|
|
15
11
|
class Config < WavefrontCli::Base
|
|
16
12
|
attr_reader :config_file, :profile
|
|
@@ -34,41 +30,39 @@ module WavefrontCli
|
|
|
34
30
|
test: proc { |v| %w[human json yaml].include?(v) } }
|
|
35
31
|
].freeze
|
|
36
32
|
|
|
37
|
-
RX = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}
|
|
33
|
+
RX = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
def initialize(options)
|
|
41
|
-
@options = options
|
|
35
|
+
def post_initialize(options)
|
|
42
36
|
@config_file = _config_file
|
|
43
37
|
@profile = options[:'<profile>'] || 'default'
|
|
44
38
|
end
|
|
45
|
-
|
|
39
|
+
|
|
40
|
+
def _sdk_class
|
|
41
|
+
'Wavefront::Cluster'
|
|
42
|
+
end
|
|
46
43
|
|
|
47
44
|
def do_location
|
|
48
|
-
|
|
45
|
+
config_file
|
|
49
46
|
end
|
|
50
47
|
|
|
51
48
|
def do_profiles
|
|
52
|
-
read_config.sections.
|
|
49
|
+
read_config.sections.sort
|
|
53
50
|
end
|
|
54
51
|
|
|
55
52
|
def do_show
|
|
56
53
|
present?
|
|
57
|
-
|
|
54
|
+
File.read(config_file)
|
|
58
55
|
end
|
|
59
56
|
|
|
60
57
|
def do_about
|
|
61
58
|
require 'wavefront-sdk/defs/version'
|
|
62
|
-
require_relative 'display/base'
|
|
63
59
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
WavefrontDisplay::Base.new(info).long_output
|
|
60
|
+
{ 'wf version': WF_CLI_VERSION,
|
|
61
|
+
'wf path': CMD_PATH.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 }
|
|
72
66
|
end
|
|
73
67
|
|
|
74
68
|
def base_config
|
|
@@ -121,21 +115,23 @@ module WavefrontCli
|
|
|
121
115
|
end
|
|
122
116
|
|
|
123
117
|
def do_envvars
|
|
124
|
-
%w[WAVEFRONT_ENDPOINT WAVEFRONT_TOKEN WAVEFRONT_PROXY].
|
|
125
|
-
|
|
126
|
-
var: v,
|
|
127
|
-
value: ENV[v] || 'unset')
|
|
118
|
+
%w[WAVEFRONT_ENDPOINT WAVEFRONT_TOKEN WAVEFRONT_PROXY].map do |v|
|
|
119
|
+
format('%-20<var>s %<value>s', var: v, value: ENV[v] || 'unset')
|
|
128
120
|
end
|
|
129
121
|
end
|
|
130
122
|
|
|
131
|
-
def
|
|
123
|
+
def do_cluster
|
|
124
|
+
wf.describe
|
|
125
|
+
end
|
|
132
126
|
|
|
133
|
-
def
|
|
127
|
+
def validate_opts; end
|
|
134
128
|
|
|
135
|
-
def
|
|
136
|
-
|
|
129
|
+
def no_api_response
|
|
130
|
+
%w[do_location do_profiles do_show do_envvars do_about]
|
|
137
131
|
end
|
|
138
132
|
|
|
133
|
+
# def display(_data, _method); end
|
|
134
|
+
|
|
139
135
|
def input_prompt(label, default)
|
|
140
136
|
ret = format(' %<label>s', label: label)
|
|
141
137
|
ret << format(' [%<value>s]', value: default) unless default.nil?
|
|
@@ -156,10 +152,10 @@ module WavefrontCli
|
|
|
156
152
|
#
|
|
157
153
|
def read_thing(thing)
|
|
158
154
|
print input_prompt(thing[:text], thing[:default])
|
|
159
|
-
|
|
155
|
+
validate_thing_input(read_input, thing[:default], thing[:test])
|
|
160
156
|
end
|
|
161
157
|
|
|
162
|
-
def
|
|
158
|
+
def validate_thing_input(input, default, test)
|
|
163
159
|
if input.empty?
|
|
164
160
|
raise WavefrontCli::Exception::MandatoryValue if default.nil?
|
|
165
161
|
|
|
@@ -45,8 +45,8 @@ module WavefrontDisplay
|
|
|
45
45
|
run_list
|
|
46
46
|
elsif method == 'do_search'
|
|
47
47
|
run_search
|
|
48
|
-
elsif respond_to?("#{method}_brief") && !options[:long]
|
|
49
|
-
send("#{method}_brief")
|
|
48
|
+
elsif respond_to?(:"#{method}_brief") && !options[:long]
|
|
49
|
+
send(:"#{method}_brief")
|
|
50
50
|
elsif respond_to?(method)
|
|
51
51
|
send(method)
|
|
52
52
|
else
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module WavefrontDisplay
|
|
6
|
+
#
|
|
7
|
+
# Format human-readable output for config commands.
|
|
8
|
+
#
|
|
9
|
+
class Cluster < Base
|
|
10
|
+
def do_location
|
|
11
|
+
puts data
|
|
12
|
+
end
|
|
13
|
+
alias do_profiles do_location
|
|
14
|
+
alias do_show do_location
|
|
15
|
+
alias do_envvars do_location
|
|
16
|
+
|
|
17
|
+
def do_about
|
|
18
|
+
long_output
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -77,7 +77,6 @@ module WavefrontDisplayPrinter
|
|
|
77
77
|
#
|
|
78
78
|
# Make an array of hashes: { key, value, depth }
|
|
79
79
|
#
|
|
80
|
-
# rubocop:disable Style/CaseLikeIf
|
|
81
80
|
def make_list(data, aggr = [], depth = 0, last_key = nil)
|
|
82
81
|
if data.is_a?(Hash)
|
|
83
82
|
append_hash(data, aggr, depth)
|
|
@@ -87,7 +86,6 @@ module WavefrontDisplayPrinter
|
|
|
87
86
|
aggr << ['', preened_value(data), depth]
|
|
88
87
|
end
|
|
89
88
|
end
|
|
90
|
-
# rubocop:enable Style/CaseLikeIf
|
|
91
89
|
|
|
92
90
|
def smart_value(val)
|
|
93
91
|
val.to_s.empty? && opts[:none] ? '<none>' : preened_value(val)
|
|
@@ -152,7 +150,6 @@ module WavefrontDisplayPrinter
|
|
|
152
150
|
# @param depth [Integer]
|
|
153
151
|
# @return [Array[Array]]
|
|
154
152
|
#
|
|
155
|
-
# rubocop:disable Style/CaseLikeIf
|
|
156
153
|
def append_hash(data, aggr, depth)
|
|
157
154
|
data.each_pair do |k, v|
|
|
158
155
|
if v.is_a?(Hash)
|
|
@@ -166,7 +163,6 @@ module WavefrontDisplayPrinter
|
|
|
166
163
|
|
|
167
164
|
aggr
|
|
168
165
|
end
|
|
169
|
-
# rubocop:enable Style/CaseLikeIf
|
|
170
166
|
|
|
171
167
|
# Part of the #make_list recursion. Deals with arrays.
|
|
172
168
|
#
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'faraday'
|
|
4
|
+
|
|
3
5
|
module WavefrontCli
|
|
4
6
|
#
|
|
5
7
|
# Handle fatal errors.
|
|
@@ -80,6 +82,8 @@ module WavefrontCli
|
|
|
80
82
|
abort 'Search on non-existent key. Please use a top-level field.'
|
|
81
83
|
when Wavefront::Exception::InvalidSamplingValue
|
|
82
84
|
abort 'Sampling rates must be between 0 and 0.05.'
|
|
85
|
+
when Faraday::ConnectionFailed
|
|
86
|
+
abort 'Error connecting to remote host.'
|
|
83
87
|
else
|
|
84
88
|
warn "general error: #{exception}"
|
|
85
89
|
backtrace_message(exception)
|
|
@@ -61,9 +61,9 @@ module WavefrontHclOutput
|
|
|
61
61
|
# @return [String]
|
|
62
62
|
#
|
|
63
63
|
def handler(key, val)
|
|
64
|
-
key_handler = "khandle_#{key}"
|
|
65
|
-
value_handler = "vhandle_#{key}"
|
|
66
|
-
quote_handler = "qhandle_#{key}"
|
|
64
|
+
key_handler = :"khandle_#{key}"
|
|
65
|
+
value_handler = :"vhandle_#{key}"
|
|
66
|
+
quote_handler = :"qhandle_#{key}"
|
|
67
67
|
key = send(key_handler) if respond_to?(key_handler)
|
|
68
68
|
val = send(value_handler, val) if respond_to?(value_handler)
|
|
69
69
|
|
|
@@ -92,7 +92,7 @@ module WavefrontHclOutput
|
|
|
92
92
|
def quote_value(val)
|
|
93
93
|
case val.class.to_s.to_sym
|
|
94
94
|
when :String
|
|
95
|
-
format('"%<value>s"', value: val.gsub(
|
|
95
|
+
format('"%<value>s"', value: val.gsub('"', '\"'))
|
|
96
96
|
else
|
|
97
97
|
val
|
|
98
98
|
end
|
|
@@ -35,7 +35,7 @@ class String
|
|
|
35
35
|
# @return [String] the folded line
|
|
36
36
|
#
|
|
37
37
|
def fold(twidth = TW, indent = 10, prefix = '')
|
|
38
|
-
chunks = gsub(
|
|
38
|
+
chunks = gsub('default: ', 'default:^').scan_line(twidth - 8)
|
|
39
39
|
first_line = format("%<padding>s%<text>s\n",
|
|
40
40
|
padding: prefix,
|
|
41
41
|
text: chunks.shift)
|
data/lib/wavefront-cli/write.rb
CHANGED
|
@@ -11,7 +11,7 @@ module WavefrontCli
|
|
|
11
11
|
attr_reader :fmt
|
|
12
12
|
|
|
13
13
|
include Wavefront::Mixins
|
|
14
|
-
SPLIT_PATTERN = /\s(?=(?:[^"]|"[^"]*")*$)
|
|
14
|
+
SPLIT_PATTERN = /\s(?=(?:[^"]|"[^"]*")*$)/
|
|
15
15
|
|
|
16
16
|
# rubocop:disable Metrics/AbcSize
|
|
17
17
|
def do_point(value = options[:'<value>'])
|
|
@@ -235,7 +235,7 @@ module WavefrontCli
|
|
|
235
235
|
#
|
|
236
236
|
def extract_ts(chunks)
|
|
237
237
|
ts = chunks[fmt.index('t')]
|
|
238
|
-
|
|
238
|
+
parse_time(ts) if valid_timestamp?(ts)
|
|
239
239
|
rescue TypeError
|
|
240
240
|
Time.now.utc.to_i
|
|
241
241
|
end
|
data/spec/constants.rb
CHANGED
|
@@ -14,7 +14,7 @@ ENDPOINT = 'metrics.wavefront.com'
|
|
|
14
14
|
TOKEN = '0123456789-ABCDEF'
|
|
15
15
|
RES_DIR = ROOT.join('spec', 'wavefront-cli', 'resources')
|
|
16
16
|
CF = RES_DIR.join('wavefront.conf')
|
|
17
|
-
CF_VAL =
|
|
17
|
+
CF_VAL = IniFile.load(CF)
|
|
18
18
|
JSON_POST_HEADERS = { 'Content-Type': 'application/json',
|
|
19
19
|
Accept: 'application/json' }.freeze
|
|
20
20
|
TEE_ZERO = Time.now.freeze
|
|
@@ -8,7 +8,7 @@ require_relative '../../lib/wavefront-cli/controller'
|
|
|
8
8
|
# An abstract class which facilitates "end-to-end" testing of
|
|
9
9
|
# commands.
|
|
10
10
|
#
|
|
11
|
-
class EndToEndTest <
|
|
11
|
+
class EndToEndTest < Minitest::Test
|
|
12
12
|
attr_accessor :single_perm
|
|
13
13
|
attr_reader :wf
|
|
14
14
|
|
|
@@ -12,7 +12,7 @@ require_relative '../../lib/wavefront-cli/version'
|
|
|
12
12
|
# class via an instantiation of a concrete class. I don't think any
|
|
13
13
|
# of this matters.
|
|
14
14
|
#
|
|
15
|
-
class WavefrontCliBaseTest <
|
|
15
|
+
class WavefrontCliBaseTest < Minitest::Test
|
|
16
16
|
attr_reader :wf, :wf_cmd
|
|
17
17
|
|
|
18
18
|
def setup
|
|
@@ -8,7 +8,7 @@ require_relative '../../../lib/wavefront-cli/commands/base'
|
|
|
8
8
|
|
|
9
9
|
# Abstract class for testing commands
|
|
10
10
|
#
|
|
11
|
-
class WavefrontCommmandBaseTest <
|
|
11
|
+
class WavefrontCommmandBaseTest < Minitest::Test
|
|
12
12
|
attr_reader :wf, :col_width, :skip_cmd
|
|
13
13
|
|
|
14
14
|
def setup
|
|
@@ -13,11 +13,11 @@ require_relative 'base_spec'
|
|
|
13
13
|
class WavefrontCommmandConfigTest < WavefrontCommmandBaseTest
|
|
14
14
|
def setup
|
|
15
15
|
@wf = WavefrontCommandConfig.new
|
|
16
|
-
@col_width =
|
|
16
|
+
@col_width = 19
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def test_options
|
|
20
|
-
|
|
20
|
+
assert wf.options(600).start_with?("Global options:\n")
|
|
21
21
|
assert_match(/Options:\n/, wf.options)
|
|
22
22
|
|
|
23
23
|
wf.options(600).split("\n")[1..].each do |o|
|
|
@@ -28,7 +28,7 @@ class WavefrontCommmandConfigTest < WavefrontCommmandBaseTest
|
|
|
28
28
|
refute o.end_with?('.')
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
assert_equal(wf.options.split("\n").count(&:empty?),
|
|
31
|
+
assert_equal(wf.options.split("\n").count(&:empty?), 1)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def test_commands
|
|
@@ -45,7 +45,7 @@ class WavefrontCommmandConfigTest < WavefrontCommmandBaseTest
|
|
|
45
45
|
def test_docopt
|
|
46
46
|
x = wf.docopt
|
|
47
47
|
assert x.start_with?("Usage:\n")
|
|
48
|
-
|
|
48
|
+
assert_match("\nGlobal options:\n", x)
|
|
49
49
|
assert_match("--help\n", x)
|
|
50
50
|
assert_instance_of(String, x)
|
|
51
51
|
end
|
|
@@ -5,29 +5,32 @@ require 'pathname'
|
|
|
5
5
|
require 'minitest/autorun'
|
|
6
6
|
require_relative '../constants'
|
|
7
7
|
require_relative '../../lib/wavefront-cli/config'
|
|
8
|
+
require_relative '../support/command_base'
|
|
8
9
|
|
|
9
10
|
DEF_CF = Pathname.new(Dir.home).join('.wavefront')
|
|
10
11
|
CONF_TMP = Pathname.new('/tmp/outfile')
|
|
12
|
+
CMD_PATH = Pathname.new(__FILE__)
|
|
11
13
|
|
|
12
14
|
# Test CLI configuration command
|
|
13
15
|
#
|
|
14
|
-
class WavefrontCliConfigTest <
|
|
16
|
+
class WavefrontCliConfigTest < Minitest::Test
|
|
15
17
|
attr_reader :wf, :wfo, :wfn
|
|
16
18
|
|
|
17
19
|
def setup
|
|
20
|
+
blank_envvars
|
|
18
21
|
@wf = WavefrontCli::Config.new({})
|
|
19
22
|
@wfo = WavefrontCli::Config.new(config: CF)
|
|
20
23
|
@wfn = WavefrontCli::Config.new(config: '/no/file')
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
def test_do_location
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
assert_equal(DEF_CF, wf.do_location)
|
|
28
|
+
assert_equal(Pathname('/no/file'), wfn.do_location)
|
|
29
|
+
assert_equal(CF, wfo.do_location)
|
|
27
30
|
end
|
|
28
31
|
|
|
29
32
|
def test_do_profiles
|
|
30
|
-
|
|
33
|
+
assert_equal(%w[default other], wfo.do_profiles)
|
|
31
34
|
|
|
32
35
|
assert_raises(WavefrontCli::Exception::ConfigFileNotFound) do
|
|
33
36
|
wfn.do_profiles
|
|
@@ -35,10 +38,10 @@ class WavefrontCliConfigTest < MiniTest::Test
|
|
|
35
38
|
end
|
|
36
39
|
|
|
37
40
|
def test_do_show
|
|
38
|
-
|
|
39
|
-
assert_empty(err)
|
|
40
|
-
assert out.start_with?("[default]\n")
|
|
41
|
-
assert_equal(10, out.split("\n").size)
|
|
41
|
+
assert_equal(File.read(CF), wfo.do_show)
|
|
42
|
+
# assert_empty(err)
|
|
43
|
+
# assert out.start_with?("[default]\n")
|
|
44
|
+
# assert_equal(10, out.split("\n").size)
|
|
42
45
|
end
|
|
43
46
|
|
|
44
47
|
def test_input_prompt
|
|
@@ -72,23 +75,25 @@ class WavefrontCliConfigTest < MiniTest::Test
|
|
|
72
75
|
end
|
|
73
76
|
end
|
|
74
77
|
|
|
75
|
-
def
|
|
76
|
-
assert_equal('str', wf.
|
|
77
|
-
|
|
78
|
+
def test_validate_thing_input
|
|
79
|
+
assert_equal('str', wf.validate_thing_input('str', nil,
|
|
80
|
+
proc { |v| v.is_a?(String) }))
|
|
78
81
|
|
|
79
|
-
assert_equal('defval', wf.
|
|
80
|
-
|
|
82
|
+
assert_equal('defval', wf.validate_thing_input('', 'defval',
|
|
83
|
+
proc { |v|
|
|
84
|
+
v.is_a?(String)
|
|
85
|
+
}))
|
|
81
86
|
|
|
82
87
|
assert_raises(WavefrontCli::Exception::MandatoryValue) do
|
|
83
|
-
wf.
|
|
88
|
+
wf.validate_thing_input('', nil, proc { |v| v.is_a?(String) })
|
|
84
89
|
end
|
|
85
90
|
|
|
86
91
|
assert_raises(WavefrontCli::Exception::InvalidValue) do
|
|
87
|
-
wf.
|
|
92
|
+
wf.validate_thing_input(:symbol, nil, proc { |v| v.is_a?(String) })
|
|
88
93
|
end
|
|
89
94
|
|
|
90
95
|
assert_raises(WavefrontCli::Exception::InvalidValue) do
|
|
91
|
-
wf.
|
|
96
|
+
wf.validate_thing_input('', 123, proc { |v| v.is_a?(String) })
|
|
92
97
|
end
|
|
93
98
|
end
|
|
94
99
|
|
|
@@ -204,41 +209,29 @@ class WavefrontCliConfigTest < MiniTest::Test
|
|
|
204
209
|
end
|
|
205
210
|
end
|
|
206
211
|
|
|
207
|
-
def
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
out.each_line { |l| assert_match(/WAVEFRONT_[A-Z]+\s+unset$/, l) }
|
|
212
|
-
blank_envvars
|
|
212
|
+
def test_do_envvars_all_unset
|
|
213
|
+
assert_equal(['WAVEFRONT_ENDPOINT unset',
|
|
214
|
+
'WAVEFRONT_TOKEN unset',
|
|
215
|
+
'WAVEFRONT_PROXY unset'], wfo.do_envvars)
|
|
213
216
|
end
|
|
214
217
|
|
|
215
|
-
def
|
|
216
|
-
blank_envvars
|
|
218
|
+
def test_do_envvars_proxy_set
|
|
217
219
|
ENV['WAVEFRONT_PROXY'] = 'myproxy'
|
|
218
220
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
assert_match(/WAVEFRONT_TOKEN+\s+unset$/, out)
|
|
223
|
-
assert_match(/WAVEFRONT_PROXY+\s+myproxy$/, out)
|
|
224
|
-
blank_envvars
|
|
221
|
+
assert_equal(['WAVEFRONT_ENDPOINT unset',
|
|
222
|
+
'WAVEFRONT_TOKEN unset',
|
|
223
|
+
'WAVEFRONT_PROXY myproxy'], wfo.do_envvars)
|
|
225
224
|
end
|
|
226
225
|
|
|
227
|
-
def
|
|
228
|
-
blank_envvars
|
|
226
|
+
def test_do_envvars_proxy_and_token_set
|
|
229
227
|
ENV['WAVEFRONT_PROXY'] = 'myproxy'
|
|
230
228
|
ENV['WAVEFRONT_TOKEN'] = 'token'
|
|
231
229
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
assert_match(/WAVEFRONT_TOKEN+\s+token$/, out)
|
|
236
|
-
assert_match(/WAVEFRONT_PROXY+\s+myproxy$/, out)
|
|
237
|
-
blank_envvars
|
|
230
|
+
assert_equal(['WAVEFRONT_ENDPOINT unset',
|
|
231
|
+
'WAVEFRONT_TOKEN token',
|
|
232
|
+
'WAVEFRONT_PROXY myproxy'], wfo.do_envvars)
|
|
238
233
|
end
|
|
239
234
|
|
|
240
|
-
def test_read_thing; end
|
|
241
|
-
|
|
242
235
|
def test_present?
|
|
243
236
|
assert wfo.present?
|
|
244
237
|
assert_raises(WavefrontCli::Exception::ConfigFileNotFound) do
|
|
@@ -261,3 +254,50 @@ class WavefrontCliConfigTest < MiniTest::Test
|
|
|
261
254
|
end
|
|
262
255
|
end
|
|
263
256
|
end
|
|
257
|
+
|
|
258
|
+
class ConfigEndToEndTest < EndToEndTest
|
|
259
|
+
def test_location
|
|
260
|
+
assert_output("#{Pathname.new(Dir.home).join('.wavefront')}\n", '') do
|
|
261
|
+
wf.new('config location'.split)
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def test_profiles
|
|
266
|
+
assert_output("default\nother\n", '') do
|
|
267
|
+
wf.new("config profiles -c #{CF}".split)
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def test_envvars
|
|
272
|
+
out, err = capture_io { wf.new('config envvars'.split) }
|
|
273
|
+
assert_equal(3, out.lines.count)
|
|
274
|
+
assert_empty err
|
|
275
|
+
assert_match(/^WAVEFRONT_ENDPOINT /, out)
|
|
276
|
+
assert_match(/^WAVEFRONT_TOKEN /, out)
|
|
277
|
+
assert_match(/^WAVEFRONT_PROXY /, out)
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def test_cluster
|
|
281
|
+
assert_abort_on_missing_creds('cluster')
|
|
282
|
+
quietly { assert_cmd_gets('cluster', '/api/v2/cluster/info') }
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def test_about
|
|
286
|
+
out, err = capture_io { wf.new('config about'.split) }
|
|
287
|
+
lines = out.lines
|
|
288
|
+
|
|
289
|
+
assert_match(/^wf version *#{WF_CLI_VERSION}$/o, lines[0])
|
|
290
|
+
assert lines[1].start_with?('wf path')
|
|
291
|
+
assert lines[2].start_with?('SDK version')
|
|
292
|
+
assert lines[3].start_with?('SDK location')
|
|
293
|
+
assert lines[4].start_with?('Ruby version')
|
|
294
|
+
assert lines[5].start_with?('Ruby platform')
|
|
295
|
+
assert_empty err
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
private
|
|
299
|
+
|
|
300
|
+
def cmd_word
|
|
301
|
+
'config'
|
|
302
|
+
end
|
|
303
|
+
end
|
|
@@ -8,7 +8,7 @@ require_relative '../../lib/wavefront-cli/controller'
|
|
|
8
8
|
|
|
9
9
|
# Be sure the CLI behaves properly when people ask for help
|
|
10
10
|
#
|
|
11
|
-
class WavefrontCliHelpTest <
|
|
11
|
+
class WavefrontCliHelpTest < Minitest::Test
|
|
12
12
|
def test_development_mode
|
|
13
13
|
refute defined?(DEVELOPMENT) if ENV['CI']
|
|
14
14
|
end
|
|
@@ -103,7 +103,7 @@ end
|
|
|
103
103
|
|
|
104
104
|
# Here's the subclass
|
|
105
105
|
#
|
|
106
|
-
class GibletsTest <
|
|
106
|
+
class GibletsTest < Minitest::Test
|
|
107
107
|
attr_reader :wfc
|
|
108
108
|
|
|
109
109
|
def setup
|
|
@@ -11,7 +11,7 @@ TEST_EVENT_STORE_DIR = Pathname.new(Dir.mktmpdir)
|
|
|
11
11
|
# Tests for event store class. This is tested well via the interface of the
|
|
12
12
|
# events CLI class.
|
|
13
13
|
#
|
|
14
|
-
class Test <
|
|
14
|
+
class Test < Minitest::Test
|
|
15
15
|
attr_reader :wf
|
|
16
16
|
|
|
17
17
|
include WavefrontCli::Constants
|
|
@@ -14,7 +14,7 @@ INTERFERING_FILE = Pathname.new(Dir.home).join('.wavefront')
|
|
|
14
14
|
# Test option handler class. End to end tests because the work is
|
|
15
15
|
# always done in the constructor
|
|
16
16
|
#
|
|
17
|
-
class OptHandlerTest <
|
|
17
|
+
class OptHandlerTest < Minitest::Test
|
|
18
18
|
def test_no_opts
|
|
19
19
|
x = WavefrontCli::OptHandler.new
|
|
20
20
|
assert x.is_a?(WavefrontCli::OptHandler)
|
|
@@ -10,7 +10,7 @@ require_relative '../../../lib/wavefront-cli/output/ruby'
|
|
|
10
10
|
# controlled an environment as this, I'm not going to bother. We
|
|
11
11
|
# only p() an objecty anyway.
|
|
12
12
|
#
|
|
13
|
-
class WavefrontOutputJsonTest <
|
|
13
|
+
class WavefrontOutputJsonTest < Minitest::Test
|
|
14
14
|
attr_reader :wfo
|
|
15
15
|
|
|
16
16
|
def setup
|
|
@@ -7,7 +7,7 @@ require_relative '../../../../lib/wavefront-cli/output/wavefront/query'
|
|
|
7
7
|
|
|
8
8
|
# Test Wavefront wire-format output
|
|
9
9
|
#
|
|
10
|
-
class WavefrontOutputWavefrontTest <
|
|
10
|
+
class WavefrontOutputWavefrontTest < Minitest::Test
|
|
11
11
|
attr_reader :wfq, :wfr
|
|
12
12
|
|
|
13
13
|
def setup
|
|
@@ -6,7 +6,7 @@ require_relative '../../../lib/wavefront-cli/stdlib/array'
|
|
|
6
6
|
|
|
7
7
|
# Test extensions to stlib Array
|
|
8
8
|
#
|
|
9
|
-
class TestArray <
|
|
9
|
+
class TestArray < Minitest::Test
|
|
10
10
|
def test_max_length
|
|
11
11
|
assert_equal(7, %w[short longer longest].max_length)
|
|
12
12
|
assert_equal(7, %i[short longer longest].max_length)
|
|
@@ -8,7 +8,7 @@ require_relative '../../../lib/wavefront-cli/commands/base'
|
|
|
8
8
|
|
|
9
9
|
# Test extensions to string class
|
|
10
10
|
#
|
|
11
|
-
class StringTest <
|
|
11
|
+
class StringTest < Minitest::Test
|
|
12
12
|
def test_cmd_fold
|
|
13
13
|
cmn = '[-DnV] [-c file] [-P profile] [-E endpoint] [-t token]'
|
|
14
14
|
str = "command subcommand #{cmn} [-a alpha] [-b beta] [-c gamma] <id>"
|
data/wavefront-cli.gemspec
CHANGED
|
@@ -23,18 +23,8 @@ Gem::Specification.new do |gem|
|
|
|
23
23
|
|
|
24
24
|
gem.add_runtime_dependency 'docopt', '~> 0.6'
|
|
25
25
|
gem.add_runtime_dependency 'inifile', '~> 3.0'
|
|
26
|
-
gem.add_runtime_dependency 'wavefront-sdk', '~>
|
|
26
|
+
gem.add_runtime_dependency 'wavefront-sdk', '~> 8.0'
|
|
27
27
|
|
|
28
|
-
gem.
|
|
29
|
-
gem.add_development_dependency 'rake', '~> 13.0'
|
|
30
|
-
gem.add_development_dependency 'rubocop', '~> 1.43'
|
|
31
|
-
gem.add_development_dependency 'rubocop-minitest', '~> 0.26'
|
|
32
|
-
gem.add_development_dependency 'rubocop-performance', '~> 1.15'
|
|
33
|
-
gem.add_development_dependency 'rubocop-rake', '~> 0.6'
|
|
34
|
-
gem.add_development_dependency 'spy', '~> 1.0'
|
|
35
|
-
gem.add_development_dependency 'webmock', '~> 3.18'
|
|
36
|
-
gem.add_development_dependency 'yard', '~> 0.9'
|
|
37
|
-
|
|
38
|
-
gem.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
|
|
28
|
+
gem.required_ruby_version = Gem::Requirement.new('>= 3.0.0')
|
|
39
29
|
gem.metadata['rubygems_mfa_required'] = 'true'
|
|
40
30
|
end
|
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:
|
|
4
|
+
version: 10.0.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:
|
|
11
|
+
date: 2024-01-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: docopt
|
|
@@ -44,140 +44,14 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '8.0'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: minitest
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '5.17'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '5.17'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rake
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '13.0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '13.0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rubocop
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '1.43'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '1.43'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: rubocop-minitest
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '0.26'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0.26'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rubocop-performance
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '1.15'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '1.15'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: rubocop-rake
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - "~>"
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0.6'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - "~>"
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0.6'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: spy
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - "~>"
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: '1.0'
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - "~>"
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: '1.0'
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: webmock
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - "~>"
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: '3.18'
|
|
160
|
-
type: :development
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - "~>"
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: '3.18'
|
|
167
|
-
- !ruby/object:Gem::Dependency
|
|
168
|
-
name: yard
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - "~>"
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: '0.9'
|
|
174
|
-
type: :development
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - "~>"
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: '0.9'
|
|
54
|
+
version: '8.0'
|
|
181
55
|
description: 'CLI for Wavefront (wavefront.com) API v2 '
|
|
182
56
|
email: services@id264.net
|
|
183
57
|
executables:
|
|
@@ -243,6 +117,7 @@ files:
|
|
|
243
117
|
- lib/wavefront-cli/display/apitoken.rb
|
|
244
118
|
- lib/wavefront-cli/display/base.rb
|
|
245
119
|
- lib/wavefront-cli/display/cloudintegration.rb
|
|
120
|
+
- lib/wavefront-cli/display/cluster.rb
|
|
246
121
|
- lib/wavefront-cli/display/dashboard.rb
|
|
247
122
|
- lib/wavefront-cli/display/derivedmetric.rb
|
|
248
123
|
- lib/wavefront-cli/display/distribution.rb
|
|
@@ -445,14 +320,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
445
320
|
requirements:
|
|
446
321
|
- - ">="
|
|
447
322
|
- !ruby/object:Gem::Version
|
|
448
|
-
version:
|
|
323
|
+
version: 3.0.0
|
|
449
324
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
450
325
|
requirements:
|
|
451
326
|
- - ">="
|
|
452
327
|
- !ruby/object:Gem::Version
|
|
453
328
|
version: '0'
|
|
454
329
|
requirements: []
|
|
455
|
-
rubygems_version: 3.4.
|
|
330
|
+
rubygems_version: 3.4.19
|
|
456
331
|
signing_key:
|
|
457
332
|
specification_version: 4
|
|
458
333
|
summary: CLI for Wavefront API v2
|