influxdb-client 2.4.0.pre.4589 → 2.4.0.pre.4800

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 16439c418c83e67bf2254cda93ac91ad2a1e9cf60277512748387357a831f856
4
- data.tar.gz: d98331efd88c550122d8b28ead5727e29464f5ba3408374f18887f308cfa62a9
3
+ metadata.gz: 9ad9c375ffacdb87d56463c9ce11d0978e02ce1f3ed924842e352bd3654c25ff
4
+ data.tar.gz: 487f324c230d8c1b46b400a547cdb68af07ad49b99d5820fce48c25967392289
5
5
  SHA512:
6
- metadata.gz: 772d3f5bdd1e7e8ff4ecb5a6af5e2130988bc2aea9cfd0cf614ba7d5a03f64c0bce63ec87530aa4b3e8a58cf4c820a1c1492c18fdd9f477978a18b4d0279b8d7
7
- data.tar.gz: c0af0ba1cadce8f0320c663d9269c491bec129aadf361154b00a849bf5525149e2c473ae7078f44bd4c6e763899c5f4e6285e58680f5bafb3f07b2e7d82f875f
6
+ metadata.gz: 0a42ef9ae220f1f12e0d9301b27ee8c8878693d291dc082a04f3f9fd200a0c62ecb10fe300b0c756df3f82d755672ef8c3814c82d9eafae0b5620d31cc30a589
7
+ data.tar.gz: e8ec434a83ce0bff4c7dc8feb30a673f3a53060a8bd76731aa3dd6251cb693977280e223b67e5796621e969a3fd64997dcf74a925f526bcd9aee4135e8f2ae0a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  ## 2.4.0 [unreleased]
2
2
 
