wavefront-cli 4.5.2 → 4.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85cffedda19dd4e8ac981ecc22a59610278f3d22be74f73cb9fd52baee745e9b
4
- data.tar.gz: c623f5dfc3f2c4b9e75547f38de546115eebec4e0d22e397c905d7483bad67f4
3
+ metadata.gz: f6778585fb11ae1989c46feaf4e3ba7300e486f3893358216a33d3b331f0428a
4
+ data.tar.gz: 368623dfc6837757c38817bab28edb98aa869932905a7968feb6728f5ab4df19
5
5
  SHA512:
6
- metadata.gz: '080b36c657b1b489b236f8a0207a74ebc49b30e9fd921cdd3fb6ae4e134f637297b508e9b3cecce0a2897655cfad0516b64d45c7061e054763f8a8e51e10c0c0'
7
- data.tar.gz: e0417583dfc07ec380c298a1d6b4a23dd0a31715997b298494ca5a83bee01960bbe0b1b0717a2efd23d6bcf00bdd961affa05ae4798206a505e17f0bc79627b5
6
+ metadata.gz: 8bd581d185626b015fbb6fb4a3649d4e51b798335e9c7e3e715663b5cda6a23a46f61906b14e9cbc4c5769ee4ae524283e2b509f8613d059bc7702909456e7ef
7
+ data.tar.gz: b91f871b2caa0658337a01d54644fc2db7d597a37229328bed821e03e8793cbf681fa0ebca8ccf356d9ce2894ef36091f181788f7f6811dba781f19a0ad4f9ec
data/HISTORY.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.6.0
4
+ * Add `ingestionpolicy` and `usage` commands.
5
+ * Require 3.7.x of [the SDK](https://github.com/snltd/wavefront-sdk).
6
+
3
7
  ## 4.5.2 (2020-01-15)
4
8
  * Test build against, and fix warning messages on, Ruby 2.7.0
5
9
  * Bump SDK dependency to 3.6.1
data/README.md CHANGED
@@ -37,6 +37,7 @@ Commands:
37
37
  dashboard view and manage dashboards
38
38
  derivedmetric view and manage derived metrics
39
39
  event open, close, view, and manage events
40
+ ingestionpolicy view and manage ingestion policies
40
41
  integration view and manage Wavefront integrations
41
42
  link view and manage external links
42
43
  message read and mark user messages
@@ -48,6 +49,7 @@ Commands:
48
49
  serviceaccount view and manage service accounts
49
50
  settings view and manage system preferences
50
51
  source view and manage source tags and descriptions
52
+ usage view and manage usage reports
51
53
  user view and manage Wavefront users
52
54
  usergroup view and manage Wavefront user groups
53
55
  webhook view and manage webhooks
@@ -116,7 +116,11 @@ module WavefrontCli
116
116
  def failed_validation_message(input)
117
117
  format("'%<value>s' is not a valid %<thing>s ID.",
118
118
  value: input,
119
- thing: klass_word)
119
+ thing: descriptive_name)
120
+ end
121
+
122
+ def descriptive_name
123
+ klass_word
120
124
  end
121
125
 
