oboe 2.2.6 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/.gitignore +6 -1
  2. data/Appraisals +20 -0
  3. data/Gemfile +16 -20
  4. data/README.md +280 -10
  5. data/Rakefile +63 -7
  6. data/ext/oboe_metal/extconf.rb +2 -1
  7. data/ext/oboe_metal/tests/test.rb +4 -0
  8. data/gemfiles/rails2.3.gemfile +18 -0
  9. data/gemfiles/rails2.3.gemfile.lock +95 -0
  10. data/gemfiles/rails3.0.gemfile +18 -0
  11. data/gemfiles/rails3.0.gemfile.lock +142 -0
  12. data/gemfiles/rails3.1.gemfile +18 -0
  13. data/gemfiles/rails3.1.gemfile.lock +152 -0
  14. data/gemfiles/rails3.2.gemfile +18 -0
  15. data/gemfiles/rails3.2.gemfile.lock +150 -0
  16. data/init.rb +1 -1
  17. data/lib/joboe_metal.rb +52 -34
  18. data/lib/method_profiling.rb +1 -1
  19. data/lib/oboe.rb +6 -5
  20. data/lib/oboe/api.rb +1 -1
  21. data/lib/oboe/api/layerinit.rb +3 -0
  22. data/lib/oboe/api/logging.rb +1 -1
  23. data/lib/oboe/api/memcache.rb +2 -2
  24. data/lib/oboe/api/profiling.rb +6 -4
  25. data/lib/oboe/api/tracing.rb +1 -1
  26. data/lib/oboe/api/util.rb +1 -1
  27. data/lib/oboe/config.rb +29 -10
  28. data/lib/oboe/frameworks/rails.rb +6 -7
  29. data/lib/oboe/frameworks/rails/inst/action_controller.rb +1 -1
  30. data/lib/oboe/frameworks/rails/inst/action_view.rb +3 -3
  31. data/lib/oboe/frameworks/rails/inst/action_view_2x.rb +3 -3
  32. data/lib/oboe/frameworks/rails/inst/action_view_30.rb +3 -3
  33. data/lib/oboe/frameworks/rails/inst/active_record.rb +1 -1
  34. data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql.rb +1 -1
  35. data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql2.rb +1 -1
  36. data/lib/oboe/frameworks/rails/inst/connection_adapters/oracle.rb +1 -1
  37. data/lib/oboe/frameworks/rails/inst/connection_adapters/postgresql.rb +1 -1
  38. data/lib/oboe/frameworks/rails/inst/connection_adapters/utils.rb +2 -2
  39. data/lib/oboe/inst/cassandra.rb +2 -2
  40. data/lib/oboe/inst/dalli.rb +8 -4
  41. data/lib/oboe/inst/http.rb +38 -34
  42. data/lib/oboe/inst/memcache.rb +12 -3
  43. data/lib/oboe/inst/memcached.rb +10 -5
  44. data/lib/oboe/inst/mongo.rb +19 -15
  45. data/lib/oboe/inst/moped.rb +120 -51
  46. data/lib/oboe/inst/rack.rb +14 -7
  47. data/lib/oboe/inst/resque.rb +2 -2
  48. data/lib/oboe/instrumentation.rb +3 -0
  49. data/lib/oboe/loading.rb +2 -6
  50. data/lib/oboe/logger.rb +3 -1
  51. data/lib/oboe/ruby.rb +3 -0
  52. data/lib/oboe/util.rb +2 -0
  53. data/lib/oboe/version.rb +5 -2
  54. data/lib/oboe_fu.rb +2 -0
  55. data/lib/oboe_metal.rb +23 -10
  56. data/lib/rails/generators/oboe/install_generator.rb +5 -3
  57. data/lib/rails/generators/oboe/templates/oboe_initializer.rb +24 -2
  58. data/oboe.gemspec +20 -14
  59. data/test/instrumentation/cassandra_test.rb +331 -0
  60. data/test/instrumentation/dalli_test.rb +157 -0
  61. data/test/instrumentation/http_test.rb +74 -0
  62. data/test/instrumentation/memcache_test.rb +251 -0
  63. data/test/instrumentation/memcached_test.rb +218 -0
  64. data/test/instrumentation/mongo_test.rb +406 -0
  65. data/test/instrumentation/moped_test.rb +468 -0
  66. data/test/instrumentation/rack_test.rb +55 -0
  67. data/test/instrumentation/resque_test.rb +62 -0
  68. data/test/minitest_helper.rb +113 -0
  69. data/test/support/config_test.rb +41 -0
  70. metadata +56 -35
  71. data/Gemfile.lock +0 -103
  72. data/Guardfile +0 -24
  73. data/install.rb +0 -1
  74. data/spec/instrumentation/cassandra_spec.rb +0 -18
  75. data/spec/instrumentation/dalli_spec.rb +0 -14
  76. data/spec/instrumentation/http_spec.rb +0 -14
  77. data/spec/instrumentation/memcache_spec.rb +0 -19
  78. data/spec/instrumentation/memcached_spec.rb +0 -22
  79. data/spec/instrumentation/mongo_spec.rb +0 -29
  80. data/spec/instrumentation/moped_spec.rb +0 -41
  81. data/spec/instrumentation/resque_spec.rb +0 -18
  82. data/spec/spec_helper.rb +0 -15
  83. data/spec/support/config_spec.rb +0 -27
  84. data/spec/support/oboe_spec.rb +0 -4
