influxdb 0.6.2 → 0.6.3

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
2
  SHA256:
3
- metadata.gz: a7762707820de5633483a02078dd8d6254fbda6bd412fbf56c67e8517bd51684
4
- data.tar.gz: 3ba80a79c409b7768a65616cf2f6b1e7a6097c862799a56cf5a9bc419a5c49e5
3
+ metadata.gz: de9d8162fab3d514cea64b236b6646e3f5ac82fbd73b2212d27e62a0941477a2
4
+ data.tar.gz: 8d2ad9db604f1792f384628c9b29a233abea16c7f21bd6db97bb472ee51e12af
5
5
  SHA512:
6
- metadata.gz: 76cf43822faa5426b10160f7bb40cbd48af59a4cd1bfd494cd7978a82484b984e35440e3f714491884f78e6d497163567c162e66164c602bb7eeefe84c7b86a9
7
- data.tar.gz: 742e37b48e925a5e0985570cc502a976c41f9059258d6347a9a132d8a4ef452d070f344aa20e4880a1b0bd800a887220816c9c370f2a176a04855a18dc865b98
6
+ metadata.gz: cba9385d8d07bf5299ef050a26df71e2cc70341d02bffe7e6e64d9fe91885cec6d6aba40a154c0a5aa871f653b80f0c40316f9ccf59eb37557ec93b82c6c4581
7
+ data.tar.gz: 26f8ee0318e7b3be065b768b3b134b8e4dadd741be340a97e0f4381994bc4bcf29f7e49bdce0a76dad20c02ed7b2c25ad759a6dcfca7e10299ba3d976a11b687
@@ -2,6 +2,11 @@
2
2
 
