influxer 1.0.1 → 1.1.0

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +16 -1
  5. data/Changelog.md +24 -0
  6. data/Rakefile +4 -1
  7. data/influxer.gemspec +6 -3
  8. data/lib/influxer/client.rb +2 -0
  9. data/lib/influxer/config.rb +2 -0
  10. data/lib/influxer/engine.rb +2 -0
  11. data/lib/influxer/metrics/active_model3/model.rb +2 -0
  12. data/lib/influxer/metrics/metrics.rb +43 -11
  13. data/lib/influxer/metrics/relation/calculations.rb +2 -0
  14. data/lib/influxer/metrics/relation/time_query.rb +3 -1
  15. data/lib/influxer/metrics/relation/where_clause.rb +5 -4
  16. data/lib/influxer/metrics/relation.rb +16 -7
  17. data/lib/influxer/metrics/scoping/current_scope.rb +3 -1
  18. data/lib/influxer/metrics/scoping/default.rb +2 -0
  19. data/lib/influxer/metrics/scoping/named.rb +2 -0
  20. data/lib/influxer/metrics/scoping/old_current_scope.rb +2 -0
  21. data/lib/influxer/metrics/scoping.rb +2 -0
  22. data/lib/influxer/model.rb +2 -0
  23. data/lib/influxer/rails/client.rb +2 -0
  24. data/lib/influxer/version.rb +3 -1
  25. data/lib/influxer.rb +2 -0
  26. data/spec/cases/points_spec.rb +2 -0
  27. data/spec/cases/write_points_spec.rb +85 -0
  28. data/spec/client_spec.rb +2 -0
  29. data/spec/metrics/metrics_spec.rb +24 -4
  30. data/spec/metrics/relation_spec.rb +3 -1
  31. data/spec/metrics/scoping_spec.rb +3 -1
  32. data/spec/model/user_spec.rb +3 -1
  33. data/spec/spec_helper.rb +11 -0
  34. data/spec/support/metrics/action_metrics.rb +2 -0
  35. data/spec/support/metrics/custom_metrics.rb +2 -0
  36. data/spec/support/metrics/dummy_metrics.rb +2 -0
  37. data/spec/support/metrics/user_metrics.rb +2 -0
  38. data/spec/support/metrics/visits_metrics.rb +4 -0
  39. data/spec/support/shared_contexts/shared_query.rb +2 -0
  40. data/spec/support/user.rb +2 -0
  41. metadata +21 -6
  42. data/.hound.yml +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6170fa3501fded22b3d60091c6ecec43d5c114a
4
- data.tar.gz: 99a14c3af843d90c27697d7807a91716999c7296
3
+ metadata.gz: 47d8a3e1c19312557c99b513a074c2a1ca38fcb7
4
+ data.tar.gz: 9efb4e5a5ee1a3fa9f6aa7fef3d4f594266f67d1
5
5
  SHA512:
6
- metadata.gz: d20395879826097fd685c3b0c54ce86d2b5b4af269c4a759e369a50a872264a3561c2f685f45a4a645506e1f364dbc6ce5865f456f30ae0a14929a7e8e365961
7
- data.tar.gz: 3bf0f512ca0d3a765248a56840a99f3f53066934b9f30138e04635a1f7bf007fb3b6c2ec894b64a088447e2191995b537b069f3102118fcdc5b827cbd42017fb
6
+ metadata.gz: 1aca8b3b8005ece22d5b37bd93c4fb4bee7a8ea6ca37609141292fc055c08576c0cb7b405072392fdcbccdd72181093b42dfbe569355c20f566dacd31f47d573
7
+ data.tar.gz: 5c4bcb485f464da23f9868c2042856e8f99fb7ea3c0f5d71eff590a2b5604940e8c74f25294ff685aa6748f37cac2040e6bc2cfb2957f01eb5cc4b73f61aff50
data/.gitignore CHANGED
@@ -30,8 +30,8 @@ pkg/
30
30
  spec/dummy/db/*.sqlite3
31
31
  spec/dummy/db/*.sqlite3-journal
32
32
  spec/dummy/tmp/
33
+ tmp/
33
34
 
34
35
  Gemfile.lock
35
36
  Gemfile.local
36
- .rspec
37
37
  *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ -f d
data/.rubocop.yml CHANGED
@@ -7,11 +7,22 @@ AllCops:
7
7
  Exclude:
8
8
  - 'bin/**/*'
9
9
  - 'spec/dummy/**/*'