@@ -1,3 +1,6 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
1
4
  module Oboe
2
5
  module Rails
3
6
  module Helpers
@@ -39,8 +42,8 @@ module Oboe
39
42
  end # Helpers
40
43
 
41
44
  def self.load_initializer
42
- # Force load the tracelytics Rails initializer if there is one
43
- # Prefer oboe.rb but give priority to tracelytics.rb if it exists
45
+ # Force load the TraceView Rails initializer if there is one
46
+ # Prefer oboe.rb but give priority to the legacy tracelytics.rb if it exists
44
47
  if ::Rails::VERSION::MAJOR > 2
45
48
  rails_root = "#{::Rails.root.to_s}"
46
49
  else
@@ -66,11 +69,7 @@ module Oboe
66
69
  end
67
70
  end
68
71
 
69
- if ::Rails::VERSION::MAJOR > 2
70
- Oboe.logger.info "Tracelytics oboe gem #{Gem.loaded_specs['oboe'].version.to_s} successfully loaded."
71
- else
72
- Oboe.logger.info "Tracelytics oboe gem #{Oboe::Version::STRING} successfully loaded."
73
- end
72
+ Oboe.logger.info "TraceView oboe gem #{Oboe::Version::STRING} successfully loaded."
74
73
  end
75
74
 
76
75
  def self.include_helpers
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
@@ -26,7 +26,7 @@ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
26
26
  rescue
27
27
  end
28
28
 
29
- Oboe::API.profile(name, entry_kvs) do
29
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
30
30
  render_partial_without_oboe
31
31
  end
32
32
  end
@@ -44,7 +44,7 @@ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
44
44
  rescue
45
45
  end
46
46
 
47
- Oboe::API.profile(name, entry_kvs) do
47
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
48
48
  ret = render_collection_without_oboe
49
49
  end
50
50
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
@@ -22,7 +22,7 @@ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
22
22
  rescue
23
23
  end
24
24
 
25
- Oboe::API.profile(name, entry_kvs) do
25
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
26
26
  render_partial_without_oboe(options)
27
27
  end
28
28
  else
@@ -43,7 +43,7 @@ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
43
43
  rescue
44
44
  end
45
45
 
46
- Oboe::API.profile(name, entry_kvs) do
46
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
47
47
  render_partial_collection_without_oboe(options)
48
48
  end
49
49
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
@@ -19,7 +19,7 @@ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
19
19
  rescue
20
20
  end
21
21
 
22
- Oboe::API.profile(name, entry_kvs) do
22
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
23
23
  render_partial_without_oboe(object)
24
24
  end
25
25
  end
@@ -37,7 +37,7 @@ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
37
37
  rescue
38
38
  end
39
39
 
