instana 1.1.0 → 1.2.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.
- 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
|