influxdb 0.7.0 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ea0ef1fdc75be35c711e62cbe12f80755c2b8985
4
- data.tar.gz: 776b4cd261b825af89a42d16e7be8e5e51869e44
2
+ SHA256:
3
+ metadata.gz: e35aa9d868bebe5d807a839115e59b08519d13acb5e9e9b5670ae993916046da
4
+ data.tar.gz: 72df33e054794f0037630183bfb355144d0c3fc049e76ebca4a86e90400bf709
5
5
  SHA512:
6
- metadata.gz: e68245d292c220601eee90a27c992f6516c52ddf3f144081879623a9f334ec11ac4ccffb8de51b74759d924b5d7e5344ce0023b4c9c1f9b1a86ec43c5a8b164c
7
- data.tar.gz: e0d6a1c802d56e51aa6935d75dfe2c2a3e1270183e62640599922bc66a27da69d8cc50c9460211fbe4757768e32e945f489096b2a3911f1b6a60460a9af690a8
6
+ metadata.gz: 13de608b885545523c03fc1da9922e31c7e7499bac3c51790b174cb8a0611a9f66dc98e0d1f91d1a12bb088a928c11cdc21d1725555cba2b623ed0aa34f2877d
7
+ data.tar.gz: bf50560b3838a9092af6ee8fff18acea15281e81d3f7353677a7510a508852d637d971bc67258570e1afb753b8752b66f6533e3e946a7f845937cc567c1d0cc7
@@ -9,6 +9,7 @@ rvm:
9
9
  - "2.4"
10
10
  - "2.5"
11
11
  - "2.6"
12
+ - "2.7"
12
13
  - ruby-head
13
14
  env:
14
15
  - TEST_TASK=spec
@@ -18,37 +19,37 @@ matrix:
18
19
  - rvm: jruby-head
19
20
  - rvm: ruby-head
20
21
  - rvm: jruby-9.1.17.0
21
- - rvm: jruby-9.2.5.0
22
- - rvm: "2.6"
22
+ - rvm: jruby-9.2.9.0
23
+ - rvm: "2.7"
23
24
  env: influx_version=nightly channel=nightlies
24
25
  include:
25
- - rvm: "2.6"
26
+ - rvm: "2.7"
26
27
  env: TEST_TASK=rubocop
27
28
 
28
29
  - rvm: jruby-9.1.17.0
29
30
  env: JRUBY_OPTS='--client -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-Xss2m -J-Xmx256M'
30
- - rvm: jruby-9.2.5.0
31
+ - rvm: jruby-9.2.9.0
31
32
  env: JRUBY_OPTS='--client -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-Xss2m -J-Xmx256M'
32
33
  - rvm: jruby-head
33
34
  env: JRUBY_OPTS='--client -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-Xss2m -J-Xmx256M'
34
35
 
35
- - rvm: "2.6"
36
+ - rvm: "2.7"
36
37
  env: influx_version=1.0.2 pkghash=88f6c30fec2c6e612e802e23b9161fdfc7c5c29f6be036f0376326445aff0037
37
- - rvm: "2.6"
38
+ - rvm: "2.7"
38
39
  env: influx_version=1.1.5 pkghash=0ecb9385cc008f6e5094e6e8f8ea70522023a16d4397e401898f3973176d3b21
39
- - rvm: "2.6"
40
+ - rvm: "2.7"
40
41
  env: influx_version=1.2.4 pkghash=2fac8391e04aa1bec9151e8f0d8f18df030c866af2b4963ab7d86c6ddc172182
41
- - rvm: "2.6"
42
+ - rvm: "2.7"
42
43
  env: influx_version=1.3.8 pkghash=35c9cb2943bbde04aa5e94ad6d8caf5fc9b1480bdbcde7c34078de135cc4f788
43
- - rvm: "2.6"
44
+ - rvm: "2.7"
44
45
  env: influx_version=1.4.3 pkghash=0477080f1d1cf8e1242dc7318280b9010c4c45cf6a415a2a5de607ae17fa0359
45
- - rvm: "2.6"
46
+ - rvm: "2.7"
46
47
  env: influx_version=1.5.4 pkghash=fa6f8d3196d13ffc376d533581b534692c738181ce3427c53484c138d9e6b902