10
+ - 'vendor/**/*'
11
+ - 'gemfiles/vendor/**/*'
12
+ - Gemfile
13
+ - Rakefile
10
14
  DisplayCopNames: true
11
15
  StyleGuideCopsOnly: false
16
+ TargetRubyVersion: 2.3
12
17
 
13
18
  Rails:
14
- Enabled: true
19
+ Enabled: false
20
+
21
+ Style/SymbolArray:
22
+ Enabled: false
23
+
24
+ Style/SafeNavigation:
25
+ Enabled: false
15
26
 
16
27
  Style/AccessorMethodName:
17
28
  Enabled: false
@@ -36,6 +47,10 @@ Style/BlockDelimiters:
36
47
  Lint/AmbiguousRegexpLiteral:
37
48
  Enabled: false
38
49
 
50
+ Metrics/BlockLength:
51
+ Exclude:
52
+ - 'spec/**/*.rb'
53
+
39
54
  Metrics/MethodLength:
40
55
  Exclude:
41
56
  - 'spec/**/*.rb'
data/Changelog.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Change log
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Features
6
+
7
+ - Add ability to specify per-metrics retention-policy, precision and database
8
+
9
+ Now you can override default configuration for a specific metrics class:
10
+
11
+ ```ruby
12
+ class CustomMetrics < Influxer::Metrics
13
+ set_database "custom_db"
14
+ set_retention_policy :yearly
15
+ set_precision "ms"
16
+ end
17
+ ```
18
+
19
+ ### Fixes
20
+
21
+ - [Fixes #30] Fix writing points with custom retention policy
22
+
23
+ ### Misc
24
+
25
+ - Update Rubocop configuration and add Rubocop Rake task to defaults
26
+
3
27
  ## 1.0.1
4
28
 
5
29
  - Fix missing `#delegate` in ActiveRecord 3.2
data/Rakefile CHANGED
@@ -3,7 +3,10 @@ require "bundler/gem_tasks"
3
3
  require 'rspec/core/rake_task'
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ require "rubocop/rake_task"
7
+ RuboCop::RakeTask.new
8
+
9
+ task default: [:rubocop, :spec]
7
10
 
8
11
  task :console do
9
12
  sh 'pry -r ./lib/influxer.rb'
data/influxer.gemspec CHANGED
@@ -1,4 +1,6 @@
1
- $:.push File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path("../lib", __FILE__)
2
4
 
3
5
  require "influxer/version"
4
6
 
@@ -12,7 +14,7 @@ Gem::Specification.new do |s|
12
14
  s.description = "InfluxDB the Rails way"
13
15
  s.license = "MIT"
14
16
 
15
- s.files = `git ls-files`.split($/)
17
+ s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
16
18
  s.require_paths = ["lib"]
17
19
 
18
20
  s.add_dependency "activemodel", '>= 3.2.0'
@@ -26,5 +28,6 @@ Gem::Specification.new do |s|
26
28
  s.add_development_dependency 'activerecord', '>= 3.2.0'
27
29
  s.add_development_dependency 'pry-byebug'
28
30
  s.add_development_dependency "rspec", ">= 3.1.0"
29
- s.add_development_dependency "webmock", "~> 1.21.0"
31
+ s.add_development_dependency "webmock", "~> 2.1"
32
+ s.add_development_dependency "rubocop", "~> 0.49"
30
33
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'influxdb'
2
4
 
3
5
  module Influxer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'anyway_config'
2
4
 
3
5
  module Influxer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'influxer'
2
4
 
3
5
  module Influxer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Influxer
2
4
  module ActiveModel3
3
5
  # Replacement of ActiveModel::Model for ActiveModel 3
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'influxer/metrics/relation'
2
4
  require 'influxer/metrics/scoping'
3
5
  require 'influxer/metrics/active_model3/model'
@@ -37,9 +39,8 @@ module Influxer
37
39
  to: :all
38
40
  )
39
41
 
40
- attr_reader :series
42
+ attr_reader :series, :retention_policy, :database, :precision
41
43
  attr_accessor :tag_names
42
- attr_accessor :retention_policy
43
44
 
44
45
  def attributes(*attrs)
45
46
  attrs.each do |name|
@@ -68,10 +69,21 @@ module Influxer
68
69
  subclass.tag_names = tag_names.nil? ? [] : tag_names.dup
69
70
  end
70
71
 
72
+ # Use custom retention policy
71
73
  def set_retention_policy(policy_name)
72
74
  @retention_policy = policy_name
