influxdb-rails 1.0.0.beta3 → 1.0.0.beta4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/CHANGELOG.md +12 -10
  4. data/README.md +193 -168
  5. data/influxdb-rails.gemspec +13 -7
  6. data/lib/influxdb/rails/configuration.rb +88 -192
  7. data/lib/influxdb/rails/context.rb +19 -1
  8. data/lib/influxdb/rails/instrumentation.rb +4 -4
  9. data/lib/influxdb/rails/middleware/render_subscriber.rb +7 -0
  10. data/lib/influxdb/rails/middleware/request_subscriber.rb +22 -24
  11. data/lib/influxdb/rails/middleware/simple_subscriber.rb +12 -25
  12. data/lib/influxdb/rails/middleware/sql_subscriber.rb +7 -3
  13. data/lib/influxdb/rails/middleware/subscriber.rb +19 -8
  14. data/lib/influxdb/rails/railtie.rb +29 -32
  15. data/lib/influxdb/rails/version.rb +1 -1
  16. data/lib/influxdb-rails.rb +20 -81
  17. data/lib/rails/generators/influxdb/influxdb_generator.rb +1 -1
  18. data/lib/rails/generators/influxdb/templates/initializer.rb +39 -9
  19. data/sample-dashboard/Dockerfile +25 -0
  20. data/sample-dashboard/README.md +74 -0
  21. data/sample-dashboard/Rakefile +8 -0
  22. data/sample-dashboard/Ruby On Rails Performance (per Request).json +1053 -0
  23. data/sample-dashboard/Ruby On Rails Performance.json +2011 -0
  24. data/sample-dashboard/docker-compose.yml +33 -0
  25. data/sample-dashboard/provisioning/grafana-dashboards.yml +12 -0
  26. data/sample-dashboard/provisioning/grafana-datasource.yml +10 -0
  27. data/sample-dashboard/provisioning/performance-request.json +1053 -0
  28. data/sample-dashboard/provisioning/performance.json +2011 -0
  29. data/spec/integration/metrics_spec.rb +12 -13
  30. data/spec/shared_examples/data.rb +61 -0
  31. data/spec/spec_helper.rb +3 -1
  32. data/spec/support/rails4/app.rb +4 -0
  33. data/spec/support/rails5/app.rb +4 -0
  34. data/spec/unit/configuration_spec.rb +47 -65
  35. data/spec/unit/middleware/render_subscriber_spec.rb +13 -9
  36. data/spec/unit/middleware/request_subscriber_spec.rb +33 -21
  37. data/spec/unit/middleware/sql_subscriber_spec.rb +35 -8
  38. metadata +42 -30
  39. data/lib/influxdb/rails/air_traffic_controller.rb +0 -41
  40. data/lib/influxdb/rails/backtrace.rb +0 -44
  41. data/lib/influxdb/rails/exception_presenter.rb +0 -94
  42. data/lib/influxdb/rails/logger.rb +0 -16
  43. data/lib/influxdb/rails/middleware/hijack_render_exception.rb +0 -16
  44. data/lib/influxdb/rails/middleware/hijack_rescue_action_everywhere.rb +0 -31
  45. data/lib/influxdb/rails/rack.rb +0 -24
  46. data/spec/integration/exceptions_spec.rb +0 -37
  47. data/spec/shared_examples/tags.rb +0 -42
  48. data/spec/unit/backtrace_spec.rb +0 -85
  49. data/spec/unit/exception_presenter_spec.rb +0 -23
  50. data/spec/unit/influxdb_rails_spec.rb +0 -78
@@ -1,27 +1,26 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/integration_helper")
2
2
 
3
- RSpec.describe WidgetsController, type: :controller do
4
- render_views
5
-
3
+ RSpec.describe "User visits widgets", type: :request do
6
4
  before do
7
5
  allow_any_instance_of(InfluxDB::Rails::Configuration).to receive(:ignored_environments).and_return(%w[development])
8
6
  end
9
7
 
10
8
  describe "in a normal request" do
11
9
  it "should result in attempts to write metrics via the client" do
12
- expect(InfluxDB::Rails.client).to receive(:write_point).exactly(6).times
13
- get :index
10
+ expect(InfluxDB::Rails.client).to receive(:write_point).exactly(5).times
11
+ get "/widgets"
14
12
  end
15
13
 
