wavefront-cli 2.1.2 → 2.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 40a642f73bf1dcaa8bfe36bb00ad3c56acf5d2f7
4
- data.tar.gz: 2920cf7de19ec00f16897a89d75a7c84a3fb9a55
3
+ metadata.gz: 1098aac042355b553d4b5e6b1ae5bad73794a61a
4
+ data.tar.gz: 97495d06c18f86febbc78578bfae1c60eec8b260
5
5
  SHA512:
6
- metadata.gz: 81bd3003b6d18cfadb87aa8c4fd21898b1ac6779413c1dd44544aedbd6f8a1106bc0e0774c869ebef345b91887785363b6c9c95ea932e1e3842fe490778903b1
7
- data.tar.gz: 6038bd021543276e6b90a05b275664c2a61e52bec2c4460e1018f1c619fd26ab589e863972f7e425f1a749ae4504e8e4c7e2bd6c45e30bdb219653293422effc
6
+ metadata.gz: 178fe53faaad7d665bf497b35177884b37b03175788e0cf7a808a3a7430aa655efd5ba3bd1941ea122ffd5b5e85aa5e90039906775088aa52fe390f59928a25d
7
+ data.tar.gz: 0ce5b99c7cf2af4376a6a5750243bc06155dbad7ef9c2908fd7e220e344a95af84ef6adc7c6166022e446a4035c213d4967be072cfe1f42724269a60a3734c36
@@ -1,14 +1,17 @@
1
+ # For development against a local checkout of the SDK, uncomment
2
+ # this block
3
+ #
4
+ # dir = Pathname.new(__FILE__).dirname.realpath.parent.parent.parent
5
+ # $LOAD_PATH.<< dir + 'lib'
6
+ # $LOAD_PATH.<< dir + 'wavefront-sdk' + 'lib'
7
+
1
8
  require 'pathname'
2
9
  require 'pp'
3
10
  require 'docopt'
4
11
  require_relative './version'
5
- require_relative './opt_handler'
6
12
  require_relative './exception'
7
13
 
8
- # $LOAD_PATH.<< Pathname.new(__FILE__).dirname.realpath.parent.parent
9
- # .parent + 'lib'
10
- # $LOAD_PATH.<< Pathname.new(__FILE__).dirname.realpath.parent.parent
11
- # .parent + 'wavefront-sdk' + 'lib'
14
+ require_relative './opt_handler'
12
15
 
13
16
  CMD_DIR = Pathname.new(__FILE__).dirname + 'commands'
14
17
 
@@ -29,7 +32,8 @@ class WavefrontCliController
29
32
  run_command(hook)
30
33
  end
31
34
 
32
- # What you see when you do 'wavefront --help'
35
+ # What you see when you do 'wf --help'
36
+ # @return [String]
33
37
  #
34
38
  def default_help
35
39
  s = "Wavefront CLI\n\nUsage:\n #{CMD} command [options]\n" \
@@ -39,7 +43,7 @@ class WavefrontCliController
39
43
  s.<< "\nUse '#{CMD} <command> --help' for further information.\n"
40
44
  end
41
45
 
42
- # Make a hash of command descriptions for docopt.
46
+ # @return [Hash] command descriptions for docopt.
43
47
  #
44
48
  def docopt_hash
45
49
  cmds.each_with_object(default: default_help) do |(k, v), ret|
@@ -67,11 +71,12 @@ class WavefrontCliController
67
71
  end
68
72
 
69
73
  def parse_opts(o)
70
- WavefrontCli::OptHandler.new(conf_file, o).opts
74
+ WavefrontCli::OptHandler.new(o).opts
71
75
  end
72
76
 
73
77
  # Get the SDK class we need to run the command we've been given.
74
78
  #
79
+ # @param cmd [String]
75
80
  def load_sdk(cmd, opts)
76
81
  require_relative File.join('.', cmds[cmd].sdk_file)
77
82
  Object.const_get('WavefrontCli').const_get(cmds[cmd].sdk_class).new(opts)
@@ -93,6 +98,7 @@ class WavefrontCliController
93
98
 
94
99
  # Each command is defined in its own file. Dynamically load all
95
100
  # those commands.
101
+ # @return [Hash] :command => CommandClass
96
102
  #
97
103
  def load_commands
98
104
  CMD_DIR.children.each_with_object({}) do |f, ret|