47
- - rvm: "2.6"
48
+ - rvm: "2.7"
48
49
  env: influx_version=1.6.4 pkghash=dbfa13a0f9e38a8e7b19294c30144903bb681ac0aba0a3a8f4f349c37d5de5f9
49
- - rvm: "2.6"
50
- env: influx_version=1.7.2 pkghash=0bce61b7d89bf3216a7d3cb7a38423bd1c3a1b7d2ea8086b39cb26130ad78995
51
- - rvm: "2.6"
50
+ - rvm: "2.7"
51
+ env: influx_version=1.7.9 pkghash=02759d70cef670d336768fd38a9cf2f046a1bf40618be78ba215e7ce75b5075f
52
+ - rvm: "2.7"
52
53
  env: influx_version=nightly channel=nightlies
53
54
  addons:
54
55
  apt:
@@ -2,7 +2,16 @@
2
2
 
3
3
  For the full commit log, [see here](https://github.com/influxdata/influxdb-ruby/commits/master).
4
4
 
5
- ## v0.7.0, released 2018-01-11
5
+ ## v0.8.0, released 2020-02-05
6
+
7
+ - Allow dropping of specific series from specific DBs (#233, @cantino)
8
+ - Add support for MRI 2.7 (#235, @jeffkowalski)
9
+ - Raise a LineProtocolError if attempting to write empty values as field
10
+ set is required. This adds descriptive feedback to the error "unable to
11
+ parse '{series},{tags} ': invalid field format" (#236, @todtb)
12
+ - Add support for configuring HTTP Proxy (#238, @epchris)
13
+
14
+ ## v0.7.0, released 2019-01-11
6
15
 
7
16
  - Drop support for Ruby 2.2, since Bundler dropped it and we want to use
8
17
  Bundler in the development cycle as well.
data/README.md CHANGED
@@ -94,6 +94,21 @@ url = "https://influxdb.example.com:8086/database_name?open_timeout=3"
94
94
  influxdb = InfluxDB::Client.new url: url, open_timeout: 10
95
95
  ```
96
96
 
97
+ #### Using a custom HTTP Proxy
98
+
99
+ By default, the `Net::HTTP` proxy behavior is used (see [Net::HTTP Proxy][proxy])
100
+ You can optionally set a proxy address and port via the `proxy_addr` and
101
+ `proxy_port` options:
102
+
103
+ ``` ruby
104
+ influxdb = InfluxDB::Client.new database,
105
+ host: "influxdb.domain.com",
106
+ proxy_addr: "your.proxy.addr",
107
+ proxy_port: 8080
108
+ ```
109
+
110
+ [proxy]: https://docs.ruby-lang.org/en/2.7.0/Net/HTTP.html#class-Net::HTTP-label-Proxies
111
+
97
112
  ### Writing data
98
113
 
99
114
  Write some data:
@@ -195,7 +210,7 @@ influxdb = InfluxDB::Client.new {
195
210
 
196
211
  data = {
197
212
  values: { value: 0 },
198
- tags: { foo: 'bar', bar: 'baz' }
213
+ tags: { foo: 'bar', bar: 'baz' },
199
214
  timestamp: Time.now.to_i
200
215
  }
201
216
 
@@ -36,7 +36,7 @@ echo "-- Download has SHA256 hash: ${sha2_sum}"
36
36
  echo "== Installing"
37
37
 
38
38
  sudo dpkg -i "${HOME}/${package_name}"
39
- sudo /etc/init.d/influxdb start
39
+ sudo service influxdb start || true
40
40
 
41
41
  echo "-- waiting for daemon to start"
42
42
  while ! curl --head --fail --silent http://localhost:8086/ping; do
@@ -78,7 +78,7 @@ if [ ! -f /etc/influxdb/influxdb.conf ]; then
78
78
  fi
79
79
 
80
80
  sudo sed -i 's/auth-enabled = false/auth-enabled = true/' /etc/influxdb/influxdb.conf
81
- sudo /etc/init.d/influxdb restart
81
+ sudo service influxdb restart || true
82
82
 
83
83
  echo "-- waiting for daemon to restart"
84
84
  while ! curl --head --fail --silent http://localhost:8086/ping; do
@@ -51,7 +51,7 @@ module InfluxDB
51
51
  # +:retry+:: number of times a failed request should be retried. Defaults to infinite.
52
52
  def initialize(database = nil, **opts)
53
53
  opts[:database] = database if database.is_a? String
54
- @config = InfluxDB::Config.new(opts)
54
+ @config = InfluxDB::Config.new(**opts)
55
55
  @stopped = false
56
56
  @writer = find_writer
57
57
 
@@ -45,7 +45,7 @@ module InfluxDB
45
45
  retry_count = 0
46
46
 
47
47
  begin
48
- http = Net::HTTP.new(host, config.port)
48
+ http = build_http(host, config.port)
49
49
  http.open_timeout = config.open_timeout
50
50
  http.read_timeout = config.read_timeout
51
51
 
@@ -133,6 +133,16 @@ module InfluxDB
133
133
  end
134
134
  store
135
135
  end
136
+
137
+ # Builds an http instance, taking into account any configured
138
+ # proxy configuration
139
+ def build_http(host, port)
140
+ if config.proxy_addr
141
+ Net::HTTP.new(host, port, config.proxy_addr, config.proxy_port)
142
+ else
143
+ Net::HTTP.new(host, port)
144
+ end
145
+ end
136
146
  end
137
147
  # rubocop:enable Metrics/MethodLength
138
148
  # rubocop:enable Metrics/AbcSize
@@ -16,6 +16,8 @@ module InfluxDB
16
16
  open_timeout: 5,
17
17
  read_timeout: 300,
18
18
  auth_method: nil,
19
+ proxy_addr: nil,
20
+ proxy_port: nil,
19
21
 
20
22
  # SSL options
21
23
  use_ssl: false,
@@ -5,6 +5,7 @@ module InfluxDB # :nodoc:
5
5
  Error = Class.new StandardError
6
6
  AuthenticationError = Class.new Error
7
7
  ConnectionError = Class.new Error
8
+ LineProtocolError = Class.new Error
8
9
  SeriesNotFound = Class.new Error
9
10
  JSONParserError = Class.new Error
10
11
  QueryError = Class.new Error
@@ -46,7 +46,9 @@ module InfluxDB
46
46
  end
47
47
 
48
48
  def escape_values(values)
49
- return if values.nil?
49
+ if values.nil? || values.empty?
50
+ raise InfluxDB::LineProtocolError, "Cannot create point with empty values".freeze
51
+ end
50
52
 
51
53
  values.map do |k, v|
52
54
  key = escape(k.to_s, :field_key)
@@ -121,9 +121,13 @@ module InfluxDB
121
121
  end
122
122
 
123
123
  def generate_payload(data)
124
- data.map do |point|
125
- InfluxDB::PointValue.new(point).dump
126
- end.join("\n".freeze)
124
+ data.map { |point| generate_point(point) }.join("\n".freeze)
125
+ end
126
+
127
+ def generate_point(point)
128
+ InfluxDB::PointValue.new(point).dump
129
+ rescue InfluxDB::LineProtocolError => e
130
+ (log :error, "Cannot write data: #{e.inspect}") && nil
127
131
  end
128
132
 
129
133
  def execute(query, db: nil, **options)
@@ -1,8 +1,12 @@
1
1
  module InfluxDB
2
2
  module Query
3
3
  module Series # :nodoc:
4
- def delete_series(name)
5
- execute("DROP SERIES FROM #{name}", db: config.database)
4
+ def delete_series(name, where: nil, db: config.database)
5
+ if where
6
+ execute("DROP SERIES FROM \"#{name}\" WHERE #{where}", db: db)
7
+ else
8
+ execute("DROP SERIES FROM \"#{name}\"", db: db)
9
+ end
6
10
  end
7
11
 
8
12
  def list_series
@@ -1,3 +1,3 @@
1
1
  module InfluxDB # :nodoc:
2
- VERSION = "0.7.0".freeze
2
+ VERSION = "0.8.0".freeze
3
3
  end
@@ -14,8 +14,8 @@ describe InfluxDB::Client do
14
14
  it "sends writes to client" do
15
15
  post_request = stub_request(:post, stub_url).to_return(status: 204)
16
16
 
17
- (worker.max_post_points + 100).times do
18
- subject.write_point('a', {})
17
+ (worker.max_post_points + 100).times do |i|
18
+ subject.write_point('a', values: { i: i })
19
19
  end
20
20
 
21
21
  # The timout code is fragile, and heavily dependent on system load
@@ -49,16 +49,32 @@ describe InfluxDB::Client do
49
49
  end
50
50
 
51
51
  describe "#delete_series" do
52
- let(:name) { "events" }
53
- let(:query) { "DROP SERIES FROM #{name}" }
52
+ describe "without a where clause" do
53
+ let(:name) { "events" }
54
+ let(:query) { "DROP SERIES FROM \"#{name}\"" }
54
55
 
55
- before do
56
- stub_request(:get, "http://influxdb.test:9999/query")
57
- .with(query: { u: "username", p: "password", q: query, db: "database" })
56
+ before do
57
+ stub_request(:get, "http://influxdb.test:9999/query")
58
+ .with(query: { u: "username", p: "password", q: query, db: "database" })
59
+ end
60
+
61
+ it "should GET to remove a database" do
62
+ expect(subject.delete_series(name)).to be_a(Net::HTTPOK)
63
+ end
58
64
  end
59
65
 
60
- it "should GET to remove a database" do
61
- expect(subject.delete_series(name)).to be_a(Net::HTTPOK)
66
+ describe "with a where clause" do
67
+ let(:name) { "events" }
68
+ let(:query) { "DROP SERIES FROM \"#{name}\" WHERE \"tag\"='value'" }
69
+
70
+ before do
71
+ stub_request(:get, "http://influxdb.test:9999/query")
72
+ .with(query: { u: "username", p: "password", q: query, db: "database" })
73
+ end
74
+
75
+ it "should GET to remove a database" do
76
+ expect(subject.delete_series(name, where: "\"tag\"='value'")).to be_a(Net::HTTPOK)
77
+ end
62
78
  end
63
79
  end
64
80
  end
@@ -20,6 +20,8 @@ describe InfluxDB::Config do
20
20
  specify { expect(conf).not_to be_udp }
21
21
  specify { expect(conf).not_to be_async }
22
22
  specify { expect(conf.epoch).to be_falsey }
23
+ specify { expect(conf.proxy_addr).to be_nil }
24
+ specify { expect(conf.proxy_port).to be_nil }
23
25
  end
24
26
 
25
27
  context "with no database specified" do
@@ -205,4 +207,21 @@ describe InfluxDB::Config do
205
207
  expect(conf).not_to be_async
206
208
  end
207
209
  end
210
+
211
+ context "given explicit proxy information" do
212
+ let(:args) do
213
+ [{
214
+ host: "host",
215
+ port: "port",
216
+ username: "username",
217
+ password: "password",
218
+ time_precision: "m",
219
+ proxy_addr: "my.proxy.addr",
220
+ proxy_port: 8080
221
+ }]
222
+ end
223
+
224
+ specify { expect(conf.proxy_addr).to eq("my.proxy.addr") }
225
+ specify { expect(conf.proxy_port).to eq(8080) }
226
+ end
208
227
  end
@@ -40,6 +40,14 @@ describe InfluxDB::PointValue do
40
40
  expected = series.join(",") + " " + fields.join(",")
41
41
  expect(point.dump).to eq(expected)
42
42
  end
43
+
44
+ context 'with empty values' do
45
+ let(:empty_values_data) { { series: 'test_series', values: {} } }
46
+
47
+ it 'should raise an exception' do
48
+ expect { InfluxDB::PointValue.new(empty_values_data) }.to raise_error(InfluxDB::LineProtocolError)
49
+ end
50
+ end
43
51
  end
44
52
 
45
53
  describe 'dump' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: influxdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.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: 2019-01-11 00:00:00.000000000 Z
11
+ date: 2020-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -167,8 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  requirements: []
170
- rubyforge_project:
171
- rubygems_version: 2.6.13
170
+ rubygems_version: 3.0.3
172
171
  signing_key:
173
172
  specification_version: 4
174
173
  summary: Ruby library for InfluxDB.