16
- context "with sql reports enabled" do
17
- before do
18
- allow_any_instance_of(InfluxDB::Rails::Middleware::SqlSubscriber).to receive(:series_name).and_return("rails.sql")
19
- get :index # to not count ActiveRecord initialization
20
- end
21
-
14
+ context "additional values" do
22
15
  it "should result in attempts to write metrics via the client" do
23
- expect(InfluxDB::Rails.client).to receive(:write_point).exactly(7).times
24
- get :index
16
+ allow_any_instance_of(ActionDispatch::Request).to receive(:request_id).and_return(:request_id)
17
+ expect(InfluxDB::Rails.client).to receive(:write_point).with(
18
+ "rails", a_hash_including(
19
+ tags: a_hash_including(method: "WidgetsController#index", hook: "process_action"),
20
+ values: a_hash_including(request_id: :request_id, key: :value)
21
+ )
22
+ )
23
+ get "/widgets"
25
24
  end
26
25
  end
27
26
  end
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.shared_examples_for "with additional data" do
4
+ context "values" do
5
+ let(:additional_values) do
6
+ { another: :value }
7
+ end
8
+
9
+ after do
10
+ InfluxDB::Rails.current.reset
11
+ end
12
+
13
+ it "does include the tags" do
14
+ InfluxDB::Rails.current.values = additional_values
15
+
16
+ expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(config.measurement_name, hash_including(values: hash_including(another: :value)))
17
+
18
+ subject.call("unused", start, finish, "unused", payload)
19
+ end
20
+ end
21
+
22
+ context "tags" do
23
+ context "when tags_middleware is overwritten" do
24
+ before do
25
+ allow(config).to receive(:tags_middleware).and_return(tags_middleware)
26
+ end
27
+
28
+ let(:tags_middleware) { ->(tags) { tags.merge(static: "value", nil: nil, empty: "") } }
29
+
30
+ it "processes tags throught the middleware" do
31
+ tags = data[:tags].merge(static: "value")
32
+
33
+ expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(config.measurement_name, include(tags: tags))
34
+
35
+ subject.call("unused", start, finish, "unused", payload)
36
+ end
37
+ end
38
+
39
+ context "when tags are set in the current context" do
40
+ let(:input) do
41
+ { another: :value, nil: nil, empty: "" }
42
+ end
43
+ let(:output) do
44
+ { another: :value }
45
+ end
46
+
47
+ after do
48
+ InfluxDB::Rails.current.reset
49
+ end
50
+
51
+ it "does include the tags" do
52
+ InfluxDB::Rails.current.tags = input
53
+ tags = data[:tags].merge(output)
54
+
55
+ expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(config.measurement_name, include(tags: tags))
56
+
57
+ subject.call("unused", start, finish, "unused", payload)
58
+ end
59
+ end
60
+ end
61
+ end
data/spec/spec_helper.rb CHANGED
@@ -19,6 +19,8 @@ puts "Loading Rails v#{Rails.version}..."
19
19
  require "support/rails#{Rails::VERSION::MAJOR}/app"
20
20
  require "rspec/rails"
21
21
 
22
+ require "pry"
23
+
22
24
  RSpec.configure do |config|
23
25
  # use expect syntax
24
26
  config.disable_monkey_patching!
@@ -26,6 +28,6 @@ RSpec.configure do |config|
26
28
  # reset configuration for each spec
27
29
  config.before :each do
28
30
  InfluxDB::Rails.instance_variable_set :@configuration, nil
29
- InfluxDB::Rails.configure(&:load_rails_defaults)
31
+ InfluxDB::Rails.configure
30
32
  end
31
33
  end
@@ -32,6 +32,10 @@ class ApplicationController < ActionController::Base; end
32
32
  class WidgetsController < ApplicationController
33
33
  prepend_view_path File.join(__dir__, "..", "views")
34
34
 
35
+ before_action do
36
+ InfluxDB::Rails.current.values = { key: :value }
37
+ end
38
+
35
39
  def index
36
40
  Widget.create!(title: "test")
37
41
  end
@@ -32,6 +32,10 @@ class ApplicationController < ActionController::Base; end
32
32
  class WidgetsController < ApplicationController
33
33
  prepend_view_path File.join(__dir__, "..", "views")
34
34
 
35
+ before_action do
36
+ InfluxDB::Rails.current.values = { key: :value }
37
+ end
38
+
35
39
  def index
36
40
  Widget.create!(title: "test")
37
41
  end
