instana 1.11.6 → 1.209.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +263 -0
  3. data/.editorconfig +10 -0
  4. data/.github/ISSUE_TEMPLATE/bug.yml +39 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.gitignore +3 -0
  7. data/.rubocop.yml +14 -1136
  8. data/.rubocop_todo.yml +1140 -0
  9. data/Appraisals +124 -0
  10. data/Gemfile +14 -32
  11. data/LICENSE +2 -1
  12. data/README.md +2 -6
  13. data/Rakefile +18 -49
  14. data/bin/console +8 -4
  15. data/docker-compose.yml +20 -0
  16. data/examples/opentracing.rb +4 -0
  17. data/examples/tracing.rb +4 -0
  18. data/extras/license_header.rb +44 -0
  19. data/gemfiles/.bundle/config +1 -2
  20. data/gemfiles/aws_30.gemfile +22 -0
  21. data/gemfiles/cuba_30.gemfile +18 -0
  22. data/gemfiles/dalli_20.gemfile +18 -0
  23. data/gemfiles/excon_02.gemfile +18 -0
  24. data/gemfiles/excon_021.gemfile +18 -0
  25. data/gemfiles/excon_079.gemfile +18 -0
  26. data/gemfiles/graphql_10.gemfile +18 -0
  27. data/gemfiles/grpc_10.gemfile +18 -0
  28. data/gemfiles/mongo_216.gemfile +18 -0
  29. data/gemfiles/net_http_01.gemfile +17 -0
  30. data/gemfiles/rack_16.gemfile +18 -0
  31. data/gemfiles/rack_20.gemfile +18 -0
  32. data/gemfiles/rails_42.gemfile +21 -0
  33. data/gemfiles/rails_50.gemfile +21 -0
  34. data/gemfiles/rails_52.gemfile +21 -0
  35. data/gemfiles/rails_60.gemfile +21 -0
  36. data/gemfiles/redis_40.gemfile +18 -0
  37. data/gemfiles/resque_122.gemfile +19 -0
  38. data/gemfiles/resque_20.gemfile +18 -0
  39. data/gemfiles/rest_client_16.gemfile +18 -0
  40. data/gemfiles/rest_client_20.gemfile +18 -0
  41. data/gemfiles/roda_20.gemfile +18 -0
  42. data/gemfiles/roda_30.gemfile +18 -0
  43. data/gemfiles/shoryuken_50.gemfile +19 -0
  44. data/gemfiles/sidekiq_42.gemfile +18 -0
  45. data/gemfiles/sidekiq_50.gemfile +18 -0
  46. data/gemfiles/sinatra_14.gemfile +18 -0
  47. data/instana.gemspec +8 -14
  48. data/lib/instana/activator.rb +58 -0
  49. data/lib/instana/activators/action_cable.rb +24 -0
  50. data/lib/instana/activators/action_controller_api.rb +21 -0
  51. data/lib/instana/activators/action_controller_base.rb +21 -0
  52. data/lib/instana/activators/action_mailer.rb +22 -0
  53. data/lib/instana/activators/action_view.rb +21 -0
  54. data/lib/instana/activators/active_job.rb +21 -0
  55. data/lib/instana/activators/active_record.rb +21 -0
  56. data/lib/instana/activators/aws_sdk_dynamodb.rb +20 -0
  57. data/lib/instana/activators/aws_sdk_lambda.rb +20 -0
  58. data/lib/instana/activators/aws_sdk_s3.rb +20 -0
  59. data/lib/instana/activators/aws_sdk_sns.rb +20 -0
  60. data/lib/instana/activators/aws_sdk_sqs.rb +20 -0
  61. data/lib/instana/activators/cuba.rb +21 -0
  62. data/lib/instana/activators/dalli.rb +23 -0
  63. data/lib/instana/activators/excon.rb +20 -0
  64. data/lib/instana/activators/graphql.rb +22 -0
  65. data/lib/instana/activators/grpc_client.rb +20 -0
  66. data/lib/instana/activators/grpc_server.rb +20 -0
  67. data/lib/instana/activators/mongo.rb +23 -0
  68. data/lib/instana/activators/net_http.rb +20 -0
  69. data/lib/instana/activators/rack.rb +16 -0
  70. data/lib/instana/activators/rails.rb +18 -0
  71. data/lib/instana/activators/redis.rb +20 -0
  72. data/lib/instana/activators/resque_client.rb +21 -0
  73. data/lib/instana/activators/resque_worker.rb +32 -0
  74. data/lib/instana/activators/rest_client.rb +20 -0
  75. data/lib/instana/activators/roda.rb +21 -0
  76. data/lib/instana/activators/shoryuken.rb +24 -0
  77. data/lib/instana/activators/sidekiq_client.rb +24 -0
  78. data/lib/instana/activators/sidekiq_worker.rb +24 -0
  79. data/lib/instana/activators/sinatra.rb +21 -0
  80. data/lib/instana/backend/agent.rb +68 -0
  81. data/lib/instana/backend/gc_snapshot.rb +41 -0
  82. data/lib/instana/backend/host_agent.rb +83 -0
  83. data/lib/instana/backend/host_agent_activation_observer.rb +99 -0
  84. data/lib/instana/backend/host_agent_lookup.rb +57 -0
  85. data/lib/instana/backend/host_agent_reporting_observer.rb +129 -0
  86. data/lib/instana/backend/process_info.rb +72 -0
  87. data/lib/instana/backend/request_client.rb +74 -0
  88. data/lib/instana/backend/serverless_agent.rb +116 -0
  89. data/lib/instana/base.rb +15 -29
  90. data/lib/instana/config.rb +31 -23
  91. data/lib/instana/frameworks/cuba.rb +32 -3
  92. data/lib/instana/frameworks/rails.rb +22 -32
  93. data/lib/instana/frameworks/roda.rb +41 -3
  94. data/lib/instana/frameworks/sinatra.rb +16 -3
  95. data/lib/instana/instrumentation/action_cable.rb +53 -0
  96. data/lib/instana/instrumentation/action_controller.rb +84 -0
  97. data/lib/instana/instrumentation/action_mailer.rb +22 -0
  98. data/lib/instana/instrumentation/action_view.rb +30 -0
  99. data/lib/instana/instrumentation/active_job.rb +52 -0
  100. data/lib/instana/instrumentation/active_record.rb +50 -0
  101. data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +48 -0
  102. data/lib/instana/instrumentation/aws_sdk_lambda.rb +37 -0
  103. data/lib/instana/instrumentation/aws_sdk_s3.rb +55 -0
  104. data/lib/instana/instrumentation/aws_sdk_sns.rb +29 -0
  105. data/lib/instana/instrumentation/aws_sdk_sqs.rb +98 -0
  106. data/lib/instana/instrumentation/dalli.rb +10 -18
  107. data/lib/instana/instrumentation/excon.rb +73 -61
  108. data/lib/instana/instrumentation/graphql.rb +78 -0
  109. data/lib/instana/instrumentation/grpc.rb +73 -66
  110. data/lib/instana/instrumentation/instrumented_request.rb +190 -0
  111. data/lib/instana/instrumentation/mongo.rb +46 -0
  112. data/lib/instana/instrumentation/net-http.rb +54 -44
  113. data/lib/instana/instrumentation/rack.rb +57 -48
  114. data/lib/instana/instrumentation/redis.rb +13 -18
  115. data/lib/instana/instrumentation/resque.rb +28 -51
  116. data/lib/instana/instrumentation/rest-client.rb +5 -17
  117. data/lib/instana/instrumentation/shoryuken.rb +44 -0
  118. data/lib/instana/instrumentation/sidekiq-client.rb +4 -10
  119. data/lib/instana/instrumentation/sidekiq-worker.rb +4 -10
  120. data/lib/instana/instrumented_logger.rb +26 -0
  121. data/lib/instana/logger_delegator.rb +31 -0
  122. data/lib/instana/open_tracing/carrier.rb +7 -0
  123. data/lib/instana/open_tracing/instana_tracer.rb +99 -0
  124. data/lib/instana/rack.rb +4 -0
  125. data/lib/instana/secrets.rb +59 -0
  126. data/lib/instana/serverless.rb +160 -0
  127. data/lib/instana/setup.rb +36 -12
  128. data/lib/instana/snapshot/deltable.rb +25 -0
  129. data/lib/instana/snapshot/docker_container.rb +151 -0
  130. data/lib/instana/snapshot/fargate_container.rb +88 -0
  131. data/lib/instana/snapshot/fargate_process.rb +67 -0
  132. data/lib/instana/snapshot/fargate_task.rb +72 -0
  133. data/lib/instana/snapshot/google_cloud_run_instance.rb +69 -0
  134. data/lib/instana/snapshot/google_cloud_run_process.rb +58 -0
  135. data/lib/instana/snapshot/lambda_function.rb +39 -0
  136. data/lib/instana/snapshot/ruby_process.rb +48 -0
  137. data/lib/instana/tracer.rb +42 -148
  138. data/lib/instana/tracing/processor.rb +48 -21
  139. data/lib/instana/tracing/span.rb +70 -61
  140. data/lib/instana/tracing/span_context.rb +34 -2
  141. data/lib/instana/util.rb +25 -137
  142. data/lib/instana/version.rb +4 -1
  143. data/lib/instana.rb +12 -2
  144. data/lib/opentracing.rb +29 -3
  145. data/sonar-project.properties +9 -0
  146. data/test/activator_test.rb +30 -0
  147. data/test/backend/agent_test.rb +80 -0
  148. data/test/backend/gc_snapshot_test.rb +11 -0
  149. data/test/backend/host_agent_activation_observer_test.rb +73 -0
  150. data/test/backend/host_agent_lookup_test.rb +78 -0
  151. data/test/backend/host_agent_reporting_observer_test.rb +274 -0
  152. data/test/backend/host_agent_test.rb +57 -0
  153. data/test/backend/process_info_test.rb +83 -0
  154. data/test/backend/request_client_test.rb +39 -0
  155. data/test/backend/serverless_agent_test.rb +83 -0
  156. data/test/benchmarks/bench_id_generation.rb +3 -0
  157. data/test/benchmarks/bench_opentracing.rb +3 -0
  158. data/test/config_test.rb +11 -14
  159. data/test/frameworks/cuba_test.rb +44 -30
  160. data/test/frameworks/roda_test.rb +46 -30
  161. data/test/frameworks/sinatra_test.rb +52 -30
  162. data/test/instana_test.rb +14 -4
  163. data/test/instrumentation/aws_test.rb +196 -0
  164. data/test/instrumentation/dalli_test.rb +3 -0
  165. data/test/instrumentation/excon_test.rb +20 -3
  166. data/test/instrumentation/graphql_test.rb +119 -0
  167. data/test/instrumentation/grpc_test.rb +6 -2
  168. data/test/instrumentation/mongo_test.rb +37 -0
  169. data/test/instrumentation/{net-http_test.rb → net_http_test.rb} +40 -0
  170. data/test/instrumentation/rack_instrumented_request_test.rb +151 -0
  171. data/test/instrumentation/rack_test.rb +404 -0
  172. data/test/instrumentation/rails_action_cable_test.rb +131 -0
  173. data/test/{frameworks/rails/actioncontroller_test.rb → instrumentation/rails_action_controller_test.rb} +48 -17
  174. data/test/instrumentation/rails_action_mailer_test.rb +37 -0
  175. data/test/instrumentation/rails_action_view_test.rb +151 -0
  176. data/test/instrumentation/rails_active_job_test.rb +65 -0
  177. data/test/instrumentation/rails_active_record_database_missing_test.rb +43 -0
  178. data/test/instrumentation/rails_active_record_test.rb +115 -0
  179. data/test/instrumentation/redis_test.rb +13 -0
  180. data/test/instrumentation/resque_test.rb +63 -17
  181. data/test/instrumentation/{rest-client_test.rb → rest_client_test.rb} +9 -0
  182. data/test/instrumentation/shoryuken_test.rb +47 -0
  183. data/test/instrumentation/sidekiq-client_test.rb +4 -0
  184. data/test/instrumentation/sidekiq-worker_test.rb +4 -0
  185. data/test/secrets_test.rb +112 -0
  186. data/test/serverless_test.rb +369 -0
  187. data/test/snapshot/deltable_test.rb +17 -0
  188. data/test/snapshot/docker_container_test.rb +82 -0
  189. data/test/snapshot/fargate_container_test.rb +82 -0
  190. data/test/snapshot/fargate_process_test.rb +35 -0
  191. data/test/snapshot/fargate_task_test.rb +49 -0
  192. data/test/snapshot/google_cloud_run_instance_test.rb +74 -0
  193. data/test/snapshot/google_cloud_run_process_test.rb +33 -0
  194. data/test/snapshot/lambda_function_test.rb +37 -0
  195. data/test/snapshot/ruby_process_test.rb +14 -0
  196. data/test/support/apps/active_record/active_record.rb +24 -0
  197. data/test/{servers/grpc_50051.rb → support/apps/grpc/boot.rb} +4 -1
  198. data/test/{apps → support/apps/grpc}/grpc_server.rb +3 -0
  199. data/test/{servers/rackapp_6511.rb → support/apps/http_endpoint/boot.rb} +3 -0
  200. data/test/{servers/rails_3205.rb → support/apps/rails/boot.rb} +10 -13
  201. data/test/{models → support/apps/rails/models}/block.rb +4 -1
  202. data/test/{models → support/apps/rails/models}/block6.rb +3 -0
  203. data/test/support/apps/resque/boot.rb +5 -0
  204. data/test/{jobs → support/apps/resque/jobs}/resque_error_job.rb +3 -3
  205. data/test/{jobs → support/apps/resque/jobs}/resque_fast_job.rb +6 -3
  206. data/test/support/apps/sidekiq/boot.rb +25 -0
  207. data/test/{jobs → support/apps/sidekiq/jobs}/sidekiq_job_1.rb +3 -0
  208. data/test/{jobs → support/apps/sidekiq/jobs}/sidekiq_job_2.rb +3 -0
  209. data/test/{servers → support/apps}/sidekiq/worker.rb +5 -2
  210. data/test/support/helpers.rb +97 -0
  211. data/test/support/mock_timer.rb +20 -0
  212. data/test/test_helper.rb +49 -145
  213. data/test/tracing/custom_test.rb +4 -4
  214. data/test/tracing/id_management_test.rb +13 -63
  215. data/test/tracing/instrumented_logger_test.rb +39 -0
  216. data/test/tracing/opentracing_test.rb +21 -5
  217. data/test/tracing/processor_test.rb +58 -0
  218. data/test/tracing/span_context_test.rb +22 -0
  219. data/test/tracing/span_test.rb +165 -0
  220. data/test/tracing/tracer_async_test.rb +32 -0
  221. data/test/tracing/tracer_test.rb +113 -14
  222. data/test/util_test.rb +10 -0
  223. metadata +249 -160
  224. data/.travis.yml +0 -43
  225. data/Dockerfile +0 -16
  226. data/benchmarks/10k-rack-traces.rb +0 -92
  227. data/benchmarks/Gemfile +0 -7
  228. data/benchmarks/Gemfile.lock +0 -38
  229. data/benchmarks/id_generation.rb +0 -12
  230. data/benchmarks/opentracing.rb +0 -26
  231. data/benchmarks/rack_vanilla_vs_traced.rb +0 -85
  232. data/benchmarks/stackprof_rack_tracing.rb +0 -77
  233. data/benchmarks/time_processing.rb +0 -12
  234. data/gemfiles/libraries.gemfile +0 -71
  235. data/gemfiles/rails32.gemfile +0 -51
  236. data/gemfiles/rails42.gemfile +0 -50
  237. data/gemfiles/rails50.gemfile +0 -52
  238. data/gemfiles/rails52.gemfile +0 -52
  239. data/gemfiles/rails60.gemfile +0 -72
  240. data/lib/instana/agent/helpers.rb +0 -84
  241. data/lib/instana/agent/hooks.rb +0 -41
  242. data/lib/instana/agent/tasks.rb +0 -48
  243. data/lib/instana/agent.rb +0 -499
  244. data/lib/instana/collector.rb +0 -116
  245. data/lib/instana/collectors/gc.rb +0 -57
  246. data/lib/instana/collectors/memory.rb +0 -34
  247. data/lib/instana/collectors/thread.rb +0 -30
  248. data/lib/instana/eum/eum-test.js.erb +0 -17
  249. data/lib/instana/eum/eum.js.erb +0 -17
  250. data/lib/instana/frameworks/instrumentation/abstract_mysql_adapter.rb +0 -58
  251. data/lib/instana/frameworks/instrumentation/action_controller.rb +0 -183
  252. data/lib/instana/frameworks/instrumentation/action_view.rb +0 -43
  253. data/lib/instana/frameworks/instrumentation/active_record.rb +0 -27
  254. data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +0 -81
  255. data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +0 -56
  256. data/lib/instana/frameworks/instrumentation/postgresql_adapter.rb +0 -85
  257. data/lib/instana/helpers.rb +0 -44
  258. data/lib/instana/instrumentation.rb +0 -25
  259. data/lib/instana/opentracing/carrier.rb +0 -4
  260. data/lib/instana/opentracing/tracer.rb +0 -18
  261. data/lib/instana/test.rb +0 -42
  262. data/lib/instana/thread_local.rb +0 -15
  263. data/lib/oj_check.rb +0 -16
  264. data/test/agent/agent_test.rb +0 -148
  265. data/test/apps/cuba.rb +0 -15
  266. data/test/apps/roda.rb +0 -10
  267. data/test/apps/sinatra.rb +0 -5
  268. data/test/frameworks/rack_test.rb +0 -200
  269. data/test/frameworks/rails/actionview3_test.rb +0 -210
  270. data/test/frameworks/rails/actionview4_test.rb +0 -208
  271. data/test/frameworks/rails/actionview5_test.rb +0 -221
  272. data/test/frameworks/rails/activerecord_test.rb +0 -227
  273. data/test/servers/helpers/sidekiq_worker_initializer.rb +0 -27
  274. data/test/tracing/trace_test.rb +0 -67