@@ -113,24 +119,12 @@ class WavefrontCliController
113
119
  Object.const_get("WavefrontCommand#{k_name.capitalize}").new
114
120
  end
115
121
 
116
- # The default config file path.
117
- #
118
- # @return [Pathname] where we excpect to find a config file
119
- #
120
- def conf_file
121
- if ENV['HOME']
122
- Pathname.new(ENV['HOME']) + '.wavefront'
123
- else
124
- Pathname.new('/etc/wavefront/client.conf')
125
- end
126
- end
127
-
128
122
  # Symbolize, and remove dashes from option keys
129
123
  #
130
124
  # @param h [Hash] options hash
131
125
  # return [Hash] h with modified keys
132
126
  #
133
127
  def sanitize_keys(h)
134
- h.each_with_object({}) { |(k, v), r| r[k.delete('-').to_sym] = v }
128
+ h.each_with_object({}) { |(k, v), r| r[k.to_s.delete('-').to_sym] = v }
135
129
  end
136
130
  end
@@ -1,5 +1,6 @@
1
1
  require 'inifile'
2
2
  require 'pathname'
3
+ require 'wavefront-sdk/credentials'
3
4
  require_relative './constants.rb'
4
5
 
5
6
  module WavefrontCli
@@ -23,40 +24,47 @@ module WavefrontCli
23
24
  class OptHandler
24
25
  include WavefrontCli::Constants
25
26
 
26
- attr_reader :opts, :cli_opts, :conf_file
27
+ attr_reader :opts
27
28
 
28
- def initialize(conf_file, cli_opts = {})
29
- @conf_file = if cli_opts.key?(:config) && cli_opts[:config]
30
- Pathname.new(cli_opts[:config])
31
- else
32
- conf_file
33
- end
34
-
35
- @cli_opts = cli_opts.reject { |_k, v| v.nil? }
36
-
37
- @opts = DEFAULT_OPTS.merge(load_profile).merge(@cli_opts)
29
+ def initialize(cli_opts = {})
30
+ cred_opts = setup_cred_opts(cli_opts)
31
+ cli_opts.reject! { |_k, v| v.nil? }
32
+ @opts = DEFAULT_OPTS.merge(load_profile(cred_opts)).merge(cli_opts)
38
33
  end
39
34
 
40
- # Load in configuration options from the (optionally) given
41
- # section of an ini-style configuration file. If the file's not
42
- # there, we don't consider that an error. Returns a hash of
43
- # options which matches what Docopt gives us.
35
+ # Create an options hash to pass to the Wavefront::Credentials
36
+ # constructor.
37
+ # @param cli_opts [Hash] options from docopt, which may include
38
+ # the location of the config file and the stanza within it
39
+ # @return [Hash] keys are none, one, or both of :file and
40
+ # :profile
44
41
  #
45
- # rubocop:disable Metrics/AbcSize
46
- def load_profile
47
- unless conf_file.exist?
48
- puts "config file '#{conf_file}' not found. Taking options " \
49
- 'from command-line.'
50
- return {}
51
- end
42
+ def setup_cred_opts(cli_opts)
43
+ cred_opts = {}
52
44
 
53
- pf = cli_opts.fetch(:profile, 'default')
45
+ if cli_opts[:config]
46
+ cred_opts[:file] = Pathname.new(cli_opts[:config])
54
47
 
55
- puts "reading '#{pf}' profile from '#{conf_file}'" if cli_opts[:debug]
56
-
57
- IniFile.load(conf_file)[pf].each_with_object({}) do |(k, v), memo|
58
- memo[k.to_sym] = v
48
+ unless cred_opts[:file].exist?
49
+ puts "config file '#{cred_opts[:file]}' not found."
50
+ end
59
51
  end
52
+
53
+ cred_opts[:profile] = cli_opts[:profile] if cli_opts[:profile]
54
+ cred_opts
55
+ end
56
+
57
+ # Load credentials (and other config) using the SDK Credentials
58
+ # class. This allows the user to override values with
59
+ # environment variables
60
+ #
61
+ # @param cred_opts [Hash] options to pass to
62
+ # Wavefront::Credentials constructor
63
+ # @return [Hash] keys are :token, :endpoint etc
64
+ #
65
+ def load_profile(cred_opts)
66
+ creds = Wavefront::Credentials.new(cred_opts).config
67
+ Hash[creds.map{ |k, v| [k.to_sym, v] }]
60
68
  end