@@ -5,90 +5,72 @@ RSpec.describe InfluxDB::Rails::Configuration do
5
5
  @configuration = InfluxDB::Rails::Configuration.new
6
6
  end
7
7
 
8
- describe "#ignore_user_agent?" do
9
- it "should be true for user agents that have been set as ignorable" do
10
- @configuration.ignored_user_agents = %w[Googlebot]
11
- expect(@configuration.ignore_user_agent?("Googlebot/2.1")).to be_truthy
12
- end
13
-
14
- it "should be false for user agents that have not been set as ignorable" do
15
- @configuration.ignored_user_agents = %w[Googlebot]
16
- expect(@configuration.ignore_user_agent?("Mozilla/5.0")).to be_falsey
17
- end
18
-
19
- it "should be false if the ignored user agents list is empty" do
20
- @configuration.ignored_user_agents = []
21
- expect(@configuration.ignore_user_agent?("Googlebot/2.1")).to be_falsey
22
- end
8
+ describe "client configuration" do
9
+ subject { InfluxDB::Rails.configuration.client }
23
10
 
24
- it "should be false if the ignored user agents list is inadvertently set to nil" do
25
- @configuration.ignored_user_agents = nil
26
- expect(@configuration.ignore_user_agent?("Googlebot/2.1")).to be_falsey
27
- end
28
- end
29
-
30
- describe "#retry" do
31
- it "defaults to nil" do
32
- expect(InfluxDB::Rails.configuration.retry).to be_nil
33
- end
11
+ describe "#retry" do
12
+ it "defaults to nil" do
13
+ expect(subject.retry).to be_nil
14
+ end
34
15
 
35
- it "can be updated" do
36
- InfluxDB::Rails.configure do |config|
37
- config.retry = 5
16
+ it "can be updated" do
17
+ InfluxDB::Rails.configure do |config|
18
+ config.client.retry = 5
19
+ end
20
+ expect(subject.retry).to eql(5)
38
21
  end
39
- expect(InfluxDB::Rails.configuration.retry).to eql(5)
40
22
  end
41
- end
42
23
 
43
- describe "#open_timeout" do
44
- it "defaults to 5" do
45
- expect(InfluxDB::Rails.configuration.open_timeout).to eql(5)
46
- end
24
+ describe "#open_timeout" do
25
+ it "defaults to 5" do
26
+ expect(subject.open_timeout).to eql(5)
27
+ end
47
28
 
48
- it "can be updated" do
49
- InfluxDB::Rails.configure do |config|
50
- config.open_timeout = 5
29
+ it "can be updated" do
30
+ InfluxDB::Rails.configure do |config|
31
+ config.client.open_timeout = 5
32
+ end
33
+ expect(subject.open_timeout).to eql(5)
51
34
  end
52
- expect(InfluxDB::Rails.configuration.open_timeout).to eql(5)
53
35
  end
54
- end
55
36
 
56
- describe "#read_timeout" do
57
- it "defaults to 300" do
58
- expect(InfluxDB::Rails.configuration.read_timeout).to eql(300)
59
- end
37
+ describe "#read_timeout" do
38
+ it "defaults to 300" do
39
+ expect(subject.read_timeout).to eql(300)
40
+ end
60
41
 
61
- it "can be updated" do
62
- InfluxDB::Rails.configure do |config|
63
- config.read_timeout = 5
42
+ it "can be updated" do
43
+ InfluxDB::Rails.configure do |config|
44
+ config.client.read_timeout = 5
45
+ end
46
+ expect(subject.read_timeout).to eql(5)
64
47
  end
65
- expect(InfluxDB::Rails.configuration.read_timeout).to eql(5)
66
48
  end
67
- end
68
49
 
69
- describe "#max_delay" do
70
- it "defaults to 30" do
71
- expect(InfluxDB::Rails.configuration.max_delay).to eql(30)
72
- end
50
+ describe "#max_delay" do
51
+ it "defaults to 30" do
52
+ expect(subject.max_delay).to eql(30)
53
+ end
73
54
 
74
- it "can be updated" do
75
- InfluxDB::Rails.configure do |config|
76
- config.max_delay = 5
55
+ it "can be updated" do
56
+ InfluxDB::Rails.configure do |config|
57
+ config.client.max_delay = 5
58
+ end
59
+ expect(subject.max_delay).to eql(5)
77
60
  end
78
- expect(InfluxDB::Rails.configuration.max_delay).to eql(5)
79
61
  end
