wavefront-client 2.1.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +46 -5
- data/bin/wavefront +63 -0
- data/lib/wavefront/alerting.rb +2 -2
- data/lib/wavefront/cli.rb +33 -0
- data/lib/wavefront/cli/alerts.rb +68 -0
- data/lib/wavefront/cli/ts.rb +69 -0
- data/lib/wavefront/client/version.rb +1 -1
- data/spec/wavefront/alerting_spec.rb +6 -6
- data/wavefront-client.gemspec +1 -1
- metadata +8 -4
- data/bin/wavefront-client +0 -84
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YTkyYWUzNzQ3MTVmYjhlNGI3NWZlZDM5YTBjYTAwMzNkMTQ2MjQ0YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDNlN2ZiNmYxNDE0NzhlMzdjMTJhNjExZGI4ZjhhY2Q0YWE5YjViMw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzQxYzE3NGZmNzkwNWRjYzgxYWM0MDBhNDk5OGM1NGZlMjE4MDA2ZWI2YTNi
|
10
|
+
YTRhNTQxYTIzYzFhNWRlYTgxYzIyNWI1OTgwNTA1ZWE0NjFmMjY0M2Y2ODg3
|
11
|
+
ZmVlOTJmZDk2YTdiYjVkOGEzOTUzYTMwYjk3NTU5NjVkOWRjZjI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MDljMjNlYzg3YTJhNjY0YWQ3MDA0Y2M2ZDYyOWVjMzlkOTA5NzEyMjJhMzNl
|
14
|
+
NmFhMjVmMjI4MDAyNjEzNTc1OTlmOWE5ZWYyY2Y4MzY2ZDg5ODAzOTI2OGEw
|
15
|
+
ZTg0NWFiZGQyOTNhZGRkYmEyNmE3ZGNiMzI2NmIxYjBmNjY1NmE=
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
Wavefront
|
1
|
+
Wavefront
|
2
2
|
==========
|
3
3
|
[![Build Status](https://travis-ci.org/wavefrontHQ/ruby-client.svg?branch=v0.5.2)](https://travis-ci.org/wavefrontHQ/ruby-client)
|
4
4
|
|
5
|
-
This is a
|
5
|
+
This is a ruby gem for speaking to the [Wavefront][1] monitoring and graphing system.
|
6
6
|
|
7
7
|
## Usage
|
8
8
|
Within your own ruby code:
|
@@ -165,11 +165,52 @@ response.highcharts[0]['data'].first # [1436849460000, 517160277.3333333]
|
|
165
165
|
```
|
166
166
|
|
167
167
|
### Command-line client
|
168
|
-
A
|
168
|
+
A command line client is included too. You can see the full list of options by typing `wavefront --help` from a prompt.
|
169
169
|
|
170
170
|
```bash
|
171
|
-
|
172
|
-
|
171
|
+
Usage: wavefront COMMAND QUERY (OPTIONS)
|
172
|
+
-h, --help Display this message
|
173
|
+
|
174
|
+
Available commands:
|
175
|
+
|
176
|
+
ts Query the timeseries
|
177
|
+
alerts Query alerts
|
178
|
+
|
179
|
+
See `<command> --help` for more information on a specific command.
|
180
|
+
|
181
|
+
$ wavefront ts --help
|
182
|
+
Usage: wavefront COMMAND QUERY (OPTIONS)
|
183
|
+
-d, --days Query granularity of days
|
184
|
+
-D, --debug Enable debug mode
|
185
|
+
-m, --minutes Query granularity of minutes
|
186
|
+
-H, --hours Query granularity of hours
|
187
|
+
-E, --endpoint Connect to alternative cluster endpoint (default: metrics.wavefront.com)
|
188
|
+
-S, --seconds Query granularity of seconds
|
189
|
+
-s, --start Time in UNIX epoch seconds to begin the query from
|
190
|
+
-t, --token Wavefront authentication token
|
191
|
+
-e, --end Time in UNIX epoch seconds to query to
|
192
|
+
-f, --format Output format (raw, ruby, graphite, highcharts) (default: raw)
|
193
|
+
-p, --prefixlength The number of path elements to treat as a prefix when doing schema manipulations (default: 1)
|
194
|
+
-X, --strict Flag to not return points outside the query window [q;s) (default: true)
|
195
|
+
-O, --includeObsoleteMetrics Flag to include metrics that have not been reporting for more than 4 weeks,defaults to false
|
196
|
+
-h, --help Display this message
|
197
|
+
|
198
|
+
$ wavefront ts "ts(my.metric.path.host.cpu-0.percent-idle)" -t SECRET -m -f ruby
|
199
|
+
#<Wavefront::Response::Ruby:0x007f02f6bf9d70
|
200
|
+
@granularity=60,
|
201
|
+
@name="Unknown",
|
202
|
+
@options=
|
203
|
+
{:response_format=>:ruby,
|
204
|
+
:prefix_length=>1,
|
205
|
+
|
206
|
+
...
|
207
|
+
|
208
|
+
$ wavefront alerts snoozed -t TOKEN -f json --shared ops
|
209
|
+
[
|
210
|
+
{
|
211
|
+
"customerTagsWithCounts": {
|
212
|
+
|
213
|
+
...
|
173
214
|
```
|
174
215
|
|
175
216
|
|
data/bin/wavefront
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright 2015 Wavefront Inc.
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require 'wavefront/client'
|
17
|
+
require 'slop'
|
18
|
+
|
19
|
+
options = Slop.parse(strict: true) do
|
20
|
+
banner 'Usage: wavefront COMMAND QUERY (OPTIONS)'
|
21
|
+
on 'h', 'help', 'Display this message'
|
22
|
+
|
23
|
+
command 'ts' do
|
24
|
+
description "Query the timeseries"
|
25
|
+
on 'd', 'days', 'Query granularity of days'
|
26
|
+
on 'D', 'debug', 'Enable debug mode'
|
27
|
+
on 'm', 'minutes', 'Query granularity of minutes'
|
28
|
+
on 'H', 'hours', 'Query granularity of hours'
|
29
|
+
on 'E', 'endpoint=', 'Connect to alternative cluster endpoint', default: Wavefront::Client::DEFAULT_HOST.to_s
|
30
|
+
on 'S', 'seconds', 'Query granularity of seconds'
|
31
|
+
on 's', 'start=', 'Time in UNIX epoch seconds to begin the query from'
|
32
|
+
on 't', 'token=', 'Wavefront authentication token'
|
33
|
+
on 'e', 'end=', 'Time in UNIX epoch seconds to query to'
|
34
|
+
on 'f', 'format=', "Output format (#{Wavefront::Client::FORMATS.join(', ')})", default: Wavefront::Client::DEFAULT_FORMAT.to_s
|
35
|
+
on 'p', 'prefixlength=', 'The number of path elements to treat as a prefix when doing schema manipulations', default: Wavefront::Client::DEFAULT_PREFIX_LENGTH
|
36
|
+
on 'X', 'strict=','Flag to not return points outside the query window [q;s) ', default: Wavefront::Client::DEFAULT_STRICT
|
37
|
+
on 'O', 'includeObsoleteMetrics=', 'Flag to include metrics that have not been reporting for more than 4 weeks,defaults to false', default: Wavefront::Client::DEFAULT_OBSOLETE_METRICS
|
38
|
+
on 'h', 'help', 'Display this message'
|
39
|
+
run do |options, arguments|
|
40
|
+
require 'wavefront/cli/ts'
|
41
|
+
cli = Wavefront::Cli::Ts.new(options, arguments)
|
42
|
+
cli.run
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
command 'alerts' do
|
47
|
+
description "Query alerts"
|
48
|
+
on 'E', 'endpoint=', 'Connect to alternative cluster endpoint', default: Wavefront::Client::DEFAULT_HOST.to_s
|
49
|
+
on 'f', 'format=', 'Output format (ruby, json)', default: 'ruby'
|
50
|
+
on 'h', 'help', 'Display this message'
|
51
|
+
on 'p', 'private=', 'Retrieve only alerts with named private tags, comma delimited.'
|
52
|
+
on 's', 'shared=', 'Retrieve only alerts with named shared tags, comma delimited.'
|
53
|
+
on 't', 'token=', 'Wavefront authentication token'
|
54
|
+
run do |options, arguments|
|
55
|
+
require 'wavefront/cli/alerts'
|
56
|
+
cli = Wavefront::Cli::Alerts.new(options, arguments)
|
57
|
+
cli.run
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
puts options
|
data/lib/wavefront/alerting.rb
CHANGED
@@ -53,6 +53,8 @@ module Wavefront
|
|
53
53
|
get_alerts('affected_by_maintenance', options)
|
54
54
|
end
|
55
55
|
|
56
|
+
private
|
57
|
+
|
56
58
|
def get_alerts(path, options={})
|
57
59
|
options[:host] ||= DEFAULT_HOST
|
58
60
|
options[:path] ||= DEFAULT_PATH
|
@@ -77,8 +79,6 @@ module Wavefront
|
|
77
79
|
RestClient.get(uri.to_s)
|
78
80
|
end
|
79
81
|
|
80
|
-
private
|
81
|
-
|
82
82
|
def debug(enabled)
|
83
83
|
if enabled
|
84
84
|
RestClient.log = 'stdout'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2015 Wavefront Inc.
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
14
|
+
|
15
|
+
=end
|
16
|
+
|
17
|
+
module Wavefront
|
18
|
+
class Cli
|
19
|
+
|
20
|
+
attr_accessor :options, :arguments
|
21
|
+
|
22
|
+
def initialize(options, arguments)
|
23
|
+
@options = options
|
24
|
+
@arguments = arguments
|
25
|
+
|
26
|
+
if @options.help?
|
27
|
+
puts @options
|
28
|
+
exit 0
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright 2015 Wavefront Inc.
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require 'wavefront/alerting'
|
17
|
+
require 'wavefront/cli'
|
18
|
+
require 'json'
|
19
|
+
require 'pp'
|
20
|
+
|
21
|
+
class Wavefront::Cli::Alerts < Wavefront::Cli
|
22
|
+
|
23
|
+
attr_accessor :options, :arguments
|
24
|
+
|
25
|
+
def run
|
26
|
+
alerts = Wavefront::Alerting.new(@options[:token])
|
27
|
+
queries = alerts.public_methods(false).sort
|
28
|
+
queries.delete(:token)
|
29
|
+
|
30
|
+
if arguments[0]
|
31
|
+
query = arguments[0].to_sym
|
32
|
+
else
|
33
|
+
puts "Your query should be one of: #{ queries.each {|q| q.to_s}.join(', ') }. See --help for more information"
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
|
37
|
+
# This isn't especially nice, but if require to
|
38
|
+
# avoiding breaking the Alerting interface :(
|
39
|
+
options = Hash.new
|
40
|
+
options[:host] = @options[:endpoint]
|
41
|
+
|
42
|
+
if @options[:shared]
|
43
|
+
options[:shared_tags] = @options[:shared].delete(' ').split(',')
|
44
|
+
end
|
45
|
+
if @options[:private]
|
46
|
+
options[:private_tags] = @options[:private].delete(' ').split(',')
|
47
|
+
end
|
48
|
+
|
49
|
+
if queries.include?(query)
|
50
|
+
result = alerts.send(query, options)
|
51
|
+
else
|
52
|
+
puts "Your query should be one of: #{ queries.each {|q| q.to_s}.join(', ') }. See --help for more information"
|
53
|
+
exit 1
|
54
|
+
end
|
55
|
+
|
56
|
+
case @options[:format].to_sym
|
57
|
+
when :ruby
|
58
|
+
pp result
|
59
|
+
when :json
|
60
|
+
puts JSON.pretty_generate(JSON.parse(result))
|
61
|
+
else
|
62
|
+
puts "Invalid output format, See --help for more detail."
|
63
|
+
exit 1
|
64
|
+
end
|
65
|
+
|
66
|
+
exit 0
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright 2015 Wavefront Inc.
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require 'wavefront/client'
|
17
|
+
require 'wavefront/cli'
|
18
|
+
require 'pp'
|
19
|
+
require 'json'
|
20
|
+
|
21
|
+
class Wavefront::Cli::Ts < Wavefront::Cli
|
22
|
+
|
23
|
+
attr_accessor :options, :arguments
|
24
|
+
|
25
|
+
def run
|
26
|
+
query = @arguments[0]
|
27
|
+
if @options.minutes?
|
28
|
+
granularity = 'm'
|
29
|
+
elsif @options.hours?
|
30
|
+
granularity = 'h'
|
31
|
+
elsif @options.seconds?
|
32
|
+
granularity = 's'
|
33
|
+
elsif @options.days?
|
34
|
+
granularity = 'd'
|
35
|
+
else
|
36
|
+
puts "You must specify a granularity of either --seconds, --minutes --hours or --days. See --help for more information."
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
|
40
|
+
unless Wavefront::Client::FORMATS.include?(@options[:format].to_sym)
|
41
|
+
puts "The output format must be on of #{Wavefront::Client::FORMATS.join(', ')}"
|
42
|
+
exit 1
|
43
|
+
end
|
44
|
+
|
45
|
+
options = Hash.new
|
46
|
+
options[:response_format] = @options[:format].to_sym
|
47
|
+
options[:prefix_length] = @options[:prefixlength].to_i
|
48
|
+
|
49
|
+
if @options[:start]
|
50
|
+
options[:start_time] = Time.at(@options[:start].to_i)
|
51
|
+
end
|
52
|
+
|
53
|
+
if @options[:end]
|
54
|
+
options[:end_time] = Time.at(@options[:end].to_i)
|
55
|
+
end
|
56
|
+
|
57
|
+
wave = Wavefront::Client.new(@options[:token], @options[:endpoint], @options[:debug])
|
58
|
+
case options[:response_format]
|
59
|
+
when :raw
|
60
|
+
puts wave.query(query, granularity, options)
|
61
|
+
when :graphite
|
62
|
+
puts wave.query(query, granularity, options).graphite.to_json
|
63
|
+
else
|
64
|
+
pp wave.query(query, granularity, options)
|
65
|
+
end
|
66
|
+
|
67
|
+
exit 0
|
68
|
+
end
|
69
|
+
end
|
@@ -45,38 +45,38 @@ describe Wavefront::Alerting do
|
|
45
45
|
describe '#get_alerts' do
|
46
46
|
it 'makes API request with default options' do
|
47
47
|
expect(RestClient).to receive(:get).with("https://#{File.join(Wavefront::Alerting::DEFAULT_HOST, Wavefront::Alerting::DEFAULT_PATH, "all?t=#{TEST_TOKEN}")}")
|
48
|
-
@wave.
|
48
|
+
@wave.all
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'makes API request with specified host' do
|
52
52
|
host = 'madeup.wavefront.com'
|
53
53
|
expect(RestClient).to receive(:get).with("https://#{File.join(host, Wavefront::Alerting::DEFAULT_PATH, "all?t=#{TEST_TOKEN}")}")
|
54
|
-
@wave.
|
54
|
+
@wave.all({ :host => host })
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'makes API request with specified path' do
|
58
58
|
path = '/api/new_alerts'
|
59
59
|
expect(RestClient).to receive(:get).with("https://#{File.join(Wavefront::Alerting::DEFAULT_HOST, path, "all?t=#{TEST_TOKEN}")}")
|
60
|
-
@wave.
|
60
|
+
@wave.all({ :path => path })
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'makes API request with appended shared tags' do
|
64
64
|
tags = [ 'first', 'second' ]
|
65
65
|
expect(RestClient).to receive(:get).with("https://#{File.join(Wavefront::Alerting::DEFAULT_HOST, Wavefront::Alerting::DEFAULT_PATH, "all?t=#{TEST_TOKEN}&customerTag=first&customerTag=second")}")
|
66
|
-
@wave.
|
66
|
+
@wave.all({ :shared_tags => tags })
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'makes API request with appended private tags' do
|
70
70
|
tags = [ 'first', 'second' ]
|
71
71
|
expect(RestClient).to receive(:get).with("https://#{File.join(Wavefront::Alerting::DEFAULT_HOST, Wavefront::Alerting::DEFAULT_PATH, "all?t=#{TEST_TOKEN}&userTag=first&userTag=second")}")
|
72
|
-
@wave.
|
72
|
+
@wave.all({ :private_tags => tags })
|
73
73
|
end
|
74
74
|
|
75
75
|
it 'makes API request with both appended private tags and shared tags' do
|
76
76
|
private_tag = 'first'
|
77
77
|
shared_tag = 'second'
|
78
78
|
expect(RestClient).to receive(:get).with("https://#{File.join(Wavefront::Alerting::DEFAULT_HOST, Wavefront::Alerting::DEFAULT_PATH, "all?t=#{TEST_TOKEN}&customerTag=second&userTag=first")}")
|
79
|
-
@wave.
|
79
|
+
@wave.all({ :private_tags => private_tag, :shared_tags => shared_tag })
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
data/wavefront-client.gemspec
CHANGED
@@ -22,7 +22,7 @@ require 'wavefront/client/version'
|
|
22
22
|
Gem::Specification.new do |spec|
|
23
23
|
spec.name = "wavefront-client"
|
24
24
|
spec.version = Wavefront::Client::VERSION
|
25
|
-
spec.authors = ["Sam Pointer", "Louis McCormack", "Joshua McGhee", "Conor Beverland", "Salil Deshmukh"]
|
25
|
+
spec.authors = ["Sam Pointer", "Louis McCormack", "Joshua McGhee", "Conor Beverland", "Salil Deshmukh", "Rob Fisher"]
|
26
26
|
spec.email = ["support@wavefront.com"]
|
27
27
|
spec.description = %q{A simple abstraction for talking to wavefront in ruby}
|
28
28
|
spec.summary = %q{A simple abstraction for talking to wavefront in ruby}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wavefront-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Pointer
|
@@ -9,10 +9,11 @@ authors:
|
|
9
9
|
- Joshua McGhee
|
10
10
|
- Conor Beverland
|
11
11
|
- Salil Deshmukh
|
12
|
+
- Rob Fisher
|
12
13
|
autorequire:
|
13
14
|
bindir: bin
|
14
15
|
cert_chain: []
|
15
|
-
date: 2016-
|
16
|
+
date: 2016-05-16 00:00:00.000000000 Z
|
16
17
|
dependencies:
|
17
18
|
- !ruby/object:Gem::Dependency
|
18
19
|
name: bundler
|
@@ -100,7 +101,7 @@ description: A simple abstraction for talking to wavefront in ruby
|
|
100
101
|
email:
|
101
102
|
- support@wavefront.com
|
102
103
|
executables:
|
103
|
-
- wavefront
|
104
|
+
- wavefront
|
104
105
|
extensions: []
|
105
106
|
extra_rdoc_files: []
|
106
107
|
files:
|
@@ -112,8 +113,11 @@ files:
|
|
112
113
|
- NOTICE
|
113
114
|
- README.md
|
114
115
|
- Rakefile
|
115
|
-
- bin/wavefront
|
116
|
+
- bin/wavefront
|
116
117
|
- lib/wavefront/alerting.rb
|
118
|
+
- lib/wavefront/cli.rb
|
119
|
+
- lib/wavefront/cli/alerts.rb
|
120
|
+
- lib/wavefront/cli/ts.rb
|
117
121
|
- lib/wavefront/client.rb
|
118
122
|
- lib/wavefront/client/version.rb
|
119
123
|
- lib/wavefront/constants.rb
|
data/bin/wavefront-client
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Copyright 2015 Wavefront Inc.
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
# See the License for the specific language governing permissions and
|
14
|
-
# limitations under the License.
|
15
|
-
|
16
|
-
require 'wavefront/client'
|
17
|
-
require 'slop'
|
18
|
-
require 'pp'
|
19
|
-
require 'json'
|
20
|
-
|
21
|
-
@opts = Slop.parse(strict: true) do
|
22
|
-
banner 'Usage: wavefront-client QUERY (OPTIONS)'
|
23
|
-
on 'd', 'days', 'Query granularity of days'
|
24
|
-
on 'D', 'debug', 'Enable debug mode'
|
25
|
-
on 'm', 'minutes', 'Query granularity of minutes'
|
26
|
-
on 'H', 'hours', 'Query granularity of hours'
|
27
|
-
on 'E', 'endpoint=', 'Connect to alternative cluster endpoint', default: Wavefront::Client::DEFAULT_HOST.to_s
|
28
|
-
on 'S', 'seconds', 'Query granularity of seconds'
|
29
|
-
on 's', 'start=', 'Time in UNIX epoch seconds to begin the query from'
|
30
|
-
on 't', 'token=', 'Wavefront authentication token'
|
31
|
-
on 'e', 'end=', 'Time in UNIX epoch seconds to query to'
|
32
|
-
on 'f', 'format=', "Output format (#{Wavefront::Client::FORMATS.join(', ')})", default: Wavefront::Client::DEFAULT_FORMAT.to_s
|
33
|
-
on 'p', 'prefixlength=', 'The number of path elements to treat as a prefix when doing schema manipulations', default: Wavefront::Client::DEFAULT_PREFIX_LENGTH
|
34
|
-
on 'X', 'strict=','Flag to not return points outside the query window [q;s) ', default: Wavefront::Client::DEFAULT_STRICT
|
35
|
-
on 'O', 'includeObsoleteMetrics=', 'Flag to include metrics that have not been reporting for more than 4 weeks,defaults to false', default: Wavefront::Client::DEFAULT_OBSOLETE_METRICS
|
36
|
-
|
37
|
-
on 'h', 'help', 'Display this message'
|
38
|
-
end
|
39
|
-
|
40
|
-
if @opts.help?
|
41
|
-
puts @opts
|
42
|
-
exit 0
|
43
|
-
end
|
44
|
-
|
45
|
-
query = ARGV[0]
|
46
|
-
if @opts.minutes?
|
47
|
-
granularity = 'm'
|
48
|
-
elsif @opts.hours?
|
49
|
-
granularity = 'h'
|
50
|
-
elsif @opts.seconds?
|
51
|
-
granularity = 's'
|
52
|
-
elsif @opts.days?
|
53
|
-
granularity = 'd'
|
54
|
-
else
|
55
|
-
puts "You must specify a granularity of either --seconds, --minutes --hours or --days. See --help for more information."
|
56
|
-
exit 1
|
57
|
-
end
|
58
|
-
|
59
|
-
unless Wavefront::Client::FORMATS.include?(@opts[:format].to_sym)
|
60
|
-
puts "The output format must be on of #{Wavefront::Client::FORMATS.join(', ')}"
|
61
|
-
exit 1
|
62
|
-
end
|
63
|
-
|
64
|
-
options = Hash.new
|
65
|
-
options[:response_format] = @opts[:format].to_sym
|
66
|
-
options[:prefix_length] = @opts[:prefixlength].to_i
|
67
|
-
|
68
|
-
if @opts[:start]
|
69
|
-
options[:start_time] = Time.at(@opts[:start].to_i)
|
70
|
-
end
|
71
|
-
|
72
|
-
if @opts[:end]
|
73
|
-
options[:end_time] = Time.at(@opts[:end].to_i)
|
74
|
-
end
|
75
|
-
|
76
|
-
wave = Wavefront::Client.new(@opts[:token], @opts[:endpoint], @opts[:debug])
|
77
|
-
case options[:response_format]
|
78
|
-
when :raw
|
79
|
-
puts wave.query(query, granularity, options)
|
80
|
-
when :graphite
|
81
|
-
puts wave.query(query, granularity, options).graphite.to_json
|
82
|
-
else
|
83
|
-
pp wave.query(query, granularity, options)
|
84
|
-
end
|