122
126
  # Make a wavefront-sdk credentials object from standard
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ # Define the ingestionpolicy command.
6
+ #
7
+ class WavefrontCommandIngestionpolicy < WavefrontCommandBase
8
+ def thing
9
+ 'ingestion policy'
10
+ end
11
+
12
+ def things
13
+ 'ingestion policies'
14
+ end
15
+
16
+ def sdk_class
17
+ 'IngestionPolicy'
18
+ end
19
+
20
+ def _commands
21
+ ["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
22
+ "create #{CMN} [-d description] <name>",
23
+ "describe #{CMN} <id>",
24
+ "delete #{CMN} <id>",
25
+ "dump #{CMN}",
26
+ "import #{CMN} [-u] <file>",
27
+ "set #{CMN} <key=value> <id>",
28
+ "add user #{CMN} <id> <user>...",
29
+ "remove user #{CMN} <id> <user>...",
30
+ "members #{CMN} <id>",
31
+ "for #{CMN} <user>",
32
+ "search #{CMN} [-al] [-o offset] [-L limit] [-O fields] <condition>..."]
33
+ end
34
+
35
+ def _options
36
+ [common_options,
37
+ "-l, --long list #{things} in detail",
38
+ "-a, --all list all #{things}",
39
+ "-o, --offset=n start list from nth #{thing}",
40
+ '-O, --fields=F1,F2,... only show given fields',
41
+ "-L, --limit=COUNT number of #{things} to list",
42
+ "-d, --desc=STRING reason for #{thing}",
43
+ "-u, --update update an existing #{thing}"]
44
+ end
45
+ end
@@ -23,6 +23,7 @@ class WavefrontCommandServiceaccount < WavefrontCommandBase
23
23
  "create #{CMN} [-I] [-d description] [-p permission...] [-g group...] " \
24
24
  '[-k usertoken...] <id>',
25
25
  "activate #{CMN} <id>",
26
+ "delete #{CMN} <account>...",
26
27
  "deactivate #{CMN} <id>",
27
28
  "dump #{CMN}",
28
29
  "groups #{CMN} <id>",
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ # Define the usage command.
6
+ #
7
+ class WavefrontCommandUsage < WavefrontCommandBase
8
+ def thing
9
+ 'usage report'
10
+ end
11
+
12
+ def _commands
13
+ ["export csv #{CMN} [-s time] [-e time] "]
14
+ end
15
+
16
+ def _options
17
+ [common_options,
18
+ "-s, --start=TIME time at which #{thing} begins " \
19
+ '(defaults to 24h ago)',
20
+ "-e, --end=TIME time at which #{thing} ends"]
21
+ end
22
+ end
@@ -28,6 +28,7 @@ class WavefrontCommandUser < WavefrontCommandBase
28
28
  "grant #{CMN} <privilege> to <id>",
29
29
  "revoke #{CMN} <privilege> from <id>",
30
30
  "business functions #{CMN} <id>",
31
+ "validate #{CMN} [-l] <user>...",
31
32
  "search #{CMN} [-al] [-o offset] [-L limit] [-O fields] <condition>..."]
32
33
  end
33
34
 
@@ -20,8 +20,8 @@ class WavefrontCommandWindow < WavefrontCommandBase
20
20
  def _commands
21
21
  ["list #{CMN} [-al] [-O fields] [-o offset] [-L limit]",
22
22
  "describe #{CMN} <id>",
23
- "create #{CMN} -d reason [-s time] [-e time] " \
24
- '[-A alert_tag...] [-T host_tag...] [-H host...] <title>',
23
+ "create #{CMN} [-s time] [-e time] " \
24
+ '[-A alert_tag...] [-T host_tag...] [-H host...] -d reason <title>',
25
25
  "close #{CMN} <id>",
26
26
  "extend #{CMN} (by|to) <time> <id>",
27
27
  "delete #{CMN} <id>",
@@ -51,8 +51,7 @@ class WavefrontCliController
51
51
  " #{CMD} --version",
52
52
  " #{CMD} --help",
53
53
  '',
54
- 'Commands:',
55
- '']
54
+ 'Commands:']
56
55
 
57
56
  cmds.sort.each do |k, v|