80
- end
81
62
 
82
- describe "#time_precision" do
83
- it "defaults to seconds" do
84
- expect(InfluxDB::Rails.configuration.time_precision).to eql("s")
85
- end
63
+ describe "#time_precision" do
64
+ it "defaults to seconds" do
65
+ expect(subject.time_precision).to eql("s")
66
+ end
86
67
 
87
- it "can be updated" do
88
- InfluxDB::Rails.configure do |config|
89
- config.time_precision = "ms"
68
+ it "can be updated" do
69
+ InfluxDB::Rails.configure do |config|
70
+ config.client.time_precision = "ms"
71
+ end
72
+ expect(subject.time_precision).to eql("ms")
90
73
  end
91
- expect(InfluxDB::Rails.configuration.time_precision).to eql("ms")
92
74
  end
93
75
  end
94
76
 
@@ -1,5 +1,5 @@
1
1
  require "spec_helper"
2
- require "shared_examples/tags"
2
+ require "shared_examples/data"
3
3
 
4
4
  RSpec.describe InfluxDB::Rails::Middleware::RenderSubscriber do
5
5
  let(:config) { InfluxDB::Rails::Configuration.new }
@@ -8,13 +8,13 @@ RSpec.describe InfluxDB::Rails::Middleware::RenderSubscriber do
8
8
  before do
9
9
  allow(config).to receive(:application_name).and_return("my-rails-app")
10
10
  allow(config).to receive(:ignored_environments).and_return([])
11
- allow(config).to receive(:time_precision).and_return("ms")
11
+ allow(config.client).to receive(:time_precision).and_return("ms")
12
12
  end
13
13
 
14
14
  describe ".call" do
15
15
  let(:start) { Time.at(1_517_567_368) }
16
16
  let(:finish) { Time.at(1_517_567_370) }
17
- let(:series_name) { "series_name" }
17
+ let(:hook_name) { "render_partial.action_view" }
18
18
  let(:payload) { { identifier: "index.html", count: 43, cache_hits: 42 } }
19
19
  let(:data) do
20
20
  {
@@ -26,12 +26,13 @@ RSpec.describe InfluxDB::Rails::Middleware::RenderSubscriber do
26
26
  tags: {
27
27
  filename: "index.html",
28
28
  location: "Foo#bar",
29
+ hook: "render_partial",
29
30
  },
30
31
  timestamp: 1_517_567_370_000
31
32
  }
32
33
  end
33
34
 
34
- subject { described_class.new(config, series_name) }
35
+ subject { described_class.new(config, hook_name) }
35
36
 
36
37
  before do
37
38
  InfluxDB::Rails.current.controller = "Foo"
@@ -45,12 +46,12 @@ RSpec.describe InfluxDB::Rails::Middleware::RenderSubscriber do
45
46
  context "successfully" do
46
47
  it "writes to InfluxDB" do
47
48
  expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(
48
- series_name, data
49
+ config.measurement_name, data
49
50
  )
50
51
  subject.call("name", start, finish, "id", payload)
51
52
  end
52
53
 
53
- it_behaves_like "with additional tags", ["series_name"]
54
+ it_behaves_like "with additional data"
54
55
 
55
56
  context "with an empty value" do
56
57
  before do
@@ -60,13 +61,17 @@ RSpec.describe InfluxDB::Rails::Middleware::RenderSubscriber do
60
61
 
61
62
  it "does not write empty value" do
62
63
  expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(
63
- series_name, data
64
+ config.measurement_name, data
64
65
  )
65
66
  subject.call("name", start, finish, "id", payload)
66
67
  end
67
68
  end
68
69
 
69
70
  context "disabled" do
71
+ before do
72
+ allow(config).to receive(:ignored_hooks).and_return(["render_partial.action_view"])
73
+ end
74
+
70
75
  subject { described_class.new(config, nil) }
71
76
 
72
77
  it "does not write a data point" do
@@ -78,13 +83,12 @@ RSpec.describe InfluxDB::Rails::Middleware::RenderSubscriber do
78
83
 
79
84
  context "unsuccessfully" do
80
85
  before do
81
- allow(config).to receive(:logger).and_return(logger)
82
86
  InfluxDB::Rails.configuration = config
83
87
  end
84
88
 
85
89
  it "does log exceptions" do
86
90
  allow_any_instance_of(InfluxDB::Client).to receive(:write_point).and_raise("boom")
87
- expect(logger).to receive(:error).with(/boom/)
91
+ expect(::Rails.logger).to receive(:error).with(/boom/)
88
92
  subject.call("name", start, finish, "id", payload)
89
93
  end
90
94
  end
@@ -1,14 +1,15 @@
1
1
  require "spec_helper"
2
- require "shared_examples/tags"
2
+ require "shared_examples/data"
3
3
 
4
4
  RSpec.describe InfluxDB::Rails::Middleware::RequestSubscriber do
5
5
  let(:config) { InfluxDB::Rails::Configuration.new }
6
6
 
7
7
  before do
8
- allow(config).to receive(:time_precision).and_return("ms")
8
+ allow(config.client).to receive(:time_precision).and_return("ms")
9
+ allow(config).to receive(:environment).and_return("production")
9
10
  end
10
11
 
11
- subject { described_class.new(config) }
12
+ subject { described_class.new(config, "process_action.action_controller") }
12
13
 
13
14
  describe "#call" do
14
15
  let(:start) { Time.at(1_517_567_368) }
@@ -17,10 +18,12 @@ RSpec.describe InfluxDB::Rails::Middleware::RequestSubscriber do
17
18
  let(:data) do
18
19
  {
19
20
  values: {
20
- value: 2
21
+ controller: 2,
22
+ started: InfluxDB.convert_timestamp(start.utc, config.client.time_precision),
21
23
  },
22
24
  tags: {
23
25
  method: "MyController#show",
26
+ hook: "process_action",
24
27
  status: 200,
25
28
  format: "*/*",
26
29
  http_method: "GET",
@@ -38,52 +41,61 @@ RSpec.describe InfluxDB::Rails::Middleware::RequestSubscriber do
38
41
 
39
42
  it "sends metrics with taggings and timestamps" do
40
43
  expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(
41
- "rails.controller", data.merge(values: { value: 2000 })
44
+ config.measurement_name, data.deep_merge(values: { controller: 2000, db: 2, view: 2 })
42
45
  )
43
- expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with("rails.view", data)
44
- expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with("rails.db", data)
45
46
 
46
47
  subject.call("unused", start, finish, "unused", payload)
47
48
  end
48
49
 
49
- it_behaves_like "with additional tags", ["rails.controller", "rails.view", "rails.db"]
50
+ it_behaves_like "with additional data", ["requests"]
50
51
  end
51
52
 
52
53
  context "application_name is nil" do
53
- before do
54
- allow(config).to receive(:application_name).and_return(nil)
55
- end
56
-
57
- it "does not add the app_name tag to metrics" do
58
- tags = {
54
+ let(:tags) do
55
+ {
59
56
  method: "MyController#show",
57
+ hook: "process_action",
60
58
  status: 200,
61
59
  format: "*/*",
62
60
  http_method: "GET",
63
61
  server: Socket.gethostname,
64
62
  }
63
+ end
64
+
65
+ before do
66
+ allow(config).to receive(:application_name).and_return(nil)
67
+ end
65
68
 
69
+ it "does not add the app_name tag to metrics" do
66
70
  expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(
67
- "rails.controller", data.merge(values: { value: 2000 }, tags: tags)
71
+ config.measurement_name, data.merge(tags: tags).deep_merge(values: { controller: 2000, db: 2, view: 2 })
68
72
  )
69
- expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with("rails.view", data.merge(tags: tags))
70
- expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with("rails.db", data.merge(tags: tags))
71
73
 
72
74
  subject.call("unused", start, finish, "unused", payload)
73
75
  end
74
76
  end
75
77
 
76
78
  context "not successfull" do
77
- let(:logger) { double(:logger) }
78
-
79
79
  before do
80
- allow(config).to receive(:logger).and_return(logger)
81
80
  InfluxDB::Rails.configuration = config
82
81
  end
83
82
 
84
83
  it "does log an error" do
85
84
  allow_any_instance_of(InfluxDB::Client).to receive(:write_point).and_raise("boom")
86
- expect(logger).to receive(:error).with(/boom/)
85
+ expect(::Rails.logger).to receive(:error).with(/boom/)
86
+ subject.call("name", start, finish, "id", payload)
87
+ end
88
+ end
89
+
90
+ context "disabled" do
91
+ before do
92
+ allow(config).to receive(:ignored_hooks).and_return(["process_action.action_controller"])
93
+ end
94
+
95
+ subject { described_class.new(config, "process_action.action_controller") }
96
+
97
+ it "does not write a data point" do
98
+ expect_any_instance_of(InfluxDB::Client).not_to receive(:write_point)
87
99
  subject.call("name", start, finish, "id", payload)
88
100
  end
89
101
  end
@@ -1,5 +1,5 @@
1
1
  require "spec_helper"
2
- require "shared_examples/tags"
2
+ require "shared_examples/data"
3
3
 
4
4
  RSpec.describe InfluxDB::Rails::Middleware::SqlSubscriber do
5
5
  let(:config) { InfluxDB::Rails::Configuration.new }
@@ -8,13 +8,13 @@ RSpec.describe InfluxDB::Rails::Middleware::SqlSubscriber do
8
8
  before do
9
9
  allow(config).to receive(:application_name).and_return("my-rails-app")
10
10
  allow(config).to receive(:ignored_environments).and_return([])
11
- allow(config).to receive(:time_precision).and_return("ms")
11
+ allow(config.client).to receive(:time_precision).and_return("ms")
12
12
  end
13
13
 
14
14
  describe ".call" do
15
15
  let(:start) { Time.at(1_517_567_368) }
16
16
  let(:finish) { Time.at(1_517_567_370) }
17
- let(:series_name) { "rails.sql" }
17
+ let(:hook_name) { "sql.active_record" }
18
18
  let(:payload) { { sql: "SELECT * FROM POSTS WHERE id = 1", name: "Post Load", binds: %w[1 2 3] } }
19
19
  let(:data) do
20
20
  {
@@ -26,13 +26,14 @@ RSpec.describe InfluxDB::Rails::Middleware::SqlSubscriber do
26
26
  location: "Foo#bar",
27
27
  operation: "SELECT",
28
28
  class_name: "Post",
29
+ hook: "sql",
29
30
  name: "Post Load",
30
31
  },
31
32
  timestamp: 1_517_567_370_000
32
33
  }
33
34
  end
34
35
 
35
- subject { described_class.new(config, series_name) }
36
+ subject { described_class.new(config, hook_name) }
36
37
 
37
38
  before do
38
39
  InfluxDB::Rails.current.controller = "Foo"
@@ -46,7 +47,7 @@ RSpec.describe InfluxDB::Rails::Middleware::SqlSubscriber do
46
47
  context "successfully" do
47
48
  it "writes to InfluxDB" do
48
49
  expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(
49
- series_name, data
50
+ config.measurement_name, data
50
51
  )
51
52
  subject.call("name", start, finish, "id", payload)
52
53
  end
@@ -62,18 +63,44 @@ RSpec.describe InfluxDB::Rails::Middleware::SqlSubscriber do
62
63
  end
63
64
  end
64
65
 
65
- it_behaves_like "with additional tags", ["rails.sql"]
66
+ it_behaves_like "with additional data", ["sql"]
67
+
68
+ context "without location" do
69
+ before do
70
+ InfluxDB::Rails.current.reset
71
+ end
72
+
73
+ it "does use the default location" do
74
+ data[:tags] = data[:tags].merge(location: :raw)
75
+ expect_any_instance_of(InfluxDB::Client).to receive(:write_point).with(
76
+ config.measurement_name, data
77
+ )
78
+ subject.call("name", start, finish, "id", payload)
79
+ end
80
+ end
66
81
  end
67
82
 
68
83
  context "unsuccessfully" do
69
84
  before do
70
- allow(config).to receive(:logger).and_return(logger)
71
85
  InfluxDB::Rails.configuration = config
72
86
  end
73
87
 
74
88
  it "does log exceptions" do
75
89
  allow_any_instance_of(InfluxDB::Client).to receive(:write_point).and_raise("boom")
76
- expect(logger).to receive(:error).with(/boom/)
90
+ expect(::Rails.logger).to receive(:error).with(/boom/)
91
+ subject.call("name", start, finish, "id", payload)
92
+ end
93
+ end
94
+
95
+ context "disabled" do
96
+ before do
97
+ allow(config).to receive(:ignored_hooks).and_return(["sql.active_record"])
98
+ end
99
+
100
+ subject { described_class.new(config, "sql.active_record") }
101
+
102
+ it "does not write a data point" do
103
+ expect_any_instance_of(InfluxDB::Client).not_to receive(:write_point)
77
104
  subject.call("name", start, finish, "id", payload)
78
105
  end
79
106
  end