3
3
  For the full commit log, [see here](https://github.com/influxdata/influxdb-ruby/commits/master).
4
4
 
5
+ ## v0.6.3, released 2018-11-30
6
+
7
+ - Added `InfluxDB.now(precision)` and `InfluxDB::Client#now` as companions
8
+ to `InfluxDB.convert_timestamp`.
9
+
5
10
  ## v0.6.2, released 2018-11-30
6
11
 
7
12
  - Added `InfluxDB.convert_timestamp` utility to convert a `Time` to a
data/README.md CHANGED
@@ -14,7 +14,7 @@ Maintained by [@toddboom](https://github.com/toddboom) and [@dmke](https://githu
14
14
  - [Usage](#usage)
15
15
  - [Creating a client](#creating-a-client)
16
16
  - [Writing data](#writing-data)
17
- - [A Note About Time Precision](#a-note-about-time-precision)
17
+ - [A Note About Time Precision](#a-note-about-time-precision)
18
18
  - [Querying](#querying)
19
19
  - [Advanced Topics](#advanced-topics)
20
20
  - [Administrative tasks](#administrative-tasks)
@@ -145,34 +145,8 @@ influxdb.write_point(name, data)
145
145
  influxdb.write_point(name, data, time_precision)
146
146
  ```
147
147
 
148
- ### A Note About Time Precision
149
-
150
- The default precision in this gem is `"s"` (second), as Ruby's `Time#to_i`
151
- operates on this resolution.
152
-
153
- If you write data points with sub-second resolution, you _have_ to configure
154
- your client instance with a more granular `time_precision` option **and** you
155
- need to provide timestamp values which reflect this precision. **If you don't do
156
- this, your points will be squashed!**
157
-
158
- > A point is uniquely identified by the measurement name, tag set, and
159
- > timestamp. If you submit a new point with the same measurement, tag set, and
160
- > timestamp as an existing point, the field set becomes the union of the old
161
- > field set and the new field set, where any ties go to the new field set. This
162
- > is the intended behavior.
163
-
164
- See [How does InfluxDB handle duplicate points?][docs-faq] for details.
165
-
166
- For example, this is how to specify millisecond precision (which moves the
167
- pitfall from the second- to the millisecond barrier):
168
-
169
- ```ruby
170
- influxdb = InfluxDB::Client.new(time_precision: "ms")
171
- time = (Time.now.to_r * 1000).to_i
172
- # A faster, albeit less readable alternative:
173
- # time = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond)
174
- influxdb.write_point("foobar", { values: { n: 42 }, timestamp: time })
175
- ```
148
+ > **Attention:** Please also read the
149
+ > [note about time precision](#a-note-about-time-precision) below.
176
150
 
177
151
  Allowed values for `time_precision` are:
178
152
 
@@ -337,6 +311,56 @@ influxdb = InfluxDB::Client.new(
337
311
  influxdb.write_point('hitchhiker', { values: { value: 666 } })
338
312
  ```
339
313
 
314
+ ### A Note About Time Precision
315
+
316
+ The default precision in this gem is `"s"` (second), as Ruby's `Time#to_i`
317
+ operates on this resolution.
318
+
319
+ If you write data points with sub-second resolution, you _have_ to configure
320
+ your client instance with a more granular `time_precision` option **and** you
321
+ need to provide timestamp values which reflect this precision. **If you don't do
322
+ this, your points will be squashed!**
323
+
324
+ > A point is uniquely identified by the measurement name, tag set, and
325
+ > timestamp. If you submit a new point with the same measurement, tag set, and
326
+ > timestamp as an existing point, the field set becomes the union of the old
327
+ > field set and the new field set, where any ties go to the new field set. This
328
+ > is the intended behavior.
329
+
330
+ See [How does InfluxDB handle duplicate points?][docs-faq] for details.
331
+
332
+ For example, this is how to specify millisecond precision (which moves the
333
+ pitfall from the second- to the millisecond barrier):
334
+
335
+ ```ruby
336
+ client = InfluxDB::Client.new(time_precision: "ms")
337
+ time = (Time.now.to_r * 1000).to_i
338
+ client.write_point("foobar", { values: { n: 42 }, timestamp: time })
339
+ ```
340
+
341
+ For convenience, InfluxDB provides a few helper methods:
342
+
343
+ ```ruby
344
+ # to get a timestamp with the precision configured in the client:
345
+ client.now
346
+
347
+ # to get a timestamp with the given precision:
348
+ InfluxDB.now(time_precision)
349
+
350
+ # to convert a Time into a timestamp with the given precision:
351
+ InfluxDB.convert_timestamp(Time.now, time_precision)
352
+ ```
353
+
354
+ As with `client.write_point`, allowed values for `time_precision` are:
355
+
356
+ - `"ns"` or `nil` for nanosecond
357
+ - `"u"` for microsecond
358
+ - `"ms"` for millisecond
359
+ - `"s"` for second
360
+ - `"m"` for minute
361
+ - `"h"` for hour
362
+
363
+ [docs-faq]: http://docs.influxdata.com/influxdb/v1.7/troubleshooting/frequently-asked-questions/#how-does-influxdb-handle-duplicate-points
340
364
 
341
365
  ### Querying
342
366
 
@@ -48,7 +48,7 @@ module InfluxDB
48
48
  # +:verify_ssl+:: verify ssl server certificate?
49
49
  # +:ssl_ca_cert+:: ssl CA certificate, chainfile or CA path.
50
50
  # The system CA path is automatically included
51
- # +:retry:: number of times a failed request should be retried. Defaults to infinite.
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
54
  @config = InfluxDB::Config.new(opts)
@@ -72,6 +72,10 @@ module InfluxDB
72
72
  @stopped
73
73
  end
74
74
 
75
+ def now
76
+ InfluxDB.now(config.time_precision)
77
+ end
78
+
75
79
  private
76
80
 
77
81
  def find_writer
@@ -1,5 +1,45 @@
1
1
  module InfluxDB #:nodoc:
2
- TIMESTAMP_CONVERSIONS = {
2
+ # Converts a Time to a timestamp with the given precision.
3
+ #
4
+ # === Example
5
+ #
6
+ # InfluxDB.convert_timestamp(Time.now, "ms")
7
+ # #=> 1543533308243
8
+ def self.convert_timestamp(time, precision = "s")
9
+ factor = TIME_PRECISION_FACTORS.fetch(precision) do
10
+ raise ArgumentError, "invalid time precision: #{precision}"
11
+ end
12
+
13
+ (time.to_r * factor).to_i
14
+ end
15
+
16
+ # Returns the current timestamp with the given precision.
17
+ #
18
+ # Implementation detail: This does not create an intermediate Time
19
+ # object with `Time.now`, but directly requests the CLOCK_REALTIME,
20
+ # which in general is a bit faster.
21
+ #
22
+ # This is useful, if you want or need to shave off a few microseconds
23
+ # from your measurement.
24
+ #
25
+ # === Examples
26
+ #
27
+ # InfluxDB.now("ns") #=> 1543612126401392625
28
+ # InfluxDB.now("u") #=> 1543612126401392
29
+ # InfluxDB.now("ms") #=> 1543612126401
30
+ # InfluxDB.now("s") #=> 1543612126
31
+ # InfluxDB.now("m") #=> 25726868
32
+ # InfluxDB.now("h") #=> 428781
33
+ def self.now(precision = "s")
34
+ name, divisor = TIME_PRECISION_FACTORS.fetch(precision) do
35
+ raise ArgumentError, "invalid time precision: #{precision}"
36
+ end
37
+
38
+ time = Process.clock_gettime Process::CLOCK_REALTIME, name
39
+ (time / divisor).to_i
40
+ end
41
+
42
+ TIME_PRECISION_FACTORS = {
3
43
  "ns" => 1e9.to_r,
4
44
  nil => 1e9.to_r,
5
45
  "u" => 1e6.to_r,
@@ -8,16 +48,16 @@ module InfluxDB #:nodoc:
8
48
  "m" => 1.to_r / 60,
9
49
  "h" => 1.to_r / 60 / 60,
10
50
  }.freeze
11
- private_constant :TIMESTAMP_CONVERSIONS
51
+ private_constant :TIME_PRECISION_FACTORS
12
52
 
13
- # Converts a Time to a timestamp with the given precision.
14
- #
15
- # `convert_timestamp(Time.now, "ms")` might return `1543533308243`.
16
- def self.convert_timestamp(time, time_precision)
17
- factor = TIMESTAMP_CONVERSIONS.fetch(time_precision) do
18
- raise "Invalid time precision: #{time_precision}"
19
- end
20
-
21
- (time.to_r * factor).to_i
22
- end
53
+ CLOCK_NAMES = {
54
+ "ns" => [:nanosecond, 1],
55
+ nil => [:nanosecond, 1],
56
+ "u" => [:microsecond, 1],
57
+ "ms" => [:millisecond, 1],
58
+ "s" => [:second, 1],
59
+ "m" => [:second, 1.to_r / 60],
60
+ "h" => [:second, 1.to_r / 60 / 60],
61
+ }.freeze
62
+ private_constant :CLOCK_NAMES
23
63
  end
@@ -1,3 +1,3 @@
1
1
  module InfluxDB # :nodoc:
2
- VERSION = "0.6.2".freeze
2
+ VERSION = "0.6.3".freeze
3
3
  end
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.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Persen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-29 00:00:00.000000000 Z
11
+ date: 2018-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler