influxdb-cli 0.1.3 → 0.1.4
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 +4 -4
- data/.rspec +0 -1
- data/README.md +17 -12
- data/bin/influxdb-cli +12 -10
- data/lib/influxdb_client/client.rb +14 -7
- data/lib/influxdb_client/version.rb +1 -1
- data/spec/influxdb_client/client_spec.rb +37 -14
- data/spec/spec_helper.rb +13 -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: 5e41aad56b30e0f0407d98abd82cd260613f5d94
|
4
|
+
data.tar.gz: 912c971b11e4d00436a4f4f87234eacc6f205477
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 703c39b21030ad02cc0636fe6dfe1dfa39e22c5f7586c544fa73ad7ae3c038de6d69ff236f9b49484f3fe26874e634f6624288fe74fa36dcd1195c8bc1f776be
|
7
|
+
data.tar.gz: c186a91062e03966dd02ffc141b8b5650bcf613f9d6cd934acd0ce0850914c334681ce672194b198aa6cb448f8a31e12b83d4cd7622bf5f3d8cfe016b68a793b
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -13,21 +13,26 @@ gem install influxdb-cli
|
|
13
13
|
### Options
|
14
14
|
|
15
15
|
```shell
|
16
|
+
$ influxdb-cli help db
|
17
|
+
|
16
18
|
Usage:
|
17
|
-
influxdb-cli
|
19
|
+
influxdb-cli db
|
18
20
|
|
19
21
|
Options:
|
20
|
-
[--host=HOST]
|
21
|
-
|
22
|
-
[--port=PORT]
|
23
|
-
|
24
|
-
-u, [--username=USERNAME]
|
25
|
-
|
26
|
-
-p, [--password=PASSWORD]
|
27
|
-
|
28
|
-
-d, [--database=DATABASE]
|
29
|
-
|
30
|
-
[--pretty=PRETTY]
|
22
|
+
[--host=HOST] # Hostname
|
23
|
+
# Default: localhost
|
24
|
+
[--port=PORT] # Port
|
25
|
+
# Default: 8086
|
26
|
+
-u, [--username=USERNAME] # Username
|
27
|
+
# Default: root
|
28
|
+
-p, [--password=PASSWORD] # Password
|
29
|
+
# Default: root
|
30
|
+
-d, [--database=DATABASE] # Database
|
31
|
+
# Default: db
|
32
|
+
[--pretty=PRETTY] # Human readable times (UTC)
|
33
|
+
[--ssl], [--no-ssl] # Connect using TLS/SSL
|
34
|
+
[--time-precision=TIME_PRECISION] # Time precision can be set to either "s" for seconds, "ms" for milliseconds, or "u" for microseconds
|
35
|
+
# Default: s
|
31
36
|
```
|
32
37
|
|
33
38
|
### Usage
|
data/bin/influxdb-cli
CHANGED
@@ -16,13 +16,14 @@ class InfluxDBClientTasks < Thor
|
|
16
16
|
@@db = nil
|
17
17
|
|
18
18
|
desc 'db', 'Connect to InfluxDB (default command)'
|
19
|
-
method_option :host,
|
20
|
-
method_option :port,
|
21
|
-
method_option :username,
|
22
|
-
method_option :password,
|
23
|
-
method_option :database,
|
24
|
-
method_option :pretty,
|
25
|
-
method_option :ssl,
|
19
|
+
method_option :host, default: 'localhost', desc: 'Hostname'
|
20
|
+
method_option :port, default: 8086, desc: 'Port'
|
21
|
+
method_option :username, default: 'root', desc: 'Username', aliases: '-u'
|
22
|
+
method_option :password, default: 'root', desc: 'Password', aliases: '-p'
|
23
|
+
method_option :database, default: 'db', desc: 'Database', aliases: '-d'
|
24
|
+
method_option :pretty, default: nil, desc: 'Human readable times (UTC)'
|
25
|
+
method_option :ssl, default: false, desc: 'Connect using TLS/SSL', type: :boolean
|
26
|
+
method_option :time_precision, default: 's', desc: 'Time precision can be set to either "s" for seconds, "ms" for milliseconds, or "u" for microseconds'
|
26
27
|
|
27
28
|
def db
|
28
29
|
puts "Connecting to #{options.inspect}"
|
@@ -32,7 +33,8 @@ class InfluxDBClientTasks < Thor
|
|
32
33
|
password: options[:password],
|
33
34
|
host: options[:host],
|
34
35
|
port: options[:port],
|
35
|
-
use_ssl: options[:ssl]
|
36
|
+
use_ssl: options[:ssl],
|
37
|
+
time_precision: options[:time_precision]
|
36
38
|
}
|
37
39
|
InfluxDBClient::Client.pretty = options[:pretty]
|
38
40
|
puts '✔ ready'
|
@@ -58,6 +60,7 @@ InfluxDBClientTasks.start
|
|
58
60
|
# exit if the db command wasn't called
|
59
61
|
exit 0 unless db
|
60
62
|
|
63
|
+
|
61
64
|
# allow typing queries directly from console i.e.`select * from deploys` instead of `query('select * from deploys')`.
|
62
65
|
# matches `delete from ...` and `select ... from ...`
|
63
66
|
Pry::Commands.block_command InfluxDBClient::Client::QUERY_LANGUAGE_MATCHER, 'Execute a query' do |query|
|
@@ -65,7 +68,7 @@ Pry::Commands.block_command InfluxDBClient::Client::QUERY_LANGUAGE_MATCHER, 'Exe
|
|
65
68
|
result = db.query(query)
|
66
69
|
duration = Time.now - start
|
67
70
|
|
68
|
-
InfluxDBClient::Client.print_tabularize(result)
|
71
|
+
InfluxDBClient::Client.print_tabularize(result, db.time_precision)
|
69
72
|
|
70
73
|
# print query duration in seconds
|
71
74
|
puts "Query duration: #{duration.round(2)}s"
|
@@ -81,4 +84,3 @@ Pry.config.print = proc { |output, value| Pry::Helpers::BaseHelpers.stagger_outp
|
|
81
84
|
|
82
85
|
# TODO start `pry` only in case of `db` command, `help` and `version` should not start `pry`
|
83
86
|
pry
|
84
|
-
|
@@ -10,7 +10,7 @@ module InfluxDBClient
|
|
10
10
|
# @param result [Hash] the {InfluDB::Client#query result}
|
11
11
|
# @param output [STDOUT] the output to `puts` the results
|
12
12
|
# @return [Hash] the number of points per time series i.e. { 'response_times.count' => 10 }
|
13
|
-
def self.print_tabularize(result, output=$stdout)
|
13
|
+
def self.print_tabularize(result, time_precision, output=$stdout)
|
14
14
|
result ||= {}
|
15
15
|
|
16
16
|
if result.keys.empty?
|
@@ -21,8 +21,10 @@ module InfluxDBClient
|
|
21
21
|
result.keys.each do |series|
|
22
22
|
result_series = result[series]
|
23
23
|
if result_series.any?
|
24
|
-
output.puts generate_table(series, result_series)
|
25
|
-
output.puts "#{result_series.size}
|
24
|
+
output.puts generate_table(series, result_series, time_precision)
|
25
|
+
output.puts "#{result_series.size} " \
|
26
|
+
"#{pluralize(result_series.size, 'result')} " \
|
27
|
+
"found for #{series}"
|
26
28
|
else
|
27
29
|
output.puts "No results found for #{series}"
|
28
30
|
end
|
@@ -45,12 +47,18 @@ module InfluxDBClient
|
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
48
|
-
def self.generate_table(series, result_series)
|
50
|
+
def self.generate_table(series, result_series, time_precision)
|
49
51
|
headings = result_series.first.keys
|
52
|
+
precision_factor, str_format = case time_precision.to_s
|
53
|
+
when 's' then [1.0, '%F %T']
|
54
|
+
when 'ms' then [1_000.0, '%F %T.%3N']
|
55
|
+
when 'u' then [1_000_000.0, '%F %T.%6N']
|
56
|
+
else raise "unknown time_precision #{time_precision}"
|
57
|
+
end
|
50
58
|
rows = result_series.map do |row|
|
51
59
|
if @pretty
|
52
|
-
|
53
|
-
row['time'] = Time.at(
|
60
|
+
seconds_with_frac = row['time'].to_f / precision_factor
|
61
|
+
row['time'] = Time.at(seconds_with_frac).utc.strftime(str_format)
|
54
62
|
end
|
55
63
|
row.values
|
56
64
|
end
|
@@ -59,4 +67,3 @@ module InfluxDBClient
|
|
59
67
|
end
|
60
68
|
end
|
61
69
|
end
|
62
|
-
|
@@ -48,27 +48,51 @@ module InfluxDBClient
|
|
48
48
|
expect(Terminal::Table).to receive(:new).
|
49
49
|
with(title: :series2, headings: %w[time value3 value4 value5 value6], rows: [[1394552447955, 3, 4, nil, nil], [1394664358980, nil, 4, 5, 6]])
|
50
50
|
|
51
|
-
described_class.print_tabularize(result)
|
51
|
+
described_class.print_tabularize(result, :ms)
|
52
52
|
end
|
53
53
|
|
54
54
|
context 'when pretty' do
|
55
55
|
before(:all) { described_class.pretty = true }
|
56
56
|
after(:all) { described_class.pretty = false }
|
57
|
-
it 'generates tables' do
|
58
|
-
expect(Terminal::Table).to receive(:new).
|
59
|
-
with(title: :series1, headings: %w[time value1 value2], rows: [['2013-12-17 13:42:03.160', 1, 2]])
|
60
57
|
|
61
|
-
|
62
|
-
|
58
|
+
context 'and time precision is seconds' do
|
59
|
+
let(:result) { { series1: [{ 'time' => 1387287723, 'value1' => 1, 'value2' => 2 }] } }
|
60
|
+
it 'generates tables' do
|
61
|
+
expect(Terminal::Table).to receive(:new).
|
62
|
+
with(title: :series1, headings: %w[time value1 value2], rows: [['2013-12-17 13:42:03', 1, 2]])
|
63
|
+
|
64
|
+
described_class.print_tabularize(result, :s)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'and time precision is milliseconds' do
|
69
|
+
it 'generates tables' do
|
70
|
+
expect(Terminal::Table).to receive(:new).
|
71
|
+
with(title: :series1, headings: %w[time value1 value2], rows: [['2013-12-17 13:42:03.815', 1, 2]])
|
72
|
+
|
73
|
+
expect(Terminal::Table).to receive(:new).
|
74
|
+
with(title: :series2, headings: %w[time value3 value4 value5 value6], rows: [['2014-03-11 15:40:47.954', 3, 4, nil, nil], ['2014-03-12 22:45:58.980', nil, 4, 5, 6]])
|
63
75
|
|
64
|
-
|
76
|
+
described_class.print_tabularize(result, :ms)
|
77
|
+
end
|
65
78
|
end
|
79
|
+
|
80
|
+
context 'and time precision is microseconds' do
|
81
|
+
let(:result) { { series1: [{ 'time' => 1387287723816232, 'value1' => 1, 'value2' => 2 }] } }
|
82
|
+
it 'generates tables' do
|
83
|
+
expect(Terminal::Table).to receive(:new).
|
84
|
+
with(title: :series1, headings: %w[time value1 value2], rows: [['2013-12-17 13:42:03.816231', 1, 2]])
|
85
|
+
|
86
|
+
described_class.print_tabularize(result, :u)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
66
90
|
end
|
67
91
|
|
68
92
|
it 'prints results' do
|
69
93
|
output = double 'Output'
|
70
94
|
table = double 'Table'
|
71
|
-
Terminal::Table.
|
95
|
+
allow(Terminal::Table).to receive(:new).and_return(table)
|
72
96
|
|
73
97
|
# should print series1 and series2
|
74
98
|
expect(output).to receive(:puts).twice.with(table)
|
@@ -78,7 +102,7 @@ module InfluxDBClient
|
|
78
102
|
# line break for series
|
79
103
|
expect(output).to receive(:puts).twice.with(no_args)
|
80
104
|
|
81
|
-
described_class.print_tabularize(result, output)
|
105
|
+
described_class.print_tabularize(result, :ms, output)
|
82
106
|
end
|
83
107
|
|
84
108
|
context 'when no results' do
|
@@ -89,13 +113,13 @@ module InfluxDBClient
|
|
89
113
|
output = double 'Output'
|
90
114
|
result = {}
|
91
115
|
expect(output).to receive(:puts).once.with('No results found')
|
92
|
-
described_class.print_tabularize(result, output)
|
116
|
+
described_class.print_tabularize(result, :ms, output)
|
93
117
|
end
|
94
118
|
|
95
119
|
it 'prints specific no results found per series' do
|
96
120
|
output = double 'Output'
|
97
121
|
table = double 'Table'
|
98
|
-
Terminal::Table.
|
122
|
+
allow(Terminal::Table).to receive(:new).and_return(table)
|
99
123
|
|
100
124
|
# should print series1
|
101
125
|
expect(output).to receive(:puts).once.with(table)
|
@@ -106,7 +130,7 @@ module InfluxDBClient
|
|
106
130
|
# line break for series
|
107
131
|
expect(output).to receive(:puts).twice.with(no_args)
|
108
132
|
|
109
|
-
described_class.print_tabularize(result, output)
|
133
|
+
described_class.print_tabularize(result, :ms, output)
|
110
134
|
end
|
111
135
|
end
|
112
136
|
|
@@ -115,10 +139,9 @@ module InfluxDBClient
|
|
115
139
|
output = double 'Output'
|
116
140
|
result = nil
|
117
141
|
expect(output).to receive(:puts).once.with('No results found')
|
118
|
-
described_class.print_tabularize(result, output)
|
142
|
+
described_class.print_tabularize(result, :ms, output)
|
119
143
|
end
|
120
144
|
end
|
121
145
|
end
|
122
146
|
end
|
123
147
|
end
|
124
|
-
|
data/spec/spec_helper.rb
CHANGED
@@ -7,7 +7,18 @@ Dir['../lib/**/*.rb'].each &method(:require)
|
|
7
7
|
require './lib/influxdb_client'
|
8
8
|
|
9
9
|
RSpec.configure do |config|
|
10
|
-
|
11
|
-
|
10
|
+
original_stderr = $stderr
|
11
|
+
original_stdout = $stdout
|
12
|
+
|
13
|
+
config.before(:all) do
|
14
|
+
# Redirect stderr and stdout
|
15
|
+
$stderr = File.new('/dev/null', 'w')
|
16
|
+
$stdout = File.new('/dev/null', 'w')
|
17
|
+
end
|
18
|
+
|
19
|
+
config.after(:all) do
|
20
|
+
$stderr = original_stderr
|
21
|
+
$stdout = original_stdout
|
22
|
+
end
|
12
23
|
end
|
13
24
|
|
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.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Cantero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: influxdb
|