oboe 2.7.0.3-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 (102) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.travis.yml +51 -0
  4. data/Appraisals +10 -0
  5. data/CHANGELOG.md +223 -0
  6. data/Gemfile +49 -0
  7. data/LICENSE +199 -0
  8. data/README.md +380 -0
  9. data/Rakefile +106 -0
  10. data/ext/oboe_metal/extconf.rb +61 -0
  11. data/ext/oboe_metal/noop/noop.c +7 -0
  12. data/ext/oboe_metal/src/bson/bson.h +221 -0
  13. data/ext/oboe_metal/src/bson/platform_hacks.h +91 -0
  14. data/ext/oboe_metal/src/oboe.h +275 -0
  15. data/ext/oboe_metal/src/oboe.hpp +352 -0
  16. data/ext/oboe_metal/src/oboe_wrap.cxx +3886 -0
  17. data/ext/oboe_metal/tests/test.rb +11 -0
  18. data/gemfiles/mongo.gemfile +33 -0
  19. data/gemfiles/moped.gemfile +33 -0
  20. data/get_version.rb +5 -0
  21. data/init.rb +4 -0
  22. data/lib/base.rb +99 -0
  23. data/lib/joboe_metal.rb +185 -0
  24. data/lib/method_profiling.rb +70 -0
  25. data/lib/oboe.rb +50 -0
  26. data/lib/oboe/api.rb +14 -0
  27. data/lib/oboe/api/layerinit.rb +99 -0
  28. data/lib/oboe/api/logging.rb +129 -0
  29. data/lib/oboe/api/memcache.rb +29 -0
  30. data/lib/oboe/api/profiling.rb +50 -0
  31. data/lib/oboe/api/tracing.rb +134 -0
  32. data/lib/oboe/api/util.rb +117 -0
  33. data/lib/oboe/config.rb +140 -0
  34. data/lib/oboe/frameworks/grape.rb +74 -0
  35. data/lib/oboe/frameworks/padrino.rb +66 -0
  36. data/lib/oboe/frameworks/padrino/templates.rb +59 -0
  37. data/lib/oboe/frameworks/rails.rb +139 -0
  38. data/lib/oboe/frameworks/rails/helpers/rum/rum_ajax_header.js.erb +5 -0
  39. data/lib/oboe/frameworks/rails/helpers/rum/rum_footer.js.erb +1 -0
  40. data/lib/oboe/frameworks/rails/helpers/rum/rum_header.js.erb +3 -0
  41. data/lib/oboe/frameworks/rails/inst/action_controller.rb +123 -0
  42. data/lib/oboe/frameworks/rails/inst/action_view.rb +56 -0
  43. data/lib/oboe/frameworks/rails/inst/action_view_2x.rb +54 -0
  44. data/lib/oboe/frameworks/rails/inst/action_view_30.rb +48 -0
  45. data/lib/oboe/frameworks/rails/inst/active_record.rb +24 -0
  46. data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql.rb +43 -0
  47. data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql2.rb +28 -0
  48. data/lib/oboe/frameworks/rails/inst/connection_adapters/oracle.rb +18 -0
  49. data/lib/oboe/frameworks/rails/inst/connection_adapters/postgresql.rb +30 -0
  50. data/lib/oboe/frameworks/rails/inst/connection_adapters/utils.rb +118 -0
  51. data/lib/oboe/frameworks/sinatra.rb +96 -0
  52. data/lib/oboe/frameworks/sinatra/templates.rb +56 -0
  53. data/lib/oboe/inst/cassandra.rb +281 -0
  54. data/lib/oboe/inst/dalli.rb +75 -0
  55. data/lib/oboe/inst/http.rb +72 -0
  56. data/lib/oboe/inst/memcache.rb +105 -0
  57. data/lib/oboe/inst/memcached.rb +96 -0
  58. data/lib/oboe/inst/mongo.rb +240 -0
  59. data/lib/oboe/inst/moped.rb +474 -0
  60. data/lib/oboe/inst/rack.rb +81 -0
  61. data/lib/oboe/inst/redis.rb +273 -0
  62. data/lib/oboe/inst/resque.rb +193 -0
  63. data/lib/oboe/instrumentation.rb +18 -0
  64. data/lib/oboe/loading.rb +98 -0
  65. data/lib/oboe/logger.rb +41 -0
  66. data/lib/oboe/ruby.rb +11 -0
  67. data/lib/oboe/util.rb +129 -0
  68. data/lib/oboe/version.rb +13 -0
  69. data/lib/oboe/xtrace.rb +52 -0
  70. data/lib/oboe_metal.rb +140 -0
  71. data/lib/rails/generators/oboe/install_generator.rb +76 -0
  72. data/lib/rails/generators/oboe/templates/oboe_initializer.rb +94 -0
  73. data/oboe.gemspec +29 -0
  74. data/release.sh +65 -0
  75. data/test/frameworks/apps/grape_simple.rb +10 -0
  76. data/test/frameworks/apps/padrino_simple.rb +41 -0
  77. data/test/frameworks/apps/sinatra_simple.rb +20 -0
  78. data/test/frameworks/grape_test.rb +27 -0
  79. data/test/frameworks/padrino_test.rb +25 -0
  80. data/test/frameworks/sinatra_test.rb +25 -0
  81. data/test/instrumentation/cassandra_test.rb +381 -0
  82. data/test/instrumentation/dalli_test.rb +164 -0
  83. data/test/instrumentation/http_test.rb +97 -0
  84. data/test/instrumentation/memcache_test.rb +251 -0
  85. data/test/instrumentation/memcached_test.rb +226 -0
  86. data/test/instrumentation/mongo_test.rb +462 -0
  87. data/test/instrumentation/moped_test.rb +473 -0
  88. data/test/instrumentation/rack_test.rb +73 -0
  89. data/test/instrumentation/redis_hashes_test.rb +265 -0
  90. data/test/instrumentation/redis_keys_test.rb +318 -0
  91. data/test/instrumentation/redis_lists_test.rb +310 -0
  92. data/test/instrumentation/redis_misc_test.rb +160 -0
  93. data/test/instrumentation/redis_sets_test.rb +293 -0
  94. data/test/instrumentation/redis_sortedsets_test.rb +325 -0
  95. data/test/instrumentation/redis_strings_test.rb +333 -0
  96. data/test/instrumentation/resque_test.rb +62 -0
  97. data/test/minitest_helper.rb +148 -0
  98. data/test/profiling/method_test.rb +198 -0
  99. data/test/support/config_test.rb +39 -0
  100. data/test/support/liboboe_settings_test.rb +46 -0
  101. data/test/support/xtrace_test.rb +35 -0
  102. metadata +200 -0
