influxdb-client 1.10.0.pre.1373 → 1.11.0.pre.1463

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: ee09c0b487146566919ffec3a0d716dd59fbe9b2e77c5239c69217bc224f74f7
4
- data.tar.gz: 9b6037a92f586e4a9570ae73c99f6c8fdaff7775cc39fe45e44698d41668adaa
3
+ metadata.gz: a11646d2ea5550d5bf98c76475ced4cc77d9c8dd4e4977132d6b23f319020828
4
+ data.tar.gz: a3f41b3895a30383efa07237479871038fb9e95b56a40a82c8d20890da683680
5
5
  SHA512:
6
- metadata.gz: 369c9541a691d5a61017199cefdf8cf02d897991bf96d1883bae59853146b2500c0b7dd4d3c778ffe2940e875338de56145f7eb993417298227e8b04339135db
7
- data.tar.gz: c58c29b507c07a93c0ab9011aa2c5c8fbd390bc179687ee655cfcc68e53985889d0bd4f0e7262639ee3e04a5a4fe415a10007aeb659eebac9e8c2ea94da4c229
6
+ metadata.gz: 891f71db5da1ee0ec35e9b6c126f8a4f01e1c97e055ba88400ed4ad06db213821b24ee23c7b16acf0048185df3496fdf06649abc6e6c99be39b5c61df4d6d8d7
7
+ data.tar.gz: c1384e6bb22fda9a21dc3302657237c1b6c8a0e9ccb390d4d6679f9d12c01f9fe08bcb7f30a7ff8d9453633d59b34d7064628e21147e34ecd70eae51baa77f66
@@ -78,7 +78,7 @@ jobs:
78
78
  default: &default-ruby-image "circleci/ruby:2.6-stretch"
79
79
  influxdb-image:
80
80
  type: string
81
- default: &default-influxdb-image "influxdb:2.0.0-rc"
81
+ default: &default-influxdb-image "influxdb:v2.0.2"
82
82
  docker:
83
83
  - image: << parameters.ruby-image >>
84
84
  - image: &influx-image quay.io/influxdb/<< parameters.influxdb-image >>