61
69
  end
62
70
  end
@@ -1 +1 @@
1
- WF_CLI_VERSION = '2.1.2'.freeze
1
+ WF_CLI_VERSION = '2.1.3'.freeze
data/spec/spec_helper.rb CHANGED
@@ -7,21 +7,23 @@ require 'minitest/spec'
7
7
  require 'pathname'
8
8
  require_relative '../lib/wavefront-cli/controller'
9
9
 
10
- CMD = 'wavefront'.freeze
11
- ENDPOINT = 'metrics.wavefront.com'
12
- TOKEN = '0123456789-ABCDEF'
13
- RES_DIR = Pathname.new(__FILE__).dirname + 'wavefront-cli' + 'resources'
14
- CF = RES_DIR + 'conf.yaml'
15
- CF_VAL = IniFile.load(CF)
16
- JSON_POST_HEADERS = {
17
- :'Content-Type' => 'application/json', :Accept => 'application/json'
18
- }.freeze
19
-
20
- CMDS = %w(alert integration dashboard event link message metric
21
- proxy query savedsearch source user window webhook write).freeze
22
-
23
- BAD_TAG="*BAD TAG*"
24
- TW = 80
10
+ unless defined?(CMD)
11
+ CMD = 'wavefront'.freeze
12
+ ENDPOINT = 'metrics.wavefront.com'
13
+ TOKEN = '0123456789-ABCDEF'
14
+ RES_DIR = Pathname.new(__FILE__).dirname + 'wavefront-cli' + 'resources'
15
+ CF = RES_DIR + 'wavefront.conf'
16
+ CF_VAL = IniFile.load(CF)
17
+ JSON_POST_HEADERS = {
18
+ :'Content-Type' => 'application/json', :Accept => 'application/json'
19
+ }.freeze
20
+
21
+ CMDS = %w(alert integration dashboard event link message metric
22
+ proxy query savedsearch source user window webhook write).freeze
23
+
24
+ BAD_TAG="*BAD TAG*"
25
+ TW = 80
26
+ end
25
27
 
26
28
  # Return an array of CLI permutations and the values to which they relate
27
29
  #
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- CMD = 'test'.freeze
4
-
5
3
  require 'pathname'
