instana 1.10.1-java

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.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +23 -0
  3. data/.gitignore +16 -0
  4. data/.rubocop.yml +1156 -0
  5. data/.travis.yml +43 -0
  6. data/Configuration.md +149 -0
  7. data/Dockerfile +13 -0
  8. data/Gemfile +41 -0
  9. data/LICENSE +21 -0
  10. data/README.md +102 -0
  11. data/Rakefile +56 -0
  12. data/Tracing.md +145 -0
  13. data/Troubleshooting.md +32 -0
  14. data/benchmarks/Gemfile +7 -0
  15. data/benchmarks/id_generation.rb +12 -0
  16. data/benchmarks/opentracing.rb +26 -0
  17. data/benchmarks/rack_vanilla_vs_traced.rb +80 -0
  18. data/benchmarks/stackprof_rack_tracing.rb +77 -0
  19. data/benchmarks/time_processing.rb +12 -0
  20. data/bin/console +7 -0
  21. data/bin/setup +8 -0
  22. data/examples/opentracing.rb +31 -0
  23. data/examples/tracing.rb +80 -0
  24. data/gemfiles/libraries.gemfile +71 -0
  25. data/gemfiles/rails32.gemfile +51 -0
  26. data/gemfiles/rails42.gemfile +50 -0
  27. data/gemfiles/rails50.gemfile +52 -0
  28. data/instana.gemspec +46 -0
  29. data/lib/instana.rb +12 -0
  30. data/lib/instana/agent.rb +441 -0
  31. data/lib/instana/agent/helpers.rb +61 -0
  32. data/lib/instana/agent/hooks.rb +37 -0
  33. data/lib/instana/agent/tasks.rb +48 -0
  34. data/lib/instana/base.rb +54 -0
  35. data/lib/instana/collector.rb +116 -0
  36. data/lib/instana/collectors/gc.rb +57 -0
  37. data/lib/instana/collectors/memory.rb +34 -0
  38. data/lib/instana/collectors/thread.rb +30 -0
  39. data/lib/instana/config.rb +79 -0
  40. data/lib/instana/eum/eum-test.js.erb +16 -0
  41. data/lib/instana/eum/eum.js.erb +14 -0
  42. data/lib/instana/frameworks/cuba.rb +6 -0
  43. data/lib/instana/frameworks/instrumentation/abstract_mysql_adapter.rb +58 -0
  44. data/lib/instana/frameworks/instrumentation/action_controller.rb +183 -0
  45. data/lib/instana/frameworks/instrumentation/action_view.rb +43 -0
  46. data/lib/instana/frameworks/instrumentation/active_record.rb +27 -0
  47. data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +81 -0
  48. data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +56 -0
  49. data/lib/instana/frameworks/instrumentation/postgresql_adapter.rb +71 -0
  50. data/lib/instana/frameworks/rails.rb +42 -0
  51. data/lib/instana/frameworks/roda.rb +6 -0
  52. data/lib/instana/frameworks/sinatra.rb +9 -0
  53. data/lib/instana/helpers.rb +40 -0
  54. data/lib/instana/instrumentation.rb +21 -0
  55. data/lib/instana/instrumentation/dalli.rb +78 -0
  56. data/lib/instana/instrumentation/excon.rb +74 -0
  57. data/lib/instana/instrumentation/grpc.rb +84 -0
  58. data/lib/instana/instrumentation/net-http.rb +66 -0
  59. data/lib/instana/instrumentation/rack.rb +77 -0
  60. data/lib/instana/instrumentation/redis.rb +82 -0
  61. data/lib/instana/instrumentation/resque.rb +131 -0
  62. data/lib/instana/instrumentation/rest-client.rb +34 -0
  63. data/lib/instana/instrumentation/sidekiq-client.rb +45 -0
  64. data/lib/instana/instrumentation/sidekiq-worker.rb +54 -0
  65. data/lib/instana/opentracing/carrier.rb +4 -0
  66. data/lib/instana/opentracing/tracer.rb +18 -0
  67. data/lib/instana/rack.rb +10 -0
  68. data/lib/instana/setup.rb +36 -0
  69. data/lib/instana/test.rb +40 -0
  70. data/lib/instana/thread_local.rb +15 -0
  71. data/lib/instana/tracer.rb +392 -0
  72. data/lib/instana/tracing/processor.rb +92 -0
  73. data/lib/instana/tracing/span.rb +401 -0
  74. data/lib/instana/tracing/span_context.rb +33 -0
  75. data/lib/instana/util.rb +261 -0
  76. data/lib/instana/version.rb +4 -0
  77. data/lib/oj_check.rb +16 -0
  78. data/lib/opentracing.rb +6 -0
  79. data/test/agent/agent_test.rb +143 -0
  80. data/test/apps/cuba.rb +15 -0
  81. data/test/apps/grpc_server.rb +81 -0
  82. data/test/apps/roda.rb +10 -0
  83. data/test/apps/sinatra.rb +5 -0
  84. data/test/benchmarks/bench_id_generation.rb +12 -0
  85. data/test/benchmarks/bench_opentracing.rb +13 -0
  86. data/test/config_test.rb +37 -0
  87. data/test/frameworks/cuba_test.rb +44 -0
  88. data/test/frameworks/rack_test.rb +167 -0
  89. data/test/frameworks/rails/actioncontroller_test.rb +93 -0
  90. data/test/frameworks/rails/actionview3_test.rb +255 -0
  91. data/test/frameworks/rails/actionview4_test.rb +254 -0
  92. data/test/frameworks/rails/actionview5_test.rb +221 -0
  93. data/test/frameworks/rails/activerecord3_test.rb +134 -0
  94. data/test/frameworks/rails/activerecord4_test.rb +134 -0
  95. data/test/frameworks/rails/activerecord5_test.rb +87 -0
  96. data/test/frameworks/roda_test.rb +44 -0
  97. data/test/frameworks/sinatra_test.rb +44 -0
  98. data/test/instana_test.rb +27 -0
  99. data/test/instrumentation/dalli_test.rb +253 -0
  100. data/test/instrumentation/excon_test.rb +147 -0
  101. data/test/instrumentation/grpc_test.rb +377 -0
  102. data/test/instrumentation/net-http_test.rb +160 -0
  103. data/test/instrumentation/redis_test.rb +119 -0
  104. data/test/instrumentation/resque_test.rb +128 -0
  105. data/test/instrumentation/rest-client_test.rb +55 -0
  106. data/test/instrumentation/sidekiq-client_test.rb +125 -0
  107. data/test/instrumentation/sidekiq-worker_test.rb +173 -0
  108. data/test/jobs/resque_error_job.rb +22 -0
  109. data/test/jobs/resque_fast_job.rb +20 -0
  110. data/test/jobs/sidekiq_job_1.rb +6 -0
  111. data/test/jobs/sidekiq_job_2.rb +7 -0
  112. data/test/models/block.rb +18 -0
  113. data/test/servers/grpc_50051.rb +20 -0
  114. data/test/servers/helpers/sidekiq_worker_initializer.rb +27 -0
  115. data/test/servers/rackapp_6511.rb +25 -0
  116. data/test/servers/rails_3205.rb +167 -0
  117. data/test/servers/sidekiq/worker.rb +27 -0
  118. data/test/test_helper.rb +145 -0
  119. data/test/tracing/custom_test.rb +158 -0
  120. data/test/tracing/id_management_test.rb +130 -0
  121. data/test/tracing/opentracing_test.rb +335 -0
  122. data/test/tracing/trace_test.rb +67 -0
  123. data/test/tracing/tracer_async_test.rb +198 -0
  124. data/test/tracing/tracer_test.rb +223 -0
  125. metadata +327 -0
