oboe 2.7.14.1 → 2.7.15.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 223f062171770328cbd42cc3347d93ae0b5b9088
4
- data.tar.gz: c15ceddbbc662bac762922b63dac89b15d4d5a20
3
+ metadata.gz: bc92deb9ac321f19e9d9c09e7e0e006ac5be7a33
4
+ data.tar.gz: 96ad4b07102f381248d58cf5b16fab898d46a047
5
5
  SHA512:
6
- metadata.gz: ae67053a2e222c1fedfb57592e21df2be3a66a53e0cdf532dc016b76d1e0e357c3a34d34196d3ce07808050fc4aef6c653f313478e10a0fb84505322dd4bbb1a
7
- data.tar.gz: e1a440f866617c1c8d08990f3346f0100b8dbd2b03ec009e05be818d5c8c50dbf3e475cc8dc20f20559aca5d2513c4ceabb038d12b06bb5dfe2059000b07af6d
6
+ metadata.gz: ea591933e96debfd29440da09423b0be74efc130227f6c71c0582844711f6b0c063eb5087dfd38cfd68454acb7fbd2f072e4cb5d22b6cb8a6918e82fdc71a72b
7
+ data.tar.gz: 8be66d49b04094778610d503b62eb0555fcb44321440a6542956b234b11f21fca5fbc6cf7e3ff449dbaee7e6991cac8a9361ce12985e0d9e4ddd0abe2b6f5847
@@ -4,6 +4,17 @@ https://github.com/appneta/oboe-ruby/releases
4
4
 
5
5
  Dates in this file are in the format MM/DD/YYYY.
6
6
 
7
+ # oboe 2.7.15.1
8
+
9
+ This patch release includes:
10
+
11
+ * Rails Instrumentation should respect top-level rescue handlers: #111
12
+
13
+ Pushed to Rubygems:
14
+
15
+ https://rubygems.org/gems/oboe/versions/2.7.15.1
16
+ https://rubygems.org/gems/oboe/versions/2.7.15/1-java
17
+
7
18
  # oboe 2.7.14.1
8
19
 
9
20
  This patch release includes:
@@ -101,6 +101,12 @@ module Oboe
101
101
  @@config[:dnt_regexp] = "\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|ttf|woff|svg|less)$"
102
102
  @@config[:dnt_opts] = Regexp::IGNORECASE
103
103
 
104
+ # In Rails, raised exceptions with rescue handlers via
105
+ # <tt>rescue_from</tt> are not reported to the TraceView
106
+ # dashboard by default. Setting this value to true will
107
+ # report all raised exception regardless.
108
+ @@config[:report_rescued_errors] = false
109
+
104
110
  if ENV.key?('OPENSHIFT_TRACEVIEW_TLYZER_IP')
105
111
  # We're running on OpenShift
106
112
  @@config[:tracing_mode] = 'always'
@@ -3,7 +3,82 @@
3
3
 
4
4
  module Oboe
5
5
  module Inst
