instana 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +2 -0
- data/.gitignore +1 -0
- data/.travis.yml +24 -2
- data/Gemfile +2 -22
- data/README.md +1 -1
- data/Rakefile +15 -0
- data/Tracing.md +29 -2
- data/gemfiles/libraries.gemfile +50 -0
- data/gemfiles/rails32.gemfile +45 -0
- data/gemfiles/rails42.gemfile +44 -0
- data/gemfiles/rails50.gemfile +44 -0
- data/instana.gemspec +6 -8
- data/lib/instana/config.rb +7 -5
- data/lib/instana/frameworks/instrumentation/abstract_mysql_adapter.rb +55 -0
- data/lib/instana/frameworks/instrumentation/action_controller.rb +105 -0
- data/lib/instana/frameworks/instrumentation/active_record.rb +22 -0
- data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +81 -0
- data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +56 -0
- data/lib/instana/frameworks/instrumentation/postgresql_adapter.rb +71 -0
- data/lib/instana/frameworks/rails.rb +5 -0
- data/lib/instana/test.rb +40 -0
- data/lib/instana/tracer.rb +19 -0
- data/lib/instana/tracing/span.rb +3 -3
- data/lib/instana/version.rb +1 -1
- data/log/.keep +0 -0
- data/test/agent/agent_test.rb +139 -0
- data/test/apps/cuba.rb +15 -0
- data/test/apps/roda.rb +10 -0
- data/test/apps/sinatra.rb +5 -0
- data/test/config_test.rb +17 -0
- data/test/frameworks/cuba_test.rb +44 -0
- data/test/frameworks/rack_test.rb +152 -0
- data/test/frameworks/rails/actioncontroller_test.rb +123 -0
- data/test/frameworks/rails/activerecord3_test.rb +134 -0
- data/test/frameworks/rails/activerecord4_test.rb +134 -0
- data/test/frameworks/rails/activerecord5_test.rb +90 -0
- data/test/frameworks/roda_test.rb +44 -0
- data/test/frameworks/sinatra_test.rb +44 -0
- data/test/instana_test.rb +27 -0
- data/test/instrumentation/dalli_test.rb +274 -0
- data/test/instrumentation/excon_test.rb +171 -0
- data/test/instrumentation/net-http_test.rb +140 -0
- data/test/instrumentation/rest-client_test.rb +61 -0
- data/test/models/block.rb +18 -0
- data/test/servers/rackapp_6511.rb +20 -0
- data/test/servers/rails_3205.rb +95 -0
- data/test/test_helper.rb +39 -0
- data/test/tracing/custom_test.rb +143 -0
- data/test/tracing/id_management_test.rb +96 -0
- data/test/tracing/opentracing_test.rb +377 -0
- data/test/tracing/trace_test.rb +50 -0
- data/test/tracing/tracer_async_test.rb +298 -0
- data/test/tracing/tracer_test.rb +202 -0
- metadata +114 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d305a85a9022580df0cb7f1a997ae3249761eeca
|
4
|
+
data.tar.gz: 4ced318153f068d2d78ad2b24b3f417bf4e38552
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ceb52cced4e372faf89bd2fd8b0d98a05287da16518bb6532d39c2fa61877ad8d8d4e699d8c0ea5de6bf0c35b218c474ff0bfeab342deb79f316c7ebb9edc3ec
|
7
|
+
data.tar.gz: cd0c7cf3c526a3ae1e346db0ebf6b39fc9ff70b75dffc1f606b9fd8d213e783138e5711f7b482e414ee1f44c352463b5792859ae2c66a0376acccfc92b1fd631
|
data/.codeclimate.yml
CHANGED
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -3,10 +3,10 @@ language: ruby
|
|
3
3
|
cache:
|
4
4
|
bundler: true
|
5
5
|
directories:
|
6
|
-
|
6
|
+
- vendor/bundle
|
7
7
|
|
8
8
|
rvm:
|
9
|
-
- 2.3.
|
9
|
+
- 2.3.3
|
10
10
|
- 2.2.6
|
11
11
|
- 2.1.9
|
12
12
|
- ruby-2.0.0-p648
|
@@ -17,11 +17,33 @@ before_install:
|
|
17
17
|
- gem update bundler
|
18
18
|
- gem --version
|
19
19
|
|
20
|
+
before_script:
|
21
|
+
- psql -c 'create database travis_ci_test;' -U postgres
|
22
|
+
|
20
23
|
script: "bundle exec rake test"
|
21
24
|
|
22
25
|
services:
|
23
26
|
- memcached
|
24
27
|
|
28
|
+
gemfile:
|
29
|
+
- Gemfile
|
30
|
+
- gemfiles/libraries.gemfile
|
31
|
+
- gemfiles/rails50.gemfile
|
32
|
+
- gemfiles/rails42.gemfile
|
33
|
+
- gemfiles/rails32.gemfile
|
34
|
+
|
35
|
+
matrix:
|
36
|
+
exclude:
|
37
|
+
# Rails 5.0+ requires Ruby 2.2.2 or higher
|
38
|
+
- rvm: 2.1.9
|
39
|
+
gemfile: gemfiles/rails50.gemfile
|
40
|
+
- rvm: ruby-2.0.0-p648
|
41
|
+
gemfile: gemfiles/rails50.gemfile
|
42
|
+
- rvm: ruby-2.0.0-p648
|
43
|
+
gemfile: gemfiles/rails42.gemfile
|
44
|
+
- rvm: ruby-2.0.0-p648
|
45
|
+
gemfile: gemfiles/rails32.gemfile
|
46
|
+
|
25
47
|
notifications:
|
26
48
|
slack:
|
27
49
|
rooms:
|
data/Gemfile
CHANGED
@@ -5,30 +5,14 @@ group :development, :test do
|
|
5
5
|
gem 'minitest', '5.9.1'
|
6
6
|
gem 'minitest-reporters'
|
7
7
|
gem 'minitest-debugger', :require => false
|
8
|
-
gem 'rack-test'
|
9
8
|
gem 'webmock'
|
10
|
-
|
11
|
-
# Frameworks
|
12
|
-
gem "sinatra", '1.4.7'
|
13
|
-
gem "cuba"
|
14
|
-
gem "roda"
|
15
|
-
|
16
|
-
# HTTP Clients
|
17
|
-
gem 'rest-client'
|
18
|
-
|
19
|
-
# Webservers
|
20
|
-
gem "puma"
|
21
|
-
|
22
|
-
# HTTP Clients
|
23
|
-
gem 'excon'
|
24
|
-
|
25
|
-
# Memcache
|
26
|
-
gem 'dalli'
|
9
|
+
gem 'puma'
|
27
10
|
|
28
11
|
# Rack v2 dropped support for Ruby 2.2 and higher.
|
29
12
|
if RUBY_VERSION < '2.2'
|
30
13
|
gem 'rack', '< 2.0'
|
31
14
|
end
|
15
|
+
gem 'rack-test'
|
32
16
|
end
|
33
17
|
|
34
18
|
group :development do
|
@@ -43,9 +27,5 @@ group :development do
|
|
43
27
|
end
|
44
28
|
end
|
45
29
|
|
46
|
-
gem 'get_process_mem'
|
47
|
-
gem 'sys-proctable'
|
48
|
-
gem 'timers'
|
49
|
-
|
50
30
|
# instana.gemspec
|
51
31
|
gemspec
|
data/README.md
CHANGED
@@ -50,7 +50,7 @@ Although the gem has no configuration required for out of the box metrics and tr
|
|
50
50
|
|
51
51
|
## Tracing
|
52
52
|
|
53
|
-
See [Tracing.md](https://github.com/instana/ruby-sensor/blob/master/Tracing.md)
|
53
|
+
This Ruby gem provides a simple API for tracing and also supports [OpenTracing](http://opentracing.io/). See [Tracing.md](https://github.com/instana/ruby-sensor/blob/master/Tracing.md) for details.
|
54
54
|
|
55
55
|
## Documentation
|
56
56
|
|
data/Rakefile
CHANGED
@@ -9,6 +9,21 @@ Rake::TestTask.new(:test) do |t|
|
|
9
9
|
t.libs << "test"
|
10
10
|
t.libs << "lib"
|
11
11
|
t.test_files = FileList['test/**/*_test.rb']
|
12
|
+
|
13
|
+
case File.basename(ENV['BUNDLE_GEMFILE']).split('.').first
|
14
|
+
when /rails50/
|
15
|
+
t.test_files = FileList['test/frameworks/rails/activerecord5_test.rb'] + FileList['test/frameworks/rails/actioncontroller_test.rb']
|
16
|
+
when /rails42/
|
17
|
+
t.test_files = FileList['test/frameworks/rails/activerecord4_test.rb'] + FileList['test/frameworks/rails/actioncontroller_test.rb']
|
18
|
+
when /rails32/
|
19
|
+
t.test_files = FileList['test/frameworks/rails/activerecord3_test.rb'] + FileList['test/frameworks/rails/actioncontroller_test.rb']
|
20
|
+
when /libraries/
|
21
|
+
t.test_files = FileList['test/instrumentation/*_test.rb']
|
22
|
+
else
|
23
|
+
t.test_files = FileList['test/agent/*_test.rb'] +
|
24
|
+
FileList['test/tracing/*_test.rb'] +
|
25
|
+
FileList['test/profiling/*_test.rb']
|
26
|
+
end
|
12
27
|
end
|
13
28
|
|
14
29
|
task :environment do
|
data/Tracing.md
CHANGED
@@ -1,9 +1,36 @@
|
|
1
1
|
# Tracing
|
2
2
|
|
3
3
|
Tracing with Instana is automatic but if you want even more visibility into custom code or some in-house
|
4
|
-
component, you can use
|
4
|
+
component, you can use Instana's tracing API or [OpenTracing](http://opentracing.io/).
|
5
5
|
|
6
|
-
#
|
6
|
+
# OpenTracing
|
7
|
+
|
8
|
+
Existing applications that utilize the OpenTracing API or those who wish to add support should have no problem
|
9
|
+
as the Instana Ruby gem fully supports the OpenTracing specification.
|
10
|
+
|
11
|
+
To start, simply set the Instana tracer as the global tracer for OpenTracing:
|
12
|
+
|
13
|
+
```Ruby
|
14
|
+
require 'opentracing'
|
15
|
+
OpenTracing.global_tracer = ::Instana.tracer
|
16
|
+
```
|
17
|
+
|
18
|
+
Then OpenTracing code can be run normally:
|
19
|
+
|
20
|
+
```Ruby
|
21
|
+
begin
|
22
|
+
span = OpenTracing.start_span('job')
|
23
|
+
# The code to be instrumented
|
24
|
+
@id = User.find_by_name('john.smith')
|
25
|
+
span.set_tag(:job_id, @id)
|
26
|
+
rescue => e
|
27
|
+
span.set_tag(:error, e.message)
|
28
|
+
ensure
|
29
|
+
span.finish
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
# The Instana Ruby API
|
7
34
|
|
8
35
|
The Instana Ruby gem provides a simple to use API to trace any arbitrary part of your application.
|
9
36
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
group :development, :test do
|
4
|
+
gem 'rake'
|
5
|
+
gem 'minitest', '5.9.1'
|
6
|
+
gem 'minitest-reporters'
|
7
|
+
gem 'minitest-debugger', :require => false
|
8
|
+
gem 'rack-test'
|
9
|
+
gem 'webmock'
|
10
|
+
gem 'puma'
|
11
|
+
end
|
12
|
+
|
13
|
+
group :development do
|
14
|
+
gem 'ruby-debug', :platforms => [:mri_18, :jruby]
|
15
|
+
gem 'debugger', :platform => :mri_19
|
16
|
+
gem 'byebug', :platforms => [:mri_20, :mri_21, :mri_22, :mri_23]
|
17
|
+
if RUBY_VERSION > '1.8.7'
|
18
|
+
gem 'pry'
|
19
|
+
gem 'pry-byebug', :platforms => [:mri_20, :mri_21, :mri_22, :mri_23]
|
20
|
+
else
|
21
|
+
gem 'pry', '0.9.12.4'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Frameworks
|
26
|
+
gem "sinatra", '1.4.7'
|
27
|
+
gem "cuba"
|
28
|
+
gem "roda"
|
29
|
+
|
30
|
+
# HTTP Clients
|
31
|
+
gem 'rest-client'
|
32
|
+
|
33
|
+
# Webservers
|
34
|
+
gem "puma"
|
35
|
+
|
36
|
+
# HTTP Clients
|
37
|
+
gem 'excon'
|
38
|
+
|
39
|
+
# Memcache
|
40
|
+
gem 'dalli'
|
41
|
+
|
42
|
+
# Rack v2 dropped support for Ruby 2.2 and higher.
|
43
|
+
if RUBY_VERSION < '2.2'
|
44
|
+
gem 'rack', '< 2.0'
|
45
|
+
end
|
46
|
+
|
47
|
+
# Include the Instana Ruby gem's base set of gems
|
48
|
+
gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
|
49
|
+
|
50
|
+
# vim:syntax=ruby
|
@@ -0,0 +1,45 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
group :development, :test do
|
4
|
+
gem 'rake'
|
5
|
+
gem 'minitest', '5.9.1'
|
6
|
+
gem 'minitest-reporters'
|
7
|
+
gem 'minitest-debugger', :require => false
|
8
|
+
gem 'rack-test'
|
9
|
+
gem 'webmock'
|
10
|
+
gem 'puma'
|
11
|
+
end
|
12
|
+
|
13
|
+
group :development do
|
14
|
+
gem 'ruby-debug', :platforms => [:mri_18, :jruby]
|
15
|
+
gem 'debugger', :platform => :mri_19
|
16
|
+
gem 'byebug', :platforms => [:mri_20, :mri_21, :mri_22, :mri_23]
|
17
|
+
if RUBY_VERSION > '1.8.7'
|
18
|
+
gem 'pry'
|
19
|
+
gem 'pry-byebug', :platforms => [:mri_20, :mri_21, :mri_22, :mri_23]
|
20
|
+
else
|
21
|
+
gem 'pry', '0.9.12.4'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
gem 'rails', '3.2.22.5'
|
26
|
+
gem 'pg'
|
27
|
+
gem 'mysql2', '~> 0.3.10'
|
28
|
+
gem 'mysql'
|
29
|
+
|
30
|
+
# Gems used only for assets and not required
|
31
|
+
# in production environments by default.
|
32
|
+
group :assets do
|
33
|
+
gem 'sass-rails', '~> 3.2.3'
|
34
|
+
gem 'coffee-rails', '~> 3.2.1'
|
35
|
+
gem 'therubyracer', :platforms => :ruby
|
36
|
+
gem 'uglifier', '>= 1.0.3'
|
37
|
+
end
|
38
|
+
|
39
|
+
gem 'jquery-rails'
|
40
|
+
|
41
|
+
# Include the Instana Ruby gem's base set of gems
|
42
|
+
gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
|
43
|
+
|
44
|
+
# vim:syntax=ruby
|
45
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
group :development, :test do
|
4
|
+
gem 'rake'
|
5
|
+
gem 'minitest', '5.9.1'
|
6
|
+
gem 'minitest-reporters'
|
7
|
+
gem 'minitest-debugger', :require => false
|
8
|
+
gem 'rack-test'
|
9
|
+
gem 'webmock'
|
10
|
+
gem 'puma'
|
11
|
+
end
|
12
|
+
|
13
|
+
group :development do
|
14
|
+
gem 'ruby-debug', :platforms => [:mri_18, :jruby]
|
15
|
+
gem 'debugger', :platform => :mri_19
|
16
|
+
gem 'byebug', :platforms => [:mri_20, :mri_21, :mri_22, :mri_23]
|
17
|
+
if RUBY_VERSION > '1.8.7'
|
18
|
+
gem 'pry'
|
19
|
+
gem 'pry-byebug', :platforms => [:mri_20, :mri_21, :mri_22, :mri_23]
|
20
|
+
else
|
21
|
+
gem 'pry', '0.9.12.4'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
gem 'rails', '4.2.7.1'
|
26
|
+
gem 'sqlite3'
|
27
|
+
gem 'sass-rails', '~> 5.0'
|
28
|
+
gem 'uglifier', '>= 1.3.0'
|
29
|
+
gem 'coffee-rails', '~> 4.1.0'
|
30
|
+
gem 'therubyracer', platforms: :ruby
|
31
|
+
|
32
|
+
gem 'jquery-rails'
|
33
|
+
gem 'turbolinks'
|
34
|
+
gem 'jbuilder', '~> 2.0'
|
35
|
+
gem 'sdoc', '~> 0.4.0', group: :doc
|
36
|
+
gem "pg"
|
37
|
+
gem "mysql2"
|
38
|
+
gem "mysql"
|
39
|
+
|
40
|
+
# Include the Instana Ruby gem's base set of gems
|
41
|
+
gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
|
42
|
+
|
43
|
+
# vim:syntax=ruby
|
44
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
group :development, :test do
|
4
|
+
gem 'rake'
|
5
|
+
gem 'minitest', '5.9.1'
|
6
|
+
gem 'minitest-reporters'
|
7
|
+
gem 'minitest-debugger', :require => false
|
8
|
+
gem 'rack-test'
|
9
|
+
gem 'webmock'
|
10
|
+
gem 'puma'
|
11
|
+
end
|
12
|
+
|
13
|
+
group :development do
|
14
|
+
gem 'ruby-debug', :platforms => [:mri_18, :jruby]
|
15
|
+
gem 'debugger', :platform => :mri_19
|
16
|
+
gem 'byebug', :platforms => [:mri_20, :mri_21, :mri_22, :mri_23]
|
17
|
+
if RUBY_VERSION > '1.8.7'
|
18
|
+
gem 'pry'
|
19
|
+
gem 'pry-byebug', :platforms => [:mri_20, :mri_21, :mri_22, :mri_23]
|
20
|
+
else
|
21
|
+
gem 'pry', '0.9.12.4'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
|
26
|
+
gem 'sass-rails', '~> 5.0'
|
27
|
+
gem 'uglifier', '>= 1.3.0'
|
28
|
+
gem 'coffee-rails', '~> 4.2'
|
29
|
+
gem 'therubyracer', platforms: :ruby
|
30
|
+
|
31
|
+
gem 'jquery-rails'
|
32
|
+
gem 'turbolinks', '~> 5'
|
33
|
+
gem 'jbuilder', '~> 2.5'
|
34
|
+
|
35
|
+
gem 'pg'
|
36
|
+
gem 'mysql2'
|
37
|
+
|
38
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
39
|
+
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
|
40
|
+
|
41
|
+
# Include the Instana Ruby gem's base set of gems
|
42
|
+
gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
|
43
|
+
|
44
|
+
# vim:syntax=ruby
|
data/instana.gemspec
CHANGED
@@ -13,18 +13,11 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.description = %q{Provides Ruby sensor instrumentation for Instana.}
|
14
14
|
spec.homepage = "https://www.instana.com/"
|
15
15
|
|
16
|
-
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
17
|
-
# delete this section to allow pushing this gem to any host.
|
18
|
-
#if spec.respond_to?(:metadata)
|
19
|
-
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
-
#else
|
21
|
-
# raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
22
|
-
#end
|
23
|
-
|
24
16
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
17
|
spec.bindir = "exe"
|
26
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
19
|
spec.require_paths = ["lib"]
|
20
|
+
spec.test_files = Dir.glob("{test}/**/*.rb")
|
28
21
|
|
29
22
|
spec.required_ruby_version = '>= 2.0'
|
30
23
|
|
@@ -32,6 +25,11 @@ Gem::Specification.new do |spec|
|
|
32
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
33
26
|
spec.add_development_dependency "minitest", "~> 5.0"
|
34
27
|
|
28
|
+
# Development debugging
|
29
|
+
spec.add_development_dependency('byebug', '>= 8.0.0')
|
30
|
+
spec.add_development_dependency('pry', '>= 0.10.0')
|
31
|
+
spec.add_development_dependency('pry-byebug', '>= 3.0.0')
|
32
|
+
|
35
33
|
spec.add_runtime_dependency('sys-proctable', '>= 1.1.3')
|
36
34
|
spec.add_runtime_dependency('get_process_mem', '>= 0.2.1')
|
37
35
|
spec.add_runtime_dependency('timers', '>= 4.1.0')
|
data/lib/instana/config.rb
CHANGED
@@ -20,11 +20,13 @@ module Instana
|
|
20
20
|
@config[:eum_api_key] = nil
|
21
21
|
@config[:eum_baggage] = {}
|
22
22
|
|
23
|
-
#
|
24
|
-
@config[:
|
25
|
-
@config[:
|
26
|
-
@config[:
|
27
|
-
@config[:
|
23
|
+
# Instrumentation
|
24
|
+
@config[:action_controller] = { :enabled => true }
|
25
|
+
@config[:active_record] = { :enabled => true }
|
26
|
+
@config[:dalli] = { :enabled => true }
|
27
|
+
@config[:excon] = { :enabled => true }
|
28
|
+
@config[:nethttp] = { :enabled => true }
|
29
|
+
@config[:'rest-client'] = { :enabled => true }
|
28
30
|
end
|
29
31
|
|
30
32
|
def [](key)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Instana
|
2
|
+
module Instrumentation
|
3
|
+
module AbstractMysqlAdapter
|
4
|
+
IGNORED_PAYLOADS = %w(SCHEMA EXPLAIN CACHE).freeze
|
5
|
+
EXPLAINED_SQLS = /\A\s*(with|select|update|delete|insert)\b/i
|
6
|
+
|
7
|
+
# This module supports instrumenting ActiveRecord with the mysql2 adapter.
|
8
|
+
#
|
9
|
+
def self.included(klass)
|
10
|
+
if ActiveRecord::VERSION::STRING >= '3.2'
|
11
|
+
Instana::Util.method_alias(klass, :execute)
|
12
|
+
|
13
|
+
@@sanitize_regexp = Regexp.new('(\'[\s\S][^\']*\'|\d*\.\d+|\d+|NULL)', Regexp::IGNORECASE)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Collect up this DB connection info for reporting.
|
18
|
+
#
|
19
|
+
# @param sql [String]
|
20
|
+
# @return [Hash] Hash of collected KVs
|
21
|
+
#
|
22
|
+
def collect(sql)
|
23
|
+
payload = { :activerecord => {} }
|
24
|
+
payload[:activerecord][:sql] = sql.gsub(@@sanitize_regexp, '?')
|
25
|
+
payload[:activerecord][:adapter] = @config[:adapter]
|
26
|
+
payload[:activerecord][:host] = @config[:host]
|
27
|
+
payload[:activerecord][:db] = @config[:database]
|
28
|
+
payload[:activerecord][:username] = @config[:username]
|
29
|
+
payload
|
30
|
+
end
|
31
|
+
|
32
|
+
# In the spirit of ::ActiveRecord::ExplainSubscriber.ignore_payload? There are
|
33
|
+
# only certain calls that we're interested in tracing. e.g. No use to instrument
|
34
|
+
# framework caches.
|
35
|
+
#
|
36
|
+
# @param payload [String]
|
37
|
+
# @return [Boolean]
|
38
|
+
#
|
39
|
+
def ignore_payload?(name, sql)
|
40
|
+
IGNORED_PAYLOADS.include?(name) || sql !~ EXPLAINED_SQLS
|
41
|
+
end
|
42
|
+
|
43
|
+
def execute_with_instana(sql, name = nil)
|
44
|
+
if !::Instana.tracer.tracing? || ignore_payload?(name, sql)
|
45
|
+
return execute_without_instana(sql, name)
|
46
|
+
end
|
47
|
+
|
48
|
+
kv_payload = collect(sql)
|
49
|
+
::Instana.tracer.trace(:activerecord, kv_payload) do
|
50
|
+
execute_without_instana(sql, name)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|