40
- Oboe::API.profile(name, entry_kvs) do
40
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
41
41
  render_collection_without_oboe
42
42
  end
43
43
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  require 'oboe/frameworks/rails/inst/connection_adapters/utils'
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013 by AppNeta
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013 by AppNeta
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013 by AppNeta
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013 by AppNeta
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013 by AppNeta
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -28,7 +28,7 @@ module Oboe
28
28
  end
29
29
 
30
30
  opts[:Name] = name.to_s if name
31
- opts[:Backtrace] = Oboe::API.backtrace
31
+ opts[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:active_record][:collect_backtraces]
32
32
 
33
33
  if ::Rails::VERSION::MAJOR == 2
34
34
  config = ::Rails.configuration.database_configuration[::Rails.env]
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -15,7 +15,7 @@ module Oboe
15
15
  # Open issue - how to handle multiple Cassandra servers
16
16
  report_kvs[:RemoteHost], report_kvs[:RemotePort] = @servers.first.split(":")
17
17
 
18
- report_kvs[:Backtrace] = Oboe::API.backtrace
18
+ report_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:cassandra][:collect_backtraces]
19
19
 
20
20
  if options.empty? and args.is_a?(Array)
21
21
  options = args.last if args.last.is_a?(Hash)
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -32,9 +32,12 @@ module Oboe
32
32
 
33
33
  Oboe::API.trace('memcache', opts || {}) do
34
34
  result = perform_without_oboe(*all_args, &blk)
35
- if op == :get and key.class == String
36
- Oboe::API.log('memcache', 'info', { :KVHit => memcache_hit?(result) })
37
- end
35
+
36
+ info_kvs = {}
37
+ info_kvs[:KVHit] = memcache_hit?(result) if op == :get and key.class == String
38
+ info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:dalli][:collect_backtraces]
39
+
40
+ Oboe::API.log('memcache', 'info', info_kvs) unless info_kvs.empty?
38
41
  result
39
42
  end
40
43
  else
@@ -60,6 +63,7 @@ module Oboe
60
63
  values = get_multi_without_oboe(keys)
61
64
 
62
65
  info_kvs[:KVHitCount] = values.length
66
+ info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:dalli][:collect_backtraces]
63
67
  Oboe::API.log('memcache', 'info', info_kvs)
64
68
  rescue
65
69
  values = get_multi_without_oboe(keys)
@@ -1,49 +1,53 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  require 'net/http'
5
5
 
6
- Net::HTTP.class_eval do
7
- def request_with_oboe(*args, &block)
8
- unless started?
9
- return request_without_oboe(*args, &block)
10
- end
6
+ if Oboe::Config[:nethttp][:enabled]
11
7
 
12
- # Avoid cross host tracing for blacklisted domains
13
- blacklisted = Oboe::API.blacklisted?(addr_port)
14
-
15
- Oboe::API.trace('net-http') do
16
- opts = {}
17
- if args.length and args[0]
18
- req = args[0]
19
-
20
- opts['IsService'] = 1
21
- opts['RemoteProtocol'] = use_ssl? ? 'HTTPS' : 'HTTP'
22
- opts['RemoteHost'] = addr_port
23
- opts['ServiceArg'] = req.path
24
- opts['HTTPMethod'] = req.method
25
- opts['Blacklisted'] = true if blacklisted
26
-
27
- req['X-Trace'] = Oboe::Context.toString() unless blacklisted
8
+ Net::HTTP.class_eval do
9
+ def request_with_oboe(*args, &block)
10
+ unless started?
11
+ return request_without_oboe(*args, &block)
28
12
  end
29
13
 
30
- resp = request_without_oboe(*args, &block)
14
+ # Avoid cross host tracing for blacklisted domains
15
+ blacklisted = Oboe::API.blacklisted?(addr_port)
16
+
17
+ Oboe::API.trace('net-http') do
18
+ opts = {}
19
+ if args.length and args[0]
20
+ req = args[0]
21
+
22
+ opts['IsService'] = 1
23
+ opts['RemoteProtocol'] = use_ssl? ? 'HTTPS' : 'HTTP'
24
+ opts['RemoteHost'] = addr_port
25
+ opts['ServiceArg'] = req.path
26
+ opts['HTTPMethod'] = req.method
27
+ opts['Blacklisted'] = true if blacklisted
28
+ opts['Backtrace'] = Oboe::API.backtrace if Oboe::Config[:nethttp][:collect_backtraces]
29
+
30
+ req['X-Trace'] = Oboe::Context.toString() unless blacklisted
31
+ end
32
+
33
+ resp = request_without_oboe(*args, &block)
31
34
 
32
- opts['HTTPStatus'] = resp.code
33
- Oboe::API.log('net-http', 'info', opts)
35
+ opts['HTTPStatus'] = resp.code
36
+ Oboe::API.log('net-http', 'info', opts)
34
37
 
35
- unless blacklisted
36
- xtrace = resp.get_fields('X-Trace')
37
- if xtrace and xtrace.size and Oboe.tracing?
38
- Oboe::Context.fromString(xtrace[0])
38
+ unless blacklisted
39
+ xtrace = resp.get_fields('X-Trace')
40
+ if xtrace and xtrace.size and Oboe.tracing?
41
+ Oboe::Context.fromString(xtrace[0])
42
+ end
39
43
  end
44
+ next resp
40
45
  end
41
- next resp
42
46
  end
43
- end
44
47
 
45
- alias request_without_oboe request
46
- alias request request_with_oboe
48
+ alias request_without_oboe request
49
+ alias request request_with_oboe
47
50
 
48
- Oboe.logger.info "[oboe/loading] Instrumenting net/http" if Oboe::Config[:verbose]
51
+ Oboe.logger.info "[oboe/loading] Instrumenting net/http" if Oboe::Config[:verbose]
52
+ end
49
53
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -14,6 +14,7 @@ module Oboe
14
14
 
15
15
  define_method("#{m}_with_oboe") do |*args|
16
16
  report_kvs = { :KVOp => m }
17
+ report_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcache][:collect_backtraces]
17
18
 
18
19
  if Oboe.tracing?
19
20
  Oboe::API.trace('memcache', report_kvs) do
@@ -60,6 +61,7 @@ module Oboe
60
61
  Oboe::API.trace('memcache', layer_kvs || {}, :get_multi) do
61
62
  begin
62
63
  info_kvs = {}
64
+ info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcache][:collect_backtraces]
63
65
 
64
66
  if args.last.is_a?(Hash) || args.last.nil?
65
67
  info_kvs[:KVKeyCount] = args.flatten.length - 1
@@ -84,7 +86,11 @@ module Oboe
84
86
  def request_setup_with_oboe(*args)
85
87
  if Oboe.tracing? and not Oboe::Context.tracing_layer_op?(:get_multi)
86
88
  server, cache_key = request_setup_without_oboe(*args)
87
- Oboe::API.log('memcache', 'info', { :KVKey => cache_key, :RemoteHost => server.host })
89
+
90
+ info_kvs = { :KVKey => cache_key, :RemoteHost => server.host }
91
+ info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcache][:collect_backtraces]
92
+
93
+ Oboe::API.log('memcache', 'info', info_kvs)
88
94
  else
89
95
  server, cache_key = request_setup_without_oboe(*args)
90
96
  end
@@ -93,7 +99,10 @@ module Oboe
93
99
 
94
100
  def cache_get_with_oboe(server, cache_key)
95
101
  result = cache_get_without_oboe(server, cache_key)
96
- Oboe::API.log('memcache', 'info', { :KVHit => memcache_hit?(result) })
102
+
103
+ info_kvs = { :KVHit => memcache_hit?(result) }
104
+ info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcache][:collect_backtraces]
105
+ Oboe::API.log('memcache', 'info', info_kvs)
97
106
  result
98
107
  end
99
108
 
@@ -1,6 +1,5 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
- #
4
3
 
5
4
  module Oboe
6
5
  module Inst
@@ -14,6 +13,7 @@ module Oboe
14
13
  MEMCACHE_OPS.reject { |m| not method_defined?(m) }.each do |m|
