oboe 2.7.1.7-java → 2.7.2.2-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.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/Gemfile +2 -0
- data/README.md +3 -3
- data/ext/oboe_metal/extconf.rb +11 -11
- data/lib/joboe_metal.rb +36 -42
- data/lib/oboe.rb +29 -27
- data/lib/oboe/api.rb +4 -0
- data/lib/oboe/api/layerinit.rb +9 -6
- data/lib/oboe/api/logging.rb +50 -28
- data/lib/oboe/api/memcache.rb +7 -5
- data/lib/oboe/api/profiling.rb +4 -4
- data/lib/oboe/api/tracing.rb +6 -5
- data/lib/oboe/api/util.rb +13 -9
- data/lib/oboe/base.rb +50 -15
- data/lib/oboe/config.rb +17 -15
- data/lib/oboe/frameworks/padrino.rb +0 -2
- data/lib/oboe/frameworks/padrino/templates.rb +5 -6
- data/lib/oboe/frameworks/rails.rb +0 -1
- data/lib/oboe/frameworks/rails/inst/action_controller.rb +4 -5
- data/lib/oboe/frameworks/rails/inst/action_view.rb +4 -4
- data/lib/oboe/frameworks/rails/inst/action_view_2x.rb +4 -4
- data/lib/oboe/frameworks/rails/inst/action_view_30.rb +2 -2
- data/lib/oboe/frameworks/rails/inst/active_record.rb +5 -5
- data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql.rb +6 -6
- data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql2.rb +3 -3
- data/lib/oboe/frameworks/rails/inst/connection_adapters/oracle.rb +1 -1
- data/lib/oboe/frameworks/rails/inst/connection_adapters/postgresql.rb +3 -3
- data/lib/oboe/frameworks/rails/inst/connection_adapters/utils.rb +18 -19
- data/lib/oboe/frameworks/sinatra.rb +4 -5
- data/lib/oboe/inst/cassandra.rb +17 -19
- data/lib/oboe/inst/dalli.rb +5 -5
- data/lib/oboe/inst/em-http-request.rb +13 -13
- data/lib/oboe/inst/faraday.rb +71 -0
- data/lib/oboe/inst/http.rb +4 -4
- data/lib/oboe/inst/memcache.rb +7 -10
- data/lib/oboe/inst/memcached.rb +7 -9
- data/lib/oboe/inst/mongo.rb +26 -28
- data/lib/oboe/inst/moped.rb +23 -24
- data/lib/oboe/inst/rack.rb +10 -11
- data/lib/oboe/inst/redis.rb +18 -20
- data/lib/oboe/inst/resque.rb +8 -9
- data/lib/oboe/instrumentation.rb +3 -0
- data/lib/oboe/loading.rb +19 -23
- data/lib/{method_profiling.rb → oboe/method_profiling.rb} +22 -8
- data/lib/oboe/ruby.rb +23 -3
- data/lib/oboe/thread_local.rb +9 -1
- data/lib/oboe/util.rb +15 -19
- data/lib/oboe/version.rb +5 -2
- data/lib/oboe/xtrace.rb +20 -24
- data/lib/oboe_metal.rb +16 -13
- data/lib/rails/generators/oboe/templates/oboe_initializer.rb +2 -0
- data/test/instrumentation/faraday_test.rb +142 -0
- data/test/instrumentation/moped_test.rb +2 -0
- data/test/minitest_helper.rb +0 -1
- data/test/support/config_test.rb +3 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44cdd9c6976e59b8300d6360a68f7072be9f965d
|
4
|
+
data.tar.gz: 41db567e21e8a0bdb4848c371c04490700d1bb71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0efc756cc2b47d47eb1b3d4a4d2b285032b3fc0e3836041a7a1b3774ef773960ef672408c0a74a69a73b1fb3cbd3de3a00c8b17ce9744388b7e4753f1db62128
|
7
|
+
data.tar.gz: b1c8edfb51062734b1e6a9a6e86e0a3d83442d0ef7db1a17591d3f678b9b00d1fbf9403caf4387a9a15938bcc3b151bac2f68dcf038a7b1436f2b7a750e8f4a3
|
data/.rubocop.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -123,7 +123,7 @@ You must explicitly tell your Grape application to use Oboe::Rack for tracing to
|
|
123
123
|
|
124
124
|
## Custom Ruby Scripts & Applications
|
125
125
|
|
126
|
-
The oboe gem has the ability to instrument any arbitrary Ruby application or script
|
126
|
+
The oboe gem has the ability to instrument any arbitrary Ruby application or script. Only the `tracing_mode` needs to be set to tell the oboe gem to initiate performance metric collection.
|
127
127
|
|
128
128
|
```ruby
|
129
129
|
require 'rubygems'
|
@@ -135,12 +135,12 @@ require 'oboe'
|
|
135
135
|
|
136
136
|
# Tracing mode can be 'never', 'through' (to follow upstream) or 'always'
|
137
137
|
Oboe::Config[:tracing_mode] = 'always'
|
138
|
-
|
139
|
-
Oboe::Ruby.initialize
|
140
138
|
```
|
141
139
|
|
142
140
|
From here, you can use the Tracing API to instrument areas of code using `Oboe::API.start_trace` (see below). If you prefer to instead dive directly into code, take a look at [this example](https://gist.github.com/pglombardo/8550713) of an instrumented Ruby script.
|
143
141
|
|
142
|
+
Once inside of the `Oboe::API.start_trace` block, performance metrics will be automatically collected for all supported libraries and gems (Redis, Mongo, ActiveRecord etc..).
|
143
|
+
|
144
144
|
## Other
|
145
145
|
|
146
146
|
You can send deploy notifications to TraceView and have the events show up on your dashboard. See: [Capistrano Deploy Notifications with tlog](https://support.appneta.com/cloud/capistrano-deploy-notifications-tlog)
|
data/ext/oboe_metal/extconf.rb
CHANGED
@@ -7,7 +7,7 @@ require 'rbconfig'
|
|
7
7
|
# Check if we're running in JRuby
|
8
8
|
jruby = defined?(JRUBY_VERSION) ? true : false
|
9
9
|
|
10
|
-
openshift = ENV.
|
10
|
+
openshift = ENV.key?('OPENSHIFT_TRACEVIEW_DIR')
|
11
11
|
|
12
12
|
# When on OpenShift, set the mkmf lib paths so we have no issues linking to
|
13
13
|
# the TraceView libs.
|
@@ -23,7 +23,7 @@ else
|
|
23
23
|
dir_config('oboe')
|
24
24
|
end
|
25
25
|
|
26
|
-
if jruby
|
26
|
+
if jruby || ENV.key?('TRACEVIEW_URL')
|
27
27
|
# Build the noop extension under JRuby and Heroku.
|
28
28
|
# The oboe-heroku gem builds it's own c extension which links to
|
29
29
|
# libs specific to a Heroku dyno
|
@@ -32,30 +32,30 @@ if jruby or ENV.has_key?('TRACEVIEW_URL')
|
|
32
32
|
|
33
33
|
elsif have_library('oboe', 'oboe_config_get_revision', 'oboe/oboe.h')
|
34
34
|
|
35
|
-
$libs = append_library($libs,
|
36
|
-
$libs = append_library($libs,
|
35
|
+
$libs = append_library($libs, 'oboe')
|
36
|
+
$libs = append_library($libs, 'stdc++')
|
37
37
|
|
38
|
-
$CFLAGS << " #{ENV[
|
39
|
-
$CPPFLAGS << " #{ENV[
|
40
|
-
$LIBS << " #{ENV[
|
38
|
+
$CFLAGS << " #{ENV['CFLAGS']}"
|
39
|
+
$CPPFLAGS << " #{ENV['CPPFLAGS']}"
|
40
|
+
$LIBS << " #{ENV['LIBS']}"
|
41
41
|
|
42
42
|
# On OpenShift user rpath to point out the TraceView libraries
|
43
43
|
if openshift
|
44
|
-
$LDFLAGS << " #{ENV[
|
44
|
+
$LDFLAGS << " #{ENV['LDFLAGS']} -Wl,-rpath=#{tv_lib64},--rpath=#{tv_tlyzer}"
|
45
45
|
end
|
46
46
|
|
47
47
|
if RUBY_VERSION < '1.9'
|
48
48
|
cpp_command('g++')
|
49
|
-
$CPPFLAGS <<
|
49
|
+
$CPPFLAGS << '-I./src/'
|
50
50
|
end
|
51
51
|
create_makefile('oboe_metal', 'src')
|
52
52
|
|
53
53
|
else
|
54
54
|
if have_library('oboe')
|
55
|
-
$stderr.puts
|
55
|
+
$stderr.puts 'Error: The oboe gem requires an updated liboboe. Please update your liboboe packages.'
|
56
56
|
end
|
57
57
|
|
58
|
-
$stderr.puts
|
58
|
+
$stderr.puts 'Error: Could not find the base liboboe libraries. No tracing will occur.'
|
59
59
|
create_makefile('oboe_noop', 'noop')
|
60
60
|
end
|
61
61
|
|
data/lib/joboe_metal.rb
CHANGED
@@ -48,42 +48,36 @@ module Oboe_metal
|
|
48
48
|
# Initialize the Oboe Context, reporter and report the initialization
|
49
49
|
#
|
50
50
|
def self.start
|
51
|
-
|
52
|
-
return unless Oboe.loaded
|
53
|
-
|
54
|
-
if ENV.has_key?("OBOE_GEM_TEST")
|
55
|
-
Oboe.reporter = Java::ComTracelyticsJoboe::TestReporter.new
|
56
|
-
else
|
57
|
-
Oboe.reporter = Java::ComTracelyticsJoboe::ReporterFactory.getInstance().buildUdpReporter()
|
58
|
-
end
|
51
|
+
return unless Oboe.loaded
|
59
52
|
|
53
|
+
if ENV.key?('OBOE_GEM_TEST')
|
54
|
+
Oboe.reporter = Java::ComTracelyticsJoboe::TestReporter.new
|
55
|
+
else
|
56
|
+
Oboe.reporter = Java::ComTracelyticsJoboe::ReporterFactory.getInstance.buildUdpReporter
|
57
|
+
end
|
60
58
|
|
61
|
-
# Import the tracing mode and sample rate settings
|
62
|
-
# from the Java agent (user configured in
|
63
|
-
# /usr/local/tracelytics/javaagent.json when under JRuby)
|
64
|
-
cfg = LayerUtil.getLocalSampleRate(nil, nil)
|
65
59
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
else
|
71
|
-
Oboe::Config.tracing_mode = 'never'
|
72
|
-
end
|
60
|
+
# Import the tracing mode and sample rate settings
|
61
|
+
# from the Java agent (user configured in
|
62
|
+
# /usr/local/tracelytics/javaagent.json when under JRuby)
|
63
|
+
cfg = LayerUtil.getLocalSampleRate(nil, nil)
|
73
64
|
|
74
|
-
|
75
|
-
Oboe::Config.
|
76
|
-
|
65
|
+
if cfg.hasSampleStartFlag
|
66
|
+
Oboe::Config.tracing_mode = 'always'
|
67
|
+
elsif cfg.hasSampleThroughFlag
|
68
|
+
Oboe::Config.tracing_mode = 'through'
|
69
|
+
else
|
70
|
+
Oboe::Config.tracing_mode = 'never'
|
71
|
+
end
|
77
72
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
Oboe::API.report_init
|
82
|
-
end
|
73
|
+
Oboe.sample_rate = cfg.sampleRate
|
74
|
+
Oboe::Config.sample_rate = cfg.sampleRate
|
75
|
+
Oboe::Config.sample_source = cfg.sampleRateSource.a
|
83
76
|
|
84
|
-
|
85
|
-
|
86
|
-
|
77
|
+
# Only report __Init from here if we are not instrumenting a framework.
|
78
|
+
# Otherwise, frameworks will handle reporting __Init after full initialization
|
79
|
+
unless defined?(::Rails) || defined?(::Sinatra) || defined?(::Padrino) || defined?(::Grape)
|
80
|
+
Oboe::API.report_init
|
87
81
|
end
|
88
82
|
end
|
89
83
|
|
@@ -112,7 +106,7 @@ module Oboe_metal
|
|
112
106
|
traces = []
|
113
107
|
Oboe.reporter.getSentEventsAsBsonDocument.to_a.each do |e|
|
114
108
|
t = {}
|
115
|
-
e.each_pair { |k,v|
|
109
|
+
e.each_pair { |k, v|
|
116
110
|
t[k] = v
|
117
111
|
}
|
118
112
|
traces << t
|
@@ -133,22 +127,23 @@ module Oboe
|
|
133
127
|
class << self
|
134
128
|
def sample?(opts = {})
|
135
129
|
begin
|
136
|
-
return false unless Oboe.always?
|
130
|
+
return false unless Oboe.always? && Oboe.loaded
|
137
131
|
|
138
|
-
return true if ENV
|
132
|
+
return true if ENV.key?('OBOE_GEM_TEST')
|
139
133
|
|
140
134
|
# Validation to make Joboe happy. Assure that we have the KVs and that they
|
141
135
|
# are not empty strings.
|
142
|
-
opts[:layer] = nil if opts[:layer].is_a?(String)
|
143
|
-
opts[:xtrace] = nil if opts[:xtrace].is_a?(String)
|
144
|
-
opts['X-TV-Meta'] = nil if opts['X-TV-Meta'].is_a?(String)
|
136
|
+
opts[:layer] = nil if opts[:layer].is_a?(String) && opts[:layer].empty?
|
137
|
+
opts[:xtrace] = nil if opts[:xtrace].is_a?(String) && opts[:xtrace].empty?
|
138
|
+
opts['X-TV-Meta'] = nil if opts['X-TV-Meta'].is_a?(String) && opts['X-TV-Meta'].empty?
|
145
139
|
|
146
140
|
opts[:layer] ||= nil
|
147
141
|
opts[:xtrace] ||= nil
|
148
142
|
opts['X-TV-Meta'] ||= nil
|
149
143
|
|
150
|
-
sr_cfg = Java::ComTracelyticsJoboe::LayerUtil.shouldTraceRequest(
|
151
|
-
|
144
|
+
sr_cfg = Java::ComTracelyticsJoboe::LayerUtil.shouldTraceRequest(
|
145
|
+
opts[:layer],
|
146
|
+
{ 'X-Trace' => opts[:xtrace], 'X-TV-Meta' => opts['X-TV-Meta'] })
|
152
147
|
|
153
148
|
# Store the returned SampleRateConfig into Oboe::Config
|
154
149
|
if sr_cfg
|
@@ -163,11 +158,11 @@ module Oboe
|
|
163
158
|
end
|
164
159
|
end
|
165
160
|
|
166
|
-
def set_tracing_mode(
|
167
|
-
Oboe.logger.warn
|
161
|
+
def set_tracing_mode(_mode)
|
162
|
+
Oboe.logger.warn 'When using JRuby set the tracing mode in /usr/local/tracelytics/javaagent.json instead'
|
168
163
|
end
|
169
164
|
|
170
|
-
def set_sample_rate(
|
165
|
+
def set_sample_rate(_rate)
|
171
166
|
# N/A
|
172
167
|
end
|
173
168
|
end
|
@@ -180,4 +175,3 @@ if status == Java::ComTracelyticsAgent::Agent::AgentStatus::UNINITIALIZED
|
|
180
175
|
else
|
181
176
|
Oboe.loaded = true
|
182
177
|
end
|
183
|
-
|
data/lib/oboe.rb
CHANGED
@@ -2,53 +2,55 @@
|
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
4
|
begin
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
5
|
+
require 'oboe/version'
|
6
|
+
require 'oboe/thread_local'
|
7
|
+
require 'oboe/logger'
|
8
|
+
require 'oboe/util'
|
9
|
+
require 'oboe/xtrace'
|
10
10
|
|
11
11
|
# If OboeHeroku is already defined then we are in a PaaS environment
|
12
12
|
# with an alternate metal (see the oboe-heroku gem)
|
13
13
|
unless defined?(OboeHeroku)
|
14
|
-
require
|
14
|
+
require 'oboe/base'
|
15
15
|
|
16
16
|
begin
|
17
17
|
if RUBY_PLATFORM == 'java'
|
18
|
-
require
|
19
|
-
require
|
18
|
+
require '/usr/local/tracelytics/tracelyticsagent.jar'
|
19
|
+
require 'joboe_metal'
|
20
20
|
else
|
21
|
-
require
|
22
|
-
require
|
21
|
+
require 'oboe_metal.so'
|
22
|
+
require 'oboe_metal'
|
23
23
|
end
|
24
24
|
rescue LoadError
|
25
25
|
Oboe.loaded = false
|
26
26
|
|
27
|
-
unless ENV['RAILS_GROUP'] == 'assets'
|
28
|
-
$stderr.puts
|
29
|
-
$stderr.puts
|
30
|
-
$stderr.puts
|
31
|
-
$stderr.puts
|
27
|
+
unless ENV['RAILS_GROUP'] == 'assets' or ENV['IGNORE_TRACEVIEW_WARNING']
|
28
|
+
$stderr.puts '=============================================================='
|
29
|
+
$stderr.puts 'Missing TraceView libraries. Tracing disabled.'
|
30
|
+
$stderr.puts 'See: http://bit.ly/1DaNOjw'
|
31
|
+
$stderr.puts '=============================================================='
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
require
|
36
|
+
require 'oboe/config'
|
37
37
|
|
38
38
|
if Oboe.loaded
|
39
|
-
require
|
40
|
-
require
|
41
|
-
require
|
42
|
-
require "oboe/ruby"
|
39
|
+
require 'oboe/loading'
|
40
|
+
require 'oboe/method_profiling'
|
41
|
+
require 'oboe/instrumentation'
|
43
42
|
|
44
43
|
# Frameworks
|
45
|
-
require
|
46
|
-
require
|
47
|
-
require
|
48
|
-
require
|
44
|
+
require 'oboe/frameworks/rails'
|
45
|
+
require 'oboe/frameworks/sinatra'
|
46
|
+
require 'oboe/frameworks/padrino'
|
47
|
+
require 'oboe/frameworks/grape'
|
49
48
|
end
|
50
|
-
|
51
|
-
|
49
|
+
|
50
|
+
# Load Ruby module last. If there is no framework detected,
|
51
|
+
# it will load all of the Ruby instrumentation
|
52
|
+
require 'oboe/ruby'
|
53
|
+
rescue => e
|
54
|
+
$stderr.puts '[oboe/error] Problem loading: #{e.inspect}'
|
52
55
|
$stderr.puts e.backtrace
|
53
56
|
end
|
54
|
-
|
data/lib/oboe/api.rb
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
4
|
module Oboe
|
5
|
+
##
|
6
|
+
# This module implements the TraceView tracing API.
|
7
|
+
# See: https://github.com/appneta/oboe-ruby#the-tracing-api
|
8
|
+
# and/or: http://rdoc.info/gems/oboe/Oboe/API/Tracing
|
5
9
|
module API
|
6
10
|
def self.extend_with_tracing
|
7
11
|
extend Oboe::API::Logging
|
data/lib/oboe/api/layerinit.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
|
4
4
|
module Oboe
|
5
5
|
module API
|
6
|
+
##
|
7
|
+
# Provides methods related to layer initialization and reporting
|
6
8
|
module LayerInit
|
7
9
|
# Internal: Report that instrumentation for the given layer has been
|
8
10
|
# installed, as well as the version of instrumentation and version of
|
@@ -10,7 +12,7 @@ module Oboe
|
|
10
12
|
#
|
11
13
|
def report_init(layer = 'rack')
|
12
14
|
# Don't send __Init in development or test
|
13
|
-
return if
|
15
|
+
return if %w(development test).include? ENV['RACK_ENV']
|
14
16
|
|
15
17
|
# Don't send __Init if the c-extension hasn't loaded
|
16
18
|
return unless Oboe.loaded
|
@@ -44,8 +46,8 @@ module Oboe
|
|
44
46
|
platform_info['Ruby.Resque.Version'] = "Resque-#{::Resque::VERSION}" if defined?(::Resque)
|
45
47
|
|
46
48
|
# Special case since the Mongo 1.x driver doesn't embed the version number in the gem directly
|
47
|
-
if ::Gem.loaded_specs.
|
48
|
-
platform_info['Ruby.Mongo.Version'] = "Mongo-#{::Gem.loaded_specs['mongo'].version
|
49
|
+
if ::Gem.loaded_specs.key?('mongo')
|
50
|
+
platform_info['Ruby.Mongo.Version'] = "Mongo-#{::Gem.loaded_specs['mongo'].version}"
|
49
51
|
end
|
50
52
|
|
51
53
|
# Report the server in use (if possible)
|
@@ -66,7 +68,7 @@ module Oboe
|
|
66
68
|
elsif defined?(::WEBrick)
|
67
69
|
platform_info['Ruby.AppContainer.Version'] = "WEBrick-#{::WEBrick::VERSION}"
|
68
70
|
else
|
69
|
-
platform_info['Ruby.AppContainer.Version'] = File.basename($
|
71
|
+
platform_info['Ruby.AppContainer.Version'] = File.basename($PROGRAM_NAME)
|
70
72
|
end
|
71
73
|
|
72
74
|
rescue StandardError, ScriptError => e
|
@@ -79,14 +81,15 @@ module Oboe
|
|
79
81
|
Oboe.logger.debug e.backtrace
|
80
82
|
end
|
81
83
|
|
82
|
-
start_trace(layer, nil, platform_info.merge('Force' => true)) {
|
84
|
+
start_trace(layer, nil, platform_info.merge('Force' => true)) {}
|
83
85
|
end
|
84
86
|
|
85
87
|
##
|
86
88
|
# force_trace has been deprecated and will be removed in a subsequent version.
|
87
89
|
#
|
88
90
|
def force_trace
|
89
|
-
Oboe.logger.warn
|
91
|
+
Oboe.logger.warn 'Oboe::API::LayerInit.force_trace has been deprecated and will be ' \
|
92
|
+
'removed in a subsequent version.'
|
90
93
|
|
91
94
|
saved_mode = Oboe::Config[:tracing_mode]
|
92
95
|
Oboe::Config[:tracing_mode] = 'always'
|
data/lib/oboe/api/logging.rb
CHANGED
@@ -3,8 +3,9 @@
|
|
3
3
|
|
4
4
|
module Oboe
|
5
5
|
module API
|
6
|
+
##
|
7
|
+
# This modules provides the X-Trace logging facilities.
|
6
8
|
module Logging
|
7
|
-
|
8
9
|
# Public: Report an event in an active trace.
|
9
10
|
#
|
10
11
|
# layer - The layer the reported event belongs to
|
@@ -20,7 +21,7 @@ module Oboe
|
|
20
21
|
# log('logical_layer', 'exit')
|
21
22
|
#
|
22
23
|
# Returns nothing.
|
23
|
-
def log(layer, label, opts={})
|
24
|
+
def log(layer, label, opts = {})
|
24
25
|
log_event(layer, label, Oboe::Context.createEvent, opts)
|
25
26
|
end
|
26
27
|
|
@@ -40,14 +41,14 @@ module Oboe
|
|
40
41
|
#
|
41
42
|
# Returns nothing.
|
42
43
|
def log_exception(layer, exn)
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
return if exn.instance_variable_get(:@oboe_logged)
|
45
|
+
|
46
|
+
kvs = { :ErrorClass => exn.class.name,
|
47
|
+
:Message => exn.message,
|
48
|
+
:Backtrace => exn.backtrace.join("\r\n") }
|
49
|
+
|
50
|
+
exn.instance_variable_set(:@oboe_logged, true)
|
51
|
+
log(layer, 'error', kvs)
|
51
52
|
end
|
52
53
|
|
53
54
|
# Public: Decide whether or not to start a trace, and report an event
|
@@ -59,16 +60,14 @@ module Oboe
|
|
59
60
|
# with this event (optional).
|
60
61
|
#
|
61
62
|
# Returns nothing.
|
62
|
-
def log_start(layer, xtrace, opts={})
|
63
|
-
return if Oboe.never?
|
63
|
+
def log_start(layer, xtrace, opts = {})
|
64
|
+
return if Oboe.never? || (opts.key?(:URL) && ::Oboe::Util.static_asset?(opts[:URL]))
|
64
65
|
|
65
|
-
if xtrace
|
66
|
-
Oboe::Context.fromString(xtrace)
|
67
|
-
end
|
66
|
+
Oboe::Context.fromString(xtrace) if xtrace && !xtrace.to_s.empty?
|
68
67
|
|
69
68
|
if Oboe.tracing?
|
70
69
|
log_entry(layer, opts)
|
71
|
-
elsif opts.
|
70
|
+
elsif opts.key?('Force') || Oboe.sample?(opts.merge(:layer => layer, :xtrace => xtrace))
|
72
71
|
log_event(layer, 'entry', Oboe::Context.startTrace, opts)
|
73
72
|
end
|
74
73
|
end
|
@@ -78,21 +77,46 @@ module Oboe
|
|
78
77
|
# layer - The layer the reported event belongs to
|
79
78
|
#
|
80
79
|
# Returns an xtrace metadata string
|
81
|
-
def log_end(layer, opts={})
|
80
|
+
def log_end(layer, opts = {})
|
82
81
|
log_event(layer, 'exit', Oboe::Context.createEvent, opts)
|
83
82
|
xtrace = Oboe::Context.toString
|
84
83
|
Oboe::Context.clear
|
85
84
|
xtrace
|
86
85
|
end
|
87
86
|
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
##
|
88
|
+
# Public: Log an entry event
|
89
|
+
#
|
90
|
+
# A helper method to create and log an
|
91
|
+
# entry event
|
92
|
+
#
|
93
|
+
# Returns an xtrace metadata string
|
94
|
+
def log_entry(layer, kvs = {}, op = nil)
|
95
|
+
Oboe.layer_op = op if op
|
96
|
+
log_event(layer, 'entry', Oboe::Context.createEvent, kvs)
|
91
97
|
end
|
92
98
|
|
93
|
-
|
94
|
-
|
95
|
-
|
99
|
+
##
|
100
|
+
# Public: Log an info event
|
101
|
+
#
|
102
|
+
# A helper method to create and log an
|
103
|
+
# info event
|
104
|
+
#
|
105
|
+
# Returns an xtrace metadata string
|
106
|
+
def log_info(layer, kvs = {})
|
107
|
+
log_event(layer, 'info', Oboe::Context.createEvent, kvs)
|
108
|
+
end
|
109
|
+
|
110
|
+
##
|
111
|
+
# Public: Log an exit event
|
112
|
+
#
|
113
|
+
# A helper method to create and log an
|
114
|
+
# exit event
|
115
|
+
#
|
116
|
+
# Returns an xtrace metadata string
|
117
|
+
def log_exit(layer, kvs = {}, op = nil)
|
118
|
+
Oboe.layer_op = nil if op
|
119
|
+
log_event(layer, 'exit', Oboe::Context.createEvent, kvs)
|
96
120
|
end
|
97
121
|
|
98
122
|
# Internal: Report an event.
|
@@ -112,15 +136,13 @@ module Oboe
|
|
112
136
|
# log_event('rails', 'exit', exit)
|
113
137
|
#
|
114
138
|
# Returns nothing.
|
115
|
-
def log_event(layer, label, event, opts={})
|
116
|
-
if layer
|
117
|
-
event.addInfo('Layer', layer.to_s)
|
118
|
-
end
|
139
|
+
def log_event(layer, label, event, opts = {})
|
140
|
+
event.addInfo('Layer', layer.to_s) if layer
|
119
141
|
event.addInfo('Label', label.to_s)
|
120
142
|
|
121
143
|
opts.each do |k, v|
|
122
144
|
event.addInfo(k.to_s, v.to_s) if valid_key? k
|
123
|
-
end if !opts.nil?
|
145
|
+
end if !opts.nil? && opts.any?
|
124
146
|
|
125
147
|
Oboe::Reporter.sendReport(event) if Oboe.loaded
|
126
148
|
end
|