echo_cli 0.6.6 → 0.6.7

Sign up to get free protection for your applications and to get access to all the features.
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