15
14
  define_method("#{m}_with_oboe") do |*args|
16
15
  opts = { :KVOp => m }
16
+
17
17
  if args.length and args[0].class != Array
18
18
  opts[:KVKey] = args[0].to_s
19
19
  rhost = remote_host(args[0].to_s)
@@ -22,9 +22,12 @@ module Oboe
22
22
 
23
23
  Oboe::API.trace('memcache', opts) do
24
24
  result = send("#{m}_without_oboe", *args)
25
- if m == :get and args.length and args[0].class == String
26
- Oboe::API.log('memcache', 'info', { :KVHit => memcache_hit?(result) })
27
- end
25
+
26
+ info_kvs = {}
27
+ info_kvs[:KVHit] = memcache_hit?(result) if m == :get and args.length and args[0].class == String
28
+ info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcached][:collect_backtraces]
29
+
30
+ Oboe::API.log('memcache', 'info', info_kvs) unless info_kvs.empty?
28
31
  result
29
32
  end
30
33
  end
@@ -62,6 +65,8 @@ module Oboe
62
65
  values = get_multi_without_oboe(keys, raw)
63
66
 
64
67
  info_kvs[:KVHitCount] = values.length
68
+ info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcached][:collect_backtraces]
69
+
65
70
  Oboe::API.log('memcache', 'info', info_kvs)
66
71
  rescue
67
72
  values = get_multi_without_oboe(keys, raw)
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
@@ -43,9 +43,9 @@ if defined?(::Mongo) and Oboe::Config[:mongo][:enabled]
43
43
  report_kvs[:QueryOp] = m
44
44
 
45
45
  report_kvs[:New_Collection_Name] = args[0] if m == :create_collection
46
- report_kvs[:Collection_Name] = args[0] if m == :drop_collection
46
+ report_kvs[:Collection] = args[0] if m == :drop_collection
47
47
 
48
- report_kvs[:Backtrace] = Oboe::API.backtrace
48
+ report_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:mongo][:collect_backtraces]
49
49
  rescue
50
50
  end
51
51
 
@@ -108,18 +108,22 @@ if defined?(::Mongo) and Oboe::Config[:mongo][:enabled]
108
108
  include Oboe::Inst::Mongo
109
109
 
110
110
  def oboe_collect(m, args)
111
- report_kvs = {}
112
- report_kvs[:Flavor] = Oboe::Inst::Mongo::FLAVOR
113
-
114
- report_kvs[:Database] = @db.name
115
- report_kvs[:RemoteHost] = @db.connection.host
116
- report_kvs[:RemotePort] = @db.connection.port
117
- report_kvs[:Collection] = @name
118
-
119
- report_kvs[:Backtrace] = Oboe::API.backtrace
120
-
121
- report_kvs[:QueryOp] = m
122
- report_kvs[:Query] = args[0].try(:to_json) if args and not args.empty? and args[0].class == Hash
111
+ begin
112
+ report_kvs = {}
113
+ report_kvs[:Flavor] = Oboe::Inst::Mongo::FLAVOR
114
+
115
+ report_kvs[:Database] = @db.name
116
+ report_kvs[:RemoteHost] = @db.connection.host
117
+ report_kvs[:RemotePort] = @db.connection.port
118
+ report_kvs[:Collection] = @name
119
+
120
+ report_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:mongo][:collect_backtraces]
121
+
122
+ report_kvs[:QueryOp] = m
123
+ report_kvs[:Query] = args[0].to_json if args and not args.empty? and args[0].class == Hash
124
+ rescue
125
+ Oboe.logger.debug "[oboe/debug] Exception in oboe_collect KV collection."
126
+ end
123
127
  report_kvs
124
128
  end
125
129
 
@@ -1,6 +1,8 @@
1
- # Copyright (c) 2012 by Tracelytics, Inc.
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
+ require 'json'
5
+
4
6
  module Oboe
5
7
  module Inst
6
8
  module Moped
@@ -38,16 +40,22 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
38
40
  report_kvs[:RemoteHost], report_kvs[:RemotePort] = session.cluster.seeds.first.split(':')