73
75
  end
74
76
 
77
+ # Use custom database for this metrics
78
+ def set_database(database)
79
+ @database = database
80
+ end
81
+
82
+ # Use custom precision for this metrics
83
+ def set_precision(precision)
84
+ @precision = precision
85
+ end
86
+
75
87
  # rubocop:disable Metrics/MethodLength
76
88
  # rubocop:disable Metrics/AbcSize
77
89
  def set_series(*args)
@@ -100,20 +112,24 @@ module Influxer
100
112
  end
101
113
 
102
114
  # rubocop:disable Metrics/MethodLength
103
- def quoted_series(val = @series, instance = nil)
115
+ # rubocop:disable Metrics/AbcSize
116
+ # rubocop:disable Metrics/CyclomaticComplexity
117
+ def quoted_series(val = @series, instance = nil, write: false)
104
118
  case val
105
119
  when Regexp
106
120
  val.inspect
107
121
  when Proc
108
- quoted_series(val.call(instance))
122
+ quoted_series(val.call(instance), write: write)
109
123
  when Array
110
124
  if val.length > 1
111
- "merge(#{val.map { |s| quoted_series(s) }.join(',')})"
125
+ "merge(#{val.map { |s| quoted_series(s, write: write) }.join(',')})"
112
126
  else
113
- quoted_series(val.first)
127
+ quoted_series(val.first, write: write)
114
128
  end
115
129
  else
116
- if retention_policy.present?
130
+ # Only add retention policy when selecting points
131
+ # and not writing
132
+ if !write && retention_policy.present?
117
133
  [quote(@retention_policy), quote(val)].join('.')
118
134
  else
119
135
  quote(val)
@@ -124,7 +140,8 @@ module Influxer
124
140
  def quote(name)
125
141
  '"' + name.to_s.gsub(/\"/) { '\"' } + '"'
126
142
  end
127
-
143
+ # rubocop:enable Metrics/CyclomaticComplexity
144
+ # rubocop:enable Metrics/AbcSize
128
145
  # rubocop:enable Metrics/MethodLength
129
146
  end
130
147
 
@@ -153,7 +170,15 @@ module Influxer
153
170
  end
154
171
 
155
172
  def write_point
156
- client.write_point unquote(series), values: values, tags: tags, timestamp: parsed_timestamp
173
+ data = {
174
+ values: values,
175
+ tags: tags,
176
+ timestamp: parsed_timestamp
177
+ }
178
+ write_with_config(
179
+ unquote(series(write: true)),
180
+ data
181
+ )
157
182
  @persisted = true
158
183
  end
159
184
 
@@ -161,8 +186,8 @@ module Influxer
161
186
  @persisted
162
187
  end
163
188
 
164
- def series
165
- self.class.quoted_series(self.class.series, self)
189
+ def series(**options)
190
+ self.class.quoted_series(self.class.series, self, **options)
166
191
  end
167
192
 
168
193
  def client
@@ -189,6 +214,13 @@ module Influxer
189
214
 
190
215
  private
191
216
 
217
+ def write_with_config(series, data)
218
+ client.write_point(series, data,
219
+ self.class.precision,
220
+ self.class.retention_policy,
221
+ self.class.database)
222
+ end
223
+
192
224
  # rubocop:disable Metrics/MethodLength
193
225
  # rubocop:disable Metrics/AbcSize
194
226
  def parsed_timestamp
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Influxer
2
4
  module Calculations #:nodoc:
3
5
  CALCULATION_METHODS =
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Influxer
2
4
  module TimeQuery #:nodoc:
3
5
  TIME_ALIASES = {
@@ -11,7 +13,7 @@ module Influxer
11
13
  month: '30d'
12
14
  }.freeze
13
15
 
14
- FILL_RESERVED = %i(null previous none).freeze
16
+ FILL_RESERVED = %i[null previous none].freeze
15
17
 
16
18
  # Add group value to relation. To be used instead of `group("time(...)").
17
19
  # Accepts symbols and strings.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Influxer
2
4
  module WhereClause #:nodoc:
3
5
  # accepts hash or strings conditions
@@ -14,10 +16,9 @@ module Influxer
14
16
  protected
15
17
 
16
18
  def build_where(args, hargs, negate)
17
- case
18
- when (args.present? && args[0].is_a?(String))
19
- where_values.concat args.map { |str| "(#{str})" }
20
- when hargs.present?
19
+ if args.present? && args[0].is_a?(String)
20
+ where_values.concat(args.map { |str| "(#{str})" })
21
+ elsif hargs.present?
21
22
  build_hash_where(hargs, negate)
22
23
  else
23
24
  false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/core_ext/module/delegation'
2
4
  require 'influxer/metrics/relation/time_query'
3
5
  require 'influxer/metrics/relation/calculations'
@@ -13,17 +15,17 @@ module Influxer
13
15
 
14
16
  attr_reader :values
15
17
 
16
- SUPPORTED_EPOCH_FORMAT = %i(h m s ms u ns).freeze
18
+ SUPPORTED_EPOCH_FORMAT = %i[h m s ms u ns].freeze
17
19
 
18
- MULTI_VALUE_METHODS = %i(select where group order).freeze
20
+ MULTI_VALUE_METHODS = %i[select where group order].freeze
19
21
 
20
- MULTI_KEY_METHODS = %i(fanout).freeze
22
+ MULTI_KEY_METHODS = %i[fanout].freeze
21
23
 
22
- SINGLE_VALUE_METHODS = %i(fill time limit offset slimit soffset from normalized).freeze
24
+ SINGLE_VALUE_METHODS = %i[fill time limit offset slimit soffset from normalized].freeze
23
25
 
24
- MULTI_VALUE_SIMPLE_METHODS = %i(select group).freeze
26
+ MULTI_VALUE_SIMPLE_METHODS = %i[select group].freeze
25
27
 
26
- SINGLE_VALUE_SIMPLE_METHODS = %i(fill limit offset slimit soffset from).freeze
28
+ SINGLE_VALUE_SIMPLE_METHODS = %i[fill limit offset slimit soffset from].freeze
27
29
 
28
30
  MULTI_VALUE_METHODS.each do |name|
29
31
  class_eval <<-CODE, __FILE__, __LINE__ + 1
@@ -194,7 +196,9 @@ module Influxer
194
196
  @instance.client.query(
195
197
  to_sql,
196
198
  denormalize: !normalized?,
197
- epoch: @values[:epoch]))
199
+ epoch: @values[:epoch]
200
+ )
201
+ )
198
202
  @loaded = true
