echo_cli 0.6.6 → 0.6.7

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: 3caffa4269d6b3440c9032d0a4deaf6dcbcc619a
4
- data.tar.gz: 48c9406f82b0f735be5cc1877b9c32c986bd526c
3
+ metadata.gz: 6765580be1168de3d0f48cb50be74e722e5c1b4e
4
+ data.tar.gz: 02910ebe7b7f6c34fc0102b1ce5d539c6479d8b9
5
5
  SHA512:
6
- metadata.gz: 5ec161fb721dfad4b9305c61152afd205b2e2924cbc526fa44ffd05bf5bdca8ca51e83c692016f5e4186c15ad9cdcb0da797c701e171c07f1d61c4bab1708501
7
- data.tar.gz: 8cef349cb8c52551e30e48ddae261412b9b26b56822d9179d4d2b948f0c4ca50ba99af2943172b252e53fab1235ac55e85fa5fa76154f9b797c2b8cd1072fb71
6
+ metadata.gz: f493862592be4db91dd6d140dfb0fe10b655bfb331afe1918a6de9ccba6981c26e550a7ec261defd86a0f2db0f581ed82afcbddb89810ef6cb1d2906a03697e3
7
+ data.tar.gz: 8b38330c4661bba0f71c21c0223f721c49403d56fad567eb2c417dab319d6d1fa3814bb78ebff11cd2b26970b767e4d896c0844d05173a5c9f247c46f46a30ea
data/README.md CHANGED
@@ -6,23 +6,45 @@ TODO: Delete this and the text above, and describe your gem
6
6
 
7
7
  ## Installation
8
8
 
9
- Add this line to your application's Gemfile:
9
+ Ensure git and rbenv (or rvm) are installed on your machine:
10
10
 