39
41
  report_kvs[:Database] = name
40
42
  report_kvs[:QueryOp] = op.to_s
41
- rescue
43
+ report_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:moped][:collect_backtraces]
44
+ rescue Exception => e
45
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
42
46
  end
43
47
  report_kvs
44
48
  end
45
49
 
46
50
  def command_with_oboe(command)
47
51
  if Oboe.tracing? and not Oboe::Context.layer_op and command.has_key?(:mapreduce)
48
- report_kvs = extract_trace_details(:map_reduce)
49
- report_kvs[:Map_Function] = command[:map]
50
- report_kvs[:Reduce_Function] = command[:reduce]
52
+ begin
53
+ report_kvs = extract_trace_details(:map_reduce)
54
+ report_kvs[:Map_Function] = command[:map]
55
+ report_kvs[:Reduce_Function] = command[:reduce]
56
+ rescue Exception => e
57
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
58
+ end
51
59
 
52
60
  Oboe::API.trace('mongo', report_kvs) do
53
61
  command_without_oboe(command)
@@ -93,18 +101,24 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
93
101
  report_kvs[:RemoteHost], report_kvs[:RemotePort] = database.session.cluster.seeds.first.split(':')
94
102
  report_kvs[:Database] = database.name
95
103
  report_kvs[:QueryOp] = op.to_s
96
- rescue
104
+ report_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:moped][:collect_backtraces]
105
+ rescue Exception => e
106
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
97
107
  end
98
108
  report_kvs
99
109
  end
100
110
 
101
111
  def create_with_oboe(key, options = {})
102
112
  if Oboe.tracing?
103
- # We report :create_index here to be consistent
104
- # with other mongo implementations
105
- report_kvs = extract_trace_details(:create_index)
106
- report_kvs[:Key] = key.try(:to_json)
107
- report_kvs[:Options] = options.try(:to_json)
113
+ begin
114
+ # We report :create_index here to be consistent
115
+ # with other mongo implementations
116
+ report_kvs = extract_trace_details(:create_index)
117
+ report_kvs[:Key] = key.to_json
118
+ report_kvs[:Options] = options.to_json
119
+ rescue Exception => e
120
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
121
+ end
108
122
 
109
123
  Oboe::API.trace('mongo', report_kvs, :create_index) do
110
124
  create_without_oboe(key, options = {})
@@ -116,10 +130,14 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
116
130
 
117
131
  def drop_with_oboe(key = nil)
118
132
  if Oboe.tracing?
119
- # We report :drop_indexes here to be consistent
120
- # with other mongo implementations
121
- report_kvs = extract_trace_details(:drop_indexes)
122
- report_kvs[:Key] = key.nil? ? "all" : key.try(:to_json)
133
+ begin
134
+ # We report :drop_indexes here to be consistent
135
+ # with other mongo implementations
136
+ report_kvs = extract_trace_details(:drop_indexes)
137
+ report_kvs[:Key] = key.nil? ? "all" : key.to_json
138
+ rescue Exception => e
139
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
140
+ end
123
141
 
124
142
  Oboe::API.trace('mongo', report_kvs) do
125
143
  drop_without_oboe(key = nil)
@@ -145,7 +163,6 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
145
163
  class Query
146
164
  include Oboe::Inst::Moped
147
165
 
148
-
149
166
  def extract_trace_details(op)
150
167
  report_kvs = {}
151
168
  begin
@@ -153,17 +170,23 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
153
170
  # FIXME: We're only grabbing the first of potentially multiple servers here
154
171
  report_kvs[:RemoteHost], report_kvs[:RemotePort] = collection.database.session.cluster.seeds.first.split(':')
155
172
  report_kvs[:Database] = collection.database.name
156
- report_kvs[:Collection_Name] = collection.name
173
+ report_kvs[:Collection] = collection.name
157
174
  report_kvs[:QueryOp] = op.to_s
158
- rescue
175
+ report_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:moped][:collect_backtraces]
176
+ rescue Exception => e
177
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
159
178
  end
160
179
  report_kvs
161
180
  end