@@ -1,4 +1,15 @@
1
- ## 1.10.0 [unreleased]
1
+ ## 1.11.0 [unreleased]
2
+
3
+ ## 1.10.0 [2020-12-04]
4
+
5
+ ### Features
6
+ 1. [#59](https://github.com/influxdata/influxdb-client-ruby/pull/59): CSV parser is able to parse export from UI
7
+
8
+ ### CI
9
+ 1. [#62](https://github.com/influxdata/influxdb-client-ruby/pull/62): Updated default docker image to v2.0.2
10
+
11
+ ### Bug Fixes
12
+ 1. [#61](https://github.com/influxdata/influxdb-client-ruby/pull/61): Query results has precision with nanosecond, e.g. '1970-01-01T00:00:00.000123456+00:00'
2
13
 
3
14
  ## 1.9.0 [2020-10-30]
4
15
 
data/README.md CHANGED
@@ -23,7 +23,7 @@ The client can be installed manually or with bundler.
23
23
  To install the client gem manually:
24
24
 
25
25
  ```
26
- gem install influxdb-client -v 1.9.0
26
+ gem install influxdb-client -v 1.10.0
27
27
  ```
28
28
 
29
29
  ## Usage
@@ -194,7 +194,7 @@ The data could be written as:
194
194
 
195
195
  1. `String` that is formatted as a InfluxDB's line protocol
196
196
  1. `Hash` with keys: name, tags, fields and time
197
- 1. [Data Point](https://github.com/influxdata/influxdb-client-ruby/blob/master/lib/influxdb/client/point.rb#L28) structure
197
+ 1. [Data Point](https://github.com/influxdata/influxdb-client-ruby/blob/master/lib/influxdb2/client/point.rb#L28) structure
198
198
  1. `Array` of above items
199
199
 
200
200
  ```ruby
@@ -274,7 +274,7 @@ Server availability can be checked using the `client.health` method. That is equ
274
274
 
275
275
  ### InfluxDB 1.8 API compatibility
276
276
 
277
- [InfluxDB 1.8.0 introduced forward compatibility APIs](https://docs.influxdata.com/influxdb/latest/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.
277
+ [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.
278
278
 
279
279
  The following forward compatible APIs are available:
280
280
 
@@ -27,7 +27,7 @@ DEFAULT_DOCKER_REGISTRY="quay.io/influxdb/"
27
27
  DOCKER_REGISTRY="${DOCKER_REGISTRY:-$DEFAULT_DOCKER_REGISTRY}"
28
28
 
29
29
  DEFAULT_INFLUXDB_V2_REPOSITORY="influxdb"
30
- DEFAULT_INFLUXDB_V2_VERSION="2.0.0-rc"
30
+ DEFAULT_INFLUXDB_V2_VERSION="v2.0.2"
31
31
  INFLUXDB_V2_REPOSITORY="${INFLUXDB_V2_REPOSITORY:-$DEFAULT_INFLUXDB_V2_REPOSITORY}"
32
32
  INFLUXDB_V2_VERSION="${INFLUXDB_V2_VERSION:-$DEFAULT_INFLUXDB_V2_VERSION}"
33
33
  INFLUXDB_V2_IMAGE=${DOCKER_REGISTRY}${INFLUXDB_V2_REPOSITORY}:${INFLUXDB_V2_VERSION}
@@ -54,6 +54,7 @@ module InfluxDB2
54
54
  @table_id = -1
55
55
  @start_new_table = false
56
56
  @table = nil
57
+ @groups = []
57
58
  @parsing_state_error = false
58
59
 
59
60
  @closed = false
@@ -102,14 +103,20 @@ module InfluxDB2
102
103
 
103
104
  private
104
105
 
106
+ ANNOTATION_DATATYPE = '#datatype'.freeze
107
+ ANNOTATION_GROUP = '#group'.freeze
108
+ ANNOTATION_DEFAULT = '#default'.freeze
109
+ ANNOTATIONS = [ANNOTATION_DATATYPE, ANNOTATION_GROUP, ANNOTATION_DEFAULT].freeze
110
+
105
111
  def _parse_line(csv)
106
112
  token = csv[0]
107
113
 
108
114
  # start new table
109
- if token == '#datatype'
115
+ if (ANNOTATIONS.include? token) && !@start_new_table
110
116
  # Return already parsed DataFrame
111
117
  @start_new_table = true
112
118
  @table = InfluxDB2::FluxTable.new
119
+ @groups = []
113
120
 
114
121
  @tables[@table_index] = @table unless @stream
115
122
 
@@ -120,13 +127,13 @@ module InfluxDB2
120
127
  end
121
128
 
122
129
  # # datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,double,string,string,string
123
- if token == '#datatype'
130
+ if token == ANNOTATION_DATATYPE
124
131
  _add_data_types(@table, csv)
125
132
 
126
- elsif token == '#group'
127
- _add_groups(@table, csv)
133
+ elsif token == ANNOTATION_GROUP
134
+ @groups = csv
128
135
 
129
- elsif token == '#default'
136
+ elsif token == ANNOTATION_DEFAULT
130
137
  _add_default_empty_values(@table, csv)
131
138
  else
132
139
  _parse_values(csv)
@@ -170,6 +177,7 @@ module InfluxDB2
170
177
  def _parse_values(csv)
171
178
  # parse column names
172
179
  if @start_new_table
180
+ _add_groups(@table, @groups)
173
181
  _add_column_names_and_tags(@table, csv)
174
182
  @start_new_table = false
175
183
  return
@@ -236,7 +244,7 @@ module InfluxDB2
236
244
  when 'base64Binary'
237
245
  Base64.decode64(str_val)
238
246
  when 'dateTime:RFC3339', 'dateTime:RFC3339Nano'
239
- Time.parse(str_val).to_datetime.rfc3339
247
+ Time.parse(str_val).to_datetime.rfc3339(9)
240
248
  else
241
249
  str_val
242
250
  end
@@ -19,5 +19,5 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module InfluxDB2
22
- VERSION = '1.10.0'.freeze
22
+ VERSION = '1.11.0'.freeze
23
23
  end
@@ -155,10 +155,33 @@ class FluxCsvParserTest < MiniTest::Test
155
155
  tables = InfluxDB2::FluxCsvParser.new(data).parse.tables
156
156
  records = tables[0].records
157
157
 
158
- assert_equal Time.parse('1970-01-01T00:00:10Z').to_datetime.rfc3339, records[0].values['value']
158
+ assert_equal _parse_time('1970-01-01T00:00:10Z'), records[0].values['value']
159
159
  assert_nil records[1].values['value']
160
160
  end
161
161
 
162
+ def test_mapping_rfc3339_nano
163
+ data = "#group,false,false,true,true,false,false,true,true,true,true,true,true\n" \
164
+ '#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,double,' \
165
+ "string,string,string,string,string,string\n" \
166
+ "#default,mean,,,,,,,,,,,\n" \
167
+ ",result,table,_start,_stop,_time,_value,_field,_measurement,language,license,name,owner\n" \
168
+ ',,0,2020-11-02T07:29:49.55050738Z,2020-12-02T07:29:49.55050738Z,2020-11-02T09:00:00Z,9,' \
169
+ "stars,github_repository,Ruby,MIT License,influxdb-client-ruby,influxdata\n"
170
+
171
+ tables = InfluxDB2::FluxCsvParser.new(data).parse.tables
172
+ records = tables[0].records
173
+
174
+ assert_equal 9, records[0].values['_value']
175
+ start = Time.parse(records[0].values['_start'])
176
+ assert_equal 2020, start.year
177
+ assert_equal 11, start.month
178
+ assert_equal 2, start.day
179
+ assert_equal 7, start.hour
180
+ assert_equal 29, start.min
181
+ assert_equal 49, start.sec
182
+ assert_equal '55050738', start.strftime('%8N')
183
+ end
184
+
162
185
  def test_mapping_duration
163
186
  data = '#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339' \
164
187
  ",dateTime:RFC3339,long,string,string,string,duration\n" \
@@ -209,7 +232,7 @@ class FluxCsvParserTest < MiniTest::Test
209
232
  private
210
233
 
211
234
  def _parse_time(time)
212
- Time.parse(time).to_datetime.rfc3339
235
+ Time.parse(time).to_datetime.rfc3339(9)
213
236
  end
214
237
 
215
238
  def _assert_record(flux_record, values: nil, size: 0, value: nil)
@@ -424,4 +447,21 @@ class FluxCsvParserErrorTest < MiniTest::Test
424
447
  assert_equal 7, tables[0].records.size
425
448
  assert_equal 7, tables[1].records.size
426
449
  end
450
+
451
+ def test_parse_export_from_ui
452
+ data = "#group,false,false,true,true,true,true,true,true,false,false\n" \
453
+ "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,string,double,dateTime:RFC3339\n" \
454
+ "#default,mean,,,,,,,,,\n" \
455
+ ",result,table,_start,_stop,_field,_measurement,city,location,_value,_time\n" \
456
+ ",,0,1754-06-26T11:30:27.613654848Z,2040-10-27T12:13:46.485Z,temp,weather,Lon,us,30,1975-09-01T16:59:54.5Z\n" \
457
+ ",,1,1754-06-26T11:30:27.613654848Z,2040-10-27T12:13:46.485Z,temp,weather,Lon,us,86,1975-09-01T16:59:54.5Z\n"
458
+
459
+ tables = InfluxDB2::FluxCsvParser.new(data).parse.tables
460
+ assert_equal 2, tables.size
461
+ assert_equal 1, tables[0].records.size
462
+ assert_equal false, tables[0].columns[0].group
463
+ assert_equal false, tables[0].columns[1].group
464
+ assert_equal true, tables[0].columns[2].group
465
+ assert_equal 1, tables[1].records.size
466
+ end
427
467
  end
@@ -55,4 +55,25 @@ class QueryApiIntegrationTest < MiniTest::Test
55
55
  assert_equal 2, record.value
56
56
  assert_equal 'level', record.field
57
57
  end
58
+
59
+ def test_parsed_time_precision
60
+ now = Time.now.utc
61
+ measurement = 'h2o_query_' + now.to_i.to_s + now.nsec.to_s
62
+
63
+ @client.create_write_api.write(data: InfluxDB2::Point.new(name: measurement)
64
+ .add_field('value', 10)
65
+ .time(123_456, InfluxDB2::WritePrecision::NANOSECOND))
66
+
67
+ result = @client.create_query_api.query(query: 'from(bucket: "my-bucket") |> range(start: 0, stop: now()) '\
68
+ "|> filter(fn: (r) => r._measurement == \"#{measurement}\")")
69
+
70
+ assert_equal 1, result.size
71
+
72
+ records = result[0].records
73
+ assert_equal 1, records.size
74
+
75
+ record = records[0]
76
+ assert_equal 10, record.value
77
+ assert_equal '1970-01-01T00:00:00.000123456+00:00', record.values['_time']
78
+ end
58
79
  end
@@ -67,7 +67,7 @@ class QueryApiTest < MiniTest::Test
67
67
 
68
68
  record1 = result[0].records[0]
69
69
 
70
- assert_equal Time.parse('1970-01-01T00:00:10Z').to_datetime.rfc3339, record1.time
70
+ assert_equal Time.parse('1970-01-01T00:00:10Z').to_datetime.rfc3339(9), record1.time
71
71
  assert_equal 'mem', record1.measurement
72
72
  assert_equal 10, record1.value
73
73
  assert_equal 'free', record1.field
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: influxdb-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0.pre.1373
4
+ version: 1.11.0.pre.1463
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Bednar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-09 00:00:00.000000000 Z
11
+ date: 2020-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler