traceview 3.3.3 → 3.4.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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +18 -18
  3. data/CHANGELOG.md +13 -0
  4. data/README.md +3 -1
  5. data/Rakefile +18 -9
  6. data/gemfiles/delayed_job.gemfile +38 -0
  7. data/gemfiles/frameworks.gemfile +1 -2
  8. data/gemfiles/libraries.gemfile +1 -2
  9. data/gemfiles/rails23.gemfile +1 -2
  10. data/gemfiles/rails30.gemfile +4 -2
  11. data/gemfiles/rails31.gemfile +4 -2
  12. data/gemfiles/rails32.gemfile +4 -2
  13. data/gemfiles/rails40.gemfile +4 -2
  14. data/gemfiles/rails41.gemfile +4 -2
  15. data/gemfiles/rails42.gemfile +4 -2
  16. data/lib/traceview/api/layerinit.rb +3 -5
  17. data/lib/traceview/api/logging.rb +63 -50
  18. data/lib/traceview/api/memcache.rb +10 -9
  19. data/lib/traceview/api/profiling.rb +6 -7
  20. data/lib/traceview/api/util.rb +1 -1
  21. data/lib/traceview/base.rb +21 -7
  22. data/lib/traceview/config.rb +8 -4
  23. data/lib/traceview/frameworks/padrino.rb +2 -2
  24. data/lib/traceview/frameworks/rails.rb +26 -32
  25. data/lib/traceview/frameworks/rails/inst/action_controller.rb +3 -3
  26. data/lib/traceview/frameworks/rails/inst/action_view.rb +4 -2
  27. data/lib/traceview/frameworks/rails/inst/action_view_2x.rb +4 -2
  28. data/lib/traceview/frameworks/rails/inst/action_view_30.rb +4 -2
  29. data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +3 -3
  30. data/lib/traceview/frameworks/sinatra.rb +1 -1
  31. data/lib/traceview/frameworks/sinatra/templates.rb +1 -1
  32. data/lib/traceview/inst/dalli.rb +4 -5
  33. data/lib/traceview/inst/delayed_job.rb +92 -0
  34. data/lib/traceview/inst/em-http-request.rb +3 -0
  35. data/lib/traceview/inst/excon.rb +3 -3
  36. data/lib/traceview/inst/faraday.rb +4 -1
  37. data/lib/traceview/inst/mongo.rb +10 -5
  38. data/lib/traceview/inst/moped.rb +4 -4
  39. data/lib/traceview/inst/redis.rb +5 -7
  40. data/lib/traceview/inst/resque.rb +3 -3
  41. data/lib/traceview/inst/rest-client.rb +2 -2
  42. data/lib/traceview/inst/sidekiq-client.rb +3 -0
  43. data/lib/traceview/inst/sidekiq-worker.rb +3 -0
  44. data/lib/traceview/inst/twitter-cassandra.rb +8 -4
  45. data/lib/traceview/test.rb +30 -1
  46. data/lib/traceview/util.rb +7 -0
  47. data/lib/traceview/version.rb +2 -2
  48. data/test/frameworks/rails3x_test.rb +12 -2
  49. data/test/frameworks/rails4x_test.rb +12 -2
  50. data/test/instrumentation/curb_test.rb +2 -2
  51. data/test/instrumentation/dalli_test.rb +121 -118
  52. data/test/instrumentation/httpclient_test.rb +0 -1
  53. data/test/jobs/delayed_job/db_worker_job.rb +29 -0
  54. data/test/jobs/delayed_job/error_worker_job.rb +10 -0
  55. data/test/jobs/delayed_job/remote_call_worker_job.rb +20 -0
  56. data/test/minitest_helper.rb +8 -3
  57. data/test/models/widget.rb +19 -0
  58. data/test/queues/delayed_job-client_test.rb +95 -0
  59. data/test/queues/delayed_job-worker_test.rb +91 -0
  60. data/test/servers/delayed_job.rb +102 -0
  61. data/test/servers/rails3x_8140.rb +17 -1
  62. data/test/servers/rails4x_8140.rb +18 -1
  63. data/test/support/auto_tracing.rb +40 -0
  64. data/test/support/config_test.rb +5 -1
  65. data/traceview.gemspec +1 -0
  66. metadata +34 -6
  67. data/test/instrumentation/delayed_job-client_test.rb +0 -128
  68. data/test/instrumentation/delayed_job-worker_test.rb +0 -177
@@ -50,7 +50,7 @@ module TraceView
50
50
  end