162
181
 
163
182
  def count_with_oboe
164
183
  if Oboe.tracing?
165
- report_kvs = extract_trace_details(:count)
166
- report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
184
+ begin
185
+ report_kvs = extract_trace_details(:count)
186
+ report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
187
+ rescue Exception => e
188
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
189
+ end
167
190
 
168
191
  Oboe::API.trace('mongo', report_kvs) do
169
192
  count_without_oboe
@@ -175,9 +198,13 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
175
198
 
176
199
  def sort_with_oboe(sort)
177
200
  if Oboe.tracing?
178
- report_kvs = extract_trace_details(:sort)
179
- report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
180
- report_kvs[:Order] = sort.to_s
201
+ begin
202
+ report_kvs = extract_trace_details(:sort)
203
+ report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
204
+ report_kvs[:Order] = sort.to_s
205
+ rescue Exception => e
206
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
207
+ end
181
208
 
182
209
  Oboe::API.trace('mongo', report_kvs) do
183
210
  sort_without_oboe(sort)
@@ -189,9 +216,13 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
189
216
 
190
217
  def limit_with_oboe(limit)
191
218
  if Oboe.tracing? and not Oboe::Context.tracing_layer_op?(:explain)
192
- report_kvs = extract_trace_details(:limit)
193
- report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
194
- report_kvs[:Limit] = limit.to_s
219
+ begin
220
+ report_kvs = extract_trace_details(:limit)
221
+ report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
222
+ report_kvs[:Limit] = limit.to_s
223
+ rescue Exception => e
224
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
225
+ end
195
226
 
196
227
  Oboe::API.trace('mongo', report_kvs) do
197
228
  limit_without_oboe(limit)
@@ -203,9 +234,13 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
203
234
 
204
235
  def distinct_with_oboe(key)
205
236
  if Oboe.tracing?
206
- report_kvs = extract_trace_details(:distinct)
207
- report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
208
- report_kvs[:Key] = key.to_s
237
+ begin
238
+ report_kvs = extract_trace_details(:distinct)
239
+ report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
240
+ report_kvs[:Key] = key.to_s
241
+ rescue Exception => e
242
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
243
+ end
209
244
 
210
245
  Oboe::API.trace('mongo', report_kvs) do
211
246
  distinct_without_oboe(key)
@@ -217,9 +252,13 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
217
252
 
218
253
  def update_with_oboe(change, flags = nil)
219
254
  if Oboe.tracing? and not Oboe::Context.tracing_layer_op?([:update_all, :upsert])
220
- report_kvs = extract_trace_details(:update)
221
- report_kvs[:Flags] = flags.to_s if flags
222
- report_kvs[:Update_Document] = change.try(:to_json)
255
+ begin
256
+ report_kvs = extract_trace_details(:update)
257
+ report_kvs[:Flags] = flags.to_s if flags
258
+ report_kvs[:Update_Document] = change.to_json
259
+ rescue Exception => e
260
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
261
+ end
223
262
 
224
263
  Oboe::API.trace('mongo', report_kvs) do
225
264
  update_without_oboe(change, flags = nil)
@@ -231,8 +270,12 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
231
270
 
232
271
  def update_all_with_oboe(change)
233
272
  if Oboe.tracing?
234
- report_kvs = extract_trace_details(:update_all)
235
- report_kvs[:Update_Document] = change.try(:to_json)
273
+ begin
274
+ report_kvs = extract_trace_details(:update_all)
275
+ report_kvs[:Update_Document] = change.to_json
276
+ rescue Exception => e
277
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
278
+ end
236
279
 
237
280
  Oboe::API.trace('mongo', report_kvs, :update_all) do
238
281
  update_all_without_oboe(change)
@@ -244,9 +287,13 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
244
287
 
245
288
  def upsert_with_oboe(change)
246
289
  if Oboe.tracing?
247
- report_kvs = extract_trace_details(:upsert)
248
- report_kvs[:Query] = selector.try(:to_json)
249
- report_kvs[:Update_Document] = change.try(:to_json)
290
+ begin
291
+ report_kvs = extract_trace_details(:upsert)
292
+ report_kvs[:Query] = selector.to_json
293
+ report_kvs[:Update_Document] = change.to_json
294
+ rescue Exception => e
295
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
296
+ end
250
297
 