199
203
  @records
200
204
  end
@@ -288,5 +292,10 @@ module Influxer
288
292
  return super unless @klass.respond_to?(method)
289
293
  merge!(scoping { @klass.public_send(method, *args, &block) })
290
294
  end
295
+
296
+ def respond_to_missing?(method, *args)
297
+ return true if @klass.respond_to?(method)
298
+ super
299
+ end
291
300
  end
292
301
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/per_thread_registry'
2
4
 
3
5
  module Influxer
4
6
  module Scoping
5
- module CurrentScope
7
+ module CurrentScope # :nodoc:
6
8
  # Clone of current_scope methods for newer versions of ActiveModel
7
9
  def current_scope
8
10
  ScopeRegistry.value_for(:current_scope, name)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/concern'
2
4
 
3
5
  module Influxer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/concern'
2
4
 
3
5
  module Influxer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Influxer
2
4
  module Scoping
3
5
  # Clone of current_scope methods for older versions of ActiveModel
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'influxer/metrics/scoping/default'
2
4
  require 'influxer/metrics/scoping/named'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support'
2
4
 
3
5
  module Influxer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Influxer
2
4
  # - Overriding loggging (use instrumentation and Rails logger)
3
5
  # - Add cache support for queries
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Influxer # :nodoc:
2
- VERSION = "1.0.1".freeze
4
+ VERSION = "1.1.0"
3
5
  end
