influxdb 0.3.17 → 0.4.0
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/.rubocop.yml +9 -1
- data/.travis.yml +10 -13
- data/CHANGELOG.md +9 -11
- data/Gemfile +0 -5
- data/README.md +67 -23
- data/Rakefile +10 -9
- data/influxdb.gemspec +5 -6
- data/lib/influxdb/client.rb +7 -11
- data/lib/influxdb/client/http.rb +1 -2
- data/lib/influxdb/config.rb +136 -68
- data/lib/influxdb/errors.rb +6 -17
- data/lib/influxdb/logging.rb +28 -6
- data/lib/influxdb/point_value.rb +7 -5
- data/lib/influxdb/query/builder.rb +1 -2
- data/lib/influxdb/query/cluster.rb +1 -1
- data/lib/influxdb/query/continuous_query.rb +6 -6
- data/lib/influxdb/query/core.rb +21 -19
- data/lib/influxdb/version.rb +1 -1
- data/lib/influxdb/writer/async.rb +7 -6
- data/lib/influxdb/writer/udp.rb +16 -7
- data/spec/influxdb/cases/query_cluster_spec.rb +1 -1
- data/spec/influxdb/cases/query_continuous_query_spec.rb +2 -2
- data/spec/influxdb/cases/query_core_spec.rb +1 -1
- data/spec/influxdb/cases/query_retention_policy_spec.rb +1 -1
- data/spec/influxdb/cases/query_series_spec.rb +1 -1
- data/spec/influxdb/cases/query_user_spec.rb +1 -1
- data/spec/influxdb/cases/query_with_params_spec.rb +1 -1
- data/spec/influxdb/cases/querying_issue_7000_spec.rb +6 -6
- data/spec/influxdb/cases/querying_spec.rb +25 -25
- data/spec/influxdb/cases/show_field_keys_spec.rb +7 -7
- data/spec/influxdb/client_spec.rb +3 -1
- data/spec/influxdb/config_spec.rb +81 -0
- data/spec/influxdb/logging_spec.rb +14 -3
- data/spec/influxdb/point_value_spec.rb +3 -16
- data/spec/spec_helper.rb +5 -3
- metadata +10 -38
@@ -26,15 +26,15 @@ describe InfluxDB::Client do
|
|
26
26
|
"results" => [{
|
27
27
|
"series" => [{
|
28
28
|
"name" => "measurement_a",
|
29
|
-
"columns" => %w
|
30
|
-
"values" => [%w
|
31
|
-
%w
|
32
|
-
%w
|
33
|
-
%w
|
29
|
+
"columns" => %w[fieldKey fieldType],
|
30
|
+
"values" => [%w[a_string_field string],
|
31
|
+
%w[a_boolean_field boolean],
|
32
|
+
%w[a_float_field float],
|
33
|
+
%w[an_integer_field integer]]
|
34
34
|
}, {
|
35
35
|
"name" => "measurement_b",
|
36
|
-
"columns" => %w
|
37
|
-
"values" => [%w
|
36
|
+
"columns" => %w[fieldKey fieldType],
|
37
|
+
"values" => [%w[another_string string]]
|
38
38
|
}]
|
39
39
|
}]
|
40
40
|
}
|
@@ -46,7 +46,9 @@ describe InfluxDB::Client do
|
|
46
46
|
|
47
47
|
it "escapes params" do
|
48
48
|
url = subject.send(:full_url, "/unknown", value: ' !@#$%^&*()/\\_+-=?|`~')
|
49
|
-
|
49
|
+
encoded_fragment = "value=+%21%40%23%24%25%5E%26%2A%28%29%2F%5C_%2B-%3D%3F%7C%60"
|
50
|
+
encoded_fragment << (RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.5.0" ? "~" : "%7E")
|
51
|
+
expect(url).to include(encoded_fragment)
|
50
52
|
end
|
51
53
|
|
52
54
|
context "with prefix" do
|
@@ -124,4 +124,85 @@ describe InfluxDB::Config do
|
|
124
124
|
|
125
125
|
specify { expect(conf.epoch).to eq 's' }
|
126
126
|
end
|
127
|
+
|
128
|
+
context "given a config URL" do
|
129
|
+
let(:url) { "https://foo:bar@influx.example.com:8765/testdb?open_timeout=42&unknown=false&denormalize=false" }
|
130
|
+
let(:args) { [{ url: url }] }
|
131
|
+
|
132
|
+
it "applies values found in URL" do
|
133
|
+
expect(conf.database).to eq "testdb"
|
134
|
+
expect(conf.hosts).to eq ["influx.example.com"]
|
135
|
+
expect(conf.port).to eq 8765
|
136
|
+
expect(conf.username).to eq "foo"
|
137
|
+
expect(conf.password).to eq "bar"
|
138
|
+
expect(conf.use_ssl).to be true
|
139
|
+
expect(conf.denormalize).to be false
|
140
|
+
expect(conf.open_timeout).to eq 42
|
141
|
+
end
|
142
|
+
|
143
|
+
it "applies defaults" do
|
144
|
+
expect(conf.prefix).to eq ""
|
145
|
+
expect(conf.read_timeout).to be 300
|
146
|
+
expect(conf.max_delay).to be 30
|
147
|
+
expect(conf.initial_delay).to be_within(0.0001).of(0.01)
|
148
|
+
expect(conf.verify_ssl).to be true
|
149
|
+
expect(conf.ssl_ca_cert).to be false
|
150
|
+
expect(conf.epoch).to be false
|
151
|
+
expect(conf.discard_write_errors).to be false
|
152
|
+
expect(conf.retry).to be(-1)
|
153
|
+
expect(conf.chunk_size).to be nil
|
154
|
+
expect(conf).not_to be_udp
|
155
|
+
expect(conf.auth_method).to eq "params"
|
156
|
+
expect(conf).not_to be_async
|
157
|
+
end
|
158
|
+
|
159
|
+
context "UDP" do
|
160
|
+
let(:url) { "udp://test.localhost:2345?discard_write_errors=1" }
|
161
|
+
specify { expect(conf).to be_udp }
|
162
|
+
specify { expect(conf.udp[:port]).to be 2345 }
|
163
|
+
specify { expect(conf.discard_write_errors).to be true }
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context "given a config URL and explicit options" do
|
168
|
+
let(:url) { "https://foo:bar@influx.example.com:8765/testdb?open_timeout=42&unknown=false&denormalize=false" }
|
169
|
+
let(:args) do
|
170
|
+
[
|
171
|
+
"primarydb",
|
172
|
+
url: url,
|
173
|
+
open_timeout: 20,
|
174
|
+
read_timeout: 30,
|
175
|
+
]
|
176
|
+
end
|
177
|
+
|
178
|
+
it "applies values found in URL" do
|
179
|
+
expect(conf.hosts).to eq ["influx.example.com"]
|
180
|
+
expect(conf.port).to eq 8765
|
181
|
+
expect(conf.username).to eq "foo"
|
182
|
+
expect(conf.password).to eq "bar"
|
183
|
+
expect(conf.use_ssl).to be true
|
184
|
+
expect(conf.denormalize).to be false
|
185
|
+
end
|
186
|
+
|
187
|
+
it "applies values found in opts hash" do
|
188
|
+
expect(conf.database).to eq "primarydb"
|
189
|
+
expect(conf.open_timeout).to eq 20
|
190
|
+
expect(conf.read_timeout).to be 30
|
191
|
+
end
|
192
|
+
|
193
|
+
it "applies defaults" do
|
194
|
+
expect(conf.prefix).to eq ""
|
195
|
+
expect(conf.max_delay).to be 30
|
196
|
+
expect(conf.initial_delay).to be_within(0.0001).of(0.01)
|
197
|
+
expect(conf.verify_ssl).to be true
|
198
|
+
expect(conf.ssl_ca_cert).to be false
|
199
|
+
expect(conf.epoch).to be false
|
200
|
+
expect(conf.discard_write_errors).to be false
|
201
|
+
expect(conf.retry).to be(-1)
|
202
|
+
expect(conf.chunk_size).to be nil
|
203
|
+
expect(conf).not_to be_udp
|
204
|
+
expect(conf.auth_method).to eq "params"
|
205
|
+
expect(conf).not_to be_async
|
206
|
+
end
|
207
|
+
end
|
127
208
|
end
|
@@ -8,6 +8,10 @@ describe InfluxDB::Logging do
|
|
8
8
|
def write_to_log(level, message)
|
9
9
|
log(level, message)
|
10
10
|
end
|
11
|
+
|
12
|
+
def block_log(level, &block)
|
13
|
+
log(level, &block)
|
14
|
+
end
|
11
15
|
end
|
12
16
|
|
13
17
|
around do |example|
|
@@ -43,9 +47,16 @@ describe InfluxDB::Logging do
|
|
43
47
|
context "when included in classes" do
|
44
48
|
subject { LoggerTest.new }
|
45
49
|
|
46
|
-
it "logs" do
|
47
|
-
expect(InfluxDB::Logging.logger).to receive(:
|
48
|
-
subject.write_to_log(:
|
50
|
+
it "logs with string message" do
|
51
|
+
expect(InfluxDB::Logging.logger).to receive(:info).with(an_instance_of(String)).once
|
52
|
+
subject.write_to_log(:info, 'test')
|
53
|
+
end
|
54
|
+
|
55
|
+
it "logs with block message" do
|
56
|
+
msg = double("message")
|
57
|
+
expect(msg).to receive(:expensive_message).and_return("42")
|
58
|
+
expect(InfluxDB::Logging.logger).to receive(:info).and_yield.once
|
59
|
+
subject.block_log(:info) { msg.expensive_message }
|
49
60
|
end
|
50
61
|
end
|
51
62
|
end
|
@@ -15,8 +15,7 @@ describe InfluxDB::PointValue do
|
|
15
15
|
intval: 5,
|
16
16
|
floatval: 7.0,
|
17
17
|
invalid_encoding: "a b",
|
18
|
-
non_latin: "Улан-Удэ"
|
19
|
-
backslash: "C:\\", # issue #200
|
18
|
+
non_latin: "Улан-Удэ"
|
20
19
|
}
|
21
20
|
}
|
22
21
|
if RUBY_VERSION > "2.0.0"
|
@@ -28,20 +27,8 @@ describe InfluxDB::PointValue do
|
|
28
27
|
|
29
28
|
it 'should escape correctly' do
|
30
29
|
point = InfluxDB::PointValue.new(data)
|
31
|
-
|
32
|
-
|
33
|
-
%(2\\=\\ \\,"\\2=3\\=\\ \\,"\\3),
|
34
|
-
]
|
35
|
-
fields = [
|
36
|
-
%(4\\=\\ \\,\\"\\4="5= ,\\"\\\\5"),
|
37
|
-
%(intval=5i),
|
38
|
-
%(floatval=7.0),
|
39
|
-
%(invalid_encoding="a b"),
|
40
|
-
%(non_latin="Улан-Удэ"),
|
41
|
-
%(backslash="C:\\\\"),
|
42
|
-
]
|
43
|
-
|
44
|
-
expected = series.join(",") + " " + fields.join(",")
|
30
|
+
expected = %(1=\\ \\,"\\1,2\\=\\ \\,"\\2=3\\=\\ \\,"\\3 ) +
|
31
|
+
%(4\\=\\ \\,\\"\\4="5= ,\\"\\5",intval=5i,floatval=7.0,invalid_encoding="a b",non_latin="Улан-Удэ")
|
45
32
|
expect(point.dump).to eq(expected)
|
46
33
|
end
|
47
34
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require "influxdb"
|
2
2
|
require "webmock/rspec"
|
3
|
-
require "cause" unless Exception.instance_methods.include?(:cause)
|
4
3
|
|
4
|
+
# rubocop:disable Lint/HandleExceptions
|
5
5
|
begin
|
6
|
-
# rubocop:disable Lint/HandleExceptions
|
7
6
|
require "pry-byebug"
|
8
7
|
rescue LoadError
|
9
8
|
end
|
9
|
+
# rubocop:enable Lint/HandleExceptions
|
10
10
|
|
11
11
|
RSpec.configure do |config|
|
12
12
|
config.color = ENV["TRAVIS"] != "true"
|
@@ -17,6 +17,7 @@ RSpec.configure do |config|
|
|
17
17
|
else
|
18
18
|
config.formatter = :progress
|
19
19
|
end
|
20
|
+
# rubocop:enable Style/ConditionalAssignment
|
20
21
|
|
21
22
|
if ENV["LOG"]
|
22
23
|
Dir.mkdir("tmp") unless Dir.exist?("tmp")
|
@@ -24,13 +25,14 @@ RSpec.configure do |config|
|
|
24
25
|
|
25
26
|
InfluxDB::Logging.logger = Logger.new(logfile).tap do |logger|
|
26
27
|
logger.formatter = proc { |severity, _datetime, progname, message|
|
27
|
-
"%-5s - %s: %s\n"
|
28
|
+
format "%-5s - %s: %s\n", severity, progname, message
|
28
29
|
}
|
29
30
|
end
|
30
31
|
|
31
32
|
config.before(:each) do
|
32
33
|
InfluxDB::Logging.logger.info("RSpec") { self.class }
|
33
34
|
InfluxDB::Logging.logger.info("RSpec") { @__inspect_output }
|
35
|
+
InfluxDB::Logging.log_level = Logger.const_get(ENV["LOG"].upcase)
|
34
36
|
end
|
35
37
|
|
36
38
|
config.after(:each) do
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: influxdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd Persen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: json
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rake
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,56 +44,42 @@ dependencies:
|
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
47
|
+
version: '3.6'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
54
|
+
version: '3.6'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: webmock
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
61
|
+
version: '3.0'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
68
|
+
version: '3.0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: rubocop
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
75
|
+
version: '0.49'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: cause
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
82
|
+
version: '0.49'
|
111
83
|
description: This is the official Ruby library for InfluxDB.
|
112
84
|
email:
|
113
85
|
- influxdb@googlegroups.com
|
@@ -175,7 +147,7 @@ homepage: http://influxdb.org
|
|
175
147
|
licenses:
|
176
148
|
- MIT
|
177
149
|
metadata: {}
|
178
|
-
post_install_message:
|
150
|
+
post_install_message:
|
179
151
|
rdoc_options: []
|
180
152
|
require_paths:
|
181
153
|
- lib
|
@@ -183,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
183
155
|
requirements:
|
184
156
|
- - ">="
|
185
157
|
- !ruby/object:Gem::Version
|
186
|
-
version:
|
158
|
+
version: 2.2.0
|
187
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
160
|
requirements:
|
189
161
|
- - ">="
|