instana 1.192.1 → 1.193.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +200 -133
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +10 -1145
  5. data/.rubocop_todo.yml +1140 -0
  6. data/Appraisals +103 -0
  7. data/Gemfile +14 -32
  8. data/LICENSE +2 -1
  9. data/Rakefile +19 -39
  10. data/benchmarks/10k-rack-traces.rb +3 -0
  11. data/benchmarks/Gemfile +4 -0
  12. data/benchmarks/id_generation.rb +4 -0
  13. data/benchmarks/opentracing.rb +4 -0
  14. data/benchmarks/rack_vanilla_vs_traced.rb +3 -0
  15. data/benchmarks/stackprof_rack_tracing.rb +3 -0
  16. data/benchmarks/time_processing.rb +4 -0
  17. data/bin/console +8 -4
  18. data/examples/opentracing.rb +4 -0
  19. data/examples/tracing.rb +4 -0
  20. data/extras/license_header.rb +44 -0
  21. data/gemfiles/.bundle/config +1 -2
  22. data/gemfiles/cuba_30.gemfile +18 -0
  23. data/gemfiles/dalli_20.gemfile +18 -0
  24. data/gemfiles/excon_02.gemfile +18 -0
  25. data/gemfiles/graphql_10.gemfile +18 -0
  26. data/gemfiles/grpc_10.gemfile +18 -0
  27. data/gemfiles/net_http_01.gemfile +17 -0
  28. data/gemfiles/rack_16.gemfile +18 -0
  29. data/gemfiles/rack_20.gemfile +18 -0
  30. data/gemfiles/rails_42.gemfile +21 -0
  31. data/gemfiles/rails_50.gemfile +21 -0
  32. data/gemfiles/rails_52.gemfile +21 -0
  33. data/gemfiles/rails_60.gemfile +21 -0
  34. data/gemfiles/redis_40.gemfile +18 -0
  35. data/gemfiles/resque_122.gemfile +19 -0
  36. data/gemfiles/resque_20.gemfile +18 -0
  37. data/gemfiles/rest_client_16.gemfile +18 -0
  38. data/gemfiles/rest_client_20.gemfile +18 -0
  39. data/gemfiles/roda_20.gemfile +18 -0
  40. data/gemfiles/roda_30.gemfile +18 -0
  41. data/gemfiles/sidekiq_42.gemfile +18 -0
  42. data/gemfiles/sidekiq_50.gemfile +18 -0
  43. data/gemfiles/sinatra_14.gemfile +18 -0
  44. data/instana.gemspec +5 -7
  45. data/lib/instana.rb +3 -0
  46. data/lib/instana/activator.rb +44 -0
  47. data/lib/instana/activators/action_cable.rb +24 -0
  48. data/lib/instana/activators/action_controller_api.rb +21 -0
  49. data/lib/instana/activators/action_controller_base.rb +21 -0
  50. data/lib/instana/activators/action_view.rb +21 -0
  51. data/lib/instana/activators/active_record.rb +21 -0
  52. data/lib/instana/activators/cuba.rb +21 -0
  53. data/lib/instana/activators/dalli.rb +23 -0
  54. data/lib/instana/activators/excon.rb +20 -0
  55. data/lib/instana/activators/graphql.rb +22 -0
  56. data/lib/instana/activators/grpc_client.rb +20 -0
  57. data/lib/instana/activators/grpc_server.rb +20 -0
  58. data/lib/instana/activators/net_http.rb +20 -0
  59. data/lib/instana/activators/rack.rb +16 -0
  60. data/lib/instana/activators/rails.rb +18 -0
  61. data/lib/instana/activators/redis.rb +20 -0
  62. data/lib/instana/activators/resque_client.rb +21 -0
  63. data/lib/instana/activators/resque_worker.rb +33 -0
  64. data/lib/instana/activators/rest_client.rb +20 -0
  65. data/lib/instana/activators/roda.rb +21 -0
  66. data/lib/instana/activators/sidekiq_client.rb +24 -0
  67. data/lib/instana/activators/sidekiq_worker.rb +24 -0
  68. data/lib/instana/activators/sinatra.rb +21 -0
  69. data/lib/instana/agent.rb +3 -0
  70. data/lib/instana/agent/helpers.rb +3 -0
  71. data/lib/instana/agent/hooks.rb +3 -0
  72. data/lib/instana/agent/tasks.rb +3 -0
  73. data/lib/instana/base.rb +3 -0
  74. data/lib/instana/collector.rb +3 -0
  75. data/lib/instana/collectors/gc.rb +3 -0
  76. data/lib/instana/collectors/memory.rb +3 -0
  77. data/lib/instana/collectors/thread.rb +3 -0
  78. data/lib/instana/config.rb +3 -0
  79. data/lib/instana/frameworks/cuba.rb +9 -13
  80. data/lib/instana/frameworks/rails.rb +22 -32
  81. data/lib/instana/frameworks/roda.rb +10 -13
  82. data/lib/instana/frameworks/sinatra.rb +4 -8
  83. data/lib/instana/helpers.rb +3 -0
  84. data/lib/instana/instrumentation/action_cable.rb +53 -0
  85. data/lib/instana/instrumentation/action_controller.rb +84 -0
  86. data/lib/instana/instrumentation/action_view.rb +30 -0
  87. data/lib/instana/instrumentation/active_record.rb +50 -0
  88. data/lib/instana/instrumentation/dalli.rb +10 -18
  89. data/lib/instana/instrumentation/excon.rb +54 -57
  90. data/lib/instana/instrumentation/graphql.rb +19 -18
  91. data/lib/instana/instrumentation/grpc.rb +73 -66
  92. data/lib/instana/instrumentation/instrumented_request.rb +6 -1
  93. data/lib/instana/instrumentation/net-http.rb +46 -47
  94. data/lib/instana/instrumentation/rack.rb +4 -0
  95. data/lib/instana/instrumentation/redis.rb +13 -18
  96. data/lib/instana/instrumentation/resque.rb +17 -50
  97. data/lib/instana/instrumentation/rest-client.rb +5 -17
  98. data/lib/instana/instrumentation/sidekiq-client.rb +3 -9
  99. data/lib/instana/instrumentation/sidekiq-worker.rb +3 -9
  100. data/lib/instana/opentracing/carrier.rb +3 -0
  101. data/lib/instana/opentracing/tracer.rb +3 -0
  102. data/lib/instana/rack.rb +4 -0
  103. data/lib/instana/secrets.rb +10 -7
  104. data/lib/instana/setup.rb +6 -1
  105. data/lib/instana/thread_local.rb +3 -0
  106. data/lib/instana/tracer.rb +3 -0
  107. data/lib/instana/tracing/processor.rb +3 -0
  108. data/lib/instana/tracing/span.rb +3 -0
  109. data/lib/instana/tracing/span_context.rb +3 -0
  110. data/lib/instana/util.rb +4 -41
  111. data/lib/instana/version.rb +4 -1
  112. data/lib/oj_check.rb +3 -0
  113. data/lib/opentracing.rb +3 -0
  114. data/test/activator_test.rb +30 -0
  115. data/test/agent/agent_test.rb +3 -0
  116. data/test/benchmarks/bench_id_generation.rb +3 -0
  117. data/test/benchmarks/bench_opentracing.rb +3 -0
  118. data/test/config_test.rb +3 -0
  119. data/test/frameworks/cuba_test.rb +41 -40
  120. data/test/frameworks/roda_test.rb +43 -41
  121. data/test/frameworks/sinatra_test.rb +64 -64
  122. data/test/instana_test.rb +3 -0
  123. data/test/instrumentation/dalli_test.rb +3 -0
  124. data/test/instrumentation/excon_test.rb +4 -0
  125. data/test/instrumentation/graphql_test.rb +3 -0
  126. data/test/instrumentation/grpc_test.rb +5 -1
  127. data/test/instrumentation/{net-http_test.rb → net_http_test.rb} +4 -0
  128. data/test/instrumentation/{instrumented_request_test.rb → rack_instrumented_request_test.rb} +4 -1
  129. data/test/{frameworks → instrumentation}/rack_test.rb +3 -1
  130. data/test/instrumentation/rails_action_cable_test.rb +131 -0
  131. data/test/{frameworks/rails/actioncontroller_test.rb → instrumentation/rails_action_controller_test.rb} +40 -21
  132. data/test/instrumentation/rails_action_view_test.rb +151 -0
  133. data/test/instrumentation/rails_active_record_test.rb +122 -0
  134. data/test/instrumentation/redis_test.rb +3 -0
  135. data/test/instrumentation/resque_test.rb +6 -11
  136. data/test/instrumentation/{rest-client_test.rb → rest_client_test.rb} +9 -0
  137. data/test/instrumentation/sidekiq-client_test.rb +4 -0
  138. data/test/instrumentation/sidekiq-worker_test.rb +4 -0
  139. data/test/secrets_test.rb +3 -0
  140. data/test/support/apps/active_record/active_record.rb +24 -0
  141. data/test/{servers/grpc_50051.rb → support/apps/grpc/boot.rb} +4 -1
  142. data/test/{apps → support/apps/grpc}/grpc_server.rb +3 -0
  143. data/test/{servers/rackapp_6511.rb → support/apps/http_endpoint/boot.rb} +3 -0
  144. data/test/{servers/rails_3205.rb → support/apps/rails/boot.rb} +10 -13
  145. data/test/{models → support/apps/rails/models}/block.rb +4 -1
  146. data/test/{models → support/apps/rails/models}/block6.rb +3 -0
  147. data/test/support/apps/resque/boot.rb +5 -0
  148. data/test/{jobs → support/apps/resque/jobs}/resque_error_job.rb +3 -0
  149. data/test/{jobs → support/apps/resque/jobs}/resque_fast_job.rb +3 -0
  150. data/test/support/apps/sidekiq/boot.rb +25 -0
  151. data/test/{jobs → support/apps/sidekiq/jobs}/sidekiq_job_1.rb +3 -0
  152. data/test/{jobs → support/apps/sidekiq/jobs}/sidekiq_job_2.rb +3 -0
  153. data/test/{servers → support/apps}/sidekiq/worker.rb +5 -2
  154. data/test/support/helpers.rb +97 -0
  155. data/test/test_helper.rb +27 -144
  156. data/test/tracing/custom_test.rb +3 -0
  157. data/test/tracing/id_management_test.rb +4 -0
  158. data/test/tracing/opentracing_test.rb +3 -0
  159. data/test/tracing/tracer_async_test.rb +3 -0
  160. data/test/tracing/tracer_test.rb +3 -0
  161. metadata +105 -96
  162. data/gemfiles/libraries.gemfile +0 -73
  163. data/gemfiles/rails32.gemfile +0 -51
  164. data/gemfiles/rails42.gemfile +0 -50
  165. data/gemfiles/rails50.gemfile +0 -52
  166. data/gemfiles/rails52.gemfile +0 -52
  167. data/gemfiles/rails60.gemfile +0 -72
  168. data/lib/instana/frameworks/instrumentation/abstract_mysql_adapter.rb +0 -58
  169. data/lib/instana/frameworks/instrumentation/action_controller.rb +0 -194
  170. data/lib/instana/frameworks/instrumentation/action_view.rb +0 -43
  171. data/lib/instana/frameworks/instrumentation/active_record.rb +0 -27
  172. data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +0 -87
  173. data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +0 -62
  174. data/lib/instana/frameworks/instrumentation/postgresql_adapter.rb +0 -103
  175. data/lib/instana/instrumentation.rb +0 -25
  176. data/lib/instana/test.rb +0 -43
  177. data/test/apps/cuba.rb +0 -19
  178. data/test/apps/roda.rb +0 -13
  179. data/test/apps/sinatra.rb +0 -9
  180. data/test/frameworks/rails/actionview3_test.rb +0 -210
  181. data/test/frameworks/rails/actionview4_test.rb +0 -208
  182. data/test/frameworks/rails/actionview5_test.rb +0 -221
  183. data/test/frameworks/rails/activerecord_test.rb +0 -279
  184. data/test/servers/helpers/sidekiq_worker_initializer.rb +0 -27
