influxdb 0.3.2 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/CHANGELOG.md +14 -0
- data/README.md +60 -23
- data/lib/influxdb/query/continuous_query.rb +10 -2
- data/lib/influxdb/version.rb +1 -1
- data/spec/influxdb/cases/query_continuous_query_spec.rb +48 -8
- data/spec/influxdb/cases/write_points_spec.rb +2 -2
- metadata +58 -22
- checksums.yaml +0 -7
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,20 @@
|
|
2
2
|
|
3
3
|
For the full commit log, [see here](https://github.com/influxdata/influxdb-ruby/commits/master).
|
4
4
|
|
5
|
+
## Unreleased changes
|
6
|
+
|
7
|
+
- None.
|
8
|
+
|
9
|
+
## v0.3.4, released 2016-06-07
|
10
|
+
|
11
|
+
- Added resample options to `Client#create_continuous_query` (#149).
|
12
|
+
- Fixed resample options to be Ruby 1.9 compatible (#150, @SebastianCoetzee).
|
13
|
+
- Mentioned in README, that 0.3.x series is the last one to support Ruby 1.9
|
14
|
+
|
15
|
+
## v0.3.3, released 2016-06-06 (yanked)
|
16
|
+
|
17
|
+
- Added resample options to `Client#create_continuous_query` (#149).
|
18
|
+
|
5
19
|
## v0.3.2, released 2016-06-02
|
6
20
|
|
7
21
|
- Added config option to authenticate without credentials (#146, @pmenglund).
|
data/README.md
CHANGED
@@ -1,23 +1,34 @@
|
|
1
|
-
influxdb-ruby
|
2
|
-
=============
|
1
|
+
# influxdb-ruby
|
3
2
|
|
4
3
|
[![Build Status](https://travis-ci.org/influxdata/influxdb-ruby.svg?branch=master)](https://travis-ci.org/influxdata/influxdb-ruby)
|
5
4
|
|
6
|
-
The official
|
5
|
+
The official Ruby client library for [InfluxDB](https://influxdata.com/time-series-platform/influxdb/).
|
6
|
+
Maintained by [@toddboom](https://github.com/toddboom) and [@dmke](https://github.com/dmke).
|
7
7
|
|
8
|
-
|
8
|
+
## Platform support
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
> **Support for InfluxDB v0.8.x is now deprecated**. The final version of this library that
|
11
|
+
> will support the older InfluxDB interface is `v0.1.9`, which is available as a gem and
|
12
|
+
> tagged on this repository.
|
13
|
+
>
|
14
|
+
> If you're reading this message, then you should only expect support for InfluxDB v0.9.1
|
15
|
+
> and higher.
|
16
|
+
|
17
|
+
## Ruby support
|
18
|
+
|
19
|
+
This gem should work with Ruby 1.9+, but starting with v0.4, we'll likely drop Ruby 1.9 support.
|
20
|
+
|
21
|
+
## Install
|
12
22
|
|
13
23
|
```
|
14
24
|
$ [sudo] gem install influxdb
|
15
25
|
```
|
16
26
|
|
17
|
-
Or add it to your `Gemfile`,
|
27
|
+
Or add it to your `Gemfile`, and run `bundle install`.
|
18
28
|
|
19
|
-
Usage
|
20
|
-
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
### Creating a client
|
21
32
|
|
22
33
|
Connecting to a single host:
|
23
34
|
|
@@ -37,6 +48,8 @@ require 'influxdb'
|
|
37
48
|
influxdb = InfluxDB::Client.new hosts: ["influxdb1.domain.com", "influxdb2.domain.com"]
|
38
49
|
```
|
39
50
|
|
51
|
+
### Administrative tasks
|
52
|
+
|
40
53
|
Create a database:
|
41
54
|
|
42
55
|
``` ruby
|
@@ -139,6 +152,8 @@ username = 'foobar'
|
|
139
152
|
influxdb.revoke_cluster_admin_privileges(username)
|
140
153
|
```
|
141
154
|
|
155
|
+
### Continuous Queries
|
156
|
+
|
142
157
|
List continuous queries of a database:
|
143
158
|
|
144
159
|
``` ruby
|
@@ -157,6 +172,12 @@ query = 'SELECT COUNT(name) INTO clicksCount_1h FROM clicks GROUP BY time(1h)'
|
|
157
172
|
influxdb.create_continuous_query(name, database, query)
|
158
173
|
```
|
159
174
|
|
175
|
+
Additionally, you can specify the resample interval and the time range over which the CQ runs:
|
176
|
+
|
177
|
+
``` ruby
|
178
|
+
influxdb.create_continuous_query(name, database, query, resample_every: "10m", resample_for: "65m")
|
179
|
+
```
|
180
|
+
|
160
181
|
Delete a continuous query from a database:
|
161
182
|
|
162
183
|
``` ruby
|
@@ -166,6 +187,8 @@ name = 'clicks_count'
|
|
166
187
|
influxdb.delete_continuous_query(name, database)
|
167
188
|
```
|
168
189
|
|
190
|
+
### Retention Policies
|
191
|
+
|
169
192
|
List retention policies of a database:
|
170
193
|
|
171
194
|
``` ruby
|
@@ -205,6 +228,8 @@ replication = 2
|
|
205
228
|
influxdb.alter_retention_policy(name, database, duration, replication)
|
206
229
|
```
|
207
230
|
|
231
|
+
### Writing data
|
232
|
+
|
208
233
|
Write some data:
|
209
234
|
|
210
235
|
``` ruby
|
@@ -397,6 +422,8 @@ data = {
|
|
397
422
|
influxdb.write_point(name, data)
|
398
423
|
```
|
399
424
|
|
425
|
+
### Reading data
|
426
|
+
|
400
427
|
Querying:
|
401
428
|
|
402
429
|
``` ruby
|
@@ -460,16 +487,15 @@ end
|
|
460
487
|
# time_series_1 [ {"region"=>"us"} ] => {"columns"=>["time", "count", "value"], "values"=>[["2015-07-09T09:02:54Z", 55, 0.4343]]}
|
461
488
|
```
|
462
489
|
|
463
|
-
By default, InfluxDB::Client will keep trying to connect to the database when it gets connection denied,
|
464
|
-
(or disable retries altogether), you should pass the `:retry`
|
465
|
-
value.
|
466
|
-
infinite times, disable retries or retry a finite number of times,
|
467
|
-
respectively. `0` is equivalent to `false`
|
490
|
+
By default, InfluxDB::Client will keep trying to connect to the database when it gets connection denied,
|
491
|
+
if you want to retry a finite number of times (or disable retries altogether), you should pass the `:retry`
|
492
|
+
value.
|
468
493
|
|
469
|
-
|
470
|
-
|
471
|
-
=> true
|
494
|
+
`:retry` can be either `true`, `false` or an `Integer` to retry infinite times, disable retries or retry
|
495
|
+
a finite number of times, respectively. `0` is equivalent to `false`
|
472
496
|
|
497
|
+
```
|
498
|
+
$ irb -r influxdb
|
473
499
|
> influxdb = InfluxDB::Client.new 'database', :retry => 4
|
474
500
|
=> #<InfluxDB::Client:0x00000002bb5ce0 @database="database", @hosts=["localhost"],
|
475
501
|
@port=8086, @username="root", @password="root", @use_ssl=false,
|
@@ -490,17 +516,28 @@ E, [2014-06-02T11:04:13.510853 #22825] ERROR -- : [InfluxDB] Failed to
|
|
490
516
|
contact host localhost: #<SocketError: getaddrinfo: Name or service not known> -
|
491
517
|
retrying in 0.08s.
|
492
518
|
SocketError: Tried 4 times to reconnect but failed.
|
493
|
-
|
494
519
|
```
|
495
|
-
If you pass `:retry => -1` it will keep trying forever
|
496
|
-
until it gets the connection.
|
497
520
|
|
498
|
-
|
499
|
-
|
521
|
+
If you pass `:retry => -1` it will keep trying forever until it gets the connection.
|
522
|
+
|
523
|
+
## Testing
|
500
524
|
|
501
525
|
```
|
502
526
|
git clone git@github.com:influxdata/influxdb-ruby.git
|
503
527
|
cd influxdb-ruby
|
504
528
|
bundle
|
505
|
-
bundle exec rake
|
529
|
+
bundle exec rake spec
|
530
|
+
bundle exec rake rubocop
|
506
531
|
```
|
532
|
+
|
533
|
+
## Contributing
|
534
|
+
|
535
|
+
- Fork this repository on GitHub.
|
536
|
+
- Make your changes.
|
537
|
+
- Add tests.
|
538
|
+
- Add an entry in the `CHANGELOG.md` in the "unreleased" section on top.
|
539
|
+
- Run the tests: `bundle exec rake`.
|
540
|
+
- Run Rubocop: `bundle exec rubocop`.
|
541
|
+
- Send a pull request.
|
542
|
+
- Please rebase against the master branch.
|
543
|
+
- If your changes look good, we'll merge them.
|
@@ -10,8 +10,16 @@ module InfluxDB
|
|
10
10
|
.map { |v| { 'name' => v.first, 'query' => v.last } }
|
11
11
|
end
|
12
12
|
|
13
|
-
def create_continuous_query(name, database, query)
|
14
|
-
clause = ["CREATE CONTINUOUS QUERY
|
13
|
+
def create_continuous_query(name, database, query, options = {})
|
14
|
+
clause = ["CREATE CONTINUOUS QUERY", name, "ON", database]
|
15
|
+
|
16
|
+
if options[:resample_every] || options[:resample_for]
|
17
|
+
clause << "RESAMPLE"
|
18
|
+
clause << "EVERY #{options[:resample_every]}" if options[:resample_every]
|
19
|
+
clause << "FOR #{options[:resample_for]}" if options[:resample_for]
|
20
|
+
end
|
21
|
+
|
22
|
+
clause = clause.join(" ") << " BEGIN\n" << query << "\nEND"
|
15
23
|
execute(clause)
|
16
24
|
end
|
17
25
|
|
data/lib/influxdb/version.rb
CHANGED
@@ -45,13 +45,24 @@ describe InfluxDB::Client do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
describe "#create_continuous_query" do
|
48
|
-
let(:name)
|
49
|
-
let(:database)
|
50
|
-
let(:query)
|
51
|
-
|
52
|
-
|
48
|
+
let(:name) { "event_counts_per_10m_by_type" }
|
49
|
+
let(:database) { "testdb" }
|
50
|
+
let(:query) { "SELECT COUNT(type) INTO typeCount_10m_byType FROM events GROUP BY time(10m), type" }
|
51
|
+
let(:every_interval) { nil }
|
52
|
+
let(:for_interval) { nil }
|
53
|
+
|
53
54
|
let(:clause) do
|
54
|
-
|
55
|
+
c = "CREATE CONTINUOUS QUERY #{name} ON #{database}"
|
56
|
+
|
57
|
+
if every_interval && for_interval
|
58
|
+
c << " RESAMPLE EVERY #{every_interval} FOR #{for_interval}"
|
59
|
+
elsif every_interval
|
60
|
+
c << " RESAMPLE EVERY #{every_interval}"
|
61
|
+
elsif for_interval
|
62
|
+
c << " RESAMPLE FOR #{for_interval}"
|
63
|
+
end
|
64
|
+
|
65
|
+
c << " BEGIN\n#{query}\nEND"
|
55
66
|
end
|
56
67
|
|
57
68
|
before do
|
@@ -60,8 +71,37 @@ describe InfluxDB::Client do
|
|
60
71
|
)
|
61
72
|
end
|
62
73
|
|
63
|
-
|
64
|
-
|
74
|
+
context "without resampling" do
|
75
|
+
it "should GET to create a new continuous query" do
|
76
|
+
expect(subject.create_continuous_query(name, database, query)).to be_a(Net::HTTPOK)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "with resampling" do
|
81
|
+
context "EVERY <interval>" do
|
82
|
+
let(:every_interval) { "10m" }
|
83
|
+
|
84
|
+
it "should GET to create a new continuous query" do
|
85
|
+
expect(subject.create_continuous_query(name, database, query, resample_every: every_interval)).to be_a(Net::HTTPOK)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "FOR <interval>" do
|
90
|
+
let(:for_interval) { "7d" }
|
91
|
+
|
92
|
+
it "should GET to create a new continuous query" do
|
93
|
+
expect(subject.create_continuous_query(name, database, query, resample_for: for_interval)).to be_a(Net::HTTPOK)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context "EVERY <interval> FOR <interval>" do
|
98
|
+
let(:every_interval) { "5m" }
|
99
|
+
let(:for_interval) { "3w" }
|
100
|
+
|
101
|
+
it "should GET to create a new continuous query" do
|
102
|
+
expect(subject.create_continuous_query(name, database, query, resample_for: for_interval, resample_every: every_interval)).to be_a(Net::HTTPOK)
|
103
|
+
end
|
104
|
+
end
|
65
105
|
end
|
66
106
|
end
|
67
107
|
|
@@ -119,13 +119,13 @@ describe InfluxDB::Client do
|
|
119
119
|
|
120
120
|
before do
|
121
121
|
stub_request(:post, "http://influxdb.test:9999/write").with(
|
122
|
-
query: { u: "username", p: "password", precision: '
|
122
|
+
query: { u: "username", p: "password", precision: 'ms', db: database },
|
123
123
|
headers: { "Content-Type" => "application/octet-stream" },
|
124
124
|
body: body
|
125
125
|
).to_return(status: 204)
|
126
126
|
end
|
127
127
|
it "should POST multiple points" do
|
128
|
-
expect(subject.write_points(data, '
|
128
|
+
expect(subject.write_points(data, 'ms')).to be_a(Net::HTTPNoContent)
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
metadata
CHANGED
@@ -1,97 +1,126 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: influxdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Todd Persen
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
12
|
+
date: 2016-06-07 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: json
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '0'
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: cause
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
25
44
|
- !ruby/object:Gem::Version
|
26
45
|
version: '0'
|
27
46
|
- !ruby/object:Gem::Dependency
|
28
47
|
name: rake
|
29
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
30
50
|
requirements:
|
31
|
-
- -
|
51
|
+
- - ! '>='
|
32
52
|
- !ruby/object:Gem::Version
|
33
53
|
version: '0'
|
34
54
|
type: :development
|
35
55
|
prerelease: false
|
36
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
37
58
|
requirements:
|
38
|
-
- -
|
59
|
+
- - ! '>='
|
39
60
|
- !ruby/object:Gem::Version
|
40
61
|
version: '0'
|
41
62
|
- !ruby/object:Gem::Dependency
|
42
63
|
name: bundler
|
43
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
44
66
|
requirements:
|
45
|
-
- -
|
67
|
+
- - ~>
|
46
68
|
- !ruby/object:Gem::Version
|
47
69
|
version: '1.3'
|
48
70
|
type: :development
|
49
71
|
prerelease: false
|
50
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
51
74
|
requirements:
|
52
|
-
- -
|
75
|
+
- - ~>
|
53
76
|
- !ruby/object:Gem::Version
|
54
77
|
version: '1.3'
|
55
78
|
- !ruby/object:Gem::Dependency
|
56
79
|
name: rspec
|
57
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
58
82
|
requirements:
|
59
|
-
- -
|
83
|
+
- - ~>
|
60
84
|
- !ruby/object:Gem::Version
|
61
85
|
version: 3.4.0
|
62
86
|
type: :development
|
63
87
|
prerelease: false
|
64
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
65
90
|
requirements:
|
66
|
-
- -
|
91
|
+
- - ~>
|
67
92
|
- !ruby/object:Gem::Version
|
68
93
|
version: 3.4.0
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: webmock
|
71
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
72
98
|
requirements:
|
73
|
-
- -
|
99
|
+
- - ~>
|
74
100
|
- !ruby/object:Gem::Version
|
75
101
|
version: 1.24.2
|
76
102
|
type: :development
|
77
103
|
prerelease: false
|
78
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
79
106
|
requirements:
|
80
|
-
- -
|
107
|
+
- - ~>
|
81
108
|
- !ruby/object:Gem::Version
|
82
109
|
version: 1.24.2
|
83
110
|
- !ruby/object:Gem::Dependency
|
84
111
|
name: rubocop
|
85
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
86
114
|
requirements:
|
87
|
-
- -
|
115
|
+
- - ~>
|
88
116
|
- !ruby/object:Gem::Version
|
89
117
|
version: 0.39.0
|
90
118
|
type: :development
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
93
122
|
requirements:
|
94
|
-
- -
|
123
|
+
- - ~>
|
95
124
|
- !ruby/object:Gem::Version
|
96
125
|
version: 0.39.0
|
97
126
|
description: This is the official Ruby library for InfluxDB.
|
@@ -101,9 +130,9 @@ executables: []
|
|
101
130
|
extensions: []
|
102
131
|
extra_rdoc_files: []
|
103
132
|
files:
|
104
|
-
-
|
105
|
-
-
|
106
|
-
-
|
133
|
+
- .gitignore
|
134
|
+
- .rubocop.yml
|
135
|
+
- .travis.yml
|
107
136
|
- CHANGELOG.md
|
108
137
|
- Gemfile
|
109
138
|
- LICENSE.txt
|
@@ -151,26 +180,33 @@ files:
|
|
151
180
|
homepage: http://influxdb.org
|
152
181
|
licenses:
|
153
182
|
- MIT
|
154
|
-
metadata: {}
|
155
183
|
post_install_message:
|
156
184
|
rdoc_options: []
|
157
185
|
require_paths:
|
158
186
|
- lib
|
159
187
|
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
none: false
|
160
189
|
requirements:
|
161
|
-
- -
|
190
|
+
- - ! '>='
|
162
191
|
- !ruby/object:Gem::Version
|
163
192
|
version: '0'
|
193
|
+
segments:
|
194
|
+
- 0
|
195
|
+
hash: 4505690428131411783
|
164
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
165
198
|
requirements:
|
166
|
-
- -
|
199
|
+
- - ! '>='
|
167
200
|
- !ruby/object:Gem::Version
|
168
201
|
version: '0'
|
202
|
+
segments:
|
203
|
+
- 0
|
204
|
+
hash: 4505690428131411783
|
169
205
|
requirements: []
|
170
206
|
rubyforge_project:
|
171
|
-
rubygems_version:
|
207
|
+
rubygems_version: 1.8.25
|
172
208
|
signing_key:
|
173
|
-
specification_version:
|
209
|
+
specification_version: 3
|
174
210
|
summary: Ruby library for InfluxDB.
|
175
211
|
test_files:
|
176
212
|
- spec/influxdb/cases/async_client_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 9175c1e5dc3934144b01c90acf625770219d052b
|
4
|
-
data.tar.gz: e06c8e8f3fa04429e58c97d4f4b2f30c0dcbc4da
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 0cd3923bcbf70d4aef40062fbec6b8e924403a3b83631861bb0dc71e7eaefdd53ffaa7d38935a289045d20e337b0531a48173e558079da5cadbcc9a52ea088be
|
7
|
-
data.tar.gz: 9f2cca0b974e8fdb3342356645dbb75963cf03c23c672ed439566160ebbca8fbb76810fa46ceddfc943e0e0b65df62120afa9f12cbb2da9dcb898bba8819bfd1
|