@@ -0,0 +1,139 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ module Oboe
5
+ module Rails
6
+ module Helpers
7
+ extend ActiveSupport::Concern if defined?(::Rails) and ::Rails::VERSION::MAJOR > 2
8
+
9
+ @@rum_xhr_tmpl = File.read(File.dirname(__FILE__) + '/rails/helpers/rum/rum_ajax_header.js.erb')
10
+ @@rum_hdr_tmpl = File.read(File.dirname(__FILE__) + '/rails/helpers/rum/rum_header.js.erb')
11
+ @@rum_ftr_tmpl = File.read(File.dirname(__FILE__) + '/rails/helpers/rum/rum_footer.js.erb')
12
+
13
+ def oboe_rum_header
14
+ begin
15
+ return unless Oboe::Config.rum_id
16
+ if Oboe.tracing?
17
+ if request.xhr?
18
+ return raw(ERB.new(@@rum_xhr_tmpl).result)
19
+ else
20
+ return raw(ERB.new(@@rum_hdr_tmpl).result)
21
+ end
22
+ end
23
+ rescue StandardError => e
24
+ Oboe.logger.warn "oboe_rum_header: #{e.message}."
25
+ return ""
26
+ end
27
+ end
28
+
29
+ def oboe_rum_footer
30
+ begin
31
+ return unless Oboe::Config.rum_id
32
+ if Oboe.tracing?
33
+ # Even though the footer template is named xxxx.erb, there are no ERB tags in it so we'll
34
+ # skip that step for now
35
+ return raw(@@rum_ftr_tmpl)
36
+ end
37
+ rescue StandardError => e
38
+ Oboe.logger.warn "oboe_rum_footer: #{e.message}."
39
+ return ""
40
+ end
41
+ end
42
+ end # Helpers
43
+
44
+ def self.load_initializer
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
47
+ if ::Rails::VERSION::MAJOR > 2
48
+ rails_root = "#{::Rails.root.to_s}"
49
+ else
50
+ rails_root = "#{RAILS_ROOT}"
51
+ end
52
+
53
+ if File.exists?("#{rails_root}/config/initializers/tracelytics.rb")
54
+ tr_initializer = "#{rails_root}/config/initializers/tracelytics.rb"
55
+ else
56
+ tr_initializer = "#{rails_root}/config/initializers/oboe.rb"
57
+ end
58
+ require tr_initializer if File.exists?(tr_initializer)
59
+ end
60
+
61
+ def self.load_instrumentation
62
+ # Load the Rails specific instrumentation
63
+ pattern = File.join(File.dirname(__FILE__), 'rails/inst', '*.rb')
64
+ Dir.glob(pattern) do |f|
65
+ begin
66
+ require f
67
+ rescue => e
68
+ Oboe.logger.error "[oboe/loading] Error loading rails insrumentation file '#{f}' : #{e}"
69
+ end
70
+ end
71
+
72
+ Oboe.logger.info "TraceView oboe gem #{Oboe::Version::STRING} successfully loaded."
73
+ end
74
+
75
+ def self.include_helpers
76
+ # TBD: This would make the helpers available to controllers which is occasionally desired.
77
+ # ActiveSupport.on_load(:action_controller) do
78
+ # include Oboe::Rails::Helpers
79
+ # end
80
+ if ::Rails::VERSION::MAJOR > 2
81
+ ActiveSupport.on_load(:action_view) do
82
+ include Oboe::Rails::Helpers
83
+ end
84
+ else
85
+ ActionView::Base.send :include, Oboe::Rails::Helpers
86
+ end
87
+ end
88
+
89
+ end # Rails
90
+ end # Oboe
91
+
92
+ if defined?(::Rails)
93
+ require 'oboe/inst/rack'
94
+
95
+ if ::Rails::VERSION::MAJOR > 2
96
+ module Oboe
97
+ class Railtie < ::Rails::Railtie
98
+
99
+ initializer 'oboe.helpers' do
100
+ Oboe::Rails.include_helpers
101
+ end
102
+
103
+ initializer 'oboe.rack' do |app|
104
+ Oboe.logger.info "[oboe/loading] Instrumenting rack" if Oboe::Config[:verbose]
105
+ app.config.middleware.insert 0, "Oboe::Rack"
106
+ end
107
+
108
+ config.after_initialize do
109
+ Oboe.logger = ::Rails.logger if ::Rails.logger
110
+
111
+ Oboe::Loading.load_access_key
112
+ Oboe::Inst.load_instrumentation
113
+ Oboe::Rails.load_instrumentation
114
+
115
+ # Report __Init after fork when in Heroku
116
+ Oboe::API.report_init unless Oboe.heroku?
117
+ end
118
+ end
119
+ end
120
+ else
121
+ Oboe.logger = ::Rails.logger if ::Rails.logger
122
+
123
+ Oboe::Rails.load_initializer
124
+ Oboe::Loading.load_access_key
125
+
126
+ Rails.configuration.after_initialize do
127
+ Oboe.logger.info "[oboe/loading] Instrumenting rack" if Oboe::Config[:verbose]
128
+ Rails.configuration.middleware.insert 0, "Oboe::Rack"
129
+
130
+ Oboe::Inst.load_instrumentation
131
+ Oboe::Rails.load_instrumentation
132
+ Oboe::Rails.include_helpers
133
+
134
+ # Report __Init after fork when in Heroku
135
+ Oboe::API.report_init unless Oboe.heroku?
136
+ end
137
+ end
138
+ end
139
+
@@ -0,0 +1,5 @@
1
+ <script type="text/javascript">(function(){var d=this._tly={q:[],mark:function(a,b){d.q.push(["mark",a,b||(new Date).getTime()])},measure:function(a,b,c){d.q.push(["measure",a,b,c||(new Date).getTime()])},done:function(a){d.q.push(["done",a])},cid:"<%= Oboe::Config[:rum_id] %>",xt:"<%= Oboe::Context.toString %>"};d.mark("firstbyte");var f;f=function(){};var g=0;function h(a){return function(b){b[a]||(b[a]=!0,d.measure(["_ajax",b.a,a]))}}var i=h("recv"),j=h("send");
2
+ function l(){var a=this&&this._tl,b=a.b;4===this.readyState&&i(a);f();for(a=0;a<b.length;a++)b[a].apply(this,arguments)}var m=this.XMLHttpRequest,n=m&&m.prototype;
3
+ if(n){var o=n.open;n.open=function(a,b,c,e,u){f();this._tl||(this._tl={a:g++,async:c,b:[]},d.measure(["_ajax",this._tl.a,"init",a,b]));return e?o.call(this,a,b,c,e,u):o.call(this,a,b,c)};var p=n.send;n.send=function(a){function b(){try{var a;a:{var b=l;try{if(c.addEventListener){c.addEventListener("readystatechange",b);a=!0;break a}}catch(w){}a=!1}if(!a){var k=c.onreadystatechange;if(k){if(!k.apply)return;f();e.b.push(k)}f();c.onreadystatechange=l}}catch(x){}}var c=this,e=c&&c._tl;f();b();j(e);a=
4
+ p.call(c,a);!e.async||4===c.readyState?i(e):setTimeout(function(){try{4===c.readyState?i(e):c.onreadystatechange!==l&&b()}catch(a){}},0);return a}}this.onerror=function(a,b,c){d.measure(["_jserror ",a,"|",b,"|",c].join(""))};var q=this.attachEvent,r=this.addEventListener;var s=function(){d.measure("winload");d.done()};q?q("onload",s):r&&r("load",s,!1);var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src=("http:"===document.location.protocol?"http:":"https:")+"//d2gfdmu30u15x7.cloudfront.net/1/tly.js";
5
+ var v=document.getElementsByTagName("script")[0];v.parentNode.insertBefore(t,v);}());</script>
@@ -0,0 +1 @@
1
+ <script type="text/javascript">this._tly&&this._tly.measure("domload");</script>
@@ -0,0 +1,3 @@
1
+ <script type="text/javascript">(function(){var b=this._tly={q:[],mark:function(a,c){b.q.push(["mark",a,c||(new Date).getTime()])},measure:function(a,c,e){b.q.push(["measure",a,c,e||(new Date).getTime()])},done:function(a){b.q.push(["done",a])},cid:"<%= Oboe::Config[:rum_id] %>",xt:"<%= Oboe::Context.toString %>"};b.mark("firstbyte");this.onerror=function(a,c,e){b.measure(["_jserror ",a,"|",c,"|",e].join(""))};var d=this.attachEvent,f=this.addEventListener;var g=function(){b.measure("winload");b.done()};d?d("onload",g):f&&f("load",g,!1);var h=document.createElement("script");
2
+ h.type="text/javascript";h.async=!0;h.src=("http:"===document.location.protocol?"http:":"https:")+"//d2gfdmu30u15x7.cloudfront.net/1/tly.js";var i=document.getElementsByTagName("script")[0];i.parentNode.insertBefore(h,i);}());</script>
3
+
@@ -0,0 +1,123 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ module Oboe
5
+ module Inst
6
+ module Rails3ActionController
7
+ def self.included(base)
8
+ base.class_eval do
9
+ alias_method_chain :process, :oboe
10
+ alias_method_chain :process_action, :oboe
11
+ alias_method_chain :render, :oboe
12
+ end
13
+ end
14
+
15
+ def process_with_oboe(*args)
16
+ Oboe::API.trace('rails', {}) do
17
+ process_without_oboe *args
18
+ end
19
+ end
20
+
21
+ def process_action_with_oboe(*args)
22
+ report_kvs = {
23
+ :Controller => self.class.name,
24
+ :Action => self.action_name,
25
+ }
26
+ Oboe::API.log(nil, 'info', report_kvs)
27
+
28
+ process_action_without_oboe *args
29
+ rescue Exception => exception
30
+ report_kvs[:Status] = 500
31
+ Oboe::API.log(nil, 'info', report_kvs)
32
+ raise
33
+ end
34
+
35
+ def render_with_oboe(*args)
36
+ Oboe::API.trace('actionview', {}) do
37
+ render_without_oboe *args
38
+ end
39
+ end
40
+ end
41
+
42
+ module Rails4ActionController
43
+ def self.included(base)
44
+ base.class_eval do
45
+ alias_method_chain :process_action, :oboe
46
+ alias_method_chain :render, :oboe
47
+ end
48
+ end
49
+
50
+ def process_action_with_oboe(method_name, *args)
51
+ return process_action_without_oboe(method_name, *args) if Oboe::Config[:action_blacklist].present? &&
52
+ Oboe::Config[:action_blacklist][[self.controller_name, self.action_name].join('#')]
53
+
54
+ report_kvs = {
55
+ :Controller => self.class.name,
56
+ :Action => self.action_name,
57
+ }
58
+ Oboe::API.trace('rails', report_kvs) do
59
+ process_action_without_oboe(method_name, *args)
60
+ end
61
+ end
62
+
63
+ def render_with_oboe(*args)
64
+ Oboe::API.trace('actionview', {}) do
65
+ render_without_oboe(*args)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ if defined?(ActionController::Base) and Oboe::Config[:action_controller][:enabled]
73
+ if ::Rails::VERSION::MAJOR == 4
74
+
75
+ class ActionController::Base
76
+ include Oboe::Inst::Rails4ActionController
77
+ end
78
+
79
+ elsif ::Rails::VERSION::MAJOR == 3
80
+
81
+ class ActionController::Base
82
+ include Oboe::Inst::Rails3ActionController
83
+ end
84
+
85
+ elsif ::Rails::VERSION::MAJOR == 2
86
+
87
+ ActionController::Base.class_eval do
88
+ alias :perform_action_without_oboe :perform_action
89
+ alias :rescue_action_without_oboe :rescue_action
90
+ alias :process_without_oboe :process
91
+ alias :render_without_oboe :render
92
+
93
+ def process(*args)
94
+ Oboe::API.trace('rails', {}) do
95
+ process_without_oboe(*args)
96
+ end
97
+ end
98
+
99
+ def perform_action(*arguments)
100
+ report_kvs = {
101
+ :Controller => @_request.path_parameters['controller'],
102
+ :Action => @_request.path_parameters['action']
103
+ }
104
+ Oboe::API.log(nil, 'info', report_kvs)
105
+ perform_action_without_oboe(*arguments)
106
+ end
107
+
108
+ def rescue_action(exn)
109
+ Oboe::API.log_exception(nil, exn)
110
+ rescue_action_without_oboe(exn)
111
+ end
112
+
113
+ def render(options = nil, extra_options = {}, &block)
114
+ Oboe::API.trace('actionview', {}) do
115
+ render_without_oboe(options, extra_options, &block)
116
+ end
117
+ end
118
+ end
119
+ end
120
+ Oboe.logger.info "[oboe/loading] Instrumenting actioncontroler" if Oboe::Config[:verbose]
121
+ end
122
+ # vim:set expandtab:tabstop=2
123
+
@@ -0,0 +1,56 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
5
+
6
+ ##
7
+ # ActionView Instrumentation is version dependent. ActionView 2.x is separate
8
+ # and ActionView 3.0 is a special case.
9
+ # Everything else goes here. (ActionView 3.1 - 4.0 as of this writing)
10
+ #
11
+ if (Rails::VERSION::MAJOR == 3 and Rails::VERSION::MINOR > 0) or Rails::VERSION::MAJOR == 4
12
+
13
+ Oboe.logger.info "[oboe/loading] Instrumenting actionview" if Oboe::Config[:verbose]
14
+
15
+ ActionView::PartialRenderer.class_eval do
16
+ alias :render_partial_without_oboe :render_partial
17
+ def render_partial
18
+ entry_kvs = {}
19
+ begin
20
+ name = Oboe::Util.prettify(@options[:partial]) if @options.is_a?(Hash)
21
+ entry_kvs[:FunctionName] = :render_partial
22
+ entry_kvs[:Class] = :PartialRenderer
23
+ entry_kvs[:Module] = :ActionView
24
+ entry_kvs[:File] = __FILE__
25
+ entry_kvs[:LineNumber] = __LINE__
26
+ rescue
27
+ end
28
+
29
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
30
+ render_partial_without_oboe
31
+ end
32
+ end
33
+
34
+ alias :render_collection_without_oboe :render_collection
35
+ def render_collection
36
+ entry_kvs = {}
37
+ begin
38
+ name = Oboe::Util.prettify(@path)
39
+ entry_kvs[:FunctionName] = :render_collection
40
+ entry_kvs[:Class] = :PartialRenderer
41
+ entry_kvs[:Module] = :ActionView
42
+ entry_kvs[:File] = __FILE__
43
+ entry_kvs[:LineNumber] = __LINE__
44
+ rescue
45
+ end
46
+
47
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
48
+ ret = render_collection_without_oboe
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+
56
+ # vim:set expandtab:tabstop=2
@@ -0,0 +1,54 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
5
+
6
+ if Rails::VERSION::MAJOR == 2
7
+
8
+ Oboe.logger.info "[oboe/loading] Instrumenting actionview" if Oboe::Config[:verbose]
9
+
10
+ ActionView::Partials.module_eval do
11
+ alias :render_partial_without_oboe :render_partial
12
+ def render_partial(options = {})
13
+ if options.has_key?(:partial) and options[:partial].is_a?(String)
14
+ entry_kvs = {}
15
+ begin
16
+ name = Oboe::Util.prettify(options[:partial]) if options.is_a?(Hash)
17
+ entry_kvs[:FunctionName] = :render_partial
18
+ entry_kvs[:Class] = :Partials
19
+ entry_kvs[:Module] = :ActionView
20
+ entry_kvs[:File] = __FILE__
21
+ entry_kvs[:LineNumber] = __LINE__
22
+ rescue
23
+ end
24
+
25
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
26
+ render_partial_without_oboe(options)
27
+ end
28
+ else
29
+ render_partial_without_oboe(options)
30
+ end
31
+ end
32
+
33
+ alias :render_partial_collection_without_oboe :render_partial_collection
34
+ def render_partial_collection(options = {})
35
+ entry_kvs = {}
36
+ begin
37
+ name = "partial_collection"
38
+ entry_kvs[:FunctionName] = :render_partial_collection
39
+ entry_kvs[:Class] = :Partials
40
+ entry_kvs[:Module] = :ActionView
41
+ entry_kvs[:File] = __FILE__
42
+ entry_kvs[:LineNumber] = __LINE__
43
+ rescue
44
+ end
45
+
46
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
47
+ render_partial_collection_without_oboe(options)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ # vim:set expandtab:tabstop=2
@@ -0,0 +1,48 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
5
+
6
+ if Rails::VERSION::MAJOR == 3 and Rails::VERSION::MINOR == 0
7
+
8
+ ActionView::Partials::PartialRenderer.class_eval do
9
+ alias :render_partial_without_oboe :render_partial
10
+ def render_partial(object = @object)
11
+ entry_kvs = {}
12
+ begin
13
+ name = Oboe::Util.prettify(@options[:partial]) if @options.is_a?(Hash)
14
+ entry_kvs[:FunctionName] = :render_partial
15
+ entry_kvs[:Class] = :PartialRenderer
16
+ entry_kvs[:Module] = 'ActionView::Partials'
17
+ entry_kvs[:File] = __FILE__
18
+ entry_kvs[:LineNumber] = __LINE__
19
+ rescue
20
+ end
21
+
22
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
23
+ render_partial_without_oboe(object)
24
+ end
25
+ end
26
+
27
+ alias :render_collection_without_oboe :render_collection
28
+ def render_collection
29
+ entry_kvs = {}
30
+ begin
31
+ name = Oboe::Util.prettify(@path)
32
+ entry_kvs[:FunctionName] = :render_collection
33
+ entry_kvs[:Class] = :PartialRenderer
34
+ entry_kvs[:Module] = 'ActionView::Partials'
35
+ entry_kvs[:File] = __FILE__
36
+ entry_kvs[:LineNumber] = __LINE__
37
+ rescue
38
+ end
39
+
40
+ Oboe::API.profile(name, entry_kvs, Oboe::Config[:action_view][:collect_backtraces]) do
41
+ render_collection_without_oboe
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ # vim:set expandtab:tabstop=2
@@ -0,0 +1,24 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ require 'oboe/frameworks/rails/inst/connection_adapters/utils'
5
+ require 'oboe/frameworks/rails/inst/connection_adapters/mysql'
6
+ require 'oboe/frameworks/rails/inst/connection_adapters/mysql2'
7
+ require 'oboe/frameworks/rails/inst/connection_adapters/postgresql'
8
+ require 'oboe/frameworks/rails/inst/connection_adapters/oracle'
9
+
10
+ if Oboe::Config[:active_record][:enabled]
11
+ begin
12
+ adapter = ActiveRecord::Base::connection.adapter_name.downcase
13
+
14
+ Oboe::Inst::ConnectionAdapters::FlavorInitializers.mysql if adapter == "mysql"
15
+ Oboe::Inst::ConnectionAdapters::FlavorInitializers.mysql2 if adapter == "mysql2"
16
+ Oboe::Inst::ConnectionAdapters::FlavorInitializers.postgresql if adapter == "postgresql"
17
+ Oboe::Inst::ConnectionAdapters::FlavorInitializers.oracle if adapter == "oracleenhanced"
18
+
19
+ rescue StandardError => e
20
+ Oboe.logger.error "[oboe/error] Oboe/ActiveRecord error: #{e.inspect}"
21
+ Oboe.logger.debug e.backtrace.join("\n")
22
+ end
23
+ end
24
+ # vim:set expandtab:tabstop=2