6
- module Rails3ActionController
6
+ #
7
+ # RailsBase
8
+ #
9
+ # This module contains the instrumentation code common to
10
+ # many Rails versions.
11
+ #
12
+ module RailsBase
13
+ #
14
+ # has_handler?
15
+ #
16
+ # Determins if <tt>exception</tt> has a registered
17
+ # handler via <tt>rescue_from</tt>
18
+ #
19
+ def has_handler?(exception)
20
+ # Don't log exceptions if they have a rescue handler set
21
+ has_handler = false
22
+ rescue_handlers.detect { | klass_name, handler |
23
+ # Rescue handlers can be specified as strings or constant names
24
+ klass = self.class.const_get(klass_name) rescue nil
25
+ klass ||= klass_name.constantize rescue nil
26
+ has_handler = exception.is_a?(klass) if klass
27
+ }
28
+ has_handler
29
+ rescue => e
30
+ Oboe.logger.debug "[oboe/debug] Error searching Rails handlers: #{e.message}"
31
+ return false
32
+ end
33
+
34
+ #
35
+ # log_rails_error?
36
+ #
37
+ # Determins whether we should log a raised exception to the
38
+ # TraceView dashboard. This is determined by whether the exception
39
+ # has a rescue handler setup and the value of
40
+ # Oboe::Config[:report_rescued_errors]
41
+ #
42
+ def log_rails_error?(exception)
43
+ # As it's perculating up through the layers... make sure that
44
+ # we only report it once.
45
+ return false if exception.instance_variable_get(:@oboe_logged)
46
+
47
+ has_handler = has_handler?(exception)
48
+
49
+ if !has_handler || (has_handler && Oboe::Config[:report_rescued_errors])
50
+ return true
51
+ end
52
+ false
53
+ end
54
+
55
+ #
56
+ # render_with_oboe
57
+ #
58
+ # Our render wrapper that just times and conditionally
59
+ # reports raised exceptions
60
+ #
61
+ def render_with_oboe(*args)
62
+ Oboe::API.log_entry('actionview')
63
+ render_without_oboe(*args)
64
+
65
+ rescue Exception => e
66
+ Oboe::API.log_exception(nil, e) if log_rails_error?(e)
67
+ raise
68
+ ensure
69
+ Oboe::API.log_exit('actionview')
70
+ end
71
+ end
72
+
73
+ #
74
+ # ActionController3
75
+ #
76
+ # This modules contains the instrumentation code specific
77
+ # to Rails v3
78
+ #
79
+ module ActionController3
80
+ include ::Oboe::Inst::RailsBase
81
+
7
82
  def self.included(base)
8
83
  base.class_eval do
9
84
  alias_method_chain :process, :oboe
@@ -13,9 +88,14 @@ module Oboe
13
88
  end
14
89
 
15
90
  def process_with_oboe(*args)
16
- Oboe::API.trace('rails', {}) do
17
- process_without_oboe *args
18
- end
91
+ Oboe::API.log_entry('rails')
92
+ process_without_oboe *args
93
+
94
+ rescue Exception => e
95
+ Oboe::API.log_exception(nil, e) if log_rails_error?(e)
96
+ raise
97
+ ensure
98
+ Oboe::API.log_exit('rails')
19
99
  end
20
100
 
21
101
  def process_action_with_oboe(*args)
@@ -31,15 +111,17 @@ module Oboe
31
111
  Oboe::API.log(nil, 'info', report_kvs)
32
112
  raise
33
113
  end
34
-
35
- def render_with_oboe(*args)
36
- Oboe::API.trace('actionview', {}) do
37
- render_without_oboe *args
38
- end
39
- end
40
114
  end
41
115
 
42
- module Rails4ActionController
116
+ #
117
+ # ActionController4
118
+ #
119
+ # This modules contains the instrumentation code specific
120
+ # to Rails v4
121
+ #
122
+ module ActionController4
123
+ include ::Oboe::Inst::RailsBase
124
+
43
125
  def self.included(base)
44
126
  base.class_eval do
45
127
  alias_method_chain :process_action, :oboe
@@ -55,15 +137,15 @@ module Oboe
55
137
  :Controller => self.class.name,
56
138
  :Action => self.action_name,
57
139
  }
58
- Oboe::API.trace('rails', report_kvs) do
59
- process_action_without_oboe(method_name, *args)
60
- end
61
- end
62
140
 
63
- def render_with_oboe(*args)
64
- Oboe::API.trace('actionview', {}) do
65
- render_without_oboe(*args)
66
- end
141
+ Oboe::API.log_entry('rails')
142
+ process_action_without_oboe(method_name, *args)
143
+
144
+ rescue Exception => e
145
+ Oboe::API.log_exception(nil, e) if log_rails_error?(e)
146
+ raise
147
+ ensure
148
+ Oboe::API.log_exit('rails')
67
149
  end
68
150
  end
69
151
  end