51
51
 
52
52
  def get_multi_with_traceview(*keys)
53
- return get_multi_without_traceview(keys) unless TraceView.tracing?
53
+ return get_multi_without_traceview(*keys) unless TraceView.tracing?
54
54
 
55
55
  info_kvs = {}
56
56
 
@@ -60,13 +60,12 @@ module TraceView
60
60
  if @servers.is_a?(Array) && !@servers.empty?
61
61
  info_kvs[:RemoteHost] = @servers.join(", ")
62
62
  end
63
- rescue
64
- TraceView.logger.debug "[traceview/debug] Error collecting info keys: #{e.message}"
65
- TraceView.logger.debug e.backtrace
63
+ rescue => e
64
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
66
65
  end
67
66
 
68
67
  TraceView::API.trace('memcache', { :KVOp => :get_multi }, :get_multi) do
69
- values = get_multi_without_traceview(keys)
68
+ values = get_multi_without_traceview(*keys)
70
69
 
71
70
  info_kvs[:KVHitCount] = values.length
72
71
  info_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:dalli][:collect_backtraces]
@@ -0,0 +1,92 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ if defined?(::Delayed)
5
+ module TraceView
6
+ module Inst
7
+ module DelayedJob
8
+ ##
9
+ # ForkHandler
10
+ #
11
+ # Since delayed job doesn't offer a hook into `after_fork`, we alias the method
12
+ # here to do our magic after a fork happens.
13
+ #
14
+ module ForkHandler
15
+ def self.extended(klass)
16
+ ::TraceView::Util.class_method_alias(klass, :after_fork, ::Delayed::Worker)
17
+ end
18
+
19
+ def after_fork_with_traceview
20
+ ::TraceView.logger.info '[traceview/delayed_job] Detected fork. Restarting TraceView reporter.' if TraceView::Config[:verbose]
21
+ ::TraceView::Reporter.restart unless ENV.key?('TRACEVIEW_GEM_TEST')
22
+
23
+ after_fork_without_traceview
24
+ end
25
+ end
26
+
27
+ ##
28
+ # TraceView::Inst::DelayedJob::Plugin
29
+ #
30
+ # The TraceView DelayedJob plugin. Here we wrap `enqueue` and
31
+ # `perform` to capture the timing of the bits we're interested
32
+ # in.
33
+ #
34
+ class Plugin < Delayed::Plugin
35
+ callbacks do |lifecycle|
36
+
37
+ # enqueue
38
+ if TraceView::Config[:delayed_jobclient][:enabled]
39
+ lifecycle.around(:enqueue) do |job, &block|
40
+ begin
41
+ report_kvs = {}
42
+ report_kvs[:Spec] = :pushq
43
+ report_kvs[:Flavor] = :DelayedJob
44
+ report_kvs[:JobName] = job.name
45
+ report_kvs[:MsgID] = job.id
46
+ report_kvs[:Queue] = job.queue if job.queue
47
+ report_kvs['Backtrace'] = TV::API.backtrace if TV::Config[:delayed_jobclient][:collect_backtraces]
48
+
49
+ TraceView::API.trace('delayed_job-client', report_kvs) do
50
+ block.call(job)
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ # invoke_job
57
+ if TraceView::Config[:delayed_jobworker][:enabled]
58
+ lifecycle.around(:perform) do |worker, job, &block|
59
+ begin
60
+ report_kvs = {}
61
+ report_kvs[:Spec] = :job
62
+ report_kvs[:Flavor] = :DelayedJob
63
+ report_kvs[:JobName] = job.name
64
+ report_kvs[:MsgID] = job.id
65
+ report_kvs[:Queue] = job.queue if job.queue
66
+ report_kvs['Backtrace'] = TV::API.backtrace if TV::Config[:delayed_jobworker][:collect_backtraces]
67
+
68
+ # DelayedJob Specific KVs
69
+ report_kvs[:priority] = job.priority
70
+ report_kvs[:attempts] = job.attempts
71
+ report_kvs[:WorkerName] = job.locked_by
72
+ rescue => e
73
+ TV.logger.warn "[traceview/warning] inst/delayed_job.rb: #{e.message}"
74
+ end
75
+
76
+ result = TraceView::API.start_trace('delayed_job-worker', nil, report_kvs) do
77
+ block.call(worker, job)
78
+ TV::API.log_exception(nil, job.error) if job.error
79
+ end
80
+ result[0]
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ ::TraceView.logger.info '[traceview/loading] Instrumenting delayed_job' if TraceView::Config[:verbose]
90
+ ::TraceView::Util.send_extend(::Delayed::Worker, ::TraceView::Inst::DelayedJob::ForkHandler)
91
+ ::Delayed::Worker.plugins << ::TraceView::Inst::DelayedJob::Plugin
92
+ end
@@ -1,3 +1,6 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
1
4
  module TraceView