11
- ```ruby
12
- gem 'echo_cli'
11
+ Install rbenv:
12
+
13
+ ```bash
14
+ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
15
+ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
16
+ ~/.rbenv/bin/rbenv init
13
17
  ```
14
18
 
15
- And then execute:
19
+ See more about rbenv here: https://github.com/rbenv/rbenv
16
20
 
17
- $ bundle
21
+ Install 'echo_cli':
18
22
 
19
- Or install it yourself as:
23
+ ```bash
24
+ gem install echo_cli
25
+ ```
20
26
 
21
- $ gem install echo_cli
27
+ Test the installation to ensure it is working properly (no errors should occur if the installation was successful):
28
+
29
+ ```bash
30
+ echo_cli
31
+ ```
22
32
 
23
33
  ## Usage
24
34
 
25
- TODO: Write usage instructions here
35
+ View available echo_cli commands and their short descriptions:
36
+
37
+ ```bash
38
+ echo_cli
39
+ ```
40
+
41
+ View a command's long description and an example of its use:
42
+
43
+ ```bash
44
+ echo_cli help [COMMAND]
45
+ ```
46
+
47
+
26
48
 
27
49
  ## Development
28
50
 
data/lib/echo_cli/cli.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'thor'
2
+ require 'json'
2
3
  require 'colorize'
3
4
  require 'net/http'
4
5
  require 'net/https'
@@ -48,18 +49,18 @@ module Echo_cli
48
49
  end
49
50
 
50
51
  if options[:q]
51
- sleep 10 # ensure data reception and replication
52
+ sleep 15 # ensure data reception and replication
52
53
  end
53
54
  time_end = Time.new.to_i.to_s
54
55
 
55
- puts "\n\tSuccessfully posted ".green + request_body.yellow + " to ".green + ip.blue + " " + num.to_s.green + " time(s)".green + "\n\tTime start: ".green + time_start.yellow + ", Time end: ".green + time_end.yellow
56
+ puts "\nSuccessfully posted ".green + request_body.yellow + " to ".green + ip.blue + " " + num.to_s.green + " time(s)".green + "\nTime start: ".green + time_start.yellow + ", Time end: ".green + time_end.yellow
56
57
 
57
58
  if options[:q]
58
59
  query(ip, request_body[0..request_body.index(":")-1], time_start, time_end)
59
60
  end
60
61
 
61
62
  rescue
62
- puts "\n\tFailed to post ".red + request_body.yellow + " to ".red + ip.blue + " " + num.to_s.red + " time(s)".red
63
+ puts "\nFailed to post ".red + request_body.yellow + " to ".red + ip.blue + " " + num.to_s.red + " time(s)".red
63
64
  end
64
65
 
65
66
  else
@@ -69,20 +70,20 @@ module Echo_cli
69
70
  res = https.request(req)
70
71
 
71
72
  if options[:q]
72
- sleep 10 # ensure data reception and replication
73
+ sleep 15 # ensure data reception and replication
73
74
  end
74
75
 
75
76
  time_end = Time.new.to_i.to_s
76
77
 
77
78
  if res.code == '200'
78
- puts "\n\tSuccessfully posted ".green + request_body.yellow + " to ".green + ip.blue + "\n\tTime start: ".green + time_start.yellow + ", Time end: ".green + time_end.yellow
79
+ puts "\nSuccessfully posted ".green + request_body.yellow + " to ".green + ip.blue + "\nTime start: ".green + time_start.yellow + ", Time end: ".green + time_end.yellow
79
80
 
80
81
  if options[:q]
81
82
  query(ip, request_body[0..request_body.index(":")-1], time_start, time_end)
82
83
  end
83
84
  end
84
85
  rescue
85
- puts "\n\tFailed to post ".red + request_body.yellow + " to ".red + ip.blue
86
+ puts "\nFailed to post ".red + request_body.yellow + " to ".red + ip.blue
86
87
  end
87
88
  end
88
89
  return res.code
@@ -165,23 +166,23 @@ module Echo_cli
165
166
  begin
166
167
  res = https.request(req)
167
168
  if res.code == '200'
168
- puts "\n\tSuccessfully retrieved ".green + metric.yellow + " from ".green + ip.blue + " in timestamp range: ".green + time_start.yellow + " to ".green + time_end.yellow + "\n\tStatus Code: ".green + res.code.yellow + "\n\tResponse Body: ".green + res.body.green
169
+ puts "\nSuccessfully retrieved ".green + metric.yellow + " from ".green + ip.blue + " in timestamp range: ".green + time_start.yellow + " to ".green + time_end.yellow + "\nStatus Code: ".green + res.code.yellow + "\nResponse Body: ".green + JSON.pretty_generate(JSON.parse(res.body)).green
169
170
  else
170
- puts "\n\tFailed to retrieve ".red + metric.yellow + " from ".red + ip.blue + " in timestamp range: ".red + time_start.yellow + " to ".red + time_end.yellow + "\n\tStatus Code: ".red + res.code.yellow + "\n\tResponse Body: ".red + res.body.red
171
+ puts "\nFailed to retrieve ".red + metric.yellow + " from ".red + ip.blue + " in timestamp range: ".red + time_start.yellow + " to ".red + time_end.yellow + "\nStatus Code: ".red + res.code.yellow + "\nResponse Body: ".red + JSON.pretty_generate(JSON.parse(res.body)).red
171
172
  end
172
173
  rescue
173
- puts "\n\tYour request returned an error. Are you sure your query was correct?"
174
+ puts "\nYour request returned an error. Are you sure your query was correct?"
174
175
  end
175
176
  else
176
177
  begin
177
178
  res = https.request(req)
178
179
  if res.code == '200'
179
- puts "\n\tSuccessfully retrieved ".green + metric.yellow + " from ".green + ip.blue + " in timestamp range: ".green + time_start.yellow + " to ".green + time_end.yellow
180
+ puts "\nSuccessfully retrieved ".green + metric.yellow + " from ".green + ip.blue + " in timestamp range: ".green + time_start.yellow + " to ".green + time_end.yellow
180
181
  else
181
- puts "\n\tFailed to retrieve ".red + metric.yellow + " from ".red + ip.blue + " in timestamp range: ".red + time_start.yellow + " to ".red + time_end.yellow
182
+ puts "\nFailed to retrieve ".red + metric.yellow + " from ".red + ip.blue + " in timestamp range: ".red + time_start.yellow + " to ".red + time_end.yellow
182
183
  end
183
184
  rescue
184
- puts "\n\tYour request returned an error. Are you sure your query was correct?"
185
+ puts "\nYour request returned an error. Are you sure your query was correct?"
185
186
  end
186
187
  end
187
188
 
@@ -190,5 +191,97 @@ module Echo_cli
190
191
 
191
192
  return res.code
192
193
  end
194
+
195
+ desc "quick_query", "Query metrics on Echo for a given time range beginning at the current time. Use \"echo_cli quick_query <IP> '<metric>' <range>\""
196
+
197
+ long_desc <<-LONGDESC
198
+ `echo_cli quick_query` will query a metric directly from Echo's OpenTSDB server instance for a given time range beginning in the present.
199
+
200
+ Ensure single-quotes surround the metric.
201
+
202
+ Unlike the echo_cli post command, quick_query does not require the data value nor the data type (e.g. remove ':1|c' from 'example.post:1|c' and your query will still work).
203
+
204
+ The <range> parameter is defined in seconds, and is used to query the metric from the current time.
205
+
206
+ > $ echo_cli quick_query localhost 'example' 30
207
+
208
+ The previous example would find all data points with metric name 'example' on Echo's OpenTSDB instance at 'localhost' in the last 30 seconds.
209
+ LONGDESC
210
+
211
+ def quick_query(ip, metric, range)
212
+ metric = metric.gsub(/'/,"")
213
+ if metric.include? ":"
214
+ metric = metric[0..metric.index(":")-1]
215
+ end
216
+
217
+ opentsdb_uri = "http://" + ip + ":4242/api/query"
218
+
219
+ tags=""
220
+
221
+ if metric.include? "."
222
+ tags = metric[metric.index(".")+1..-1] + "."
223
+ metric = metric[0..metric.index(".")-1]
224
+
225
+ toReturn = ""
226
+ count = 1
227
+ while tags.include?(".") do
228
+ toReturn = toReturn + "\"tag" + count.to_s + "\": \"" + tags[0..tags.index(".")-1] + "\""
229
+ count = count + 1
230
+ tags = tags[tags.index(".")+1..-1]
231
+ if tags.include?(".")
232
+ toReturn = toReturn + ",\n"
233
+ end
234
+ end
235
+
236
+ tags = toReturn
237
+ end
238
+
239
+ time_end = Time.new.to_i
240
+ time_start = time_end - range.to_i
241
+
242
+ time_start = time_start.to_s
243
+ time_end = time_end.to_s
244
+
245
+ opentsdb_query =
246
+ "{
247
+ \"start\": " + time_start + ",
248
+ \"end\": " + time_end + ",
249
+ \"queries\": [
250
+ {
251
+ \"aggregator\": \"sum\",
252
+ \"metric\": \"" + metric + "\",
253
+ \"tags\": {" + tags +
254
+ "}
255
+ }
256
+ ]
257
+ }"
258
+
259
+ ENV["http_proxy"] = ENV["HTTP_PROXY"]
260
+ ENV["https_proxy"] = ENV["HTTPS_PROXY"]
261
+
262
+ uri = URI.parse(opentsdb_uri)
263
+ https = Net::HTTP.new(uri.host, uri.port)
264
+ https.use_ssl = false
265
+ https.verify_mode = OpenSSL::SSL::VERIFY_NONE if https.use_ssl?
266
+ req = Net::HTTP::Post.new(uri.request_uri, initheader = {'Content-Type' => 'text/plain'}, )
267
+ req.body = opentsdb_query
268
+
269
+ begin
270
+ res = https.request(req)
271
+ if res.code == '200'
272
+ puts "\nSuccessfully retrieved ".green + metric.yellow + " from ".green + ip.blue + " in timestamp range: ".green + time_start.yellow + " to ".green + time_end.yellow + "\nData points in the last ".green + range.yellow + " seconds:\n".green + JSON.pretty_generate(JSON.parse(res.body)).green
273
+ else
274
+ puts "\nFailed to retrieve ".red + metric.yellow + " from ".red + ip.blue + " in timestamp range: ".red + time_start.yellow + " to ".red + time_end.yellow + "\nStatus Code: ".red + res.code.yellow + "\nResponse Body: ".red + JSON.pretty_generate(JSON.parse(res.body)).red
275
+ end
276
+ rescue
277
+ puts "\nYour request returned an error. Are you sure your query was correct?"
278
+ end
279
+
280
+ ENV["http_proxy"] = ""
281
+ ENV["https_proxy"] = ""
282
+
283
+ return res.code
284
+
285
+ end
193
286
  end
194
287
  end
@@ -1,3 +1,3 @@
1
1
  module Echo_cli
2
- VERSION = "0.6.6"
2
+ VERSION = "0.6.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: echo_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.6
4
+ version: 0.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Raphael