data/lib/influxer.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'influxer/version'
2
4
  require 'active_model'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe DummyMetrics do
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "Write points" do
6
+ before do
7
+ stub_request(:post, /write/)
8
+ .to_return(
9
+ status: 204
10
+ )
11
+ end
12
+
13
+ let(:metrics_class) do
14
+ Class.new(Influxer::Metrics) do
15
+ set_series :test
16
+
17
+ tags :user_id
18
+
19
+ attributes :val
20
+ end
21
+ end
22
+
23
+ let(:point) { 'test,user_id=1 val="2"' }
24
+
25
+ subject { metrics_class.write! user_id: 1, val: '2' }
26
+
27
+ it "calls HTTP with correct params" do
28
+ subject
29
+ expect(
30
+ a_request(:post, "http://localhost:8086/write")
31
+ .with(
32
+ query: { u: "root", p: "root", precision: 'ns', db: 'db' },
33
+ body: point
34
+ )
35
+ ).to have_been_made
36
+ end
37
+
38
+ context "with retention policy" do
39
+ it "calls HTTP with correct params" do
40
+ metrics_class.set_retention_policy 'yearly'
41
+
42
+ subject
43
+
44
+ expect(
45
+ a_request(:post, "http://localhost:8086/write")
46
+ .with(
47
+ query: { u: "root", p: "root", precision: 'ns', db: 'db', rp: 'yearly' },
48
+ body: point
49
+ )
50
+ ).to have_been_made
51
+ end
52
+ end
53
+
54
+ context "with custom db" do
55
+ it "calls HTTP with correct params" do
56
+ metrics_class.set_database 'another_db'
57
+
58
+ subject
59
+
60
+ expect(
61
+ a_request(:post, "http://localhost:8086/write")
62
+ .with(
63
+ query: { u: "root", p: "root", precision: 'ns', db: 'another_db' },
64
+ body: point
65
+ )
66
+ ).to have_been_made
67
+ end
68
+ end
69
+
70
+ context "with custom db" do
71
+ it "calls HTTP with correct params" do
72
+ metrics_class.set_precision 'ms'
73
+
74
+ subject
75
+
76
+ expect(
77
+ a_request(:post, "http://localhost:8086/write")
78
+ .with(
79
+ query: { u: "root", p: "root", precision: 'ms', db: 'db' },
80
+ body: point
81
+ )
82
+ ).to have_been_made
83
+ end
84
+ end
85
+ end
data/spec/client_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Influxer::Client do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Influxer::Metrics, :query do
@@ -64,7 +66,7 @@ describe Influxer::Metrics, :query do
64
66
  end
65
67
 
66
68
  it "writes successfully" do
67
- expect(client).to receive(:write_point).with("dummy", anything)
69
+ expect(client).to receive(:write_point).with("dummy", anything, nil, nil, nil)
68
70
  expect(dummy_metrics.write).to be_truthy
69
71
  expect(dummy_metrics.persisted?).to be_truthy
70
72
  end
@@ -213,7 +215,13 @@ describe Influxer::Metrics, :query do
213
215
 
214
216
  it "write data and return point" do
215
217
  expect(client)
216
- .to receive(:write_point).with("dummies", tags: { dummy_id: 2, host: 'test' }, values: { user_id: 1 }, timestamp: nil)
218
+ .to receive(:write_point).with(
219
+ "dummies",
220
+ { tags: { dummy_id: 2, host: 'test' }, values: { user_id: 1 }, timestamp: nil },
221
+ nil,
222
+ nil,
223
+ nil
224
+ )
217
225
 
218
226
  point = dummy_metrics.write(user_id: 1, dummy_id: 2, host: 'test')
219
227
  expect(point.persisted?).to be_truthy
@@ -226,7 +234,13 @@ describe Influxer::Metrics, :query do
226
234
  expected_time = (timestamp_test.to_r * 1_000_000_000).to_i
227
235
 
228
236
  expect(client)
229
- .to receive(:write_point).with("dummies", tags: { dummy_id: 2, host: 'test' }, values: { user_id: 1 }, timestamp: expected_time)
237
+ .to receive(:write_point).with(
238
+ "dummies",
239
+ { tags: { dummy_id: 2, host: 'test' }, values: { user_id: 1 }, timestamp: expected_time },
240
+ nil,
241
+ nil,
242
+ nil
243
+ )
230
244
 
231
245
  point = dummy_metrics.write(user_id: 1, dummy_id: 2, host: 'test', timestamp: timestamp_test)
232
246
  expect(point.persisted?).to be_truthy
@@ -240,7 +254,13 @@ describe Influxer::Metrics, :query do
240
254
  timestamp_test = base_time.to_s
241
255
 
242
256
  expect(client)
243
- .to receive(:write_point).with("dummies", tags: { dummy_id: 2, host: 'test' }, values: { user_id: 1 }, timestamp: (base_time.to_i * 1_000_000_000).to_i)
257
+ .to receive(:write_point).with(
258
+ "dummies",
259
+ { tags: { dummy_id: 2, host: 'test' }, values: { user_id: 1 }, timestamp: (base_time.to_i * 1_000_000_000).to_i },
260
+ nil,
261
+ nil,
262
+ nil
263
+ )
244
264
 
245
265
  point = dummy_metrics.write(user_id: 1, dummy_id: 2, host: 'test', timestamp: timestamp_test)