2
5
  module Inst
3
6
  module EventMachine
@@ -64,7 +64,7 @@ module TraceView
64
64
  # Avoid cross host tracing for blacklisted domains
65
65
  blacklisted = TraceView::API.blacklisted?(@data[:hostname])
66
66
 
67
- req_context = TraceView::Context.toString()
67
+ req_context = TraceView::Context.toString
68
68
  @data[:headers]['X-Trace'] = req_context unless blacklisted
69
69
 
70
70
  kvs = traceview_collect(params)
@@ -84,8 +84,8 @@ module TraceView
84
84
  kvs['HTTPStatus'] = response.status
85
85
 
86
86
  # If we get a redirect, report the location header
87
- if ((300..308).to_a.include? response.status.to_i) && response.headers.key?("Location")
88
- kvs["Location"] = response.headers["Location"]
87
+ if ((300..308).to_a.include? response.status.to_i) && response.headers.key?('Location')
88
+ kvs['Location'] = response.headers['Location']
89
89
  end
90
90
 
91
91
  if response_context && !blacklisted
@@ -1,3 +1,6 @@
1
+ # Copyright (c) 2014 AppNeta, Inc.
2
+ # All rights reserved.
3
+
1
4
  module TraceView
2
5
  module Inst
3
6
  module FaradayConnection
@@ -9,7 +12,7 @@ module TraceView
9
12
  # Only send service KVs if we're not using the Net::HTTP adapter
10
13
  # Otherwise, the Net::HTTP instrumentation will send the service KVs
11
14
  handle_service = !@builder.handlers.include?(Faraday::Adapter::NetHttp) &&
12
- !@builder.handlers.include?(Faraday::Adapter::Excon)
15
+ !@builder.handlers.include?(Faraday::Adapter::Excon)
13
16
  TraceView::API.log_entry('faraday')
14
17
 
15
18
  result = run_request_without_traceview(method, url, body, headers, &block)
@@ -56,7 +56,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
56
56
  report_kvs[:Collection] = args[0] if m == :drop_collection
57
57
 
58
58
  report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:mongo][:collect_backtraces]
59
- rescue
59
+ rescue => e
60
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
60
61
  end
61
62
 
62
63
  TraceView::API.trace('mongo', report_kvs) do
@@ -97,7 +98,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
97
98
  end
98
99
  report_kvs[:Limit] = @limit if @limit != 0
99
100
  end
100
- rescue
101
+ rescue => e
102
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
101
103
  end
102
104
 
103
105
  TraceView::API.trace('mongo', report_kvs) do
@@ -162,7 +164,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
162
164
  report_kvs[:Multi] = args[2][:multi] if args[2] && args[2].key?(:multi)
163
165
  end
164
166
  end
165
- rescue
167
+ rescue => e
168
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
166
169
  end
167
170
 
168
171
  TraceView::API.trace('mongo', report_kvs) do
@@ -200,7 +203,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
200
203
  end
201
204
  end
202
205
  end
203
- rescue
206
+ rescue => e
207
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
204
208
  end
205
209
 
206
210
  TraceView::API.trace('mongo', report_kvs) do
@@ -221,7 +225,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
221
225
  if [:create_index, :ensure_index, :drop_index].include?(m) && !args.empty?
222
226
  report_kvs[:Index] = args[0].to_json
223
227
  end
224
- rescue
228
+ rescue => e
229
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
225
230
  end
226
231
 
227
232
  TraceView::API.trace('mongo', report_kvs) do
@@ -58,7 +58,7 @@ if defined?(::Moped) && TraceView::Config[:moped][:enabled]
58
58
  report_kvs = extract_trace_details(:map_reduce)
59
59
  report_kvs[:Map_Function] = command[:map]
60
60
  report_kvs[:Reduce_Function] = command[:reduce]
61
- rescue StandardError => e
61
+ rescue => e
62
62
  TraceView.logger.debug "[traceview/debug] Moped KV collection error: #{e.inspect}"
63
63
  end
64
64
 
@@ -117,7 +117,7 @@ if defined?(::Moped) && TraceView::Config[:moped][:enabled]
117
117
  end
