oboe 2.2.6 → 2.3.2

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 (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)