@@ -0,0 +1,32 @@
1
+ # Troubleshooting
2
+
3
+ The Instana gem has been designed to be fully automatic in process metric reporting and trace reporting. But if something
4
+ goes wrong, you can use the following steps and tips to potentially diagnose any issues that may exist.
5
+
6
+ # Supported Components
7
+
8
+ Make sure that the component that you want to get visibility into has been added to the support matrix. A list of all
9
+ supported components can be found in the [documentation](https://docs.instana.io/ecosystem/ruby/).
10
+
11
+ # Logging & Environment Variables
12
+
13
+ By default, the gem will log informational messages on boot that will indicate if any problems were encountered. If you
14
+ set the `INSTANA_DEBUG` environment variable, it will increase the amount of logging output.
15
+
16
+ ![instana console output](https://s3.amazonaws.com/instana/Instana+Ruby+boot+console+logging+output.png)
17
+
18
+ In the example above, you can see that the host agent isn't available. Once the host agent is available, the Instana
19
+ gem will automatically re-connect without any intervention.
20
+
21
+ There are even more methods to control logging output. See the [Configuration](https://github.com/instana/ruby-sensor/blob/master/Configuration.md#logging)
22
+ document for details.
23
+
24
+ # Testing in your Application
25
+
26
+ To diagnose the Instana gem from your application, often simply opening an application console with verbose logging can be
27
+ enough to identify any potential issues:
28
+
29
+ ![rails console](https://s3.amazonaws.com/instana/Instana+Ruby+Rails+console+output.png)
30
+
31
+ In the example above, you can see the Instana Ruby gem initialize, instrument some components and a success notification: `Host agent available. We're
32
+ in business`.
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ source "https://rubygems.org"
3
+
4
+ git_source(:github) {|repo_name| "https://github.com/instana/#{repo_name}" }
5
+
6
+ gem "instana", :path => "~/Projects/instana/ruby-sensor"
7
+
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler"
3
+ Bundler.require(:default)
4
+
5
+ require "benchmark"
6
+
7
+ ID_RANGE = -2**63..2**63-1
8
+
9
+ Benchmark.bm do |x|
10
+ x.report("generate_id raw ") { 1_000_000.times { rand(-2**63..2**63-1) } }
11
+ x.report("with fixed range ") { 1_000_000.times { rand(ID_RANGE) } }
12
+ end
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler"
3
+ Bundler.require(:default)
4
+
5
+ require "benchmark"
6
+
7
+ Benchmark.bm do |x|
8
+ x.report("start_span, finish: ") {
9
+ 50_000.times {
10
+ ::Instana.tracer.start_span(:blah).finish
11
+ }
12
+ }
13
+
14
+ x.report("start_span, set_tag(5x), finish:") {
15
+ 50_000.times {
16
+ span = ::Instana.tracer.start_span(:blah)
17
+ span.set_tag(:blah, 1)
18
+ span.set_tag(:dog, 1)
19
+ span.set_tag(:moon, "ok")
20
+ span.set_tag(:ape, 1)
21
+ span.set_tag(:blah, 1)
22
+ span.finish
23
+ }
24
+ }
25
+
26
+ end
@@ -0,0 +1,80 @@
1
+ require "bundler"
2
+
3
+ require 'rack'
4
+ require 'rack/builder'
5
+ require 'rack/handler/puma'
6
+ require 'net/http'
7
+ require "benchmark"
8
+ require "cgi"
9
+ Bundler.require(:default)
10
+ require "instana/rack"
11
+
12
+ Thread.new do
13
+ app = Rack::Builder.new {
14
+ map "/" do
15
+ run Proc.new {
16
+ [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
17
+ }
18
+ end
19
+ map "/error" do
20
+ run Proc.new {
21
+ [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
22
+ }
23
+ end
24
+ }
25
+
26
+ Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7011})
27
+ end
28
+
29
+ Thread.new do
30
+ app = Rack::Builder.new {
31
+ use ::Instana::Rack
32
+ map "/" do
33
+ run Proc.new {
34
+ [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
35
+ }
36
+ end
37
+ map "/error" do
38
+ run Proc.new {
39
+ [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
40
+ }
41
+ end
42
+ }
43
+
44
+ Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7012})
45
+ end
46
+
47
+ sleep(2)
48
+ puts "Rack server started in background thread on localhost:7011"
49
+ puts "Sleeping for 10 to allow announce"
50
+ sleep(10)
51
+
52
+
53
+ puts "Starting benchmarks"
54
+ Benchmark.bm do |x|
55
+
56
+ uri = URI.parse("http://127.0.0.1:7011/")
57
+ ::Net::HTTP.start(uri.host, uri.port) do |hc|
58
+ x.report("vanilla") {
59
+ 1_000.times {
60
+ req = Net::HTTP::Get.new(uri.request_uri)
61
+ hc.request(req)
62
+ }
63
+ }
64
+ end
65
+
66
+ uri = URI.parse("http://127.0.0.1:7012/")
67
+ ::Net::HTTP.start(uri.host, uri.port) do |hc|
68
+ x.report("traced ") {
69
+ 1_000.times {
70
+ ::Instana.tracer.start_or_continue_trace(:rack_call) do
71
+ req = Net::HTTP::Get.new(uri.request_uri)
72
+ hc.request(req)
73
+ end
74
+ }
75
+ }
76
+ end
77
+ end
78
+
79
+
80
+ sleep 10
@@ -0,0 +1,77 @@
1
+ require "bundler"
2
+ require "stackprof"
3
+ require 'rack'
4
+ require 'rack/builder'
5
+ require 'rack/handler/puma'
6
+ require 'net/http'
7
+ require "benchmark"
8
+ require "cgi"
9
+ Bundler.require(:default)
10
+ require "instana/rack"
11
+
12
+ Thread.new do
13
+ app = Rack::Builder.new {
14
+ map "/" do
15
+ run Proc.new {
16
+ [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
17
+ }
18
+ end
19
+ map "/error" do
20
+ run Proc.new {
21
+ [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
22
+ }
23
+ end
24
+ }
25
+
26
+ Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7011})
27
+ end
28
+
29
+ Thread.new do
30
+ app = Rack::Builder.new {
31
+ use ::Instana::Rack
32
+ map "/" do
33
+ run Proc.new {
34
+ [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
35
+ }
36
+ end
37
+ map "/error" do
38
+ run Proc.new {
39
+ [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
40
+ }
41
+ end
42
+ }
43
+
44
+ Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7012})
45
+ end
46
+
47
+ sleep(2)
48
+ puts "Rack server started in background thread on localhost:7011"
49
+ puts "Sleeping for 10 to allow announce"
50
+ sleep(10)
51
+
52
+ puts "Starting profile"
53
+ uri = URI.parse("http://127.0.0.1:7011/")
54
+ StackProf.run(mode: :wall, out: 'tmp/stackprof-rack-vanilla.dump') do
55
+ ::Net::HTTP.start(uri.host, uri.port) do |hc|
56
+ 5_000.times {
57
+ ::Instana.tracer.start_or_continue_trace(:rack_call) do
58
+ req = Net::HTTP::Get.new(uri.request_uri)
59
+ hc.request(req)
60
+ end
61
+ }
62
+ end
63
+ end
64
+ puts "stackprof tmp/stackprof-rack-vanilla.dump --text"
65
+
66
+ uri = URI.parse("http://127.0.0.1:7012/")
67
+ StackProf.run(mode: :wall, out: 'tmp/stackprof-rack-instrumented.dump') do
68
+ ::Net::HTTP.start(uri.host, uri.port) do |hc|
69
+ 5_000.times {
70
+ ::Instana.tracer.start_or_continue_trace(:rack_call) do
71
+ req = Net::HTTP::Get.new(uri.request_uri)
72
+ hc.request(req)
73
+ end
74
+ }
75
+ end
76
+ end
77
+ puts "stackprof tmp/stackprof-rack-instrumented.dump --text"
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler"
3
+ Bundler.require(:default)
4
+
5
+ require "benchmark"
6
+
7
+ # Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
8
+
9
+ Benchmark.bm do |x|
10
+ x.report("Time.now: ") { 1_000_000.times { (Time.now.to_f * 1000).floor } }
11
+ x.report("get_clocktime:") { 1_000_000.times { Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond) } }
12
+ end
data/bin/console ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "instana"
5
+
6
+ require "pry"
7
+ Pry.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,31 @@
1
+ # This file contains a basic OpenTracing example.
2
+ #
3
+ # Note: The instana gem automatically sets the Instana tracer
4
+ # to `OpenTracing.global_tracer`. Once the gem is loaded, you can
5
+ # immediately start making OpenTracing calls.
6
+ #
7
+ require "opentracing"
8
+
9
+ entry_span = OpenTracing.start_span("HandMadeRackServer")
10
+
11
+ entry_span.set_tag(:'http.method', :get)
12
+ entry_span.set_tag(:'http.url', "/users")
13
+ entry_span.set_tag(:'span.kind', "entry")
14
+
15
+ intermediate_span = OpenTracing.start_span("myintermediate", :child_of => entry_span)
16
+ intermediate_span.finish()
17
+
18
+ db_span = OpenTracing.start_span('mydbspan', :child_of => entry_span)
19
+ db_span.set_tag(:'db.instance', "users")
20
+ db_span.set_tag(:'db.statement', "SELECT * FROM user_table")
21
+ db_span.set_tag(:'db.type', "mysql")
22
+ db_span.set_tag(:'db.user', "mysql_login")
23
+ db_span.set_tag(:'span.kind', "exit")
24
+ db_span.finish()
25
+
26
+ intermediate_span = OpenTracing.start_span("myintermediate", :child_of => entry_span)
27
+ intermediate_span.log("ALLOK", :message => "All seems ok")
28
+ intermediate_span.finish()
29
+
30
+ entry_span.set_tag(:'http.status_code', 200)
31
+ entry_span.finish()
@@ -0,0 +1,80 @@
1
+ # This file outlines the Instana Ruby Tracing API.
2
+ #
3
+ # This same tracer also supports OpenTracing. See `opentracing.rb` for
4
+ # separate documentation.
5
+
6
+ # This API is also documented on rubydoc:
7
+ # http://www.rubydoc.info/gems/instana/1.7.8/Instana/Tracer
8
+
9
+ #######################################
10
+ ## Block tracing
11
+ #######################################
12
+
13
+ #Instana::Tracer.start_or_continue_trace(name, kvs, incoming_context) - Initiates tracing
14
+ #Instana::Tracer.trace(name, kvs) - starts a new span in an existing Trace
15
+
16
+ # <start_or_continue_trace> will initiate a new trace. Often used at entry
17
+ # points in webservers (e.g. rack), it will initialize tracing and instrument the passed
18
+ # block. <incoming_id> is a hash for continuing remote traces (remote in terms
19
+ # of service calls, or message queues).
20
+ Instana::Tracer.start_or_continue_trace(:my_block_name, {}, incoming_context) do
21
+ # Code block
22
+ end
23
+
24
+ # <trace> will instrument a block of code in an already running trace.
25
+ # This is the most common use case (instead of initiating new
26
+ # traces).
27
+ Instana::Tracer.trace(:postgres, {:user => 'postgres'}) do
28
+ @postgres.select(1)
29
+ end
30
+
31
+ #######################################
32
+ ## Lower level logging
33
+ #######################################
34
+
35
+ # <log_start_or_continue_trace> will initiate a new trace. Often used at entry
36
+ # points in webservers, it will establish a new trace (for web request,
37
+ # background jobs etc.).
38
+ # <incoming_context> is a hash for continuing remote traces (remote in terms
39
+ # of service calls, or message queues).
40
+ Instana::Tracer.log_start_or_continue(:rack, {}, incoming_context)
41
+
42
+ # <log_entry> will start a new span from the current span within
43
+ # a trace.
44
+ Instana::Tracer.log_entry(name, kvs)
45
+
46
+ # <log_exit> will close out the current span
47
+ Instana::Tracer.log_exit(name, kvs)
48
+
49
+ # <log_info> will append information to the current span in the
50
+ # trace. Examples could be redis options, contextual data, user
51
+ # login status etc...
52
+ Instana::Tracer.log_info({:some_key => 'some_value'})
53
+
54
+ # <log_error> will log an exception to the current span in the
55
+ # trace.
56
+ Instana::Tracer.log_error(Exception)
57
+
58
+ # <log_end> closes out the current span, finishes
59
+ # the trace and adds it to ::Instana.processor
60
+ # for reporting.
61
+ Instana::Tracer.log_end(:rack, {})
62
+
63
+ #######################################
64
+ # Lower level API Example
65
+ ######################################
66
+
67
+ # Full Tracing Lifecycle example
68
+ #
69
+ Instana::Tracer.log_start_or_continue(:mywebserver, {:user_id => @user_id})
70
+
71
+ begin
72
+ Instana::Tracer.log_entry(:redis_lookup, {:redisdb => @redisdb.url})
73
+ @redisdb.get(@user_id.session_id)
74
+ rescue => e
75
+ Instana::Tracer.log_error(e)
76
+ ensure
77
+ Instana::Tracer.log_exit(:redis_lookup)
78
+ end
79
+
80
+ Instana::Tracer.log_end(:mywebserver)
@@ -0,0 +1,71 @@
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
+ # Include the Instana Ruby gem's base set of gems
69
+ gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
70
+
71
+ # vim:syntax=ruby