appoptics_apm 4.0.2 → 4.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Dockerfile_test +7 -6
- data/Rakefile +2 -0
- data/docker-compose.yml +22 -0
- data/gemfiles/noop.gemfile +17 -0
- data/lib/appoptics_apm.rb +2 -2
- data/lib/appoptics_apm/api.rb +1 -2
- data/lib/appoptics_apm/api/layerinit.rb +3 -1
- data/lib/appoptics_apm/api/logging.rb +25 -25
- data/lib/appoptics_apm/api/memcache.rb +3 -1
- data/lib/appoptics_apm/api/profiling.rb +39 -33
- data/lib/appoptics_apm/api/tracing.rb +23 -13
- data/lib/appoptics_apm/api/util.rb +1 -1
- data/lib/appoptics_apm/base.rb +1 -0
- data/lib/appoptics_apm/frameworks/sinatra/templates.rb +1 -1
- data/lib/appoptics_apm/inst/rack.rb +135 -111
- data/lib/appoptics_apm/instrumentation.rb +1 -1
- data/lib/appoptics_apm/version.rb +1 -1
- data/test/instrumentation/httpclient_test.rb +4 -20
- data/test/instrumentation/mongo_v1_test.rb +1 -1
- data/test/instrumentation/rack_test.rb +1 -1
- data/test/instrumentation/sequel_mysql2_test.rb +1 -1
- data/test/instrumentation/sequel_mysql_test.rb +1 -1
- data/test/instrumentation/sequel_pg_test.rb +1 -1
- data/test/instrumentation/twitter-cassandra_test.rb +1 -1
- data/test/minitest_helper.rb +1 -0
- data/test/mocked/curb_mocked_test.rb +14 -1
- data/test/mocked/excon_mocked_test.rb +12 -4
- data/test/mocked/faraday_mocked_test.rb +5 -1
- data/test/mocked/http_mocked_test.rb +6 -0
- data/test/mocked/httpclient_mocked_test.rb +14 -1
- data/test/mocked/rest_client_mocked_test.rb +7 -1
- data/test/mocked/typhoeus_mocked_test.rb +15 -0
- data/test/noop/noop_test.rb +145 -0
- metadata +5 -4
- data/test/support/noop_test.rb +0 -88
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14962bf4e9f8b8b81ca0e153a11aea4d14d6e301
|
4
|
+
data.tar.gz: 2738dbd25b94e1b2339958ca83ed68e1d9cfd4d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0a701a61d0a71efeb0a046c8c2ed2aa34d0fb73ae7ae9d9cab4c04b60f46bec5a9c99ed10bde6c98a0f2d042742b0c280c7ce51b8786df9903306a0ea2e000a
|
7
|
+
data.tar.gz: acc3f8518f0afeb4023ba7d80f0d2168b240189c3321f43a057bb857827d0f82267d121ac41b5b4b5158ea14deda3d546af0996c1007dc6e4ab0d53a2f9ec350
|
data/.travis.yml
CHANGED
data/Dockerfile_test
CHANGED
@@ -19,6 +19,7 @@ RUN apt-get update \
|
|
19
19
|
less \
|
20
20
|
tree \
|
21
21
|
psmisc \
|
22
|
+
swig \
|
22
23
|
&& rm -rf /var/lib/apt/lists/*
|
23
24
|
|
24
25
|
# rbenv setup
|
@@ -38,12 +39,12 @@ RUN . ~/.profile \
|
|
38
39
|
# && rbenv install jruby-9.0.5.0
|
39
40
|
|
40
41
|
# install swig 3.0.8
|
41
|
-
|
42
|
-
| tar xzC /tmp \
|
43
|
-
&& cd /tmp/swig-3.0.8 \
|
44
|
-
&& ./configure && make && make install \
|
45
|
-
&& cd \
|
46
|
-
&& rm -rf /tmp/swig-3.0.8
|
42
|
+
#git statuRUN curl -SL http://kent.dl.sourceforge.net/project/swig/swig/swig-3.0.8/swig-3.0.8.tar.gz \
|
43
|
+
# | tar xzC /tmp \
|
44
|
+
# && cd /tmp/swig-3.0.8 \
|
45
|
+
# && ./configure && make && make install \
|
46
|
+
# && cd \
|
47
|
+
# && rm -rf /tmp/swig-3.0.8
|
47
48
|
|
48
49
|
# install postgres, redis, and memcached
|
49
50
|
RUN apt-get update \
|
data/Rakefile
CHANGED
@@ -51,6 +51,8 @@ Rake::TestTask.new do |t|
|
|
51
51
|
when /instrumentation_mocked/
|
52
52
|
# WebMock is interfering with other tests, so these have to run seperately
|
53
53
|
t.test_files = FileList['test/mocked/*_test.rb']
|
54
|
+
when /noop/
|
55
|
+
t.test_files = FileList['test/noop/*_test.rb']
|
54
56
|
end
|
55
57
|
|
56
58
|
if defined?(JRUBY_VERSION)
|
data/docker-compose.yml
CHANGED
@@ -34,6 +34,28 @@ services:
|
|
34
34
|
- MYSQL_HOST=mysql
|
35
35
|
- APPOPTICS_MONGO_SERVER=mongo
|
36
36
|
|
37
|
+
ruby_appoptics_apm_alpine:
|
38
|
+
container_name: ruby_appoptics_apm_alpine
|
39
|
+
image: ruby_alpine
|
40
|
+
build:
|
41
|
+
context: .
|
42
|
+
dockerfile: ./Dockerfile_alpine
|
43
|
+
cpu_quota: 100000 # 1 cpu, assumes cpu_period of 1 second
|
44
|
+
mem_limit: 1G
|
45
|
+
volumes:
|
46
|
+
- .:/code/ruby-appoptics_apm
|
47
|
+
depends_on:
|
48
|
+
- wait
|
49
|
+
links:
|
50
|
+
- wait
|
51
|
+
environment:
|
52
|
+
- APPOPTICS_RABBITMQ_SERVER=rabbitmq
|
53
|
+
- DOCKER_MYSQL_PASS=admin
|
54
|
+
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
|
55
|
+
- MYSQL_ROOT_PASSWORD=admin
|
56
|
+
- MYSQL_HOST=mysql
|
57
|
+
- APPOPTICS_MONGO_SERVER=mongo
|
58
|
+
|
37
59
|
rabbitmq:
|
38
60
|
container_name: rabbitmq
|
39
61
|
image: rabbitmq:3-management
|
@@ -0,0 +1,17 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
group :development, :test do
|
4
|
+
gem 'minitest'
|
5
|
+
gem 'minitest-reporters', '< 1.0.18'
|
6
|
+
gem 'minitest-debugger', :require => false
|
7
|
+
gem 'mocha'
|
8
|
+
gem 'rack-test'
|
9
|
+
gem 'rake'
|
10
|
+
gem 'bson', '~> 4.0'
|
11
|
+
gem 'puma', '< 3.1.0'
|
12
|
+
if RUBY_VERSION >= '2.0.0'
|
13
|
+
gem 'webmock'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
|
data/lib/appoptics_apm.rb
CHANGED
@@ -25,8 +25,8 @@ begin
|
|
25
25
|
require '/usr/local/tracelytics/tracelyticsagent.jar'
|
26
26
|
require 'joboe_metal'
|
27
27
|
elsif RUBY_PLATFORM =~ /linux/
|
28
|
-
require
|
29
|
-
require
|
28
|
+
require 'oboe_metal.so'
|
29
|
+
require 'oboe_metal.rb' # sets AppOpticsAPM.loaded = true if successful
|
30
30
|
else
|
31
31
|
$stderr.puts '==================================================================='
|
32
32
|
$stderr.puts "AppOptics warning: Platform #{RUBY_PLATFORM} not yet supported."
|
data/lib/appoptics_apm/api.rb
CHANGED
@@ -4,8 +4,7 @@
|
|
4
4
|
module AppOpticsAPM
|
5
5
|
##
|
6
6
|
# This module implements the AppOpticsAPM tracing API.
|
7
|
-
# See: https://
|
8
|
-
# and/or: http://rdoc.info/gems/appoptics_apm/AppOpticsAPM/API/Tracing
|
7
|
+
# See: https://docs.appoptics.com/kb/apm_tracing/ruby/sdk/
|
9
8
|
module API
|
10
9
|
def self.extend_with_tracing
|
11
10
|
extend AppOpticsAPM::API::Logging
|
@@ -7,7 +7,7 @@ module AppOpticsAPM
|
|
7
7
|
module API
|
8
8
|
##
|
9
9
|
# Provides methods related to layer initialization and reporting
|
10
|
-
module LayerInit
|
10
|
+
module LayerInit #:nodoc:
|
11
11
|
# Internal: Report that instrumentation for the given layer has been
|
12
12
|
# installed, as well as the version of instrumentation and version of
|
13
13
|
# layer.
|
@@ -22,6 +22,8 @@ module AppOpticsAPM
|
|
22
22
|
end
|
23
23
|
|
24
24
|
##
|
25
|
+
# :nodoc:
|
26
|
+
# Deprecated:
|
25
27
|
# force_trace has been deprecated and will be removed in a subsequent version.
|
26
28
|
#
|
27
29
|
def force_trace
|
@@ -85,7 +85,7 @@ module AppOpticsAPM
|
|
85
85
|
# Public: Decide whether or not to start a trace, and report an entry event
|
86
86
|
# appropriately.
|
87
87
|
#
|
88
|
-
# ====
|
88
|
+
# ==== Arguments
|
89
89
|
#
|
90
90
|
# * +layer+ - The layer the reported event belongs to
|
91
91
|
# * +xtrace+ - An xtrace metadata string, or nil. Used for cross-application tracing.
|
@@ -95,7 +95,7 @@ module AppOpticsAPM
|
|
95
95
|
#
|
96
96
|
# AppOpticsAPM::API.log_start(:layer_name, nil, { :id => @user.id })
|
97
97
|
#
|
98
|
-
# Returns an xtrace metadata string
|
98
|
+
# Returns an xtrace metadata string if we are tracing
|
99
99
|
def log_start(layer, xtrace = nil, opts = {})
|
100
100
|
return if !AppOpticsAPM.loaded || (opts.key?(:URL) && ::AppOpticsAPM::Util.static_asset?(opts[:URL]))
|
101
101
|
|
@@ -169,7 +169,7 @@ module AppOpticsAPM
|
|
169
169
|
##
|
170
170
|
# Public: Report an exit event and potentially clear the tracing context.
|
171
171
|
#
|
172
|
-
# ====
|
172
|
+
# ==== Arguments
|
173
173
|
#
|
174
174
|
# * +layer+ - The layer the reported event belongs to
|
175
175
|
# * +opts+ - A hash containing key/value pairs that will be reported along with this event (optional).
|
@@ -178,14 +178,15 @@ module AppOpticsAPM
|
|
178
178
|
#
|
179
179
|
# AppOpticsAPM::API.log_end(:layer_name, { :id => @user.id })
|
180
180
|
#
|
181
|
-
# Returns an xtrace metadata string
|
181
|
+
# Returns an xtrace metadata string if we are tracing
|
182
182
|
def log_end(layer, opts = {})
|
183
183
|
return unless AppOpticsAPM.tracing?
|
184
184
|
|
185
|
-
log_event(layer, :exit, AppOpticsAPM::Context.createEvent, opts)
|
185
|
+
log_event(layer, :exit, AppOpticsAPM::Context.createEvent, opts) if AppOpticsAPM.tracing?
|
186
186
|
AppOpticsAPM::Context.toString
|
187
187
|
ensure
|
188
|
-
|
188
|
+
# FIXME has_incoming_context commented out, it has importance for JRuby only and breaks ruby tests
|
189
|
+
AppOpticsAPM::Context.clear # unless AppOpticsAPM.has_incoming_context?
|
189
190
|
end
|
190
191
|
|
191
192
|
##
|
@@ -193,17 +194,17 @@ module AppOpticsAPM
|
|
193
194
|
#
|
194
195
|
# A helper method to create and log an entry event
|
195
196
|
#
|
196
|
-
# ====
|
197
|
+
# ==== Arguments
|
197
198
|
#
|
198
199
|
# * +layer+ - The layer the reported event belongs to
|
199
|
-
# * +
|
200
|
+
# * +opts+ - A hash containing key/value pairs that will be reported along with this event (optional).
|
200
201
|
# * +op+ - To identify the current operation being traced. Used to avoid double tracing recursive calls.
|
201
202
|
#
|
202
203
|
# ==== Example
|
203
204
|
#
|
204
205
|
# AppOpticsAPM::API.log_entry(:layer_name, { :id => @user.id })
|
205
206
|
#
|
206
|
-
# Returns an xtrace metadata string
|
207
|
+
# Returns an xtrace metadata string if we are tracing
|
207
208
|
def log_entry(layer, opts = {}, op = nil)
|
208
209
|
return unless AppOpticsAPM.tracing?
|
209
210
|
|
@@ -216,7 +217,7 @@ module AppOpticsAPM
|
|
216
217
|
#
|
217
218
|
# A helper method to create and log an info event
|
218
219
|
#
|
219
|
-
# ====
|
220
|
+
# ==== Arguments
|
220
221
|
#
|
221
222
|
# * +layer+ - The layer the reported event belongs to
|
222
223
|
# * +opts+ - A hash containing key/value pairs that will be reported along with this event (optional).
|
@@ -225,11 +226,11 @@ module AppOpticsAPM
|
|
225
226
|
#
|
226
227
|
# AppOpticsAPM::API.log_info(:layer_name, { :id => @user.id })
|
227
228
|
#
|
228
|
-
# Returns an xtrace metadata string
|
229
|
-
def log_info(layer,
|
229
|
+
# Returns an xtrace metadata string if we are tracing
|
230
|
+
def log_info(layer, opts = {})
|
230
231
|
return unless AppOpticsAPM.tracing?
|
231
232
|
|
232
|
-
log_event(layer, :info, AppOpticsAPM::Context.createEvent,
|
233
|
+
log_event(layer, :info, AppOpticsAPM::Context.createEvent, opts)
|
233
234
|
end
|
234
235
|
|
235
236
|
##
|
@@ -237,21 +238,22 @@ module AppOpticsAPM
|
|
237
238
|
#
|
238
239
|
# A helper method to create and log an exit event
|
239
240
|
#
|
240
|
-
# ====
|
241
|
+
# ==== Arguments
|
241
242
|
#
|
242
243
|
# * +layer+ - The layer the reported event belongs to
|
243
|
-
# * +opts+
|
244
|
-
# * +
|
244
|
+
# * +opts+ - A hash containing key/value pairs that will be reported along with this event (optional).
|
245
|
+
# * +op+ - Used to avoid double tracing recursive calls, needs to be true in +log_exit+ that corresponds to a
|
246
|
+
# +log_entry+
|
245
247
|
#
|
246
248
|
# ==== Example
|
247
249
|
#
|
248
250
|
# AppOpticsAPM::API.log_exit(:layer_name, { :id => @user.id })
|
249
251
|
#
|
250
|
-
# Returns an xtrace metadata string
|
251
|
-
def log_exit(layer, opts = {},
|
252
|
+
# Returns an xtrace metadata string if we are tracing
|
253
|
+
def log_exit(layer, opts = {}, op = nil)
|
252
254
|
return unless AppOpticsAPM.tracing?
|
253
255
|
|
254
|
-
AppOpticsAPM.layer_op = nil
|
256
|
+
AppOpticsAPM.layer_op = nil if op
|
255
257
|
log_event(layer, :exit, AppOpticsAPM::Context.createEvent, opts)
|
256
258
|
end
|
257
259
|
|
@@ -262,7 +264,7 @@ module AppOpticsAPM
|
|
262
264
|
# If we return from a request that faned out multiple requests
|
263
265
|
# we can add the collected X-Traces to the exit event
|
264
266
|
#
|
265
|
-
# ====
|
267
|
+
# ==== Arguments
|
266
268
|
#
|
267
269
|
# * +layer+ - The layer the reported event belongs to
|
268
270
|
# * +traces+ - An array with X-Trace strings returned from the requests
|
@@ -281,15 +283,13 @@ module AppOpticsAPM
|
|
281
283
|
#:nodoc:
|
282
284
|
# Internal: Reports agent init to the collector
|
283
285
|
#
|
284
|
-
# ====
|
286
|
+
# ==== Arguments
|
285
287
|
#
|
286
288
|
# * +layer+ - The layer the reported event belongs to
|
287
289
|
# * +opts+ - A hash containing key/value pairs that will be reported along with this event
|
288
290
|
def log_init(layer = :rack, opts = {})
|
289
291
|
context = AppOpticsAPM::Metadata.makeRandom
|
290
|
-
|
291
|
-
return
|
292
|
-
end
|
292
|
+
return unless context.isValid
|
293
293
|
|
294
294
|
event = context.createEvent
|
295
295
|
event.addInfo(APPOPTICS_STR_LAYER, layer.to_s)
|
@@ -307,7 +307,7 @@ module AppOpticsAPM
|
|
307
307
|
#:nodoc:
|
308
308
|
# Internal: Report an event.
|
309
309
|
#
|
310
|
-
# ====
|
310
|
+
# ==== Arguments
|
311
311
|
#
|
312
312
|
# * +layer+ - The layer the reported event belongs to
|
313
313
|
# * +label+ - The label for the reported event. See API documentation for reserved labels and usage.
|
@@ -3,11 +3,13 @@
|
|
3
3
|
# All rights reserved.
|
4
4
|
#++
|
5
5
|
|
6
|
+
# TODO remove Memcache from API and into some Util module to be included in Modules that need
|
7
|
+
# ____ these methods
|
6
8
|
module AppOpticsAPM
|
7
9
|
module API
|
8
10
|
##
|
9
11
|
# Utility methods for the Memcache instrumentation
|
10
|
-
module Memcache
|
12
|
+
module Memcache #:nodoc:
|
11
13
|
MEMCACHE_OPS = %w(add append cas decr decrement delete fetch get incr increment prepend replace set)
|
12
14
|
|
13
15
|
def memcache_hit?(result)
|
@@ -6,19 +6,21 @@
|
|
6
6
|
module AppOpticsAPM
|
7
7
|
module API
|
8
8
|
##
|
9
|
-
# Module
|
9
|
+
# Module to create profiling traces for blocks of code or methods
|
10
10
|
module Profiling
|
11
11
|
##
|
12
12
|
# Public: Profile a given block of code. Detect any exceptions thrown by
|
13
13
|
# the block and report errors.
|
14
14
|
#
|
15
|
-
#
|
16
|
-
# report_kvs - A hash containing key/value pairs that will be reported along
|
17
|
-
# with the event of this profile (optional).
|
18
|
-
# with_backtrace - Boolean to indicate whether a backtrace should
|
19
|
-
# be collected with this trace event.
|
15
|
+
# ==== Arguments
|
20
16
|
#
|
21
|
-
#
|
17
|
+
# * +profile_name+ - A name used to identify the block being profiled.
|
18
|
+
# * +report_kvs+ - A hash containing key/value pairs that will be reported along
|
19
|
+
# with the event of this profile (optional).
|
20
|
+
# * +with_backtrace+ - Boolean to indicate whether a backtrace should
|
21
|
+
# be collected with this trace event.
|
22
|
+
#
|
23
|
+
# ==== Example
|
22
24
|
#
|
23
25
|
# def computation(n)
|
24
26
|
# AppOpticsAPM::API.profile('fib', { :n => n }) do
|
@@ -32,40 +34,44 @@ module AppOpticsAPM
|
|
32
34
|
def profile(profile_name, report_kvs = {}, with_backtrace = false)
|
33
35
|
return yield unless AppOpticsAPM.tracing?
|
34
36
|
|
35
|
-
report_kvs[:Language] ||= :ruby
|
36
|
-
report_kvs[:ProfileName] ||= profile_name
|
37
|
-
report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if with_backtrace
|
38
|
-
|
39
|
-
AppOpticsAPM::API.log(nil, :profile_entry, report_kvs)
|
40
|
-
|
41
37
|
begin
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
38
|
+
report_kvs[:Language] ||= :ruby
|
39
|
+
report_kvs[:ProfileName] ||= profile_name
|
40
|
+
report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if with_backtrace
|
41
|
+
|
42
|
+
AppOpticsAPM::API.log(nil, :profile_entry, report_kvs)
|
43
|
+
|
44
|
+
begin
|
45
|
+
yield
|
46
|
+
rescue => e
|
47
|
+
log_exception(nil, e)
|
48
|
+
raise
|
49
|
+
ensure
|
50
|
+
exit_kvs = {}
|
51
|
+
exit_kvs[:Language] = :ruby
|
52
|
+
exit_kvs[:ProfileName] = report_kvs[:ProfileName]
|
53
|
+
|
54
|
+
AppOpticsAPM::API.log(nil, :profile_exit, exit_kvs)
|
55
|
+
end
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
55
59
|
##
|
56
|
-
# Public:
|
60
|
+
# Public: Add profiling to a method on a class or module. That method can be of any (accessible)
|
57
61
|
# type (instance, singleton, private, protected etc.).
|
58
62
|
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
# *
|
65
|
-
# *
|
66
|
-
#
|
63
|
+
# ==== Arguments
|
64
|
+
#
|
65
|
+
# * +klass+ - the class or module that has the method to profile
|
66
|
+
# * +method+ - the method to profile. Can be singleton, instance, private etc...
|
67
|
+
# * +opts+ - a hash specifying the one or more of the following options:
|
68
|
+
# * +:arguments+ - report the arguments passed to <tt>method</tt> on each profile (default: false)
|
69
|
+
# * +:result+ - report the return value of <tt>method</tt> on each profile (default: false)
|
70
|
+
# * +:backtrace+ - report the return value of <tt>method</tt> on each profile (default: false)
|
71
|
+
# * +:name+ - alternate name for the profile reported in the dashboard (default: method name)
|
72
|
+
# * +extra_kvs+ - a hash containing any additional key/value pairs you would like reported with the profile
|
67
73
|
#
|
68
|
-
# Example
|
74
|
+
# ==== Example
|
69
75
|
#
|
70
76
|
# opts = {}
|
71
77
|
# opts[:backtrace] = true
|
@@ -20,6 +20,8 @@ module AppOpticsAPM
|
|
20
20
|
# * +:URL+ - request URI
|
21
21
|
# * +:Method+
|
22
22
|
#
|
23
|
+
# TODO complete the above
|
24
|
+
#
|
23
25
|
# Invalid keys: +:Label+, +:Layer+, +:Edge+, +:Timestamp+, +:Timestamp_u+
|
24
26
|
#
|
25
27
|
module Tracing
|
@@ -56,7 +58,7 @@ module AppOpticsAPM
|
|
56
58
|
log_exception(layer, e)
|
57
59
|
raise
|
58
60
|
ensure
|
59
|
-
log_exit(layer)
|
61
|
+
log_exit(layer, opts, protect_op)
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
@@ -67,17 +69,20 @@ module AppOpticsAPM
|
|
67
69
|
# When start_trace returns control to the calling context, the oboe
|
68
70
|
# context will be cleared.
|
69
71
|
#
|
70
|
-
#
|
71
|
-
# opts - A hash containing key/value pairs that will be reported along
|
72
|
-
# with the first event of this layer (optional).
|
72
|
+
# ==== Arguments
|
73
73
|
#
|
74
|
-
#
|
74
|
+
# * +layer+ - name for the layer to be used as label in the trace view
|
75
|
+
# * +xtrace+ - (optional) incoming X-Trace identifier to be continued
|
76
|
+
# * +opts+ - (optional) hash containing key/value pairs that will be reported along
|
77
|
+
# with the first event of this layer (optional)
|
78
|
+
#
|
79
|
+
# ==== Example
|
75
80
|
#
|
76
81
|
# def handle_request(request, response)
|
77
82
|
# # ... code that modifies request and response ...
|
78
83
|
# end
|
79
84
|
#
|
80
|
-
# def
|
85
|
+
# def handle_request_with_appoptics(request, response)
|
81
86
|
# result, xtrace = start_trace('rails', request['X-Trace']) do
|
82
87
|
# handle_request(request, response)
|
83
88
|
# end
|
@@ -92,6 +97,8 @@ module AppOpticsAPM
|
|
92
97
|
# of the block, and the second element of which is the oboe context that
|
93
98
|
# was set when the block completed execution.
|
94
99
|
def start_trace(layer, xtrace = nil, opts = {})
|
100
|
+
return [yield, nil] unless AppOpticsAPM.loaded
|
101
|
+
|
95
102
|
log_start(layer, xtrace, opts)
|
96
103
|
begin
|
97
104
|
result = yield
|
@@ -113,19 +120,20 @@ module AppOpticsAPM
|
|
113
120
|
# access to the exit event's trace id so we can set the header before any
|
114
121
|
# work is done, and before any headers are sent back to the client.
|
115
122
|
#
|
116
|
-
#
|
117
|
-
#
|
118
|
-
#
|
119
|
-
#
|
120
|
-
#
|
123
|
+
# ===== Arguments
|
124
|
+
# * +layer+ - The layer the block of code belongs to.
|
125
|
+
# * +xtrace+ - string - The X-Trace to continue by the target
|
126
|
+
# * +target+ - has to respond to #[]=, The target object in which to place the trace information
|
127
|
+
# * +opts+ - A hash containing key/value pairs that will be reported along
|
128
|
+
# with the first event of this layer (optional).
|
121
129
|
#
|
122
|
-
# Example
|
130
|
+
# ==== Example
|
123
131
|
#
|
124
132
|
# def handle_request(request, response)
|
125
133
|
# # ... code that does something with request and response ...
|
126
134
|
# end
|
127
135
|
#
|
128
|
-
# def
|
136
|
+
# def handle_request_with_appoptics(request, response)
|
129
137
|
# start_trace_with_target('rails', request['X-Trace'], response) do
|
130
138
|
# handle_request(request, response)
|
131
139
|
# end
|
@@ -133,6 +141,8 @@ module AppOpticsAPM
|
|
133
141
|
#
|
134
142
|
# Returns the result of the block.
|
135
143
|
def start_trace_with_target(layer, xtrace, target, opts = {})
|
144
|
+
return yield unless AppOpticsAPM.loaded
|
145
|
+
|
136
146
|
log_start(layer, xtrace, opts)
|
137
147
|
exit_evt = AppOpticsAPM::Context.createEvent
|
138
148
|
begin
|