3
+ ### Features
4
+ 1. [#101](https://github.com/influxdata/influxdb-client-ruby/pull/101): Add `InvocableScriptsApi` to create, update, list, delete and invoke scripts by seamless way
5
+
3
6
  ## 2.3.0 [2022-03-18]
4
7
 
5
8
  ### Bug Fixes
data/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  [![GitHub pull requests](https://img.shields.io/github/issues-pr-raw/influxdata/influxdb-client-ruby.svg)](https://github.com/influxdata/influxdb-client-ruby/pulls)
9
9
  [![Slack Status](https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&style=social)](https://www.influxdata.com/slack)
10
10
 
11
- This repository contains the reference Ruby client for the InfluxDB 2.0.
11
+ This repository contains the reference Ruby client for the InfluxDB 2.x.
12
12
 
13
13
  #### Note: Use this client library with InfluxDB 2.x and InfluxDB 1.8+ ([see details](#influxdb-18-api-compatibility)). For connecting to InfluxDB 1.7 or earlier instances, use the [influxdb-ruby](https://github.com/influxdata/influxdb-ruby) client library.
14
14
 
@@ -31,14 +31,14 @@ This repository contains the reference Ruby client for the InfluxDB 2.0.
31
31
 
32
32
  This section contains links to the client library documentation.
33
33
 
34
- * [Product documentation](https://docs.influxdata.com/influxdb/v2.0/api-guide/client-libraries/), [Getting Started](#installation)
34
+ * [Product documentation](https://docs.influxdata.com/influxdb/latest/api-guide/client-libraries/), [Getting Started](#installation)
35
35
  * [Examples](examples)
36
36
  * [API Reference](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2.html)
37
37
  * [Changelog](CHANGELOG.md)
38
38
 
39
39
  ## Features
40
40
 
41
- InfluxDB 2.0 client consists of two packages
41
+ InfluxDB 2.x client consists of two packages
42
42
 
43
43
  - `influxdb-client`
44
44
  - Querying data using the Flux language
@@ -46,7 +46,7 @@ InfluxDB 2.0 client consists of two packages
46
46
  - batched in chunks on background
47
47
  - automatic retries on write failures
48
48
  - `influxdb-client-apis`
49
- - provides all other InfluxDB 2.0 APIs for managing
49
+ - provides all other InfluxDB 2.x APIs for managing
50
50
  - buckets
51
51
  - labels
52
52
  - authorizations
@@ -180,7 +180,7 @@ result[0].records.each { |record| puts "#{record.time} #{record.measurement}: #{
180
180
  ```
181
181
 
182
182
  ### Writing data
183
- The [WriteApi](https://github.com/influxdata/influxdb-client-ruby/blob/master/lib/influxdb2/client/write_api.rb) supports synchronous and batching writes into InfluxDB 2.0. In default api uses synchronous write. To enable batching you can use WriteOption.
183
+ The [WriteApi](https://github.com/influxdata/influxdb-client-ruby/blob/master/lib/influxdb2/client/write_api.rb) supports synchronous and batching writes into InfluxDB 2.x. In default api uses synchronous write. To enable batching you can use WriteOption.
184
184
 
185
185
  ```ruby
186
186
  client = InfluxDB2::Client.new('https://localhost:8086', 'my-token',
@@ -324,7 +324,7 @@ write_api.write(data: InfluxDB2::Point.new(name: 'h2o')
324
324
 
325
325
  ### Delete data
326
326
 
327
- The [DeleteApi](https://github.com/influxdata/influxdb-client-ruby/blob/master/lib/influxdb2/client/delete_api.rb) supports deletes [points](https://v2.docs.influxdata.com/v2.0/reference/glossary/#point) from an InfluxDB bucket.
327
+ The [DeleteApi](https://github.com/influxdata/influxdb-client-ruby/blob/master/lib/influxdb2/client/delete_api.rb) supports deletes [points](https://docs.influxdata.com/influxdb/latest/reference/key-concepts/data-elements/#point) from an InfluxDB bucket.
328
328
 
329
329
  ```ruby
330
330
  client = InfluxDB2::Client.new('http://localhost:8086', 'my-token',
@@ -347,16 +347,16 @@ The time range could be specified as:
347
347
 
348
348
  The client supports following management API:
349
349
 
350
- | | API docs |
351
- | --- | --- |
352
- | [**AuthorizationsApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/AuthorizationsApi.html) | https://docs.influxdata.com/influxdb/v2.0/api/#tag/Authorizations |
353
- | [**BucketsApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/BucketsApi.html) | https://docs.influxdata.com/influxdb/v2.0/api/#tag/Buckets |
354
- | [**LabelsApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/LabelsApi.html) | https://docs.influxdata.com/influxdb/v2.0/api/#tag/Labels |
355
- | [**OrganizationsApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/OrganizationsApi.html) | https://docs.influxdata.com/influxdb/v2.0/api/#tag/Organizations |
356
- | [**UsersApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/UsersApi.html) | https://docs.influxdata.com/influxdb/v2.0/api/#tag/Users |
350
+ | | API docs |
351
+ | --- |---------------------------------------------------------------------|
352
+ | [**AuthorizationsApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/AuthorizationsApi.html) | https://docs.influxdata.com/influxdb/latest/api/#tag/Authorizations |
353
+ | [**BucketsApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/BucketsApi.html) | https://docs.influxdata.com/influxdb/latest/api/#tag/Buckets |
354
+ | [**LabelsApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/LabelsApi.html) | https://docs.influxdata.com/influxdb/latest/api/#tag/Labels |
355
+ | [**OrganizationsApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/OrganizationsApi.html) | https://docs.influxdata.com/influxdb/latest/api/#tag/Organizations |
356
+ | [**UsersApi**](https://influxdata.github.io/influxdb-client-ruby/InfluxDB2/API/UsersApi.html) | https://docs.influxdata.com/influxdb/latest/api/#tag/Users |
357
357
 
358
358
 
359
- The following example demonstrates how to use a InfluxDB 2.0 Management API to create new bucket. For further information see docs and [examples](/examples).
359
+ The following example demonstrates how to use a InfluxDB 2.x Management API to create new bucket. For further information see docs and [examples](/examples).
360
360
 
361
361
  ```ruby
362
362
  #
@@ -427,7 +427,7 @@ client.close!
427
427
 
428
428
  ### Check the server status
429
429
 
430
- Server availability can be checked using the `client.ping` method. That is equivalent of the [influx ping](https://v2.docs.influxdata.com/v2.0/reference/cli/influx/ping/).
430
+ Server availability can be checked using the `client.ping` method. That is equivalent of the [influx ping](https://docs.influxdata.com/influxdb/latest/reference/cli/influx/ping/).
431
431
 
432
432
  ### Proxy configuration
433
433
 
@@ -445,15 +445,15 @@ To overcome this limitation you have to set the client property `redirect_forwar
445
445
 
446
446
  ### InfluxDB 1.8 API compatibility
447
447
 
448
- [InfluxDB 1.8.0 introduced forward compatibility APIs](https://docs.influxdata.com/influxdb/v1.8/tools/api/#influxdb-2-0-api-compatibility-endpoints) for InfluxDB 2.0. This allow you to easily move from InfluxDB 1.x to InfluxDB 2.0 Cloud or open source.
448
+ [InfluxDB 1.8.0 introduced forward compatibility APIs](https://docs.influxdata.com/influxdb/v1.8/tools/api/#influxdb-2-0-api-compatibility-endpoints) for InfluxDB 2.x. This allow you to easily move from InfluxDB 1.x to InfluxDB 2.x Cloud or open source.
449
449
 
450
450
  The following forward compatible APIs are available:
451
451
 
452
- | API | Endpoint | Description |
453
- |:----------|:----------|:----------|
454
- | [query_api.rb](lib/influxdb2/client/query_api.rb) | [/api/v2/query](https://docs.influxdata.com/influxdb/latest/tools/api/#api-v2-query-http-endpoint) | Query data in InfluxDB 1.8.0+ using the InfluxDB 2.0 API and [Flux](https://docs.influxdata.com/flux/latest/) _(endpoint should be enabled by [`flux-enabled` option](https://docs.influxdata.com/influxdb/latest/administration/config/#flux-enabled-false))_ |
455
- | [write_api.rb](lib/influxdb2/client/write_api.rb) | [/api/v2/write](https://docs.influxdata.com/influxdb/latest/tools/api/#api-v2-write-http-endpoint) | Write data to InfluxDB 1.8.0+ using the InfluxDB 2.0 API |
456
- | [health_api.rb](lib/influxdb2/client/health_api.rb) | [/health](https://docs.influxdata.com/influxdb/latest/tools/api/#health-http-endpoint) | Check the health of your InfluxDB instance |
452
+ | API | Endpoint | Description |
453
+ |:----------|:----------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
454
+ | [query_api.rb](lib/influxdb2/client/query_api.rb) | [/api/v2/query](https://docs.influxdata.com/influxdb/latest/tools/api/#api-v2-query-http-endpoint) | Query data in InfluxDB 1.8.0+ using the InfluxDB 2.x API and [Flux](https://docs.influxdata.com/flux/latest/) _(endpoint should be enabled by [`flux-enabled` option](https://docs.influxdata.com/influxdb/latest/administration/config/#flux-enabled-false))_ |
455
+ | [write_api.rb](lib/influxdb2/client/write_api.rb) | [/api/v2/write](https://docs.influxdata.com/influxdb/latest/tools/api/#api-v2-write-http-endpoint) | Write data to InfluxDB 1.8.0+ using the InfluxDB 2.x API |
456
+ | [health_api.rb](lib/influxdb2/client/health_api.rb) | [/health](https://docs.influxdata.com/influxdb/latest/tools/api/#health-http-endpoint) | Check the health of your InfluxDB instance |
457
457
 
458
458
  For detail info see [InfluxDB 1.8 example](examples/influxdb_18_example.rb).
459
459
 
@@ -27,6 +27,13 @@ require 'influxdb2/client/query_api'
27
27
  require 'influxdb2/client/delete_api'
28
28
  require 'influxdb2/client/health_api'
29
29
  require 'influxdb2/client/ping_api'
30
+ require 'influxdb2/client/invocable_scripts_api'
30
31
  require 'influxdb2/client/point'
31
32
  require 'influxdb2/client/flux_table'
32
33
  require 'influxdb2/client/write_retry'
34
+ require 'influxdb2/client/models/script'
35
+ require 'influxdb2/client/models/scripts'
36
+ require 'influxdb2/client/models/script_create_request'
37
+ require 'influxdb2/client/models/script_language'
38
+ require 'influxdb2/client/models/script_update_request'
39
+ require 'influxdb2/client/models/script_invocation_params'
@@ -85,6 +85,13 @@ module InfluxDB2
85
85
  DeleteApi.new(options: @options)
86
86
  end
87
87
 
88
+ # Create an InvocableScripts API instance.
89
+ #
90
+ # @return [InvocableScriptsApi] New instance of InvocableScriptsApi.
91
+ def create_invocable_scripts_api
92
+ InvocableScriptsApi.new(options: @options)
93
+ end
94
+
88
95
  # Get the health of an instance.
89
96
  #
90
97
  # @deprecated Use `ping` instead
@@ -63,33 +63,28 @@ module InfluxDB2
63
63
  URI.parse(File.join(@options[:url], api_path))
64
64
  end
65
65
 
66
- def _post_json(payload, uri, headers: {})
66
+ def _request_json(payload, uri, headers: {}, method: Net::HTTP::Post)
67
67
  _check_arg_type(:headers, headers, Hash)
68
- _post(payload, uri, headers: headers.merge(HEADER_CONTENT_TYPE => 'application/json'))
68
+ _request(payload, uri, headers: headers.merge(HEADER_CONTENT_TYPE => 'application/json'), method: method)
69
69
  end
70
70
 
71
71
  def _post_text(payload, uri, headers: {})
72
72
  _check_arg_type(:headers, headers, Hash)
73
- _post(payload, uri, headers: headers.merge(HEADER_CONTENT_TYPE => 'text/plain'))
74
- end
75
-
76
- def _post(payload, uri, limit: @max_redirect_count, add_authorization: true, headers: {})
77
- _request(payload, uri, limit: limit, add_authorization: add_authorization,
78
- headers: headers, request: Net::HTTP::Post)
73
+ _request(payload, uri, headers: headers.merge(HEADER_CONTENT_TYPE => 'text/plain'))
79
74
  end
80
75
 
81
76
  def _get(uri, limit: @max_redirect_count, add_authorization: true, headers: {})
82
77
  _request(nil, uri, limit: limit, add_authorization: add_authorization,
83
- headers: headers.merge('Accept' => 'application/json'), request: Net::HTTP::Get)
78
+ headers: headers.merge('Accept' => 'application/json'), method: Net::HTTP::Get)
84
79
  end
85
80
 
86
81
  def _request(payload, uri, limit: @max_redirect_count, add_authorization: true, headers: {},
87
- request: Net::HTTP::Post)
82
+ method: Net::HTTP::Post)
88
83
  raise InfluxError.from_message("Too many HTTP redirects. Exceeded limit: #{@max_redirect_count}") if limit.zero?
89
84
 
90
85
  http = _prepare_http_client(uri)
91
86
 
92
- request = request.new(uri.request_uri)
87
+ request = method.new(uri.request_uri)
93
88
  request['Authorization'] = "Token #{@options[:token]}" if add_authorization
94
89
  request['User-Agent'] = "influxdb-client-ruby/#{InfluxDB2::VERSION}"
95
90
  headers.each { |k, v| request[k] = v }
@@ -111,8 +106,8 @@ module InfluxDB2
111
106
 
112
107
  redirect_forward_authorization ||= (uri_redirect.host == uri.host) && (uri_redirect.port == uri.port)
113
108
 
114
- _post(payload, uri_redirect, limit: limit - 1, add_authorization: redirect_forward_authorization,
115
- headers: headers)
109
+ _request(payload, uri_redirect, limit: limit - 1, add_authorization: redirect_forward_authorization,
110
+ headers: headers, method: method)
116
111
  else
117
112
  raise InfluxError.from_response(response)
118
113
  end
@@ -64,7 +64,7 @@ module InfluxDB2
64
64
  uri = _parse_uri('/api/v2/delete')
65
65
  uri.query = URI.encode_www_form(org: org_param, bucket: bucket_param)
66
66
 
67
- _post_json(delete_request.to_body.to_json, uri)
67
+ _request_json(delete_request.to_body.to_json, uri)
68
68
  end
69
69
 
70
70
  def _to_rfc3339(time)
@@ -41,11 +41,23 @@ module InfluxDB2
41
41
  end
42
42
  end
43
43
 
44
+ # The configuration for expected amount of metadata response from InfluxDB.
45
+ #
46
+ class FluxResponseMode
47
+ # full information about types, default values and groups
48
+ FULL = 'full'.freeze
49
+ # useful for Invocable scripts
50
+ ONLY_NAMES = 'only_names'.freeze
51
+ end
52
+
44
53
  # This class us used to construct FluxResult from CSV.
45
54
  #
46
55
  class FluxCsvParser
47
56
  include Enumerable
48
- def initialize(response, stream: false)
57
+ # @param [String|HTTPResponse] data to be parse
58
+ # @param [Boolean] stream set to true if the response is stream otherwise (`string`) set `false`
59
+ # @param [str] response_mode set the amount of metadata expected in response
60
+ def initialize(response, stream: false, response_mode: InfluxDB2::FluxResponseMode::FULL)
49
61
  @response = response
50
62
  @stream = stream
51
63
  @tables = {}
@@ -58,6 +70,7 @@ module InfluxDB2
58
70
  @parsing_state_error = false
59
71
 
60
72
  @closed = false
73
+ @response_mode = response_mode
61
74
  end
62
75
 
63
76
  attr_reader :tables, :closed
@@ -112,7 +125,9 @@ module InfluxDB2
112
125
  token = csv[0]
113
126
 
114
127
  # start new table
115
- if (ANNOTATIONS.include? token) && !@start_new_table
128
+ if ((ANNOTATIONS.include? token) && !@start_new_table) ||
129
+ (@response_mode == InfluxDB2::FluxResponseMode::ONLY_NAMES && @table.nil?)
130
+
116
131
  # Return already parsed DataFrame
117
132
  @start_new_table = true
118
133
  @table = InfluxDB2::FluxTable.new
@@ -177,6 +192,10 @@ module InfluxDB2
177
192
  def _parse_values(csv)
178
193
  # parse column names
179
194
  if @start_new_table
195
+ if @response_mode == InfluxDB2::FluxResponseMode::ONLY_NAMES && @table.columns.empty?
196
+ _add_data_types(@table, csv.map { |_| 'string' })
197
+ @groups = csv.map { |_| 'false' }
198
+ end
180
199
  _add_groups(@table, @groups)
181
200
  _add_column_names_and_tags(@table, csv)
182
201
  @start_new_table = false
@@ -20,7 +20,7 @@
20
20
  require_relative 'models/health_check'
21
21
 
22
22
  module InfluxDB2
23
- # The client of the InfluxDB 2.0 that implement Health HTTP API endpoint.
23
+ # The client of the InfluxDB 2.x that implement Health HTTP API endpoint.
24
24
  #
25
25
  # @deprecated Use `PingApi` instead
26
26
  class HealthApi < DefaultApi
@@ -0,0 +1,147 @@
1
+ # The MIT License
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require_relative 'models/script'
22
+
23
+ module InfluxDB2
24
+ # Use API invokable scripts to create custom InfluxDB API endpoints that query, process, and shape data.
25
+ #
26
+ # API invokable scripts let you assign scripts to API endpoints and then execute them as standard REST operations
27
+ # in InfluxDB Cloud.
28
+ class InvocableScriptsApi < DefaultApi
29
+ # @param [Hash] options The options to be used by the client.
30
+ def initialize(options:)
31
+ super(options: options)
32
+ end
33
+
34
+ # Create a script.
35
+ #
36
+ # @param script_create_request [ScriptCreateRequest] The script to create.
37
+ #
38
+ # @return [Script] The created script.
39
+ def create_script(script_create_request)
40
+ uri = _parse_uri('/api/v2/scripts')
41
+
42
+ response = _request_json(script_create_request.to_body.to_json, uri, headers: { 'Accept' => 'application/json' })
43
+
44
+ _to_object(response, Script)
45
+ end
46
+
47
+ # Update a script.
48
+ #
49
+ # @param script_id [String] The ID of the script to update. (required)
50
+ # @param update_request [ScriptUpdateRequest] Script updates to apply (required)
51
+ #
52
+ # @return [Script] The updated script.
53
+ def update_script(script_id, update_request)
54
+ uri = _parse_uri_script(script_id)
55
+
56
+ response = _request_json(update_request.to_body.to_json, uri, headers: { 'Accept' => 'application/json' },
57
+ method: Net::HTTP::Patch)
58
+ _to_object(response, Script)
59
+ end
60
+
61
+ # Delete a script.
62
+ #
63
+ # @param script_id [String] The ID of the script to delete. (required)
64
+ def delete_script(script_id)
65
+ uri = _parse_uri_script(script_id)
66
+
67
+ _request_json('', uri, headers: { 'Accept' => 'application/json' },
68
+ method: Net::HTTP::Delete)
69
+ end
70
+
71
+ # List scripts.
72
+ #
73
+ # @param [Hash] opts the optional parameters
74
+ # @option opts [Integer] :limit The number of scripts to return.
75
+ # @option opts [Integer] :offset The offset for pagination.
76
+ #
77
+ # @return [Script]
78
+ def find_scripts(opts = {})
79
+ limit = !opts[:limit].nil? ? opts[:limit] : []
80
+ offset = !opts[:offset].nil? ? opts[:offset] : []
81
+ uri = _parse_uri('/api/v2/scripts')
82
+ uri.query = URI.encode_www_form(limit: limit, offset: offset)
83
+
84
+ response = _request_json('', uri, headers: { 'Accept' => 'application/json' },
85
+ method: Net::HTTP::Get)
86
+
87
+ _to_object(response, Scripts).scripts
88
+ end
89
+
90
+ # Invoke synchronously a script and return result as a [String].
91
+ #
92
+ # @param script_id [String] The ID of the script to invoke. (required)
93
+ # @param [Enumerable] params represent key/value pairs parameters to be injected into script
94
+ #
95
+ # @return [String] result of query
96
+ def invoke_script_raw(script_id, params: nil)
97
+ _invoke_script(script_id, params: params).read_body
98
+ end
99
+
100
+ # Invoke synchronously a script and return result as a [FluxTable].
101
+ #
102
+ # @param script_id [String] The ID of the script to invoke. (required)
103
+ # @param [Enumerable] params represent key/value pairs parameters to be injected into script
104
+ #
105
+ # @return [Array] list of FluxTables which are matched the query
106
+ def invoke_script(script_id, params: nil)
107
+ response = invoke_script_raw(script_id, params: params)
108
+ parser = InfluxDB2::FluxCsvParser.new(response, stream: false,
109
+ response_mode: InfluxDB2::FluxResponseMode::ONLY_NAMES)
110
+
111
+ parser.parse
112
+ parser.tables
113
+ end
114
+
115
+ # Invoke synchronously a script and return result as a stream of FluxRecord.
116
+ #
117
+ # @param script_id [String] The ID of the script to invoke. (required)
118
+ # @param [Enumerable] params represent key/value pairs parameters to be injected into script
119
+ #
120
+ # @return stream of Flux Records
121
+ def invoke_script_stream(script_id, params: nil)
122
+ response = _invoke_script(script_id, params: params)
123
+
124
+ InfluxDB2::FluxCsvParser.new(response, stream: true, response_mode: InfluxDB2::FluxResponseMode::ONLY_NAMES)
125
+ end
126
+
127
+ private
128
+
129
+ def _parse_uri_script(script_id, path = nil)
130
+ _parse_uri('/api/v2/scripts/' + URI.encode_www_form_component(script_id) + (path.nil? ? '' : "/#{path}"))
131
+ end
132
+
133
+ def _to_object(response, model)
134
+ body = response.body
135
+
136
+ data = JSON.parse("[#{body}]", symbolize_names: true)[0]
137
+ model.build_from_hash(data)
138
+ end
139
+
140
+ def _invoke_script(script_id, params: nil)
141
+ uri = _parse_uri_script(script_id, 'invoke')
142
+
143
+ script_invocation_params = InfluxDB2::ScriptInvocationParams.new(params: params)
144
+ _request_json(script_invocation_params.to_body.to_json, uri, headers: { 'Accept' => 'application/json' })
145
+ end
146
+ end
147
+ end