Skip to content

Commit a9fbd2d

Browse files
authored
feat: client can be used as a resource (#127)
1 parent 7297785 commit a9fbd2d

10 files changed

+414
-331
lines changed

.rubocop-cops.yml

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ Metrics/LineLength:
2828
Max: 120
2929
Metrics/MethodLength:
3030
Max: 50
31+
Metrics/BlockLength:
32+
Max: 50
3133
Metrics/ClassLength:
3234
Max: 300
3335
Metrics/AbcSize:

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
## 2.9.0 [unreleased]
22

3+
:warning: The client can be used as a resource:
4+
5+
InfluxDB2::Client.use('https://localhost:8086', 'my-token') do |client|
6+
client.do_something
7+
end
8+
39
### Features
410
1. [#126](https://github.com/influxdata/influxdb-client-ruby/pull/126): Add `Task` API
11+
1. [#127](https://github.com/influxdata/influxdb-client-ruby/pull/127): Client can be used as a resource
512

613
### Bug Fixes
714
1. [#123](https://github.com/influxdata/influxdb-client-ruby/pull/123): Duplicate columns warning shows in improper situations

README.md

+174-146
Large diffs are not rendered by default.

examples/create_new_bucket.rb

+46-45
Original file line numberDiff line numberDiff line change
@@ -13,48 +13,49 @@
1313
org = 'my-org'
1414
token = 'my-token'
1515

16-
client = InfluxDB2::Client.new(url,
17-
token,
18-
bucket: bucket,
19-
org: org,
20-
use_ssl: false,
21-
precision: InfluxDB2::WritePrecision::NANOSECOND)
22-
23-
api = InfluxDB2::API::Client.new(client)
24-
25-
# Find my organization
26-
organization = api.create_organizations_api
27-
.get_orgs
28-
.orgs
29-
.select { |it| it.name == 'my-org' }
30-
.first
31-
32-
#
33-
# Create new Bucket
34-
#
35-
retention_rule = InfluxDB2::API::RetentionRule.new(type: 'expire', every_seconds: 3600)
36-
bucket_name = 'new-bucket-name'
37-
request = InfluxDB2::API::PostBucketRequest.new(org_id: organization.id,
38-
name: bucket_name,
39-
retention_rules: [retention_rule])
40-
bucket = api.create_buckets_api
41-
.post_buckets(request)
42-
43-
#
44-
# Create Permission to read/write from Bucket
45-
#
46-
resource = InfluxDB2::API::Resource.new(type: 'buckets',
47-
id: bucket.id,
48-
org_id: organization.id)
49-
authorization = InfluxDB2::API::Authorization.new(description: "Authorization to read/write bucket: #{bucket.name}",
50-
org_id: organization.id,
51-
permissions: [
52-
InfluxDB2::API::Permission.new(action: 'read', resource: resource),
53-
InfluxDB2::API::Permission.new(action: 'write', resource: resource)
54-
])
55-
result = api.create_authorizations_api
56-
.post_authorizations(authorization)
57-
58-
print("The token: '#{result.token}' is authorized to read/write from/to bucket: '#{bucket.name}'.")
59-
60-
client.close!
16+
InfluxDB2::Client.use(url,
17+
token,
18+
bucket: bucket,
19+
org: org,
20+
use_ssl: false,
21+
precision: InfluxDB2::WritePrecision::NANOSECOND) do |client|
22+
23+
api = InfluxDB2::API::Client.new(client)
24+
25+
# Find my organization
26+
organization = api.create_organizations_api
27+
.get_orgs
28+
.orgs
29+
.select { |it| it.name == 'my-org' }
30+
.first
31+
32+
#
33+
# Create new Bucket
34+
#
35+
retention_rule = InfluxDB2::API::RetentionRule.new(type: 'expire', every_seconds: 3600)
36+
bucket_name = 'new-bucket-name'
37+
request = InfluxDB2::API::PostBucketRequest.new(org_id: organization.id,
38+
name: bucket_name,
39+
retention_rules: [retention_rule])
40+
bucket = api.create_buckets_api
41+
.post_buckets(request)
42+
43+
#
44+
# Create Permission to read/write from Bucket
45+
#
46+
resource = InfluxDB2::API::Resource.new(type: 'buckets',
47+
id: bucket.id,
48+
org_id: organization.id)
49+
authorization = InfluxDB2::API::Authorization.new(description: "Authorization to read/write bucket: #{bucket.name}",
50+
org_id: organization.id,
51+
permissions: [
52+
InfluxDB2::API::Permission.new(action: 'read',
53+
resource: resource),
54+
InfluxDB2::API::Permission.new(action: 'write',
55+
resource: resource)
56+
])
57+
result = api.create_authorizations_api
58+
.post_authorizations(authorization)
59+
60+
print("The token: '#{result.token}' is authorized to read/write from/to bucket: '#{bucket.name}'.")
61+
end

examples/influxdb_18_example.rb

+23-24
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,26 @@
99

1010
bucket = "#{database}/#{retention_policy}"
1111

12-
client = InfluxDB2::Client.new('http://localhost:8086',
13-
"#{username}:#{password}",
14-
bucket: bucket,
15-
org: '-',
16-
use_ssl: false,
17-
precision: InfluxDB2::WritePrecision::NANOSECOND)
18-
19-
puts '*** Write Points ***'
20-
21-
write_api = client.create_write_api
22-
point = InfluxDB2::Point.new(name: 'mem')
23-
.add_tag('host', 'host1')
24-
.add_field('used_percent', 21.43234543)
25-
puts point.to_line_protocol
26-
write_api.write(data: point)
27-
28-
puts '*** Query Points ***'
29-
30-
query_api = client.create_query_api
31-
query = "from(bucket: \"#{bucket}\") |> range(start: -1h)"
32-
result = query_api.query(query: query)
33-
result[0].records.each { |record| puts "#{record.time} #{record.measurement}: #{record.field} #{record.value}" }
34-
35-
client.close!
12+
InfluxDB2::Client.use('http://localhost:8086',
13+
"#{username}:#{password}",
14+
bucket: bucket,
15+
org: '-',
16+
use_ssl: false,
17+
precision: InfluxDB2::WritePrecision::NANOSECOND) do |client|
18+
19+
puts '*** Write Points ***'
20+
21+
write_api = client.create_write_api
22+
point = InfluxDB2::Point.new(name: 'mem')
23+
.add_tag('host', 'host1')
24+
.add_field('used_percent', 21.43234543)
25+
puts point.to_line_protocol
26+
write_api.write(data: point)
27+
28+
puts '*** Query Points ***'
29+
30+
query_api = client.create_query_api
31+
query = "from(bucket: \"#{bucket}\") |> range(start: -1h)"
32+
result = query_api.query(query: query)
33+
result[0].records.each { |record| puts "#{record.time} #{record.measurement}: #{record.field} #{record.value}" }
34+
end

examples/invokable_scripts.rb

+70-67
Original file line numberDiff line numberDiff line change
@@ -8,83 +8,86 @@
88
bucket = '...'
99
org = '...'
1010

11-
client = InfluxDB2::Client.new(url, token, bucket: bucket, org: org, precision: InfluxDB2::WritePrecision::NANOSECOND)
11+
InfluxDB2::Client.use(url,
12+
token,
13+
bucket: bucket,
14+
org: org,
15+
precision: InfluxDB2::WritePrecision::NANOSECOND) do |client|
1216

13-
unique_id = Time.now.utc.to_i.to_s
14-
#
15-
# Prepare data
16-
#
17-
point1 = InfluxDB2::Point.new(name: 'my_measurement')
18-
.add_tag('location', 'Prague')
19-
.add_field('temperature', 25.3)
20-
point2 = InfluxDB2::Point.new(name: 'my_measurement')
21-
.add_tag('location', 'New York')
22-
.add_field('temperature', 24.3)
23-
client.create_write_api.write(data: [point1, point2])
17+
unique_id = Time.now.utc.to_i.to_s
18+
#
19+
# Prepare data
20+
#
21+
point1 = InfluxDB2::Point.new(name: 'my_measurement')
22+
.add_tag('location', 'Prague')
23+
.add_field('temperature', 25.3)
24+
point2 = InfluxDB2::Point.new(name: 'my_measurement')
25+
.add_tag('location', 'New York')
26+
.add_field('temperature', 24.3)
27+
client.create_write_api.write(data: [point1, point2])
2428

25-
scripts_api = client.create_invokable_scripts_api
29+
scripts_api = client.create_invokable_scripts_api
2630

27-
#
28-
# Create Invokable Script
29-
#
30-
puts "------- Create -------\n"
31-
script_query = 'from(bucket: params.bucket_name) |> range(start: -30d) |> limit(n:2)'
32-
create_request = InfluxDB2::ScriptCreateRequest.new(name: "my_script_#{unique_id}",
33-
description: 'my first try',
34-
language: InfluxDB2::ScriptLanguage::FLUX,
35-
script: script_query)
31+
#
32+
# Create Invokable Script
33+
#
34+
puts "------- Create -------\n"
35+
script_query = 'from(bucket: params.bucket_name) |> range(start: -30d) |> limit(n:2)'
36+
create_request = InfluxDB2::ScriptCreateRequest.new(name: "my_script_#{unique_id}",
37+
description: 'my first try',
38+
language: InfluxDB2::ScriptLanguage::FLUX,
39+
script: script_query)
3640

37-
created_script = scripts_api.create_script(create_request)
38-
puts created_script.inspect
41+
created_script = scripts_api.create_script(create_request)
42+
puts created_script.inspect
3943

40-
#
41-
# Update Invokable Script
42-
#
43-
puts "------- Update -------\n"
44-
update_request = InfluxDB2::ScriptUpdateRequest.new(description: 'my updated description')
45-
created_script = scripts_api.update_script(created_script.id, update_request)
46-
puts created_script.inspect
44+
#
45+
# Update Invokable Script
46+
#
47+
puts "------- Update -------\n"
48+
update_request = InfluxDB2::ScriptUpdateRequest.new(description: 'my updated description')
49+
created_script = scripts_api.update_script(created_script.id, update_request)
50+
puts created_script.inspect
4751

48-
#
49-
# Invoke a script
50-
#
52+
#
53+
# Invoke a script
54+
#
5155

52-
# FluxTables
53-
puts "\n------- Invoke to FluxTables -------\n"
54-
tables = scripts_api.invoke_script(created_script.id, params: { 'bucket_name' => bucket })
55-
tables.each do |_, table|
56-
table.records.each do |record|
56+
# FluxTables
57+
puts "\n------- Invoke to FluxTables -------\n"
58+
tables = scripts_api.invoke_script(created_script.id, params: { 'bucket_name' => bucket })
59+
tables.each do |_, table|
60+
table.records.each do |record|
61+
puts "#{record.time} #{record.values['location']}: #{record.field} #{record.value}"
62+
end
63+
end
64+
65+
# Stream of FluxRecords
66+
puts "\n------- Invoke to Stream of FluxRecords -------\n"
67+
records = scripts_api.invoke_script_stream(created_script.id, params: { 'bucket_name' => bucket })
68+
records.each do |record|
5769
puts "#{record.time} #{record.values['location']}: #{record.field} #{record.value}"
5870
end
59-
end
6071

61-
# Stream of FluxRecords
62-
puts "\n------- Invoke to Stream of FluxRecords -------\n"
63-
records = scripts_api.invoke_script_stream(created_script.id, params: { 'bucket_name' => bucket })
64-
records.each do |record|
65-
puts "#{record.time} #{record.values['location']}: #{record.field} #{record.value}"
66-
end
72+
# RAW
73+
puts "\n------- Invoke to Raw-------\n"
74+
raw = scripts_api.invoke_script_raw(created_script.id, params: { 'bucket_name' => bucket })
75+
puts "RAW output:\n #{raw}"
6776

68-
# RAW
69-
puts "\n------- Invoke to Raw-------\n"
70-
raw = scripts_api.invoke_script_raw(created_script.id, params: { 'bucket_name' => bucket })
71-
puts "RAW output:\n #{raw}"
77+
#
78+
# List scripts
79+
#
80+
puts "\n------- List -------\n"
81+
scripts = scripts_api.find_scripts
82+
scripts.each do |script|
83+
puts " ---\n ID: #{script.id}\n Name: #{script.name}\n Description: #{script.description}"
84+
end
85+
puts '---'
7286

73-
#
74-
# List scripts
75-
#
76-
puts "\n------- List -------\n"
77-
scripts = scripts_api.find_scripts
78-
scripts.each do |script|
79-
puts " ---\n ID: #{script.id}\n Name: #{script.name}\n Description: #{script.description}"
87+
#
88+
# Delete previously created Script
89+
#
90+
puts "------- Delete -------\n"
91+
scripts_api.delete_script(created_script.id)
92+
puts " Successfully deleted script: '#{created_script.name}'"
8093
end
81-
puts '---'
82-
83-
#
84-
# Delete previously created Script
85-
#
86-
puts "------- Delete -------\n"
87-
scripts_api.delete_script(created_script.id)
88-
puts " Successfully deleted script: '#{created_script.name}'"
89-
90-
client.close!

examples/parameterized_query.rb

+23-24
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,26 @@
88
bucket = 'my-bucket'
99
org = 'my-org'
1010

11-
client = InfluxDB2::Client.new(url,
12-
token,
13-
bucket: bucket,
14-
org: org,
15-
precision: InfluxDB2::WritePrecision::NANOSECOND)
16-
17-
puts '*** Write Points ***'
18-
19-
write_api = client.create_write_api
20-
point = InfluxDB2::Point.new(name: 'weather')
21-
.add_tag('location', 'Praque')
22-
.add_field('temperature', 21)
23-
puts point.to_line_protocol
24-
write_api.write(data: point)
25-
26-
puts '*** Query Points ***'
27-
28-
query_api = client.create_query_api
29-
query = 'from(bucket: params.bucketParam) |> range(start: duration(v: params.startParam))'
30-
params = { 'bucketParam' => 'my-bucket', 'startParam' => '-1h' }
31-
result = query_api.query(query: query, params: params)
32-
result[0].records.each { |record| puts "#{record.time} #{record.measurement}: #{record.field} #{record.value}" }
33-
34-
client.close!
11+
InfluxDB2::Client.new(url,
12+
token,
13+
bucket: bucket,
14+
org: org,
15+
precision: InfluxDB2::WritePrecision::NANOSECOND) do |client|
16+
17+
puts '*** Write Points ***'
18+
19+
write_api = client.create_write_api
20+
point = InfluxDB2::Point.new(name: 'weather')
21+
.add_tag('location', 'Praque')
22+
.add_field('temperature', 21)
23+
puts point.to_line_protocol
24+
write_api.write(data: point)
25+
26+
puts '*** Query Points ***'
27+
28+
query_api = client.create_query_api
29+
query = 'from(bucket: params.bucketParam) |> range(start: duration(v: params.startParam))'
30+
params = { 'bucketParam' => 'my-bucket', 'startParam' => '-1h' }
31+
result = query_api.query(query: query, params: params)
32+
result[0].records.each { |record| puts "#{record.time} #{record.measurement}: #{record.field} #{record.value}" }
33+
end

0 commit comments

Comments
 (0)