echo_cli 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -1
- data/lib/echo_cli/cli.rb +121 -3
- data/lib/echo_cli/version.rb +1 -1
- metadata +1 -2
- data/echo_cli-0.6.0.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0448a4ae9927eeb77e8b2043f5ff4bdceddcd39c
|
4
|
+
data.tar.gz: 0f9b13961677f98786fb2152e51b3cad864b91ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3acbc693f08696a9970fac9a604b037bccbaaaad7633fb650e8e57f619699bd2bd3979a82cd07b09f447f9398471c5d1fcc1546c2eeb29eb77ba12f79d079ac5
|
7
|
+
data.tar.gz: b78fcdaad8e3dded18685d09c12a2d08cf8d1ce10d6a185b6d9329493508bf6bf50907d3df67fec960255a47e7df5f7acba102dc62dc90d34e23bf5433340be9
|
data/README.md
CHANGED
@@ -30,6 +30,19 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
30
30
|
|
31
31
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
32
|
|
33
|
+
```bash
|
34
|
+
git add .
|
35
|
+
git commit -m
|
36
|
+
git push
|
37
|
+
|
38
|
+
gem bump minor/major
|
39
|
+
rake build
|
40
|
+
rake install
|
41
|
+
rake release
|
42
|
+
|
43
|
+
gem install echo_cli
|
44
|
+
```
|
45
|
+
|
33
46
|
## Contributing
|
34
47
|
|
35
48
|
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/echo_cli. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
@@ -38,4 +51,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERN
|
|
38
51
|
## License
|
39
52
|
|
40
53
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
41
|
-
|
data/lib/echo_cli/cli.rb
CHANGED
@@ -7,6 +7,8 @@ module Echo_cli
|
|
7
7
|
class Echo < Thor
|
8
8
|
desc "post", "Post metrics to Echo. Use \"echo_cli post <IP> '<metric>' <{number}>\""
|
9
9
|
|
10
|
+
option :q
|
11
|
+
|
10
12
|
long_desc <<-LONGDESC
|
11
13
|
`echo_cli post` will post a metric directly to Echo's StatsD server.
|
12
14
|
|
@@ -14,11 +16,13 @@ module Echo_cli
|
|
14
16
|
|
15
17
|
Ensure single-quotes surround the metric.
|
16
18
|
|
17
|
-
|
19
|
+
With -q (query-verify) option, post will perform a query of previously posted metric in Echo's instance of OpenTSDB, and provide a message verifying the datapoint exists.
|
20
|
+
|
21
|
+
> $ echo_cli post localhost 'example.post:1|c' {10} {-q}
|
18
22
|
LONGDESC
|
19
23
|
|
20
|
-
def post(ip,
|
21
|
-
request_body =
|
24
|
+
def post(ip, metric, num = 0)
|
25
|
+
request_body = metric.gsub(/'/,"")
|
22
26
|
statsd_uri = "http://" + ip + ":8125/metrix"
|
23
27
|
|
24
28
|
ENV["http_proxy"] = ENV["HTTP_PROXY"]
|
@@ -34,6 +38,7 @@ module Echo_cli
|
|
34
38
|
if(num.to_i > 0)
|
35
39
|
begin
|
36
40
|
time_start = Time.new.to_i.to_s
|
41
|
+
|
37
42
|
for i in 1..num.to_i
|
38
43
|
res = https.request(req)
|
39
44
|
if res.code != '200'
|
@@ -41,6 +46,10 @@ module Echo_cli
|
|
41
46
|
raise
|
42
47
|
end
|
43
48
|
end
|
49
|
+
|
50
|
+
if options[:q]
|
51
|
+
sleep 10 # ensure data reception and replication
|
52
|
+
end
|
44
53
|
time_end = Time.new.to_i.to_s
|
45
54
|
|
46
55
|
puts "\n\tSuccessfully posted ".green + request_body.yellow + " to ".green + ip.blue + " " + num.green + " time(s)".green + "\n\tTime start: ".green + time_start.yellow + ", Time end: ".green + time_end.yellow
|
@@ -51,8 +60,15 @@ module Echo_cli
|
|
51
60
|
else
|
52
61
|
begin
|
53
62
|
time_start = Time.new.to_i.to_s
|
63
|
+
|
54
64
|
res = https.request(req)
|
65
|
+
|
66
|
+
if options[:q]
|
67
|
+
sleep 10 # ensure data reception and replication
|
68
|
+
end
|
69
|
+
|
55
70
|
time_end = Time.new.to_i.to_s
|
71
|
+
|
56
72
|
if res.code == '200'
|
57
73
|
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
|
58
74
|
end
|
@@ -61,6 +77,108 @@ module Echo_cli
|
|
61
77
|
end
|
62
78
|
end
|
63
79
|
|
80
|
+
if options[:q]
|
81
|
+
query(ip, request_body[0..request_body.index(":")-1], time_start, time_end)
|
82
|
+
end
|
83
|
+
|
84
|
+
ENV["http_proxy"] = ""
|
85
|
+
ENV["https_proxy"] = ""
|
86
|
+
end
|
87
|
+
|
88
|
+
desc "query", "Query metrics on Echo. Use \"echo_cli query <IP> '<metric>' <time_start> <time_end> {-v}\""
|
89
|
+
|
90
|
+
option :v
|
91
|
+
|
92
|
+
long_desc <<-LONGDESC
|
93
|
+
`echo_cli query` will query a metric directly from Echo's OpenTSDB server instance.
|
94
|
+
|
95
|
+
If timestamps are unknown, echo_cli's post command provides time_start and time_end values for future querying.
|
96
|
+
|
97
|
+
Ensure single-quotes surround the metric.
|
98
|
+
|
99
|
+
Unlike the echo_cli post command, 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).
|
100
|
+
|
101
|
+
With -v (verbose) option, query will print the status code and response body upon completion of the request.
|
102
|
+
|
103
|
+
> $ echo_cli query localhost 'example.post' 1492186212 1492186214 {-v}
|
104
|
+
LONGDESC
|
105
|
+
|
106
|
+
def query(ip, metric, time_start, time_end)
|
107
|
+
metric = metric.gsub(/'/,"")
|
108
|
+
if metric.include? ":"
|
109
|
+
metric = metric[0..metric.index(":")-1]
|
110
|
+
end
|
111
|
+
|
112
|
+
opentsdb_uri = "http://" + ip + ":4242/api/query"
|
113
|
+
|
114
|
+
tags=""
|
115
|
+
|
116
|
+
if metric.include? "."
|
117
|
+
tags = metric[metric.index(".")+1..-1] + "."
|
118
|
+
metric = metric[0..metric.index(".")-1]
|
119
|
+
|
120
|
+
toReturn = ""
|
121
|
+
count = 1
|
122
|
+
while tags.include?(".") do
|
123
|
+
toReturn = toReturn + "\"tag" + count.to_s + "\": \"" + tags[0..tags.index(".")-1] + "\""
|
124
|
+
count = count + 1
|
125
|
+
tags = tags[tags.index(".")+1..-1]
|
126
|
+
if tags.include?(".")
|
127
|
+
toReturn = toReturn + ",\n"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
tags = toReturn
|
132
|
+
end
|
133
|
+
|
134
|
+
opentsdb_query =
|
135
|
+
"{
|
136
|
+
\"start\": " + time_start + ",
|
137
|
+
\"end\": " + time_end + ",
|
138
|
+
\"queries\": [
|
139
|
+
{
|
140
|
+
\"aggregator\": \"sum\",
|
141
|
+
\"metric\": \"" + metric + "\",
|
142
|
+
\"tags\": {" + tags +
|
143
|
+
"}
|
144
|
+
}
|
145
|
+
]
|
146
|
+
}"
|
147
|
+
|
148
|
+
ENV["http_proxy"] = ENV["HTTP_PROXY"]
|
149
|
+
ENV["https_proxy"] = ENV["HTTPS_PROXY"]
|
150
|
+
|
151
|
+
uri = URI.parse(opentsdb_uri)
|
152
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
153
|
+
https.use_ssl = false
|
154
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE if https.use_ssl?
|
155
|
+
req = Net::HTTP::Post.new(uri.request_uri, initheader = {'Content-Type' => 'text/plain'}, )
|
156
|
+
req.body = opentsdb_query
|
157
|
+
|
158
|
+
if options[:v]
|
159
|
+
begin
|
160
|
+
res = https.request(req)
|
161
|
+
if res.code == '200'
|
162
|
+
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
|
163
|
+
else
|
164
|
+
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
|
165
|
+
end
|
166
|
+
rescue
|
167
|
+
puts "\n\tYour request returned an error. Are you sure your query was correct?"
|
168
|
+
end
|
169
|
+
else
|
170
|
+
begin
|
171
|
+
res = https.request(req)
|
172
|
+
if res.code == '200'
|
173
|
+
puts "\n\tSuccessfully retrieved ".green + metric.yellow + " from ".green + ip.blue + " in timestamp range: ".green + time_start.yellow + " to ".green + time_end.yellow
|
174
|
+
else
|
175
|
+
puts "\n\tFailed to retrieve ".red + metric.yellow + " from ".red + ip.blue + " in timestamp range: ".red + time_start.yellow + " to ".red + time_end.yellow
|
176
|
+
end
|
177
|
+
rescue
|
178
|
+
puts "\n\tYour request returned an error. Are you sure your query was correct?"
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
64
182
|
ENV["http_proxy"] = ""
|
65
183
|
ENV["https_proxy"] = ""
|
66
184
|
end
|
data/lib/echo_cli/version.rb
CHANGED
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.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Raphael
|
@@ -100,7 +100,6 @@ files:
|
|
100
100
|
- bin/console
|
101
101
|
- bin/echo_cli
|
102
102
|
- bin/setup
|
103
|
-
- echo_cli-0.6.0.gem
|
104
103
|
- echo_cli.gemspec
|
105
104
|
- exe/console
|
106
105
|
- exe/echo_cli
|
data/echo_cli-0.6.0.gem
DELETED
Binary file
|