@@ -1,18 +0,0 @@
1
- module OpenTracing
2
- class << self
3
- # Text format for #inject and #extract
4
- FORMAT_TEXT_MAP = 1
5
-
6
- # Binary format for #inject and #extract
7
- FORMAT_BINARY = 2
8
-
9
- # Ruby Specific format to handle how Rack changes environment variables.
10
- FORMAT_RACK = 3
11
-
12
- attr_accessor :global_tracer
13
-
14
- def method_missing(method_name, *args, &block)
15
- @global_tracer.send(method_name, *args, &block)
16
- end
17
- end
18
- end
data/lib/instana/test.rb DELETED
@@ -1,42 +0,0 @@
1
- module Instana
2
- class Test
3
- class << self
4
- # Used at the start of the test suite to configure required environment
5
- # variables (if missing)
6
- #
7
- def setup_environment
8
- # Set defaults if not set
9
- ENV['MEMCACHED_HOST'] ||= '127.0.0.1:11211'
10
- ENV['TRAVIS_PSQL_HOST'] ||= "127.0.0.1"
11
- ENV['TRAVIS_PSQL_USER'] ||= "postgres"
12
- ENV['TRAVIS_MYSQL_HOST'] ||= "127.0.0.1"
13
- ENV['TRAVIS_MYSQL_USER'] ||= "root"
14
-
15
- if !ENV.key?('DATABASE_URL')
16
- if ENV['DB_FLAVOR'] == 'postgresql'
17
- ENV['DATABASE_URL'] = "postgresql://#{ENV['TRAVIS_PSQL_USER']}:#{ENV['TRAVIS_PSQL_PASS']}@#{ENV['TRAVIS_PSQL_HOST']}:5432/travis_ci_test"
18
- elsif ENV['DB_FLAVOR'] == 'mysql'
19
- ENV['DATABASE_URL'] = "mysql://#{ENV['TRAVIS_MYSQL_USER']}:#{ENV['TRAVIS_MYSQL_PASS']}@#{ENV['TRAVIS_MYSQL_HOST']}:3306/travis_ci_test"
20
- else
21
- ENV['DB_FLAVOR'] ||= 'mysql2'
22
- ENV['DATABASE_URL'] = "mysql2://#{ENV['TRAVIS_MYSQL_USER']}:#{ENV['TRAVIS_MYSQL_PASS']}@#{ENV['TRAVIS_MYSQL_HOST']}:3306/travis_ci_test"
23
- end
24
- end
25
-
26
- Instana.logger.warn "Database connect string configured to: #{ENV['DATABASE_URL']}"
27
- end
28
-
29
- def postgresql?
30
- ENV['DB_FLAVOR'] == 'postgresql'
31
- end
32
-
33
- def mysql2?
34
- ENV['DB_FLAVOR'] == 'mysql2'
35
- end
36
-
37
- def mysql?
38
- ENV['DB_FLAVOR'] == 'mysql'
39
- end
40
- end
41
- end
42
- end
@@ -1,15 +0,0 @@
1
- module Instana
2
- module ThreadLocal
3
- def thread_local(name)
4
- key = "__#{self}_#{name}__".intern
5
-
6
- define_method(name) do
7
- Thread.current[key]
8
- end
9
-
10
- define_method(name.to_s + '=') do |value|
11
- Thread.current[key] = value
12
- end
13
- end
14
- end
15
- end
data/lib/oj_check.rb DELETED
@@ -1,16 +0,0 @@
1
- begin
2
- require 'oj'
3
- rescue LoadError => e
4
- # OJ is not available in JRuby
5
- module Instana
6
- class Oj
7
- def self.dump(*args)
8
- args.first.to_json
9
- end
10
-
11
- def self.load(*args)
12
- JSON.parse args.first
13
- end
14
- end
15
- end
16
- end
@@ -1,148 +0,0 @@
1
- require 'test_helper'
2
- require './lib/oj_check'
3
-
4
- class AgentTest < Minitest::Test
5
-
6
- Oj = ::Instana::Oj unless defined?(Oj)
7
-
8
- def teardown
9
- WebMock.reset!
10
- ::Instana.agent.instance_variable_set(:@discovered, nil)
11
- end
12
-
13
- def test_agent_host_detection
14
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/"
15
- stub_request(:get, url)
16
- assert_equal true, ::Instana.agent.host_agent_available?
17
- end
18
-
19
- def test_successful_discovery
20
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/"
21
- docker_url = "http://#{::Instana.agent.instance_variable_get(:@default_gateway)}:#{::Instana.config[:agent_port]}/"
22
- stub_request(:get, url)
23
- stub_request(:get, docker_url)
24
- discovered = ::Instana.agent.run_discovery
25
-
26
- assert discovered.is_a?(Hash)
27
- assert_equal "127.0.0.1", discovered[:agent_host]
28
- assert_equal 42699, discovered[:agent_port]
29
- end
30
-
31
- def test_failed_discovery
32
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/"
33
- docker_url = "http://#{::Instana.agent.instance_variable_get(:@default_gateway)}:#{::Instana.config[:agent_port]}/"
34
- stub_request(:get, url).to_raise(Errno::ECONNREFUSED)
35
- stub_request(:get, docker_url).to_raise(Errno::ECONNREFUSED)
36
-
37
- discovered = ::Instana.agent.run_discovery
38
-
39
- assert_equal nil, discovered
40
- end
41
-
42
- def test_custom_configure_agent
43
- original_host = ::Instana.config[:agent_host]
44
- original_port = ::Instana.config[:agent_port]
45
-
46
- # Set custom agent/port
47
- ::Instana.config[:agent_host] = '172.0.12.100'
48
- ::Instana.config[:agent_port] = 12829
49
-
50
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/"
51
- stub_request(:get, url)
52
- discovered = ::Instana.agent.run_discovery
53
-
54
- assert discovered.is_a?(Hash)
55
- assert_equal "172.0.12.100", discovered[:agent_host]
56
- assert_equal 12829, discovered[:agent_port]
57
-
58
- ::Instana.config[:agent_host] = original_host
59
- ::Instana.config[:agent_port] = original_port
60
- end
61
-
62
- def test_no_host_agent
63
- localhost_url = "http://#{::Instana::Agent::LOCALHOST}:#{::Instana.config[:agent_port]}/"
64
- stub_request(:get, localhost_url).to_raise(Errno::ECONNREFUSED)
65
- docker_url = "http://#{::Instana.agent.instance_variable_get(:@default_gateway)}:#{::Instana.config[:agent_port]}/"
66
- stub_request(:get, docker_url).to_timeout
67
- assert_equal false, ::Instana.agent.host_agent_available?
68
- end
69
-
70
- def test_announce_sensor
71
- # Fake discovery values
72
- discovery = {}
73
- discovery[:agent_host] = ::Instana.config[:agent_host]
74
- discovery[:agent_port] = ::Instana.config[:agent_port]
75
- ::Instana.agent.instance_variable_set(:@discovered, discovery)
76
-
77
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/com.instana.plugin.ruby.discovery"
78
- json = Oj.dump({ 'pid' => Process.pid, 'agentUuid' => 'abc' })
79
- stub_request(:put, url).to_return(:body => json, :status => 200)
80
-
81
- assert_equal true, ::Instana.agent.announce_sensor
82
- end
83
-
84
- def test_failed_announce_sensor
85
- # Fake discovery values
86
- discovery = {}
87
- discovery[:agent_host] = ::Instana.config[:agent_host]
88
- discovery[:agent_port] = ::Instana.config[:agent_port]
89
- ::Instana.agent.instance_variable_set(:@discovered, discovery)
90
-
91
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/com.instana.plugin.ruby.discovery"
92
- stub_request(:put, url).to_raise(Errno::ECONNREFUSED)
93
-
94
- assert_equal false, ::Instana.agent.announce_sensor
95
- end
96
-
97
- def test_metric_report
98
- # Fake discovery values
99
- discovery = {}
100
- discovery[:agent_host] = ::Instana.config[:agent_host]
101
- discovery[:agent_port] = ::Instana.config[:agent_port]
102
- ::Instana.agent.instance_variable_set(:@discovered, discovery)
103
-
104
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/com.instana.plugin.ruby.discovery"
105
- json = Oj.dump({ 'pid' => Process.pid, 'agentUuid' => 'abc' })
106
- stub_request(:put, url).to_return(:body => json, :status => 200)
107
- ::Instana.agent.announce_sensor
108
-
109
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/com.instana.plugin.ruby.#{Process.pid}"
110
- stub_request(:post, url)
111
-
112
- payload = { :test => 'true' }
113
- assert_equal true, ::Instana.agent.report_metrics(payload)
114
- end
115
-
116
- def test_failed_metric_report
117
- # Fake discovery values
118
- discovery = {}
119
- discovery[:agent_host] = ::Instana.config[:agent_host]
120
- discovery[:agent_port] = ::Instana.config[:agent_port]
121
- ::Instana.agent.instance_variable_set(:@discovered, discovery)
122
-
123
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/com.instana.plugin.ruby.discovery"
124
- json = { 'pid' => Process.pid, 'agentUuid' => 'abc' }.to_json
125
- stub_request(:put, url).to_return(:body => json, :status => 200)
126
-
127
- ::Instana.agent.announce_sensor
128
-
129
- url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/com.instana.plugin.ruby.#{Process.pid}"
130
- stub_request(:post, url).to_raise(Errno::ECONNREFUSED)
131
-
132
- payload = { :test => 'true' }
133
- assert_equal false, ::Instana.agent.report_metrics(payload)
134
- end
135
-
136
- def test_agent_timeout
137
- # Fake discovery values
138
- discovery = {}
139
- discovery[:agent_host] = ::Instana.config[:agent_host]
140
- discovery[:agent_port] = ::Instana.config[:agent_port]
141
- ::Instana.agent.instance_variable_set(:@discovered, discovery)
142
-
143
- localhost_url = "http://#{::Instana::Agent::LOCALHOST}:#{::Instana.config[:agent_port]}/com.instana.plugin.ruby.discovery"
144
- stub_request(:any, localhost_url).to_timeout
145
-
146
- assert_equal false, ::Instana.agent.announce_sensor
147
- end
148
- end
data/test/apps/cuba.rb DELETED
@@ -1,15 +0,0 @@
1
- require "cuba/safe"
2
-
3
- Cuba.plugin ::Cuba::Safe
4
-
5
- Cuba.define do
6
- on get do
7
- on "hello" do
8
- res.write "Hello Instana!"
9
- end
10
-
11
- on root do
12
- res.redirect '/hello'
13
- end
14
- end
15
- end
data/test/apps/roda.rb DELETED
@@ -1,10 +0,0 @@
1
- class InstanaRodaApp < Roda
2
- route do |r|
3
- r.root do
4
- r.redirect '/hello'
5
- end
6
- r.get "hello" do
7
- "Hello Roda + Instana"
8
- end
9
- end
10
- end
data/test/apps/sinatra.rb DELETED
@@ -1,5 +0,0 @@
1
- class InstanaSinatraApp < ::Sinatra::Base
2
- get '/' do
3
- "Hello Sinatra!"
4
- end
5
- end
@@ -1,200 +0,0 @@
1
- require 'test_helper'
2
- require 'rack/test'
3
- require 'rack/lobster'
4
- require "instana/rack"
5
-
6
- class RackTest < Minitest::Test
7
- include Rack::Test::Methods
8
-
9
- def app
10
- @app = Rack::Builder.new {
11
- use Rack::CommonLogger
12
- use Rack::ShowExceptions
13
- use Instana::Rack
14
- map "/mrlobster" do
15
- run Rack::Lobster.new
16
- end
17
- }
18
- end
19
-
20
- def test_basic_get
21
- clear_all!
22
- ::Instana.config[:collect_backtraces] = true
23
-
24
- get '/mrlobster'
25
- assert last_response.ok?
26
-
27
- spans = ::Instana.processor.queued_spans
28
-
29
- # Span validation
30
- assert_equal 1, spans.count
31
-
32
- first_span = spans.first
33
- assert_equal :rack, first_span[:n]
34
- assert first_span.key?(:data)
35
- assert first_span[:data].key?(:http)
36
- assert_equal "GET", first_span[:data][:http][:method]
37
- assert_equal "/mrlobster", first_span[:data][:http][:url]
38
- assert_equal 200, first_span[:data][:http][:status]
39
- assert_equal 'example.org', first_span[:data][:http][:host]
40
- assert first_span.key?(:f)
41
- assert first_span[:f].key?(:e)
42
- assert first_span[:f].key?(:h)
43
- assert_equal ::Instana.agent.agent_uuid, first_span[:f][:h]
44
-
45
- # Backtrace fingerprint validation
46
- assert first_span.key?(:stack)
47
- assert_equal 2, first_span[:stack].count
48
- refute_nil first_span[:stack].first[:c].match(/instana\/instrumentation\/rack.rb/)
49
-
50
- # Restore to default
51
- ::Instana.config[:collect_backtraces] = false
52
- end
53
-
54
- def test_basic_get_with_custom_service_name
55
- ENV['INSTANA_SERVICE_NAME'] = 'WalterBishop'
56
-
57
- clear_all!
58
- get '/mrlobster'
59
- assert last_response.ok?
60
-
61
- spans = ::Instana.processor.queued_spans
62
-
63
- # Span validation
64
- assert_equal 1, spans.count
65
-
66
- first_span = spans.first
67
- assert_equal 'WalterBishop', first_span[:data][:service]
68
-
69
- ENV.delete('INSTANA_SERVICE_NAME')
70
- end
71
-
72
- def test_basic_post
73
- clear_all!
74
- post '/mrlobster'
75
- assert last_response.ok?
76
-
77
- spans = ::Instana.processor.queued_spans
78
-
79
- # Span validation
80
- assert_equal 1, spans.count
81
- first_span = spans.first
82
- assert_equal :rack, first_span[:n]
83
- assert first_span.key?(:data)
84
- assert first_span[:data].key?(:http)
85
- assert_equal "POST", first_span[:data][:http][:method]
86
- assert_equal "/mrlobster", first_span[:data][:http][:url]
87
- assert_equal 200, first_span[:data][:http][:status]
88
- assert first_span.key?(:f)
89
- assert first_span[:f].key?(:e)
90
- assert first_span[:f].key?(:h)
91
- assert_equal ::Instana.agent.agent_uuid, first_span[:f][:h]
92
- end
93
-
94
- def test_basic_put
95
- clear_all!
96
- put '/mrlobster'
97
- assert last_response.ok?
98
-
99
- spans = ::Instana.processor.queued_spans
100
-
101
- # Span validation
102
- assert_equal 1, spans.count
103
- first_span = spans.first
104
- assert_equal :rack, first_span[:n]
105
- assert first_span.key?(:data)
106
- assert first_span[:data].key?(:http)
107
- assert_equal "PUT", first_span[:data][:http][:method]
108
- assert_equal "/mrlobster", first_span[:data][:http][:url]
109
- assert_equal 200, first_span[:data][:http][:status]
110
- assert first_span.key?(:f)
111
- assert first_span[:f].key?(:e)
112
- assert first_span[:f].key?(:h)
113
- assert_equal ::Instana.agent.agent_uuid, first_span[:f][:h]
114
- end
115
-
116
- def test_context_continuation
117
- clear_all!
118
- header 'X-INSTANA-T', Instana::Util.id_to_header(1234)
119
- header 'X-INSTANA-S', Instana::Util.id_to_header(4321)
120
-
121
- get '/mrlobster'
122
- assert last_response.ok?
123
-
124
- spans = ::Instana.processor.queued_spans
125
-
126
- # Span validation
127
- assert_equal 1, spans.count
128
- first_span = spans.first
129
- assert_equal :rack, first_span[:n]
130
- assert first_span.key?(:data)
131
- assert first_span[:data].key?(:http)
132
- assert_equal "GET", first_span[:data][:http][:method]
133
- assert_equal "/mrlobster", first_span[:data][:http][:url]
134
- assert_equal 200, first_span[:data][:http][:status]
135
- assert first_span.key?(:f)
136
- assert first_span[:f].key?(:e)
137
- assert first_span[:f].key?(:h)
138
- assert_equal ::Instana.agent.agent_uuid, first_span[:f][:h]
139
-
140
- # Context validation
141
- # The first span should have the passed in trace ID
142
- # and specify the passed in span ID as it's parent.
143
- assert_equal 1234, first_span[:t]
144
- assert_equal 4321, first_span[:p]
145
- end
146
-
147
- def test_instana_response_headers
148
- clear_all!
149
- get '/mrlobster'
150
- assert last_response.ok?
151
-
152
- refute_nil last_response.headers.key?("X-Instana-T")
153
- refute_nil last_response.headers.key?("X-Instana-S")
154
- end
155
-
156
- def test_that_url_params_not_logged
157
- clear_all!
158
- get '/mrlobster?blah=2&wilma=1&betty=2;fred=3'
159
-
160
- spans = ::Instana.processor.queued_spans
161
- assert_equal 1, spans.length
162
-
163
- refute_nil spans.first.key?(:data)
164
- refute_nil spans.first[:data].key?(:http)
165
- refute_nil spans.first[:data][:http].key?(:url)
166
- assert_equal '/mrlobster', spans.first[:data][:http][:url]
167
-
168
- assert last_response.ok?
169
- end
170
-
171
- def test_custom_headers_capture
172
- clear_all!
173
- ::Instana.config[:collect_backtraces] = true
174
- ::Instana.agent.extra_headers = %w(X-Capture-This X-Capture-That)
175
-
176
- get '/mrlobster', {}, { "HTTP_X_CAPTURE_THIS" => "ThereYouGo" }
177
- assert last_response.ok?
178
- assert_equal "ThereYouGo", last_request.env["HTTP_X_CAPTURE_THIS"]
179
-
180
- spans = ::Instana.processor.queued_spans
181
-
182
- # Span validation
183
- assert_equal 1, spans.count
184
- first_span = spans.first
185
-
186
- assert first_span[:data][:http].key?(:header)
187
- assert first_span[:data][:http][:header].key?(:"X-Capture-This")
188
- assert !first_span[:data][:http][:header].key?(:"X-Capture-That")
189
- assert_equal "ThereYouGo", first_span[:data][:http][:header][:"X-Capture-This"]
190
-
191
- # Backtrace fingerprint validation
192
- assert first_span.key?(:stack)
193
- assert_equal 2, first_span[:stack].count
194
- refute_nil first_span[:stack].first[:c].match(/instana\/instrumentation\/rack.rb/)
195
-
196
- # Restore to default
197
- ::Instana.config[:collect_backtraces] = false
198
- ::Instana.agent.extra_headers = nil
199
- end
200
- end
@@ -1,210 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ActionViewTest < Minitest::Test
4
- def test_config_defaults
5
- assert ::Instana.config[:action_view].is_a?(Hash)
6
- assert ::Instana.config[:action_view].key?(:enabled)
7
- assert_equal true, ::Instana.config[:action_view][:enabled]
8
- end
9
-
10
- def test_render_view
11
- clear_all!
12
-
13
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_view'))
14
-
15
- spans = Instana.processor.queued_spans
16
- assert_equal 3, spans.length
17
- first_span = spans[0]
18
- second_span = spans[1]
19
- third_span = spans[2]
20
-
21
- assert_equal :rack, first_span.name
22
- assert_equal :actioncontroller, second_span.name
23
- assert_equal :actionview, third_span.name
24
- end
25
-
26
- def test_render_nothing
27
- clear_all!
28
-
29
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_nothing'))
30
-
31
- spans = Instana.processor.queued_spans
32
- assert_equal 3, spans.length
33
- first_span = spans[0]
34
- second_span = spans[1]
35
- third_span = spans[2]
36
-
37
- assert_equal :rack, first_span.name
38
- assert_equal :actioncontroller, second_span.name
39
- assert_equal "Nothing", third_span[:data][:actionview][:name]
40
- assert_equal :actionview, third_span.name
41
- end
42
-
43
- def test_render_file
44
- clear_all!
45
-
46
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_file'))
47
-
48
- spans = Instana.processor.queued_spans
49
- assert_equal 3, spans.length
50
- first_span = spans[0]
51
- second_span = spans[1]
52
- third_span = spans[2]
53
-
54
- assert_equal :rack, first_span.name
55
- assert_equal :actioncontroller, second_span.name
56
- assert_equal "/etc/issue", third_span[:data][:actionview][:name]
57
- assert_equal :actionview, third_span.name
58
- end
59
-
60
- def test_render_json
61
- clear_all!
62
-
63
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_json'))
64
-
65
- spans = Instana.processor.queued_spans
66
- assert_equal 3, spans.length
67
- first_span = spans[0]
68
- second_span = spans[1]
69
- third_span = spans[2]
70
-
71
- assert_equal :rack, first_span.name
72
- assert_equal :actioncontroller, second_span.name
73
- assert_equal "JSON", third_span[:data][:actionview][:name]
74
- assert_equal :actionview, third_span.name
75
- end
76
-
77
- def test_render_xml
78
- clear_all!
79
-
80
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_xml'))
81
-
82
- assert_equal 3, spans.length
83
- first_span = spans[0]
84
- second_span = spans[1]
85
- third_span = spans[2]
86
-
87
- assert_equal :rack, first_span.name
88
- assert_equal :actioncontroller, second_span.name
89
- assert_equal "XML", third_span[:data][:actionview][:name]
90
- assert_equal :actionview, third_span.name
91
- end
92
-
93
- def test_render_body
94
- clear_all!
95
-
96
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_rawbody'))
97
-
98
- spans = Instana.processor.queued_spans
99
- assert_equal 3, spans.length
100
- first_span = spans[0]
101
- second_span = spans[1]
102
- third_span = spans[2]
103
-
104
- assert_equal :rack, first_span.name
105
- assert_equal :actioncontroller, second_span.name
106
- assert_equal "Raw", third_span[:data][:actionview][:name]
107
- assert_equal :actionview, third_span.name
108
- end
109
-
110
- def test_render_js
111
- clear_all!
112
-
113
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_js'))
114
-
115
- spans = Instana.processor.queued_spans
116
- assert_equal 3, spans.length
117
- first_span = spans[0]
118
- second_span = spans[1]
119
- third_span = spans[2]
120
-
121
- assert_equal :rack, first_span.name
122
- assert_equal :actioncontroller, second_span.name
123
- assert_equal "Javascript", third_span[:data][:actionview][:name]
124
- assert_equal :actionview, third_span.name
125
- end
126
-
127
- def test_render_alternate_layout
128
- clear_all!
129
-
130
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_alternate_layout'))
131
-
132
- spans = Instana.processor.queued_spans
133
- assert_equal 3, spans.length
134
- first_span = spans[0]
135
- second_span = spans[1]
136
- third_span = spans[2]
137
-
138
- assert_equal :rack, first_span.name
139
- assert_equal :actioncontroller, second_span.name
140
- assert_equal "layouts/mobile", third_span[:data][:actionview][:name]
141
- assert_equal :actionview, third_span.name
142
- end
143
-
144
- def test_render_partial
145
- clear_all!
146
-
147
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_partial'))
148
-
149
- spans = Instana.processor.queued_spans
150
- assert_equal 4, spans.length
151
- first_span = spans[0]
152
- second_span = spans[1]
153
- third_span = spans[2]
154
- fourth_span = spans[3]
155
-
156
- assert_equal :rack, first_span.name
157
- assert_equal :actioncontroller, second_span.name
158
- assert_equal :actionview, third_span.name
159
- assert_equal :render, fourth_span.name
160
- assert_equal :partial, fourth_span[:data][:render][:type]
161
- assert_equal 'message', fourth_span[:data][:render][:name]
162
- end
163
-
164
- def test_render_partial_that_errors
165
- clear_all!
166
-
167
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_partial_that_errors'))
168
-
169
- spans = Instana.processor.queued_spans
170
- assert_equal 4, spans.length
171
- first_span = spans[0]
172
- second_span = spans[1]
173
- third_span = spans[2]
174
- fourth_span = spans[3]
175
-
176
- assert_equal :rack, first_span.name
177
- assert_equal :actioncontroller, second_span.name
178
- assert_equal :actionview, third_span.name
179
- assert_equal :render, fourth_span.name
180
- assert_equal :partial, fourth_span[:data][:render][:type]
181
- assert_equal 'syntax_error', fourth_span[:data][:render][:name]
182
- assert fourth_span[:data][:log].key?(:message)
183
- assert_equal "ActionView::Template::Error", fourth_span[:data][:log][:parameters]
184
- assert fourth_span[:error]
185
- assert fourth_span[:stack]
186
- end
187
-
188
- def test_render_collection
189
- clear_all!
190
-
191
- Net::HTTP.get(URI.parse('http://localhost:3205/test/render_collection'))
192
-
193
- spans = Instana.processor.queued_spans
194
- assert_equal 5, spans.length
195
- first_span = spans[0]
196
- second_span = spans[1]
197
- third_span = spans[2]
198
- fourth_span = spans[3]
199
- fifth_span = spans[4]
200
-
201
- assert_equal :rack, first_span.name
202
- assert_equal :actioncontroller, second_span.name
203
- assert_equal :activerecord, third_span.name
204
- assert_equal :actionview, fourth_span.name
205
-
206
- assert_equal :render, fifth_span.name
207
- assert_equal :collection, fifth_span[:data][:render][:type]
208
- assert_equal 'blocks/block', fifth_span[:data][:render][:name]
209
- end
210
- end