251
298
  Oboe::API.trace('mongo', report_kvs, :upsert) do
252
299
  upsert_without_oboe(change)
@@ -258,8 +305,12 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
258
305
 
259
306
  def explain_with_oboe
260
307
  if Oboe.tracing?
261
- report_kvs = extract_trace_details(:explain)
262
- report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
308
+ begin
309
+ report_kvs = extract_trace_details(:explain)
310
+ report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
311
+ rescue Exception => e
312
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
313
+ end
263
314
 
264
315
  Oboe::API.trace('mongo', report_kvs, :explain) do
265
316
  explain_without_oboe
@@ -271,10 +322,14 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
271
322
 
272
323
  def modify_with_oboe(change, options = {})
273
324
  if Oboe.tracing?
274
- report_kvs = extract_trace_details(:modify)
275
- report_kvs[:Update_Document] = selector.try(:empty?) ? "all" : selector.try(:to_json)
276
- report_kvs[:Change] = change.try(:to_json)
277
- report_kvs[:Options] = options.try(:to_json)
325
+ begin
326
+ report_kvs = extract_trace_details(:modify)
327
+ report_kvs[:Update_Document] = selector.empty? ? "all" : selector.to_json
328
+ report_kvs[:Change] = change.to_json
329
+ report_kvs[:Options] = options.to_json
330
+ rescue Exception => e
331
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
332
+ end
278
333
 
279
334
  Oboe::API.trace('mongo', report_kvs) do
280
335
  modify_without_oboe(change, options)
@@ -286,8 +341,12 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
286
341
 
287
342
  def remove_with_oboe
288
343
  if Oboe.tracing?
289
- report_kvs = extract_trace_details(:remove)
290
- report_kvs[:Query] = selector.try(:to_json)
344
+ begin
345
+ report_kvs = extract_trace_details(:remove)
346
+ report_kvs[:Query] = selector.to_json
347
+ rescue Exception => e
348
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
349
+ end
291
350
 
292
351
  Oboe::API.trace('mongo', report_kvs) do
293
352
  remove_without_oboe
@@ -299,8 +358,12 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
299
358
 
300
359
  def remove_all_with_oboe
301
360
  if Oboe.tracing?
302
- report_kvs = extract_trace_details(:remove_all)
303
- report_kvs[:Query] = selector.try(:to_json)
361
+ begin
362
+ report_kvs = extract_trace_details(:remove_all)
363
+ report_kvs[:Query] = selector.to_json
364
+ rescue Exception => e
365
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
366
+ end
304
367
 
305
368
  Oboe::API.trace('mongo', report_kvs) do
306
369
  remove_all_without_oboe
@@ -334,9 +397,11 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
334
397
  # FIXME: We're only grabbing the first of potentially multiple servers here
335
398
  report_kvs[:RemoteHost], report_kvs[:RemotePort] = @database.session.cluster.seeds.first.split(':')
336
399
  report_kvs[:Database] = @database.name
337
- report_kvs[:Collection_Name] = @name
400
+ report_kvs[:Collection] = @name
338
401
  report_kvs[:QueryOp] = op.to_s
339
- rescue
402
+ report_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:moped][:collect_backtraces]
403
+ rescue Exception => e
404
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
340
405
  end
341
406
  report_kvs
342
407
  end
@@ -357,8 +422,12 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
357
422
 
358
423
  def find_with_oboe(selector = {})
359
424
  if Oboe.tracing?
360
- report_kvs = extract_trace_details(:find)
361
- report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
425
+ begin
426
+ report_kvs = extract_trace_details(:find)
427
+ report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
428
+ rescue Exception => e
429
+ Oboe.logger.debug "[oboe/debug] Moped KV collection error: #{e.inspect}"
430
+ end
362
431
 
363
432
  Oboe::API.trace('mongo', report_kvs) do
364
433
  find_without_oboe(selector)