influxdb-cli 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +65 -15
- data/bin/influxdb-cli +14 -6
- data/lib/influxdb_client/client.rb +10 -3
- data/lib/influxdb_client/version.rb +1 -1
- data/spec/influxdb_client/client_spec.rb +29 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 281b2fa707050411c4122d9d0baec8bb71eb7df9
|
4
|
+
data.tar.gz: 7c8db30a7593ce61d5568b736db0e14d5a89deea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0755bf563ec3a8bcf1d3253b833f76668ac72e67f474cdaa6304e2247cc0cb17b292f601830bf6676eee4deba3e356185182d6b328e2d4fa7ba64f076050f2a6
|
7
|
+
data.tar.gz: ebb47210f603cad89deee719c23681db14695a999c39a8218922972b0ca75d38f57f42dbc74aed8a81ac80a89edee192e618130a91fd847f3321da149dd3b095
|
data/README.md
CHANGED
@@ -31,10 +31,10 @@ Options:
|
|
31
31
|
|
32
32
|
### Usage
|
33
33
|
|
34
|
-
Connect to a database
|
34
|
+
#### Connect to a database
|
35
35
|
|
36
36
|
```shell
|
37
|
-
influxdb-cli
|
37
|
+
$ influxdb-cli
|
38
38
|
Connecting to {"host"=>"localhost", "port"=>8086, "username"=>"root", "password"=>"root", "database"=>"db"}
|
39
39
|
✔ ready
|
40
40
|
```
|
@@ -42,16 +42,63 @@ Connecting to {"host"=>"localhost", "port"=>8086, "username"=>"root", "password"
|
|
42
42
|
or
|
43
43
|
|
44
44
|
```shell
|
45
|
-
influxdb-cli -u user -p password -d database -h sandbox.influxdb.org --port 9061
|
45
|
+
$ influxdb-cli -u user -p password -d database -h sandbox.influxdb.org --port 9061
|
46
46
|
Connecting to {"host"=>"sandbox.influxdb.org", "port"=>"9061", "username"=>"username", "password"=>"password", "database"=>"database"}
|
47
47
|
✔ ready
|
48
48
|
```
|
49
49
|
|
50
50
|
[InfluxDB Playground](http://play.influxdb.org) :metal:
|
51
51
|
|
52
|
-
|
52
|
+
#### Create a database and user
|
53
53
|
|
54
|
-
```
|
54
|
+
```ruby
|
55
|
+
2.0.0 (main)> db.create_database 'db'
|
56
|
+
2.0.0 (main)> db.create_database_user 'db', 'root', 'root'
|
57
|
+
```
|
58
|
+
|
59
|
+
#### List databases
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
2.0.0 (main)> db.get_database_list
|
63
|
+
```
|
64
|
+
|
65
|
+
#### Switch databases
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
2.0.0 (main)> use other_database
|
69
|
+
2.0.0 (main)> db.database
|
70
|
+
=> "other_database"
|
71
|
+
```
|
72
|
+
|
73
|
+
#### Write a point
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
2.0.0 (main)> db.write_point('test', { message: 'Hello Pablo' })
|
77
|
+
|
78
|
+
2.0.0 (main)> SELECT * FROM test
|
79
|
+
|
80
|
+
+---------------+-----------------+-------------+
|
81
|
+
| test |
|
82
|
+
+---------------+-----------------+-------------+
|
83
|
+
| time | sequence_number | message |
|
84
|
+
+---------------+-----------------+-------------+
|
85
|
+
| 1387287723816 | 1 | Hello Pablo |
|
86
|
+
+---------------+-----------------+-------------+
|
87
|
+
1 result found for test
|
88
|
+
|
89
|
+
Query duration: 0.0s
|
90
|
+
```
|
91
|
+
|
92
|
+
#### Return the last point from every time series in the database
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
2.0.0 (main)> SELECT * FROM /.*/
|
96
|
+
```
|
97
|
+
|
98
|
+
|
99
|
+
#### Query with a [tabularized output](https://github.com/visionmedia/terminal-table)
|
100
|
+
|
101
|
+
```ruby
|
55
102
|
2.0.0 (main)> SELECT * FROM deploys
|
56
103
|
+---------------+-----------------+-----------------+--------+-----------------+-------------------+----------+
|
57
104
|
| deploys |
|
@@ -61,15 +108,14 @@ Query with a [tabularized](https://github.com/visionmedia/terminal-table) output
|
|
61
108
|
| ... | ... | ... | ... | ... | ... | ... |
|
62
109
|
+---------------+-----------------+-----------------+--------+-----------------+-------------------+----------+
|
63
110
|
|
64
|
-
|
65
|
-
"deploys.count" => 1
|
66
|
-
}
|
67
|
-
```
|
111
|
+
1 result found for deploys
|
68
112
|
|
113
|
+
Query duration: 0.49s
|
114
|
+
```
|
69
115
|
|
70
|
-
Query with a Ruby Hash output
|
116
|
+
#### Query with a [Ruby Hash output](https://github.com/michaeldv/awesome_print)
|
71
117
|
|
72
|
-
```
|
118
|
+
```ruby
|
73
119
|
2.0.0 (main)> db.query('SELECT * FROM deploys')
|
74
120
|
=> {
|
75
121
|
"deploys" => [
|
@@ -84,9 +130,9 @@ Query with a Ruby Hash output ([awesome_print](https://github.com/michaeldv/awes
|
|
84
130
|
},
|
85
131
|
```
|
86
132
|
|
87
|
-
Other methods
|
133
|
+
#### Other methods
|
88
134
|
|
89
|
-
```
|
135
|
+
```ruby
|
90
136
|
2.0.0 (main)> db.write_point(name, data)
|
91
137
|
2.0.0 (main)> db.get_database_list
|
92
138
|
2.0.0 (main)> ls -q db
|
@@ -101,7 +147,9 @@ instance variables: @database @host @http @password @port @queue @username
|
|
101
147
|
|
102
148
|
As influxdb-cli is empowered with Pry, all Pry awesome commands are avaiable in the console.
|
103
149
|
|
104
|
-
|
150
|
+
#### show-source
|
151
|
+
|
152
|
+
```ruby
|
105
153
|
2.0.0 (main)> show-source InfluxDB::Client#query
|
106
154
|
|
107
155
|
From: /Users/pablo/.gem/ruby/2.0.0/gems/influxdb-0.0.11/lib/influxdb/client.rb @ line 152:
|
@@ -128,7 +176,9 @@ def query(query)
|
|
128
176
|
end
|
129
177
|
```
|
130
178
|
|
131
|
-
|
179
|
+
#### show-doc
|
180
|
+
|
181
|
+
```ruby
|
132
182
|
|
133
183
|
2.0.0 (main)> show-doc InfluxDB::Client#initialize
|
134
184
|
|
data/bin/influxdb-cli
CHANGED
@@ -12,7 +12,9 @@ require 'influxdb_client/version'
|
|
12
12
|
require 'influxdb_client/client'
|
13
13
|
|
14
14
|
class InfluxDBClientTasks < Thor
|
15
|
-
|
15
|
+
@@db = nil
|
16
|
+
|
17
|
+
desc 'db', 'Connect to InfluxDB (default command)'
|
16
18
|
method_option :host, :default => 'localhost', :aliases => '-h', :desc => 'Hostname'
|
17
19
|
method_option :port, :default => 8086, :desc => 'Port'
|
18
20
|
method_option :username, :default => 'root', :aliases => '-u', :desc => 'Username'
|
@@ -28,13 +30,11 @@ class InfluxDBClientTasks < Thor
|
|
28
30
|
desc 'version', 'Show influxdb-cli version'
|
29
31
|
def version
|
30
32
|
puts "influxdb-cli #{InfluxDBClient::VERSION}"
|
31
|
-
# skip `pry` console
|
32
|
-
exit 0
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.db; @@db; end
|
36
36
|
|
37
|
-
|
37
|
+
default_command :db
|
38
38
|
end
|
39
39
|
|
40
40
|
# Returns {InfluxDB::Client} instance using given parameters.
|
@@ -44,11 +44,14 @@ def db; InfluxDBClientTasks.db; end
|
|
44
44
|
|
45
45
|
InfluxDBClientTasks.start
|
46
46
|
|
47
|
+
# exit if the db command wasn't called
|
48
|
+
exit 0 unless db
|
49
|
+
|
47
50
|
# allow typing queries directly from console i.e.`select * from deploys` instead of `query('select * from deploys')`.
|
48
51
|
# matches `delete from ...` and `select ... from ...`
|
49
|
-
Pry::Commands.block_command InfluxDBClient::Client::QUERY_LANGUAGE_MATCHER, 'Execute a query' do |
|
52
|
+
Pry::Commands.block_command InfluxDBClient::Client::QUERY_LANGUAGE_MATCHER, 'Execute a query' do |query|
|
50
53
|
start = Time.now
|
51
|
-
result = db.query(
|
54
|
+
result = db.query(query)
|
52
55
|
duration = Time.now - start
|
53
56
|
|
54
57
|
InfluxDBClient::Client.print_tabularize(result)
|
@@ -57,6 +60,11 @@ Pry::Commands.block_command InfluxDBClient::Client::QUERY_LANGUAGE_MATCHER, 'Exe
|
|
57
60
|
puts "Query duration: #{duration.round(2)}s"
|
58
61
|
end
|
59
62
|
|
63
|
+
# switch databases `use db_name`
|
64
|
+
Pry::Commands.block_command InfluxDBClient::Client::SWITCH_DATABASE_MATCHER, 'Switch databases' do |db_name|
|
65
|
+
db.database = db_name
|
66
|
+
end
|
67
|
+
|
60
68
|
# awesome_print
|
61
69
|
Pry.config.print = proc { |output, value| Pry::Helpers::BaseHelpers.stagger_output("=> #{value.ai}", output) }
|
62
70
|
|
@@ -2,7 +2,8 @@ require 'terminal-table'
|
|
2
2
|
|
3
3
|
module InfluxDBClient
|
4
4
|
class Client
|
5
|
-
QUERY_LANGUAGE_MATCHER
|
5
|
+
QUERY_LANGUAGE_MATCHER = /\A\s*((delete\s+from|select\s+.+\s+from)\s.+)\z/i
|
6
|
+
SWITCH_DATABASE_MATCHER = /\A\s*use\s+(\S+)\s*\z/i
|
6
7
|
|
7
8
|
# Prints a tabularized output from a query result.
|
8
9
|
#
|
@@ -10,9 +11,15 @@ module InfluxDBClient
|
|
10
11
|
# @param output [STDOUT] the output to `puts` the results
|
11
12
|
# @return [Hash] the number of points per time series i.e. { 'response_times.count' => 10 }
|
12
13
|
def self.print_tabularize(result, output=$stdout)
|
13
|
-
|
14
|
-
|
14
|
+
result ||= {}
|
15
|
+
|
16
|
+
if result.keys.empty?
|
17
|
+
output.puts 'No results found'
|
18
|
+
return
|
19
|
+
end
|
15
20
|
|
21
|
+
result.keys.each do |series|
|
22
|
+
result_series = result[series]
|
16
23
|
if result_series.any?
|
17
24
|
output.puts generate_table(series, result_series)
|
18
25
|
output.puts "#{result_series.size} #{pluralize(result_series.size, 'result')} found for #{series}"
|
@@ -25,6 +25,17 @@ module InfluxDBClient
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
describe '.SWITCH_DATABASE_MATCHER' do
|
29
|
+
subject { Client::SWITCH_DATABASE_MATCHER }
|
30
|
+
it { should match('use response_times') }
|
31
|
+
it { should match(' use response_times ') }
|
32
|
+
|
33
|
+
it { should_not match('use') }
|
34
|
+
it { should_not match(' use ') }
|
35
|
+
it { should_not match('use response_times tests') }
|
36
|
+
it { should_not match('useresponse_times') }
|
37
|
+
end
|
38
|
+
|
28
39
|
describe '.print_tabularize' do
|
29
40
|
let(:result) { { series1: [{ value1: 1, value2: 2 }],
|
30
41
|
series2: [{ value3: 3, value4: 4, value5: nil, value6: nil },
|
@@ -56,11 +67,18 @@ module InfluxDBClient
|
|
56
67
|
described_class.print_tabularize(result, output)
|
57
68
|
end
|
58
69
|
|
59
|
-
context 'when
|
70
|
+
context 'when no results' do
|
60
71
|
let(:result) { { series1: [{ value1: 1, value2: 2 }],
|
61
72
|
series2: [] } }
|
62
73
|
|
63
|
-
it 'prints no results found' do
|
74
|
+
it 'prints generic no results found' do
|
75
|
+
output = double 'Output'
|
76
|
+
result = {}
|
77
|
+
expect(output).to receive(:puts).once.with('No results found')
|
78
|
+
described_class.print_tabularize(result, output)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'prints specific no results found per series' do
|
64
82
|
output = double 'Output'
|
65
83
|
table = double 'Table'
|
66
84
|
Terminal::Table.stub(new: table)
|
@@ -77,6 +95,15 @@ module InfluxDBClient
|
|
77
95
|
described_class.print_tabularize(result, output)
|
78
96
|
end
|
79
97
|
end
|
98
|
+
|
99
|
+
context 'when result is null' do
|
100
|
+
it 'prints generic no results found' do
|
101
|
+
output = double 'Output'
|
102
|
+
result = nil
|
103
|
+
expect(output).to receive(:puts).once.with('No results found')
|
104
|
+
described_class.print_tabularize(result, output)
|
105
|
+
end
|
106
|
+
end
|
80
107
|
end
|
81
108
|
end
|
82
109
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: influxdb-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Cantero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: influxdb
|