@@ -73,27 +155,34 @@ if defined?(ActionController::Base) && Oboe::Config[:action_controller][:enabled
73
155
  if ::Rails::VERSION::MAJOR == 4
74
156
 
75
157
  class ActionController::Base
76
- include Oboe::Inst::Rails4ActionController
158
+ include Oboe::Inst::ActionController4
77
159
  end
78
160
 
79
161
  elsif ::Rails::VERSION::MAJOR == 3
80
162
 
81
163
  class ActionController::Base
82
- include Oboe::Inst::Rails3ActionController
164
+ include Oboe::Inst::ActionController3
83
165
  end
84
166
 
85
167
  elsif ::Rails::VERSION::MAJOR == 2
86
168
 
87
169
  ActionController::Base.class_eval do
170
+ include ::Oboe::Inst::RailsBase
171
+
88
172
  alias :perform_action_without_oboe :perform_action
89
173
  alias :rescue_action_without_oboe :rescue_action
90
174
  alias :process_without_oboe :process
91
175
  alias :render_without_oboe :render
92
176
 
93
177
  def process(*args)
94
- Oboe::API.trace('rails', {}) do
95
- process_without_oboe(*args)
96
- end
178
+ Oboe::API.log_entry('rails')
179
+ process_without_oboe(*args)
180
+
181
+ rescue Exception => e
182
+ Oboe::API.log_exception(nil, e) if log_rails_error?(e)
183
+ raise
184
+ ensure
185
+ Oboe::API.log_exit('rails')
97
186
  end
98
187
 
99
188
  def perform_action(*arguments)
@@ -106,14 +195,19 @@ if defined?(ActionController::Base) && Oboe::Config[:action_controller][:enabled
106
195
  end
107
196
 
108
197
  def rescue_action(exn)
109
- Oboe::API.log_exception(nil, exn)
198
+ Oboe::API.log_exception(nil, exn) if log_rails_error?(exn)
110
199
  rescue_action_without_oboe(exn)
111
200
  end
112
201
 
113
202
  def render(options = nil, extra_options = {}, &block)
114
- Oboe::API.trace('actionview', {}) do
115
- render_without_oboe(options, extra_options, &block)
116
- end
203
+ Oboe::API.log_entry('actionview')
204
+ render_without_oboe(options, extra_options, &block)
205
+
206
+ rescue Exception => e
207
+ Oboe::API.log_exception(nil, e) if log_rails_error?(e)
208
+ raise
209
+ ensure
210
+ Oboe::API.log_exit('actionview')
117
211
  end
118
212
  end
119
213
  end
@@ -8,7 +8,7 @@ module Oboe
8
8
  module Version
9
9
  MAJOR = 2
10
10
  MINOR = 7
11
- PATCH = 14
11
+ PATCH = 15
12
12
  BUILD = 1
13
13
 
14
14
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
@@ -21,20 +21,6 @@ if defined?(Oboe::Config)
21
21
  # Verbose output of instrumentation initialization
22
22
  # Oboe::Config[:verbose] = <%= @verbose %>
23
23
 
24
- #
25
- # Resque Options
26
- #
27
- # :link_workers - associates Resque enqueue operations with the jobs they queue by piggybacking
28
- # an additional argument on the Redis queue that is stripped prior to job
29
- # processing
30
- # !!! Note: Make sure both the enqueue side and the Resque workers are instrumented
31
- # before enabling this or jobs will fail !!!
32
- # (Default: false)
33
- # Oboe::Config[:resque][:link_workers] = false
34
- #
35
- # Set to true to disable Resque argument logging (Default: false)
36
- # Oboe::Config[:resque][:log_args] = false
37
-
38
24
  # The oboe Ruby client has the ability to sanitize query literals
39
25
  # from SQL statements. By default this is disabled. Enable to
40
26
  # avoid collecting and reporting query literals to TraceView.
@@ -68,6 +54,17 @@ if defined?(Oboe::Config)
68
54
  # Oboe::Config[:dnt_regexp] = "\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|ttf|woff|svg|less)$"
69
55
  # Oboe::Config[:dnt_opts] = Regexp::IGNORECASE
70
56
 
57
+ #
58
+ # Rails Exception Logging
59
+ #
60
+ # In Rails, raised exceptions with rescue handlers via
61
+ # <tt>rescue_from</tt> are not reported to the TraceView
62
+ # dashboard by default. Setting this value to true will
63
+ # report all raised exception regardless.
64
+ #
65
+ # Oboe::Config[:report_rescued_errors] = false
66
+ #
67
+
71
68
  #
72
69
  # Enabling/Disabling Instrumentation
73
70
  #
@@ -80,6 +77,7 @@ if defined?(Oboe::Config)
80
77
  # Oboe::Config[:action_view][:enabled] = true
81
78
  # Oboe::Config[:cassandra][:enabled] = true
82
79
  # Oboe::Config[:dalli][:enabled] = true
80
+ # Oboe::Config[:em_http_request][:enabled] = true
83
81
  # Oboe::Config[:faraday][:enabled] = true
84
82
  # Oboe::Config[:memcache][:enabled] = true
85
83
  # Oboe::Config[:memcached][:enabled] = true
@@ -88,7 +86,9 @@ if defined?(Oboe::Config)
88
86
  # Oboe::Config[:nethttp][:enabled] = true
89
87
  # Oboe::Config[:redis][:enabled] = true
90
88
  # Oboe::Config[:resque][:enabled] = true
91
- # Oboe::Config[:em_http_request][:enabled] = true
89
+ # Oboe::Config[:sequel][:enabled] = true
90
+ # Oboe::Config[:typhoeus][:enabled] = true
91
+ #
92
92
 
93
93
  #
94
94
  # Enabling/Disabling Backtrace Collection
@@ -103,6 +103,7 @@ if defined?(Oboe::Config)
103
103
  # Oboe::Config[:action_view][:collect_backtraces] = true
104
104
  # Oboe::Config[:cassandra][:collect_backtraces] = true
105
105
  # Oboe::Config[:dalli][:collect_backtraces] = false
106
+ # Oboe::Config[:em_http_request][:collect_backtraces] = true
106
107
  # Oboe::Config[:faraday][:collect_backtraces] = false
107
108
  # Oboe::Config[:memcache][:collect_backtraces] = false
108
109
  # Oboe::Config[:memcached][:collect_backtraces] = false
@@ -111,7 +112,8 @@ if defined?(Oboe::Config)
111
112
  # Oboe::Config[:nethttp][:collect_backtraces] = true
112
113
  # Oboe::Config[:redis][:collect_backtraces] = false
113
114
  # Oboe::Config[:resque][:collect_backtraces] = true
114
- # Oboe::Config[:em_http_request][:collect_backtraces] = true
115
+ # Oboe::Config[:sequel][:collect_backtraces] = true
116
+ # Oboe::Config[:typhoeus][:collect_backtraces] = false
115
117
  #
116
118
 
117
119
  #
@@ -123,4 +125,17 @@ if defined?(Oboe::Config)
123
125
  # 'index#ok' => true
124
126
  # }
125
127
 
128
+ #
129
+ # Resque Options
130
+ #
131
+ # :link_workers - associates Resque enqueue operations with the jobs they queue by piggybacking
132
+ # an additional argument on the Redis queue that is stripped prior to job
133
+ # processing
134
+ # !!! Note: Make sure both the enqueue side and the Resque workers are instrumented
135
+ # before enabling this or jobs will fail !!!
136
+ # (Default: false)
137
+ # Oboe::Config[:resque][:link_workers] = false
138
+ #
139
+ # Set to true to disable Resque argument logging (Default: false)
140
+ # Oboe::Config[:resque][:log_args] = false
126
141
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oboe
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.14.1
4
+ version: 2.7.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Giacomo Lombardo
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-21 00:00:00.000000000 Z
12
+ date: 2015-03-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json