58
57
  s.<< format(' %-18<command>s %<desc>s',
@@ -44,7 +44,7 @@ module WavefrontDisplay
44
44
  run_list
45
45
  elsif method == 'do_search'
46
46
  run_search
47
- elsif respond_to?("#{method}_brief")
47
+ elsif respond_to?("#{method}_brief") && !options[:long]
48
48
  send("#{method}_brief")
49
49
  elsif respond_to?(method)
50
50
  send(method)
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module WavefrontDisplay
6
+ #
7
+ # Format human-readable output of ingestion policies.
8
+ #
9
+ class IngestionPolicy < Base
10
+ def do_add_user
11
+ puts format("Added %<quoted_user>s to '%<group_id>s'.",
12
+ quoted_user: quoted(options[:'<user>']),
13
+ group_id: options[:'<id>']).fold(TW, 0)
14
+ end
15
+
16
+ def do_remove_user
17
+ puts format("Removed %<quoted_user>s from '%<group_id>s'.",
18
+ quoted_user: quoted(options[:'<user>']),
19
+ group_id: options[:'<id>']).fold(TW, 0)
20
+ end
21
+
22
+ def do_for
23
+ puts data
24
+ end
25
+
26
+ alias do_members do_for
27
+ end
28
+ end
@@ -68,6 +68,11 @@ module WavefrontDisplay
68
68
  puts format("Deleted API token '#{options[:'<token_id>']}'.")
69
69
  end
70
70
 
71
+ def do_delete
72
+ puts format("Deleted #{friendly_name} %<quoted_account>s.",
73
+ quoted_account: quoted(options[:'<account>']))
74
+ end
75
+
71
76
  def search_identifier_key
72
77
  :identifier
73
78
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module WavefrontDisplay
6
+ #
7
+ # Format human-readable output for usage commands.
8
+ #
9
+ class Usage < Base
10
+ def do_export_csv
11
+ puts data[:message]
12
+ end
13
+ end
14
+ end
@@ -88,5 +88,16 @@ module WavefrontDisplay
88
88
  def do_business_functions
89
89
  puts data.sort
90
90
  end
91
+
92
+ def do_validate_brief
93
+ valid = data[0][:validUsers]
94
+ invalid = data[0][:invalidIdentifiers]
95
+
96
+ puts 'valid ',
97
+ valid.empty? ? ' <none>' : valid.map { |u| " #{u[:identifier]}" }
98
+
99
+ puts 'invalid',
100
+ invalid.empty? ? ' <none>' : invalid.map { |u| " #{u}" }
101
+ end
91
102
  end
92
103
  end
@@ -15,6 +15,10 @@ module WavefrontCli
15
15
  Wavefront::Exception::InvalidExternalLinkId
16
16
  end
17
17
 
18
+ def descriptive_name
19
+ 'external link'
20
+ end
21
+
18
22
  def do_create
19
23
  body = { name: options[:'<name>'],
20
24
  template: options[:'<template>'],
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavefront-sdk/support/mixins'
4
+ require_relative 'base'
5
+
6
+ module WavefrontCli
7
+ #
8
+ # CLI coverage for the ingestion policy part of the v2 'usage' API.
9
+ #
10
+ class IngestionPolicy < WavefrontCli::Base
11
+ include Wavefront::Mixins
12
+
13
+ def do_create
14
+ wf.create(create_body)
15
+ end
16
+
17
+ def do_add_user
18
+ account_hook.add_ingestion_policy(options[:'<id>'], options[:'<user>'])
19
+ end
20
+
21
+ def do_remove_user
22
+ account_hook.remove_ingestion_policy(options[:'<id>'],
23
+ options[:'<user>'])
24
+ end
25
+
26
+ def do_members
27
+ resp = do_describe
28
+ resp.response = resp.response[:sampledUserAccounts] +
29
+ resp.response[:sampledServiceAccounts]
30
+ resp
31
+ end
32
+
33
+ def do_for
34
+ resp = do_list
35
+ parent_policies = parent_policies(options[:'<user>'][0],
36
+ resp.response.items)
37
+ resp.response = parent_policies.map { |p| p[:id] }
38
+ resp
39
+ end
40
+
41
+ private
42
+
43
+ def parent_policies(user, items)
44
+ items.select do |p|
45
+ p[:sampledUserAccounts].include?(user) ||
46
+ p[:sampledServiceAccounts].include?(user)
47
+ end
48
+ end
49
+
50
+ def create_body
51
+ { name: options[:'<name>'], description: options[:desc] }.compact
52
+ end
53
+
54
+ def account_hook
55
+ require 'wavefront-sdk/account'
56
+ Wavefront::Account.new(mk_creds, mk_opts)
57
+ end
58
+
59
+ def descriptive_name
60
+ 'ingestion policy'
61
+ end
62
+
63
+ def validator_exception
64
+ Wavefront::Exception::InvalidIngestionPolicyId
65
+ end
66
+ end
67
+ end
@@ -18,6 +18,10 @@ module WavefrontCli
18
18
  Wavefront::Exception::InvalidMaintenanceWindowId
19
19
  end
20
20
 
21
+ def descriptive_name
22
+ 'maintenance window'
23
+ end
24
+
21
25
  def do_create
22
26
  body = build_body
23
27
 
@@ -22,5 +22,9 @@ module WavefrontCli
22
22
  def validator_exception
23
23
  Wavefront::Exception::InvalidSavedSearchId
24
24
  end
25
+
26
+ def descriptive_name
27
+ 'saved search'
28
+ end
25
29
  end
26
30
  end
@@ -46,6 +46,10 @@ module WavefrontCli
46
46
  wf.update(options[:'<id>'], body)
47
47
  end
48
48
 
49
+ def do_delete
50
+ account_hook.delete_accounts(options[:'<account>'])
51
+ end
52
+
49
53
  def do_leave
50
54
  cannot_noop!
51
55
  options[:'<group>'].each { |g| wf_usergroup_id?(g) }
@@ -184,5 +188,14 @@ module WavefrontCli
184
188
  rescue Wavefront::Exception::InvalidPermission => e
185
189
  raise e, 'Invalid permission'
186
190
  end
191
+
192
+ def descriptive_name
193
+ 'service account'
194
+ end
195
+
196
+ def account_hook
197
+ require 'wavefront-sdk/account'
198
+ Wavefront::Account.new(mk_creds, mk_opts)
199
+ end
187
200
  end
188
201
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavefront-sdk/support/mixins'
4
+ require_relative 'base'
5
+
6
+ module WavefrontCli
7
+ #
8
+ # CLI coverage for part of the v2 'usage' API. The rest is in the
9
+ # 'ingestionpolicy' command.
10
+ #
11
+ class Usage < WavefrontCli::Base
12
+ include Wavefront::Mixins
13
+
14
+ def do_export_csv
15
+ t_start = options[:start] ? parse_time(options[:start]) : default_start
16
+ t_end = options[:end] ? parse_time(options[:end]) : nil
17
+ wf.export_csv(t_start, t_end)
18
+ end
19
+
20
+ def default_start
21
+ parse_time(Time.now - 60 * 60 * 24)
22
+ end
23
+ end
24
+ end
@@ -49,6 +49,10 @@ module WavefrontCli
49
49
  wf.business_functions(options[:'<id>'])
50
50
  end
51
51
 
52
+ def do_validate
53
+ wf.validate_users(options[:'<user>'])
54
+ end
55
+
52
56
  def import_to_create(raw)
53
57
  { emailAddress: raw['items']['identifier'],
54
58
  groups: raw['items']['groups'] }.tap do |r|
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- WF_CLI_VERSION = '4.5.2'
3
+ WF_CLI_VERSION = '4.6.0'
data/spec/.rubocop.yml CHANGED
@@ -6,4 +6,4 @@ Metrics/AbcSize:
6
6
  Max: 45
7
7
 
8
8
  Metrics/ClassLength:
9
- Max: 250
9
+ Max: 300
@@ -59,7 +59,7 @@ module Minitest
59
59
  end
60
60
 
61
61
  assert_empty(out)
62
- assert_match(/is not a valid \w+ ID.$/, err)
62
+ assert_match(/is not a valid [\w ]+ ID.$/, err)
63
63
  end
64
64
 
65
65
  def assert_usage(command)
@@ -0,0 +1 @@
1
+ {"message":"Usage reporting\nTime selected:\n01/19/2020 15:31:38 +0000,01/20/2020 15:31:39 +0000\n\nUsage by Ingestion Policy\nIngestion Policy ID,Ingestion Policy Name,Ingestion Policy Description\n\nDetailed information\nIngestion Policy ID,Ingestion Policy Name,Account ID,Ingestion Type,Ingestion Source,Timestamp,pps\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579446000,82.11666666666666\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579449600,72.45\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579453200,64.0\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579456800,54.67213114754098\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579460400,73.13333333333334\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579464000,50.90163934426229\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579467600,49.42622950819672\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579471200,73.1\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579474800,44.57377049180328\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579478400,64.40983606557377\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579482000,66.9\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579485600,62.032786885245905\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579489200,64.44262295081967\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579492800,57.0\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579496400,61.78333333333333\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579500000,63.21311475409836\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579503600,59.03333333333333\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579507200,63.68333333333333\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579510800,73.98333333333333\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579514400,83.18333333333334\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579518000,80.73015873015873\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579521600,62.18333333333333\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579525200,54.049180327868854\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579528800,97.16666666666667\nUnassociated,Unassociated,services@id264.net,TimeSeries,Proxy,1579532400,95.36666666666666\n","code":200}
@@ -0,0 +1 @@
1
+ {"validUsers":[{"identifier":"rob@sysdef.xyz","customer":"sysdef","lastSuccessfulLogin":1579615042006,"groups":["derived_metrics_management","ingestion","events_management","embedded_charts","alerts_management","dashboard_management","application_management","user_management","agent_management","external_links_management","metrics_management","host_tag_management"],"userGroups":[{"id":"a7d2e651-cec1-4154-a5e8-1946f57ef5b3","name":"Everyone","permissions":[],"customer":"sysdef","properties":{"nameEditable":false,"permissionsEditable":true,"usersEditable":false},"description":"System group which contains all users"}],"ingestionPolicy":{"name":"example-policy","id":"example-policy-1579802191862","customer":"sysdef","description":"example ingestion policy","lastUpdatedMs":1579802191878,"lastUpdatedAccountId":"rob@sysdef.xyz"}},{"identifier":"services@id264.net","customer":"sysdef","lastSuccessfulLogin":1535978592119,"groups":["agent_management","ingestion"],"userGroups":[{"id":"a7d2e651-cec1-4154-a5e8-1946f57ef5b3","name":"Everyone","permissions":[],"customer":"sysdef","properties":{"nameEditable":false,"permissionsEditable":true,"usersEditable":false},"description":"System group which contains all users"}],"ingestionPolicy":{"name":"example-policy","id":"example-policy-1579802191862","customer":"sysdef","description":"example ingestion policy","lastUpdatedMs":1579802191878,"lastUpdatedAccountId":"rob@sysdef.xyz"}}],"invalidIdentifiers":["rob@id264.net","no-such-thing"]}
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../support/command_base'
5
+ require_relative '../../lib/wavefront-cli/usage'
6
+
7
+ # Ensure 'usage' commands produce the correct API calls.
8
+ #
9
+ class UsageEndToEndTest < EndToEndTest
10
+ def test_export_csv_start_time
11
+ quietly do
12
+ assert_cmd_gets(
13
+ "export csv -s #{start_time}",
14
+ "/api/v2/usage/exportcsv?startTime=#{start_time}",
15
+ response
16
+ )
17
+ end
18
+
19
+ assert_abort_on_missing_creds('export csv')
20
+ assert_usage('export')
21
+ end
22
+
23
+ def test_export_csv_with_range
24
+ quietly do
25
+ assert_cmd_gets(
26
+ "export csv -s #{start_time} -e #{end_time}",
27
+ "/api/v2/usage/exportcsv?endTime=#{end_time}&startTime=#{start_time}",
28
+ response
29
+ )
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def cmd_word
36
+ 'usage'
37
+ end
38
+
39
+ def api_path
40
+ 'usage'
41
+ end
42
+
43
+ def start_time
44
+ 1_579_500_000
45
+ end
46
+
47
+ def end_time
48
+ 1_579_533_333
49
+ end
50
+
51
+ def response
52
+ IO.read(RES_DIR + 'responses' + 'usage-export-csv.json')
53
+ end
54
+ end
55
+
56
+ # test class methods
57
+ #
58
+ class UsageTest < MiniTest::Test
59
+ attr_reader :wf
60
+
61
+ def setup
62
+ @wf = WavefrontCli::Usage.new({})
63
+ end
64
+
65
+ def test_default_start
66
+ calculated = Time.at(wf.default_start).to_date
67
+ expected = Date.today - 1
68
+ assert expected - calculated < 5
69
+ end
70
+ end
@@ -265,6 +265,15 @@ class UserEndToEndTest < EndToEndTest
265
265
  assert_usage('business functions')
266
266
  end
267
267
 
268
+ def test_validate
269
+ quietly do
270
+ assert_cmd_posts("validate #{user_list.join(' ')}",
271
+ '/api/v2/user/validateUsers',
272
+ user_list.to_json,
273
+ IO.read(RES_DIR + 'responses' + 'user-validate.json'))
274
+ end
275
+ end
276
+
268
277
  private
269
278
 
270
279
  def id
@@ -292,4 +301,11 @@ class UserEndToEndTest < EndToEndTest
292
301
  def privilege
293
302
  'alerts_management'
294
303
  end
304
+
305
+ def user_list
306
+ %w[rob@somewhere.xyz
307
+ services@elsewhere.net
308
+ rob@elsewhere.net
309
+ no-such-thing]
310
+ end
295
311
  end
@@ -26,7 +26,7 @@ Gem::Specification.new do |gem|
26
26
 
27
27
  gem.add_runtime_dependency 'docopt', '~> 0.6.0'
28
28
  gem.add_runtime_dependency 'inifile', '~> 3.0'
29
- gem.add_runtime_dependency 'wavefront-sdk', '~> 3.6', '>= 3.6.1'
29
+ gem.add_runtime_dependency 'wavefront-sdk', '~> 3.7'
30
30
 
31
31
  gem.add_development_dependency 'minitest', '~> 5.11', '>= 5.11.0'
32
32
  gem.add_development_dependency 'rake', '~> 12.0'
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.5.2
4
+ version: 4.6.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: 2020-01-15 00:00:00.000000000 Z
11
+ date: 2020-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docopt
@@ -44,20 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.6'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 3.6.1
47
+ version: '3.7'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '3.6'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 3.6.1
54
+ version: '3.7'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: minitest
63
57
  requirement: !ruby/object:Gem::Requirement
@@ -180,6 +174,7 @@ files:
180
174
  - lib/wavefront-cli/commands/dashboard.rb
181
175
  - lib/wavefront-cli/commands/derivedmetric.rb
182
176
  - lib/wavefront-cli/commands/event.rb
177
+ - lib/wavefront-cli/commands/ingestionpolicy.rb
183
178
  - lib/wavefront-cli/commands/integration.rb
184
179
  - lib/wavefront-cli/commands/link.rb
185
180
  - lib/wavefront-cli/commands/message.rb
@@ -191,6 +186,7 @@ files:
191
186
  - lib/wavefront-cli/commands/serviceaccount.rb
192
187
  - lib/wavefront-cli/commands/settings.rb
193
188
  - lib/wavefront-cli/commands/source.rb
189
+ - lib/wavefront-cli/commands/usage.rb
194
190
  - lib/wavefront-cli/commands/user.rb
195
191
  - lib/wavefront-cli/commands/usergroup.rb
196
192
  - lib/wavefront-cli/commands/webhook.rb
@@ -210,6 +206,7 @@ files:
210
206
  - lib/wavefront-cli/display/distribution.rb
211
207
  - lib/wavefront-cli/display/event.rb
212
208
  - lib/wavefront-cli/display/externallink.rb
209
+ - lib/wavefront-cli/display/ingestionpolicy.rb
213
210
  - lib/wavefront-cli/display/integration.rb
214
211
  - lib/wavefront-cli/display/maintenancewindow.rb
215
212
  - lib/wavefront-cli/display/message.rb
@@ -224,6 +221,7 @@ files:
224
221
  - lib/wavefront-cli/display/serviceaccount.rb
225
222
  - lib/wavefront-cli/display/settings.rb
226
223
  - lib/wavefront-cli/display/source.rb
224
+ - lib/wavefront-cli/display/usage.rb
227
225
  - lib/wavefront-cli/display/user.rb
228
226
  - lib/wavefront-cli/display/usergroup.rb
229
227
  - lib/wavefront-cli/display/webhook.rb
@@ -231,6 +229,7 @@ files:
231
229
  - lib/wavefront-cli/event.rb
232
230
  - lib/wavefront-cli/exception.rb
233
231
  - lib/wavefront-cli/externallink.rb
232
+ - lib/wavefront-cli/ingestionpolicy.rb
234
233
  - lib/wavefront-cli/integration.rb
235
234
  - lib/wavefront-cli/maintenancewindow.rb
236
235
  - lib/wavefront-cli/message.rb
@@ -261,6 +260,7 @@ files:
261
260
  - lib/wavefront-cli/source.rb
262
261
  - lib/wavefront-cli/stdlib/array.rb
263
262
  - lib/wavefront-cli/stdlib/string.rb
263
+ - lib/wavefront-cli/usage.rb
264
264
  - lib/wavefront-cli/user.rb
265
265
  - lib/wavefront-cli/usergroup.rb
266
266
  - lib/wavefront-cli/version.rb
@@ -357,7 +357,9 @@ files:
357
357
  - spec/wavefront-cli/resources/responses/query-cpu.json
358
358
  - spec/wavefront-cli/resources/responses/query.json
359
359
  - spec/wavefront-cli/resources/responses/savedsearch-list.json
360
+ - spec/wavefront-cli/resources/responses/usage-export-csv.json
360
361
  - spec/wavefront-cli/resources/responses/user-list.json
362
+ - spec/wavefront-cli/resources/responses/user-validate.json
361
363
  - spec/wavefront-cli/resources/responses/usergroup-list.json
362
364
  - spec/wavefront-cli/resources/responses/webhook-list.json
363
365
  - spec/wavefront-cli/resources/responses/window-list.json
@@ -372,6 +374,7 @@ files:
372
374
  - spec/wavefront-cli/source_spec.rb
373
375
  - spec/wavefront-cli/stdlib/array_spec.rb
374
376
  - spec/wavefront-cli/stdlib/string_spec.rb
377
+ - spec/wavefront-cli/usage_spec.rb
375
378
  - spec/wavefront-cli/user_spec.rb
376
379
  - spec/wavefront-cli/usergroup_spec.rb
377
380
  - spec/wavefront-cli/webhook_spec.rb
@@ -493,7 +496,9 @@ test_files:
493
496
  - spec/wavefront-cli/resources/responses/query-cpu.json
494
497
  - spec/wavefront-cli/resources/responses/query.json
495
498
  - spec/wavefront-cli/resources/responses/savedsearch-list.json
499
+ - spec/wavefront-cli/resources/responses/usage-export-csv.json
496
500
  - spec/wavefront-cli/resources/responses/user-list.json
501
+ - spec/wavefront-cli/resources/responses/user-validate.json
497
502
  - spec/wavefront-cli/resources/responses/usergroup-list.json
498
503
  - spec/wavefront-cli/resources/responses/webhook-list.json
499
504
  - spec/wavefront-cli/resources/responses/window-list.json
@@ -508,6 +513,7 @@ test_files:
508
513
  - spec/wavefront-cli/source_spec.rb
509
514
  - spec/wavefront-cli/stdlib/array_spec.rb
510
515
  - spec/wavefront-cli/stdlib/string_spec.rb
516
+ - spec/wavefront-cli/usage_spec.rb
511
517
  - spec/wavefront-cli/user_spec.rb
512
518
  - spec/wavefront-cli/usergroup_spec.rb
513
519
  - spec/wavefront-cli/webhook_spec.rb