6
4
  require_relative(File.join('../../../lib/wavefront-cli/commands',
7
5
  Pathname.new(__FILE__).basename
@@ -1,4 +1,2 @@
1
1
  require 'minitest/autorun'
2
2
  require 'minitest/spec'
3
-
4
- TW = 80
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../../lib/wavefront-cli/controller'
4
3
  require_relative '../spec_helper'
4
+ require_relative '../../lib/wavefront-cli/controller'
5
5
 
6
6
  # Be sure the CLI behaves properly when people ask for help
7
7
  #
@@ -47,3 +47,25 @@ class WavefrontCliHelpTest < MiniTest::Test
47
47
  end
48
48
  end
49
49
  end
50
+
51
+ # To test internal methods, make a subclass with no initializer,
52
+ # so we can get at the methods without triggering one of the things
53
+ # tested above.
54
+ #
55
+ class Giblets < WavefrontCliController
56
+ def initialize; end
57
+ end
58
+
59
+ class GibletsTest < MiniTest::Test
60
+ attr_reader :wfc
61
+
62
+ def setup
63
+ @wfc = Giblets.new
64
+ end
65
+
66
+ def test_sanitize_keys
67
+ h_in = { '--help': true, stuff: false, 'key' => 'value' }
68
+ assert_equal(wfc.sanitize_keys(h_in),
69
+ { help: true, stuff: false, key: 'value' })
70
+ end
71
+ end
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- CMD = 'test'.freeze
4
-
5
3
  require 'date'
6
4
  require 'map'
7
5
  require 'pathname'
@@ -1,5 +1,3 @@
1
1
  require 'minitest/autorun'
2
2
  require 'minitest/spec'
3
3
  require 'spy/integration'
4
-
5
- TW = 80
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../spec_helper'
4
+ require_relative '../../lib/wavefront-cli/opt_handler'
5
+
6
+ # Test option handler class. End to end tests because the work is
7
+ # always done in the constructor
8
+ #
9
+ class OptHandlerTest < MiniTest::Test
10
+
11
+ # This one has to be kind of vague because I have a config file on
12
+ # the box I develop on, which will always be picked up. Other
13
+ # tests are more specific
14
+ def test_no_opts
15
+ x = WavefrontCli::OptHandler.new
16
+ assert x.is_a?(WavefrontCli::OptHandler)
17
+ assert x.opts.is_a?(Hash)
18
+ assert x.opts.keys.include?(:endpoint)
19
+ end
20
+
21
+ def test_no_config_no_env
22
+ opts = { config: '/nosuchfile' }
23
+ x = WavefrontCli::OptHandler.new(opts)
24
+ o = x.opts
25
+ assert x.is_a?(WavefrontCli::OptHandler)
26
+ assert o.is_a?(Hash)
27
+ refute o.keys.include?(:token)
28
+ assert_equal(o[:config], '/nosuchfile')
29
+ assert_equal(o[:endpoint], 'metrics.wavefront.com')
30
+
31
+ assert_output("config file '/nosuchfile' not found.\n") do
32
+ WavefrontCli::OptHandler.new(opts)
33
+ end
34
+ end
35
+
36
+ def test_no_config_env
37
+ ENV['WAVEFRONT_TOKEN'] = 'abcd1234'
38
+ ENV['WAVEFRONT_ENDPOINT'] = 'myendpoint.wavefront.com'
39
+ opts = { config: '/nosuchfile' }
40
+ x = WavefrontCli::OptHandler.new(opts)
41
+ o = x.opts
42
+ assert x.is_a?(WavefrontCli::OptHandler)
43
+ assert o.is_a?(Hash)
44
+ assert_equal(o[:token], 'abcd1234')
45
+ assert_equal(o[:config], '/nosuchfile')
46
+ assert_equal(o[:endpoint], 'myendpoint.wavefront.com')
47
+ refute o.keys.include?(:proxy)
48
+
49
+ assert_output("config file '/nosuchfile' not found.\n") do
50
+ WavefrontCli::OptHandler.new(opts)
51
+ end
52
+ ENV['WAVEFRONT_TOKEN'] = nil
53
+ ENV['WAVEFRONT_ENDPOINT'] = nil
54
+ end
55
+
56
+ def test_default_config_no_env
57
+ opts = { config: CF }
58
+ x = WavefrontCli::OptHandler.new(opts)
59
+ o = x.opts
60
+ assert x.is_a?(WavefrontCli::OptHandler)
61
+ assert o.is_a?(Hash)
62
+ assert_equal(o[:token], '12345678-abcd-1234-abcd-123456789012')
63
+ assert_equal(o[:config], CF)
64
+ assert_equal(o[:endpoint], 'default.wavefront.com')
65
+ assert_equal(o[:proxy], 'wavefront.localnet')
66
+ assert_output("") { WavefrontCli::OptHandler.new(opts) }
67
+ end
68
+
69
+ def test_alt_config_env
70
+ ENV['WAVEFRONT_TOKEN'] = 'abdc1234'
71
+ ENV['WAVEFRONT_ENDPOINT'] = nil
72
+ opts = { config: CF, profile: 'other' }
73
+ x = WavefrontCli::OptHandler.new(opts)
74
+ o = x.opts
75
+ assert x.is_a?(WavefrontCli::OptHandler)
76
+ assert o.is_a?(Hash)
77
+ assert_equal(o[:token], 'abdc1234')
78
+ assert_equal(o[:config], CF)
79
+ assert_equal(o[:endpoint], 'other.wavefront.com')
80
+ assert_equal(o[:proxy], 'otherwf.localnet')
81
+ assert_output("") { WavefrontCli::OptHandler.new(opts) }
82
+ ENV['WAVEFRONT_TOKEN'] = nil
83
+ ENV['WAVEFRONT_ENDPOINT'] = nil
84
+ end
85
+
86
+ def test_alt_config_env
87
+ ENV['WAVEFRONT_TOKEN'] = nil
88
+ ENV['WAVEFRONT_ENDPOINT'] = 'myendpoint.wavefront.com'
89
+ opts = { config: CF, profile: 'other' }
90
+ x = WavefrontCli::OptHandler.new(opts)
91
+ o = x.opts
92
+ assert x.is_a?(WavefrontCli::OptHandler)
93
+ assert o.is_a?(Hash)
94
+ assert_equal(o[:token], 'abcdefab-0123-abcd-0123-abcdefabcdef')
95
+ assert_equal(o[:config], CF)
96
+ assert_equal(o[:endpoint], 'myendpoint.wavefront.com')
97
+ assert_equal(o[:proxy], 'otherwf.localnet')
98
+ assert_output("") { WavefrontCli::OptHandler.new(opts) }
99
+ ENV['WAVEFRONT_TOKEN'] = nil
100
+ ENV['WAVEFRONT_ENDPOINT'] = nil
101
+ end
102
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wavefront-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Fisher
@@ -217,7 +217,6 @@ files:
217
217
  - spec/spec_helper.rb
218
218
  - spec/wavefront-cli/alert_spec.rb
219
219
  - spec/wavefront-cli/base_spec.rb
220
- - spec/wavefront-cli/cli_help_spec.rb
221
220
  - spec/wavefront-cli/cloudintegration_spec.rb
222
221
  - spec/wavefront-cli/commands/alert_spec.rb
223
222
  - spec/wavefront-cli/commands/base_spec.rb
@@ -233,6 +232,7 @@ files:
233
232
  - spec/wavefront-cli/commands/webhook_spec.rb
234
233
  - spec/wavefront-cli/commands/window_spec.rb
235
234
  - spec/wavefront-cli/commands/write_spec.rb
235
+ - spec/wavefront-cli/controller_spec.rb
236
236
  - spec/wavefront-cli/dashboard_spec.rb
237
237
  - spec/wavefront-cli/display/base_spec.rb
238
238
  - spec/wavefront-cli/display/printer/base_spec.rb
@@ -245,9 +245,10 @@ files:
245
245
  - spec/wavefront-cli/maintanancewindow_spec.rb
246
246
  - spec/wavefront-cli/message_spec.rb
247
247
  - spec/wavefront-cli/metric_spec.rb
248
+ - spec/wavefront-cli/opt_handler_spec.rb
248
249
  - spec/wavefront-cli/proxy_spec.rb
249
250
  - spec/wavefront-cli/query_spec.rb
250
- - spec/wavefront-cli/resources/conf.yaml
251
+ - spec/wavefront-cli/resources/wavefront.conf
251
252
  - spec/wavefront-cli/savedsearch_spec.rb
252
253
  - spec/wavefront-cli/source_spec.rb
253
254
  - spec/wavefront-cli/string_spec.rb
@@ -282,7 +283,6 @@ test_files:
282
283
  - spec/spec_helper.rb
283
284
  - spec/wavefront-cli/alert_spec.rb
284
285
  - spec/wavefront-cli/base_spec.rb
285
- - spec/wavefront-cli/cli_help_spec.rb
286
286
  - spec/wavefront-cli/cloudintegration_spec.rb
287
287
  - spec/wavefront-cli/commands/alert_spec.rb
288
288
  - spec/wavefront-cli/commands/base_spec.rb
@@ -298,6 +298,7 @@ test_files:
298
298
  - spec/wavefront-cli/commands/webhook_spec.rb
299
299
  - spec/wavefront-cli/commands/window_spec.rb
300
300
  - spec/wavefront-cli/commands/write_spec.rb
301
+ - spec/wavefront-cli/controller_spec.rb
301
302
  - spec/wavefront-cli/dashboard_spec.rb
302
303
  - spec/wavefront-cli/display/base_spec.rb
303
304
  - spec/wavefront-cli/display/printer/base_spec.rb
@@ -310,9 +311,10 @@ test_files:
310
311
  - spec/wavefront-cli/maintanancewindow_spec.rb
311
312
  - spec/wavefront-cli/message_spec.rb
312
313
  - spec/wavefront-cli/metric_spec.rb
314
+ - spec/wavefront-cli/opt_handler_spec.rb
313
315
  - spec/wavefront-cli/proxy_spec.rb
314
316
  - spec/wavefront-cli/query_spec.rb
315
- - spec/wavefront-cli/resources/conf.yaml
317
+ - spec/wavefront-cli/resources/wavefront.conf
316
318
  - spec/wavefront-cli/savedsearch_spec.rb
317
319
  - spec/wavefront-cli/source_spec.rb
318
320
  - spec/wavefront-cli/string_spec.rb