@@ -1,73 +0,0 @@
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
- # public_suffix dropped support for Ruby 2.1 and earlier.
12
- gem 'public_suffix', '< 3.0'
13
- end
14
-
15
- group :development do
16
- gem 'ruby-debug', :platforms => [:mri_18, :jruby]
17
- gem 'debugger', :platform => :mri_19
18
-
19
- if RUBY_VERSION > '1.8.7'
20
- gem 'pry'
21
-
22
- if RUBY_VERSION < '2.2'
23
- gem 'byebug', '< 9.1.0'
24
- gem 'pry-byebug'
25
- else
26
- gem 'pry-byebug'
27
- end
28
- else
29
- gem 'pry', '0.9.12.4'
30
- end
31
- end
32
-
33
- # Frameworks
34
- gem "sinatra", '1.4.7'
35
- gem "cuba"
36
- gem "roda"
37
-
38
- # gRPC
39
- gem 'grpc'
40
-
41
- # HTTP Clients
42
- gem 'rest-client'
43
-
44
- # Webservers
45
- gem "puma"
46
-
47
- # HTTP Clients
48
- gem 'excon'
49
-
50
- # Memcache
51
- gem 'dalli'
52
- gem 'redis'
53
-
54
- # Background Job queuing and processing
55
- if RUBY_VERSION < '2.2'
56
- gem 'sidekiq', '~> 4.2.10'
57
- else
58
- gem 'sidekiq', '> 5.0'
59
- end
60
-
61
- gem 'resque'
62
-
63
- # Rack v2 dropped support for Ruby 2.2 and higher.
64
- if RUBY_VERSION < '2.2'
65
- gem 'rack', '< 2.0'
66
- end
67
-
68
- gem 'graphql'
69
-
70
- # Include the Instana Ruby gem's base set of gems
71
- gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
72
-
73
- # vim:syntax=ruby
@@ -1,51 +0,0 @@
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
- # public_suffix dropped support for Ruby 2.1 and earlier.
12
- gem 'public_suffix', '< 3.0'
13
- end
14
-
15
- group :development do
16
- gem 'ruby-debug', :platforms => [:mri_18, :jruby]
17
- gem 'debugger', :platform => :mri_19
18
-
19
- if RUBY_VERSION > '1.8.7'
20
- gem 'pry'
21
-
22
- if RUBY_VERSION < '2.2'
23
- gem 'byebug', '< 9.1.0'
24
- gem 'pry-byebug'
25
- else
26
- gem 'pry-byebug'
27
- end
28
- else
29
- gem 'pry', '0.9.12.4'
30
- end
31
- end
32
-
33
- gem 'rails', '3.2.22.5'
34
- gem 'pg', '~> 0.21'
35
- gem 'mysql2', '~> 0.3.21'
36
-
37
- # Gems used only for assets and not required
38
- # in production environments by default.
39
- group :assets do
40
- gem 'sass-rails', '~> 3.2.3'
41
- gem 'coffee-rails', '~> 3.2.1'
42
- #gem 'therubyracer', :platforms => :ruby
43
- gem 'uglifier', '>= 1.0.3'
44
- end
45
-
46
- gem 'jquery-rails'
47
-
48
- # Include the Instana Ruby gem's base set of gems
49
- gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
50
-
51
- # vim:syntax=ruby
@@ -1,50 +0,0 @@
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
- # public_suffix dropped support for Ruby 2.1 and earlier.
12
- gem 'public_suffix', '< 3.0'
13
- end
14
-
15
- group :development do
16
- gem 'ruby-debug', :platforms => [:mri_18, :jruby]
17
- gem 'debugger', :platform => :mri_19
18
-
19
- if RUBY_VERSION > '1.8.7'
20
- gem 'pry'
21
-
22
- if RUBY_VERSION < '2.2'
23
- gem 'byebug', '< 9.1.0'
24
- gem 'pry-byebug'
25
- else
26
- gem 'pry-byebug'
27
- end
28
- else
29
- gem 'pry', '0.9.12.4'
30
- end
31
- end
32
-
33
- gem 'rails', '4.2.9'
34
- gem 'sqlite3'
35
- gem 'sass-rails', '~> 5.0'
36
- gem 'uglifier', '>= 1.3.0'
37
- gem 'coffee-rails', '~> 4.1.0'
38
- #gem 'therubyracer', platforms: :ruby
39
-
40
- gem 'jquery-rails'
41
- gem 'turbolinks'
42
- gem 'jbuilder', '~> 2.0'
43
- gem 'sdoc', '~> 0.4.0', group: :doc
44
- gem 'pg', '~> 0.21'
45
- gem "mysql2", '0.4.10'
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
@@ -1,52 +0,0 @@
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
- # public_suffix dropped support for Ruby 2.1 and earlier.
12
- gem 'public_suffix', '< 3.0'
13
- end
14
-
15
- group :development do
16
- gem 'ruby-debug', :platforms => [:mri_18, :jruby]
17
- gem 'debugger', :platform => :mri_19
18
-
19
- if RUBY_VERSION > '1.8.7'
20
- gem 'pry'
21
-
22
- if RUBY_VERSION < '2.2'
23
- gem 'byebug', '< 9.1.0'
24
- gem 'pry-byebug'
25
- else
26
- gem 'pry-byebug'
27
- end
28
- else
29
- gem 'pry', '0.9.12.4'
30
- end
31
- end
32
-
33
- gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
34
- gem 'sass-rails', '~> 5.0'
35
- gem 'uglifier', '>= 1.3.0'
36
- gem 'coffee-rails', '~> 4.2'
37
- #gem 'therubyracer', platforms: :ruby
38
-
39
- gem 'jquery-rails'
40
- gem 'turbolinks', '~> 5'
41
- gem 'jbuilder', '~> 2.5'
42
-
43
- gem 'pg'
44
- gem 'mysql2', '0.5.2'
45
-
46
- # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
47
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
48
-
49
- # Include the Instana Ruby gem's base set of gems
50
- gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
51
-
52
- # vim:syntax=ruby
@@ -1,52 +0,0 @@
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
- # public_suffix dropped support for Ruby 2.1 and earlier.
12
- gem 'public_suffix', '< 3.0'
13
- end
14
-
15
- group :development do
16
- gem 'ruby-debug', :platforms => [:mri_18, :jruby]
17
- gem 'debugger', :platform => :mri_19
18
-
19
- if RUBY_VERSION > '1.8.7'
20
- gem 'pry'
21
-
22
- if RUBY_VERSION < '2.2'
23
- gem 'byebug', '< 9.1.0'
24
- gem 'pry-byebug'
25
- else
26
- gem 'pry-byebug'
27
- end
28
- else
29
- gem 'pry', '0.9.12.4'
30
- end
31
- end
32
-
33
- gem 'rails', '~> 5.2'
34
- gem 'sass-rails', '~> 5.0'
35
- gem 'uglifier', '>= 1.3.0'
36
- gem 'coffee-rails', '~> 4.2'
37
- # gem 'therubyracer', platforms: :ruby
38
-
39
- gem 'jquery-rails'
40
- gem 'turbolinks', '~> 5'
41
- gem 'jbuilder', '~> 2.5'
42
-
43
- gem 'pg'
44
- gem 'mysql2', '0.4.10'
45
-
46
- # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
47
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
48
-
49
- # Include the Instana Ruby gem's base set of gems
50
- gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
51
-
52
- # vim:syntax=ruby
@@ -1,72 +0,0 @@
1
- source 'https://rubygems.org'
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
5
- gem 'rails', '~> 6.0.2', '>= 6.0.2.1'
6
- # Use sqlite3 as the database for Active Record
7
- gem 'sqlite3', '~> 1.4'
8
- # Use Puma as the app server
9
- gem 'puma', '~> 4.1'
10
- # Use SCSS for stylesheets
11
- gem 'sass-rails', '>= 6'
12
- # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
13
- gem 'webpacker', '~> 4.0'
14
- # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
15
- gem 'turbolinks', '~> 5'
16
- # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
17
- gem 'jbuilder', '~> 2.7'
18
- # Use Redis adapter to run Action Cable in production
19
- # gem 'redis', '~> 4.0'
20
- # Use Active Model has_secure_password
21
- # gem 'bcrypt', '~> 3.1.7'
22
-
23
- gem 'mysql2', '0.4.10'
24
-
25
- # Use Active Storage variant
26
- # gem 'image_processing', '~> 1.2'
27
-
28
- # Reduces boot times through caching; required in config/boot.rb
29
- gem 'bootsnap', '>= 1.4.2', require: false
30
-
31
- group :development, :test do
32
- # Call 'byebug' anywhere in the code to stop execution and get a debugger console
33
- gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
34
- end
35
-
36
- group :development do
37
- # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
38
- gem 'web-console', '>= 3.3.0'
39
- gem 'listen', '>= 3.0.5', '< 3.2'
40
- # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
41
- gem 'spring'
42
- gem 'spring-watcher-listen', '~> 2.0.0'
43
- end
44
-
45
- group :test do
46
- # Adds support for Capybara system testing and selenium driver
47
- gem 'capybara', '>= 2.15'
48
- gem 'selenium-webdriver'
49
- # Easy installation and use of web drivers to run system tests with browsers
50
- gem 'webdrivers'
51
- end
52
-
53
- group :development, :test do
54
- gem 'rake'
55
- gem 'minitest', '5.9.1'
56
- gem 'minitest-reporters'
57
- gem 'minitest-debugger', :require => false
58
- gem 'rack-test'
59
- gem 'webmock'
60
- # public_suffix dropped support for Ruby 2.1 and earlier.
61
- gem 'public_suffix', '< 3.0'
62
- end
63
-
64
-
65
- # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
66
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
67
-
68
- # Include the Instana Ruby gem's base set of gems
69
- gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
70
-
71
-
72
- # vim:syntax=ruby
@@ -1,58 +0,0 @@
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
- tracing = ::Instana.tracer.tracing?
45
- if !tracing || ignore_payload?(name, sql)
46
- return execute_without_instana(sql, name)
47
- elsif ::Instana.tracer.current_span[:n] == :activerecord
48
- return execute_without_instana(sql, name)
49
- end
50
-
51
- kv_payload = collect(sql)
52
- ::Instana.tracer.trace(:activerecord, kv_payload) do
53
- execute_without_instana(sql, name)
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,194 +0,0 @@
1
- module Instana
2
- module Instrumentation
3
-
4
- # Contains the methods common to both ::Instana::Instrumentation::ActionController
5
- # and ::Instana::Instrumentation::ActionControllerLegacy
6
- #
7
- module ActionControllerCommon
8
-
9
- # Indicates whether a Controller rescue handler is in place. If so, this affects
10
- # error logging and reporting. (Hence the need for this method).
11
- #
12
- # @return [Boolean]
13
- #
14
- def has_rails_handler?(exception)
15
- found = false
16
- rescue_handlers.detect do |klass_name, _handler|
17
- # Rescue handlers can be specified as strings or constant names
18
- klass = self.class.const_get(klass_name) rescue nil
19
- klass ||= klass_name.constantize rescue nil
20
- found = exception.is_a?(klass) if klass
21
- end
22
- found
23
- rescue => e
24
- ::Instana.logger.debug { "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" }
25
- return false
26
- end
27
-
28
- # Render can be called with many options across the various supported
29
- # versions of Rails. This method attempts to make sense and provide
30
- # insight into what is happening (rendering a layout, file, nothing,
31
- # plaintext etc.)
32
- def get_render_topic(opts)
33
- if opts.key?(:layout)
34
- case opts[:layout]
35
- when FalseClass
36
- name = "Without layout"
37
- when String
38
- name = opts[:layout]
39
- when Proc
40
- name = "Proc"
41
- else
42
- name = "Default"
43
- end
44
- end
45
-
46
- return name if name
47
-
48
- if opts.key?(:template)
49
- name ||= opts[:template]
50
- elsif opts.key?(:file)
51
- name ||= opts[:file]
52
- elsif opts.key?(:nothing)
53
- name = "Nothing"
54
- elsif opts.key?(:plain)
55
- name = "Plaintext"
56
- elsif opts.key?(:json)
57
- name = "JSON"
58
- elsif opts.key?(:xml)
59
- name = "XML"
60
- elsif opts.key?(:body)
61
- name = "Raw"
62
- elsif opts.key?(:js)
63
- name = "Javascript"
64
- end
65
- name
66
- end
67
-
68
- def matched_path_template
69
- Rails.application.routes.router.recognize(request) do |route, _, _|
70
- path = route.path
71
- return path.spec.to_s
72
- end
73
-
74
- nil
75
- end
76
- end
77
-
78
- # Used in ActionPack versions 5 and beyond, this module provides
79
- # instrumentation for ActionController (a part of ActionPack)
80
- #
81
- module ActionController
82
- include ::Instana::Instrumentation::ActionControllerCommon
83
-
84
- # This is the Rails 5 version of the process_action method where we use prepend to
85
- # instrument the class method instead of using the older alias_method_chain.
86
- #
87
- def process_action(*args)
88
- kv_payload = { :actioncontroller => {} }
89
- kv_payload[:actioncontroller][:controller] = self.class.name
90
- kv_payload[:actioncontroller][:action] = action_name
91
-
92
- ::Instana.tracer.log_entry(:actioncontroller, kv_payload)
93
-
94
- super(*args)
95
- request.env['INSTANA_HTTP_PATH_TEMPLATE'] = matched_path_template
96
- rescue Exception => e
97
- ::Instana.tracer.log_error(e) unless has_rails_handler?(e)
98
- raise
99
- ensure
100
- ::Instana.tracer.log_exit(:actioncontroller)
101
- end
102
-
103
- # The Instana wrapper method for ActionController::Base.render
104
- # for versions 5+.
105
- #
106
- def render(*args, &blk)
107
- # Figure out what's being rendered
108
- if args.length > 0 && args[0].is_a?(Hash)
109
- name = get_render_topic(args[0])
110
- end
111
- name ||= "Default"
112
-
113
- ::Instana.tracer.log_entry(:actionview, :actionview => { :name => name })
114
-
115
- super(*args, &blk)
116
- rescue Exception => e
117
- ::Instana.tracer.log_error(e) unless has_rails_handler?(e)
118
- raise
119
- ensure
120
- ::Instana.tracer.log_exit(:actionview)
121
- end
122
- end
123
-
124
- # Used in ActionPack versions 4 and earlier, this module provides
125
- # instrumentation for ActionController (a part of ActionPack)
126
- #
127
- module ActionControllerLegacy
128
- include ::Instana::Instrumentation::ActionControllerCommon
129
-
130
- def self.included(klass)
131
- klass.class_eval do
132
- alias_method_chain :process_action, :instana
133
- alias_method_chain :render, :instana
134
- end
135
- end
136
-
137
- # The Instana wrapper method for ActionController::Base.process_action
138
- # for versions 3 and 4.
139
- #
140
- def process_action_with_instana(*args)
141
- kv_payload = { :actioncontroller => {} }
142
- kv_payload[:actioncontroller][:controller] = self.class.name
143
- kv_payload[:actioncontroller][:action] = action_name
144
-
145
- ::Instana.tracer.log_entry(:actioncontroller, kv_payload)
146
-
147
- process_action_without_instana(*args)
148
- request.env['INSTANA_HTTP_PATH_TEMPLATE'] = matched_path_template
149
- rescue Exception => e
150
- ::Instana.tracer.log_error(e) unless has_rails_handler?(e)
151
- raise
152
- ensure
153
- ::Instana.tracer.log_exit(:actioncontroller)
154
- end
155
-
156
- # The Instana wrapper method for ActionController::Base.render
157
- # for versions 3 and 4.
158
- #
159
- def render_with_instana(*args, &blk)
160
- if args.length > 0 && args[0].is_a?(Hash)
161
- name = get_render_topic(args[0])
162
- end
163
- name ||= "Default"
164
- ::Instana.tracer.log_entry(:actionview, :actionview => { :name => name })
165
- render_without_instana(*args, &blk)
166
- rescue Exception => e
167
- ::Instana.tracer.log_error(e) unless has_rails_handler?(e)
168
- raise
169
- ensure
170
- ::Instana.tracer.log_exit(:actionview)
171
- end
172
- end
173
- end
174
- end
175
-
176
- if defined?(::ActionController) && ::Instana.config[:action_controller][:enabled] && ::ActionPack::VERSION::MAJOR >= 2
177
- ::Instana.logger.debug "Instrumenting ActionController"
178
- if ActionPack::VERSION::MAJOR >= 5
179
- ::ActionController::Base.send(:prepend, ::Instana::Instrumentation::ActionController)
180
- else
181
- ::ActionController::Base.send(:include, ::Instana::Instrumentation::ActionControllerLegacy)
182
- end
183
- end
184
-
185
- # ActionController::API was introduced in Ruby on Rails 5 but was originally an independent project before being
186
- # rolled into the Rails ActionPack. In case, someone is using the independent project or potentially backported
187
- # the rails version to and older Ruby on Rails version, we only limit in a minimal way re: version checking.
188
- #
189
- # We allow ActionController::API instrumentation in version of Ruby on Rails 3 and higher.
190
- #
191
- if defined?(::ActionController::API) && ::Instana.config[:action_controller][:enabled] && ::ActionPack::VERSION::MAJOR >= 3
192
- ::Instana.logger.debug "Instrumenting ActionController API"
193
- ::ActionController::API.send(:prepend, ::Instana::Instrumentation::ActionController)
194
- end