118
118
 
119
119
  def create_with_traceview(key, options = {})
120
- return create_without_traceview(key, options = {}) unless TraceView.tracing?
120
+ return create_without_traceview(key, options) unless TraceView.tracing?
121
121
 
122
122
  begin
123
123
  # We report :create_index here to be consistent
@@ -135,7 +135,7 @@ if defined?(::Moped) && TraceView::Config[:moped][:enabled]
135
135
  end
136
136
 
137
137
  def drop_with_traceview(key = nil)
138
- return drop_without_traceview(key = nil) unless TraceView.tracing?
138
+ return drop_without_traceview(key) unless TraceView.tracing?
139
139
 
140
140
  begin
141
141
  # We report :drop_indexes here to be consistent
@@ -451,7 +451,7 @@ if defined?(::Moped) && TraceView::Config[:moped][:enabled]
451
451
  end
452
452
 
453
453
  def aggregate_with_traceview(*pipeline)
454
- return aggregate_without_traceview(pipeline) unless TraceView.tracing?
454
+ return aggregate_without_traceview(*pipeline) unless TraceView.tracing?
455
455
 
456
456
  report_kvs = extract_trace_details(:aggregate)
457
457
  report_kvs[:Query] = pipeline
@@ -88,9 +88,7 @@ module TraceView
88
88
 
89
89
  if KV_COLLECT_MAP[op]
90
90
  # Extract KVs from command for this op
91
- KV_COLLECT_MAP[op].each { |k, v|
92
- kvs[k] = command[v]
93
- }
91
+ KV_COLLECT_MAP[op].each { |k, v| kvs[k] = command[v] }
94
92
  else
95
93
  # This case statement handle special cases not handled
96
94
  # by KV_COLLECT_MAP
@@ -107,10 +105,10 @@ module TraceView
107
105
  options = command[3..-1]
108
106
  until (opts = options.shift(2)).empty?
109
107
  case opts[0]
110
- when "EX"; kvs[:ex] = opts[1]
111
- when "PX"; kvs[:px] = opts[1]
112
- when "NX"; kvs[:nx] = opts[1]
113
- when "XX"; kvs[:xx] = opts[1]
108
+ when 'EX' then; kvs[:ex] = opts[1]
109
+ when 'PX' then; kvs[:px] = opts[1]
110
+ when 'NX' then; kvs[:nx] = opts[1]
111
+ when 'XX' then; kvs[:xx] = opts[1]
114
112
  end
115
113
  end
116
114
  end
@@ -32,11 +32,10 @@ module TraceView
32
32
  report_kvs[:Args] = kv_args
33
33
  end
34
34
  end
35
-
36
35
  report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:resqueclient][:collect_backtraces]
37
36
  report_kvs[:Queue] = klass.instance_variable_get(:@queue)
38
37
  rescue => e
39
- TraceView.logger.debug "[traceview/resque] Error collecting resqueclient KVs: #{e.message}"
38
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
40
39
  end
41
40
 
42
41
  report_kvs
@@ -114,7 +113,8 @@ module TraceView
114
113
  end
115
114
 
116
115
  report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:resqueworker][:collect_backtraces]
117
- rescue
116
+ rescue => e
117
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
118
118
  end
119
119
 
120
120
  TraceView::API.start_trace('resque-worker', nil, report_kvs) do
@@ -16,7 +16,7 @@ module TraceView
16
16
  def execute_with_traceview & block
17
17
  kvs = {}
18
18
  kvs['Backtrace'] = TraceView::API.backtrace if TraceView::Config[:rest_client][:collect_backtraces]
19
- TraceView::API.log_entry("rest-client", kvs)
19
+ TraceView::API.log_entry('rest-client', kvs)
20
20
 
21
21
  # The core rest-client call
22
22
  execute_without_traceview(&block)
@@ -24,7 +24,7 @@ module TraceView
24
24
  TraceView::API.log_exception('rest-client', e)
25
25
  raise e
26
26
  ensure
27
- TraceView::API.log_exit("rest-client")
27
+ TraceView::API.log_exit('rest-client')
28
28
  end
29
29
  end
30
30
  end
@@ -1,3 +1,6 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
1
4
  module TraceView
2
5
  class SidekiqClient
3
6
  def collect_kvs(args)
@@ -1,3 +1,6 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
1
4
  module TraceView
2
5
  class SidekiqWorker
3
6
  def collect_kvs(args)
@@ -36,7 +36,8 @@ module TraceView
36
36
  end
37
37
  end
38
38
  end
39
- rescue
39
+ rescue => e
40
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
40
41
  end
41
42
 
42
43
  report_kvs
@@ -178,7 +179,8 @@ module TraceView
178
179
  report_kvs[:Keyspace] = keyspace.to_s
179
180
  report_kvs[:Column_name] = column_name.to_s
180
181
  report_kvs[:Validation_class] = validation_class.to_s
181
- rescue
182
+ rescue => e
183
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
182
184
  end
183
185
 
184
186
  TraceView::API.trace('cassandra', report_kvs) do
@@ -193,7 +195,8 @@ module TraceView
193
195
  begin
194
196
  report_kvs[:Keyspace] = keyspace.to_s
195
197
  report_kvs[:Column_name] = column_name.to_s
196
- rescue
198
+ rescue => e
199
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
197
200
  end
198
201
 
199
202
  TraceView::API.trace('cassandra', report_kvs) do
@@ -207,7 +210,8 @@ module TraceView
207
210
  report_kvs = extract_trace_details(:add_column_family, nil, nil, nil)
208
211
  begin
209
212
  report_kvs[:Cf] = cf_def[:name] if cf_def.is_a?(Hash) && cf_def.key?(:name)
210
- rescue
213
+ rescue => e
214
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
211
215
  end
212
216
 
213
217
  TraceView::API.trace('cassandra', report_kvs) do
@@ -4,9 +4,15 @@
4
4
  module TraceView
5
5
  module Test
6
6
  class << self
7
+ ##
8
+ # load_extras
9
+ #
10
+ # This method simply loads all the extras needed to run
11
+ # tests such as models, jobs etc...
12
+ #
7
13
  def load_extras
8
14
  # If we're using the libraries gemfile (with sidekiq and resque)
9
- if File.basename(ENV['BUNDLE_GEMFILE']) =~ /libraries/
15
+ if TV::Test.gemfile?(:libraries)
10
16
  # Load all of the test workers
11
17
  pattern = File.join(File.dirname(__FILE__), '../../test/jobs/**/', '*.rb')
12
18
  Dir.glob(pattern) do |f|
@@ -15,6 +21,29 @@ module TraceView
15
21
  end
16
22
  end
17
23
  end
24
+
25
+ ##
26
+ # gemfile?
27
+ #
28
+ # Method used to determine under which gemfile we're running.
29
+ # Pass <tt>name</tt> as the gemfile name only (without the
30
+ # .gemfile extension)
31
+ #
32
+ # returns true or fase depending on result
33
+ #
34
+ def gemfile?(name)
35
+ File.basename(ENV['BUNDLE_GEMFILE']) == (name.to_s + '.gemfile')
36
+ end
37
+
38
+ ##
39
+ # gemfile
40
+ #
41
+ # Used to determine under which gemfile we are running. This
42
+ # method will return the name of the active gemfile
43
+ #
44
+ def gemfile
45
+ File.basename(ENV['BUNDLE_GEMFILE']).split('.').first
46
+ end
18
47
  end
19
48
  end
20
49
  end
@@ -218,6 +218,13 @@ module TraceView
218
218
  platform_info['Ruby.Sidekiq.Version'] = "Sidekiq-#{::Sidekiq::VERSION}" if defined?(::Sidekiq::VERSION)
219
219
  platform_info['Ruby.Typhoeus.Version'] = "Typhoeus-#{::Typhoeus::VERSION}" if defined?(::Typhoeus::VERSION)
220
220
 
221
+ if Gem.loaded_specs.key?('delayed_job')
222
+ # Oddly, DelayedJob doesn't have an embedded version number so we get it from the loaded
223
+ # gem specs.
224
+ version = Gem.loaded_specs['delayed_job'].version.to_s
225
+ platform_info['Ruby.DelayedJob.Version'] = "DelayedJob-#{version}"
226
+ end
227
+
221
228
  # Special case since the Mongo 1.x driver doesn't embed the version number in the gem directly
222
229
  if ::Gem.loaded_specs.key?('mongo')
223
230
  platform_info['Ruby.Mongo.Version'] = "Mongo-#{::Gem.loaded_specs['mongo'].version}"
@@ -7,8 +7,8 @@ module TraceView
7
7
  # traceview.gemspec during gem build process
8
8
  module Version
9
9
  MAJOR = 3
10
- MINOR = 3
11
- PATCH = 3
10
+ MINOR = 4
11
+ PATCH = 0
12
12
  BUILD = nil
13
13
 
14
14
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')