246
266
  expect(point.persisted?).to be_truthy
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Influxer::Relation, :query do
@@ -196,7 +198,7 @@ describe Influxer::Relation, :query do
196
198
  expect(rel.time("4d").to_sql).to eq "select * from \"dummy\" group by time(4d)"
197
199
  end
198
200
 
199
- %w(null previous none).each do |val|
201
+ %w[null previous none].each do |val|
200
202
  it "group by time with string value and fill #{val}" do
201
203
  expect(rel.time("4d", fill: val.to_sym).to_sql).to eq "select * from \"dummy\" group by time(4d) fill(#{val})"
202
204
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Influxer::Metrics, :query do
@@ -21,7 +23,7 @@ describe Influxer::Metrics, :query do
21
23
 
22
24
  let(:doomy) do
23
25
  Class.new(dappy) do
24
- scope :by_user, -> (id) { where(user_id: id) if id.present? }
26
+ scope :by_user, ->(id) { where(user_id: id) if id.present? }
25
27
  scope :hourly, -> { time(:hour) }
26
28
  scope :daily, -> { time(:day) }
27
29
  end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- fdescribe User do
5
+ describe User do
4
6
  let(:user) { described_class.create age: 20, gender: 1, email: 'user@example.com' }
5
7
  subject { user }
6
8
 
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
4
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
5
 
@@ -45,9 +47,18 @@ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:'
45
47
  Dir["#{File.dirname(__FILE__)}/support/metrics/*.rb"].each { |f| require f }
46
48
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
47
49
 
50
+ WebMock.disable_net_connect!
51
+
48
52
  RSpec.configure do |config|
49
53
  config.mock_with :rspec
50
54
 
55
+ config.example_status_persistence_file_path = "tmp/rspec_examples.txt"
56
+ config.filter_run :focus
57
+ config.run_all_when_everything_filtered = true
58
+
59
+ config.order = :random
60
+ Kernel.srand config.seed
61
+
51
62
  config.after(:each) { Influxer.reset! }
52
63
  config.after(:each) { Timecop.return }
53
64
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ActionMetrics < Influxer::Metrics
2
4
  tags :user, :action
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CustomMetrics < Influxer::Metrics
2
4
  tags :code, :user_id
3
5
  attributes :val
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class DummyMetrics < Influxer::Metrics # :nodoc:
2
4
  tags :dummy_id, :host
3
5
  attributes :user_id
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class UserMetrics < Influxer::Metrics
2
4
  tags :user_id
3
5
  attributes :time_spent
@@ -1,4 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class VisitsMetrics < Influxer::Metrics
4
+ set_retention_policy :yearly
5
+
2
6
  tags :user_id, :gender
3
7
  attributes :age, :page
4
8
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  shared_context "stub_query", :query do
2
4
  let(:client) { Influxer.client }
3
5
 
data/spec/support/user.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Schema.define do
2
4
  create_table :users do |t|
3
5
  t.string :email
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: influxer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Dem
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -156,14 +156,28 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 1.21.0
159
+ version: '2.1'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 1.21.0
166
+ version: '2.1'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.49'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.49'
167
181
  description: InfluxDB the Rails way
168
182
  email:
169
183
  - dementiev.vm@gmail.com
@@ -172,7 +186,7 @@ extensions: []
172
186
  extra_rdoc_files: []
173
187
  files:
174
188
  - ".gitignore"
175
- - ".hound.yml"
189
+ - ".rspec"
176
190
  - ".rubocop.yml"
177
191
  - ".travis.yml"
178
192
  - Changelog.md
@@ -203,6 +217,7 @@ files:
203
217
  - lib/influxer/rails/client.rb
204
218
  - lib/influxer/version.rb
205
219
  - spec/cases/points_spec.rb
220
+ - spec/cases/write_points_spec.rb
206
221
  - spec/client_spec.rb
207
222
  - spec/fixtures/empty_result.json
208
223
  - spec/fixtures/single_series.json
@@ -238,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
253
  version: '0'
239
254
  requirements: []
240
255
  rubyforge_project:
241
- rubygems_version: 2.6.4
256
+ rubygems_version: 2.6.11
242
257
  signing_key:
243
258
  specification_version: 4
244
259
  summary: InfluxDB for Rails
data/.hound.yml DELETED
@@ -1,12 +0,0 @@
1
- ruby:
2
- enabled: true
3
- config_file: .rubocop.yml
4
-
5
- javascript:
6
- enabled: false
7
-
8
- coffeescript:
9
- enabled: false
10
-
11
- sass:
12
- enabled: false