oboe 2.1.3 → 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +99 -0
- data/README.md +6 -23
- data/ext/oboe_metal/extconf.rb +9 -2
- data/ext/oboe_metal/src/bson/bson.h +221 -0
- data/ext/oboe_metal/src/bson/platform_hacks.h +91 -0
- data/ext/oboe_metal/src/oboe.h +275 -0
- data/ext/oboe_metal/src/oboe.hpp +101 -11
- data/ext/oboe_metal/src/oboe_wrap.cxx +310 -23
- data/lib/joboe_metal.rb +6 -14
- data/lib/oboe/api/layerinit.rb +17 -8
- data/lib/oboe/api/logging.rb +1 -1
- data/lib/oboe/config.rb +9 -0
- data/lib/oboe/frameworks/rails.rb +2 -0
- data/lib/oboe/frameworks/rails/inst/action_controller.rb +0 -2
- data/lib/oboe/inst/rack.rb +1 -0
- data/lib/oboe/inst/resque.rb +4 -4
- data/lib/oboe/loading.rb +61 -0
- data/lib/oboe/ruby.rb +1 -1
- data/lib/oboe/version.rb +1 -1
- data/lib/oboe_metal.rb +6 -14
- data/oboe.gemspec +10 -0
- metadata +17 -5
data/lib/joboe_metal.rb
CHANGED
@@ -83,10 +83,6 @@ module Oboe
|
|
83
83
|
Oboe::Config[:tracing_mode].to_s == "always"
|
84
84
|
end
|
85
85
|
|
86
|
-
def self.continue?
|
87
|
-
Oboe::Context.isValid and not Oboe.never?
|
88
|
-
end
|
89
|
-
|
90
86
|
def self.log(layer, label, options = {})
|
91
87
|
Context.log(layer, label, options = options)
|
92
88
|
end
|
@@ -95,22 +91,18 @@ module Oboe
|
|
95
91
|
Oboe::Config[:tracing_mode].to_s == "never"
|
96
92
|
end
|
97
93
|
|
98
|
-
def self.now?
|
99
|
-
Oboe::Context.isValid and not Oboe.never?
|
100
|
-
end
|
101
|
-
|
102
94
|
def self.passthrough?
|
103
95
|
["always", "through"].include?(Oboe::Config[:tracing_mode])
|
104
96
|
end
|
105
97
|
|
106
|
-
def self.sample?
|
107
|
-
|
98
|
+
def self.sample?(opts = {})
|
99
|
+
# Assure defaults since SWIG enforces Strings
|
100
|
+
opts[:layer] ||= ''
|
101
|
+
opts[:xtrace] ||= ''
|
102
|
+
opts['X-TV-Meta'] ||= ''
|
103
|
+
Java::ComTracelyticsJoboeSettingsReader.shouldTraceRequest(opts[:layer], opts[:xtrace], opts['X-TV-Meta'])
|
108
104
|
end
|
109
105
|
|
110
|
-
def self.start?
|
111
|
-
not Oboe::Context.isValid and Oboe.always?
|
112
|
-
end
|
113
|
-
|
114
106
|
def self.through?
|
115
107
|
Oboe::Config[:tracing_mode] == "through"
|
116
108
|
end
|
data/lib/oboe/api/layerinit.rb
CHANGED
@@ -6,18 +6,27 @@ module Oboe
|
|
6
6
|
# layer.
|
7
7
|
#
|
8
8
|
def report_init(layer)
|
9
|
-
platform_info
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
platform_info = { '__Init' => 1 }
|
10
|
+
|
11
|
+
begin
|
12
|
+
platform_info['Force'] = true
|
13
|
+
platform_info['RubyPlatformVersion'] = RUBY_PLATFORM
|
14
|
+
platform_info['RubyVersion'] = RUBY_VERSION
|
15
|
+
platform_info['RailsVersion'] = ::Rails.version if defined?(Rails)
|
16
|
+
platform_info['OboeRubyVersion'] = Oboe::Version::STRING
|
17
|
+
platform_info['OboeHerokuRubyVersion'] = OboeHeroku::Version::STRING if defined?(OboeHeroku)
|
18
|
+
rescue
|
17
19
|
end
|
20
|
+
|
21
|
+
start_trace(layer, nil, platform_info) { }
|
18
22
|
end
|
19
23
|
|
24
|
+
##
|
25
|
+
# force_trace has been deprecated and will be removed in a subsequent version.
|
26
|
+
#
|
20
27
|
def force_trace
|
28
|
+
Oboe.logger.warn "Oboe::API::LayerInit.force_trace has been deprecated and will be removed in a subsequent version."
|
29
|
+
|
21
30
|
saved_mode = Oboe::Config[:tracing_mode]
|
22
31
|
Oboe::Config[:tracing_mode] = 'always'
|
23
32
|
yield
|
data/lib/oboe/api/logging.rb
CHANGED
@@ -68,7 +68,7 @@ module Oboe
|
|
68
68
|
|
69
69
|
if Oboe.tracing?
|
70
70
|
log_entry(layer, opts)
|
71
|
-
elsif Oboe.
|
71
|
+
elsif Oboe.sample?(opts.merge(:layer => layer, :xtrace => xtrace)) or opts.has_key?('Force')
|
72
72
|
log_event(layer, 'entry', Oboe::Context.startTrace, opts)
|
73
73
|
end
|
74
74
|
end
|
data/lib/oboe/config.rb
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
4
|
module Oboe
|
5
|
+
##
|
6
|
+
# This module exposes a nested configuration hash that can be used to
|
7
|
+
# configure and/or modify the functionality of the oboe gem.
|
8
|
+
#
|
9
|
+
# Use Oboe::Config.show to view the entire nested hash.
|
10
|
+
#
|
5
11
|
module Config
|
6
12
|
@@config = {}
|
7
13
|
|
@@ -9,6 +15,9 @@ module Oboe
|
|
9
15
|
:moped, :rack, :resque, :action_controller, :action_view,
|
10
16
|
:active_record ]
|
11
17
|
|
18
|
+
##
|
19
|
+
# Return the raw nested hash.
|
20
|
+
#
|
12
21
|
def self.show
|
13
22
|
@@config
|
14
23
|
end
|
@@ -108,6 +108,7 @@ if defined?(::Rails)
|
|
108
108
|
|
109
109
|
config.after_initialize do
|
110
110
|
Oboe::Loading.setup_logger
|
111
|
+
Oboe::Loading.set_tracing_mode
|
111
112
|
Oboe::Loading.load_access_key
|
112
113
|
Oboe::Inst.load_instrumentation
|
113
114
|
Oboe::Rails.load_instrumentation
|
@@ -117,6 +118,7 @@ if defined?(::Rails)
|
|
117
118
|
else
|
118
119
|
Oboe::Loading.setup_logger
|
119
120
|
Oboe::Rails.load_initializer
|
121
|
+
Oboe::Loading.set_tracing_mode
|
120
122
|
Oboe::Loading.load_access_key
|
121
123
|
|
122
124
|
Rails.configuration.after_initialize do
|
@@ -43,13 +43,11 @@ end
|
|
43
43
|
|
44
44
|
if defined?(ActionController::Base) and Oboe::Config[:action_controller][:enabled]
|
45
45
|
if ::Rails::VERSION::MAJOR == 3
|
46
|
-
Oboe::API.report_init('rails')
|
47
46
|
|
48
47
|
class ActionController::Base
|
49
48
|
include Oboe::Inst::Rails3ActionController
|
50
49
|
end
|
51
50
|
elsif ::Rails::VERSION::MAJOR == 2
|
52
|
-
Oboe::API.report_init('rails')
|
53
51
|
|
54
52
|
ActionController::Base.class_eval do
|
55
53
|
alias :perform_action_without_oboe :perform_action
|
data/lib/oboe/inst/rack.rb
CHANGED
@@ -24,6 +24,7 @@ module Oboe
|
|
24
24
|
report_kvs[:URL] = req.path
|
25
25
|
report_kvs[:Method] = req.request_method
|
26
26
|
report_kvs['AJAX'] = true if req.xhr?
|
27
|
+
report_kvs['X-TV-Meta'] = req.headers['X-TV-Meta'] if req.headers.has_key?('X-TV-Meta')
|
27
28
|
rescue
|
28
29
|
# Discard any potential exceptions. Report whatever we can.
|
29
30
|
end
|
data/lib/oboe/inst/resque.rb
CHANGED
@@ -121,10 +121,10 @@ module Oboe
|
|
121
121
|
rescue
|
122
122
|
end
|
123
123
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
124
|
+
# Force this trace regardless of sampling rate so that child trace can be
|
125
|
+
# link to parent trace.
|
126
|
+
Oboe::API.start_trace('resque', nil, report_kvs.merge('Force' => true)) do
|
127
|
+
perform_without_oboe(job)
|
128
128
|
end
|
129
129
|
|
130
130
|
else
|
data/lib/oboe/loading.rb
CHANGED
@@ -5,6 +5,9 @@ require 'digest/sha1'
|
|
5
5
|
|
6
6
|
module Oboe
|
7
7
|
module Util
|
8
|
+
##
|
9
|
+
# This module is used solely for RUM ID calculation
|
10
|
+
#
|
8
11
|
module Base64URL
|
9
12
|
module_function
|
10
13
|
|
@@ -23,6 +26,16 @@ module Oboe
|
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
29
|
+
##
|
30
|
+
# This module houses all of the loading functionality for the oboe gem.
|
31
|
+
#
|
32
|
+
# Note that this does not necessarily _have_ to include initialization routines
|
33
|
+
# (although it can).
|
34
|
+
#
|
35
|
+
# Actual initialization is often separated out as it can be dependent on on the state
|
36
|
+
# of the stack boot process. e.g. code requiring that initializers, frameworks or
|
37
|
+
# instrumented libraries are already loaded...
|
38
|
+
#
|
26
39
|
module Loading
|
27
40
|
def self.setup_logger
|
28
41
|
if defined?(::Rails) and ::Rails.logger
|
@@ -30,6 +43,10 @@ module Oboe
|
|
30
43
|
end
|
31
44
|
end
|
32
45
|
|
46
|
+
##
|
47
|
+
# Load the TraceView access key (either from system configuration file
|
48
|
+
# or environment variable) and calculate internal RUM ID
|
49
|
+
#
|
33
50
|
def self.load_access_key
|
34
51
|
begin
|
35
52
|
if ENV.has_key?('TRACEVIEW_CUUID')
|
@@ -57,6 +74,9 @@ module Oboe
|
|
57
74
|
end
|
58
75
|
end
|
59
76
|
|
77
|
+
##
|
78
|
+
# Load the oboe tracing API
|
79
|
+
#
|
60
80
|
def self.require_api
|
61
81
|
require 'oboe/version'
|
62
82
|
|
@@ -75,6 +95,10 @@ module Oboe
|
|
75
95
|
require 'oboe/config'
|
76
96
|
end
|
77
97
|
|
98
|
+
##
|
99
|
+
# Load instrumentation for the various frameworks located in
|
100
|
+
# lib/oboe/frameworks/*/*.rb
|
101
|
+
#
|
78
102
|
def self.load_framework_instrumentation
|
79
103
|
pattern = File.join(File.dirname(__FILE__), 'frameworks/*/', '*.rb')
|
80
104
|
Dir.glob(pattern) do |f|
|
@@ -85,9 +109,46 @@ module Oboe
|
|
85
109
|
end
|
86
110
|
end
|
87
111
|
end
|
112
|
+
|
113
|
+
##
|
114
|
+
# Update liboboe with the configured tracing mode
|
115
|
+
#
|
116
|
+
def self.set_tracing_mode
|
117
|
+
# If we are in Heroku, let the oboe-heroku gem configure tracing mode
|
118
|
+
# itself as the requirements are slightly different.
|
119
|
+
return if defined?(OboeHeroku)
|
120
|
+
|
121
|
+
# OBOE_TRACE_NEVER 0
|
122
|
+
# OBOE_TRACE_ALWAYS 1
|
123
|
+
# OBOE_TRACE_THROUGH 2
|
124
|
+
|
125
|
+
if defined?(Oboe::Config)
|
126
|
+
|
127
|
+
case Oboe::Config[:tracing_mode].to_s.downcase.to_sym
|
128
|
+
when :never
|
129
|
+
# OBOE_TRACE_NEVER
|
130
|
+
Oboe.logger.debug "Setting liboboe TracingMode to OBOE_TRACE_NEVER"
|
131
|
+
Oboe::Context.setTracingMode(0)
|
132
|
+
when :always
|
133
|
+
# OBOE_TRACE_ALWAYS
|
134
|
+
Oboe.logger.debug "Setting liboboe TracingMode to OBOE_TRACE_ALWAYS"
|
135
|
+
Oboe::Context.setTracingMode(1)
|
136
|
+
else
|
137
|
+
# OBOE_TRACE_THROUGH
|
138
|
+
Oboe.logger.debug "Setting liboboe TracingMode to OBOE_TRACE_THROUGH"
|
139
|
+
Oboe::Context.setTracingMode(2)
|
140
|
+
end
|
141
|
+
else
|
142
|
+
# OBOE_TRACE_THROUGH
|
143
|
+
Oboe.logger.debug "Setting liboboe TracingMode to OBOE_TRACE_THROUGH (no Oboe::Config?)"
|
144
|
+
Oboe::Context.setTracingMode(2)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
88
148
|
end
|
89
149
|
end
|
90
150
|
|
91
151
|
Oboe::Loading.require_api
|
92
152
|
Oboe::Loading.load_framework_instrumentation
|
153
|
+
Oboe::API.report_init('ruby')
|
93
154
|
|
data/lib/oboe/ruby.rb
CHANGED
data/lib/oboe/version.rb
CHANGED
data/lib/oboe_metal.rb
CHANGED
@@ -53,10 +53,6 @@ module Oboe
|
|
53
53
|
Oboe::Config[:tracing_mode].to_s == "always"
|
54
54
|
end
|
55
55
|
|
56
|
-
def continue?
|
57
|
-
Oboe::Context.isValid and not Oboe.never?
|
58
|
-
end
|
59
|
-
|
60
56
|
def log(layer, label, options = {})
|
61
57
|
Context.log(layer, label, options = options)
|
62
58
|
end
|
@@ -65,22 +61,18 @@ module Oboe
|
|
65
61
|
Oboe::Config[:tracing_mode].to_s == "never"
|
66
62
|
end
|
67
63
|
|
68
|
-
def now?
|
69
|
-
Oboe::Context.isValid and not Oboe.never?
|
70
|
-
end
|
71
|
-
|
72
64
|
def passthrough?
|
73
65
|
["always", "through"].include?(Oboe::Config[:tracing_mode])
|
74
66
|
end
|
75
67
|
|
76
|
-
def sample?
|
77
|
-
|
68
|
+
def sample?(opts = {})
|
69
|
+
# Assure defaults since SWIG enforces Strings
|
70
|
+
opts[:layer] ||= ''
|
71
|
+
opts[:xtrace] ||= ''
|
72
|
+
opts['X-TV-Meta'] ||= ''
|
73
|
+
Oboe::Context.sampleRequest(opts[:layer], opts[:xtrace], opts['X-TV-Meta'])
|
78
74
|
end
|
79
75
|
|
80
|
-
def start?
|
81
|
-
not Oboe::Context.isValid and Oboe.always?
|
82
|
-
end
|
83
|
-
|
84
76
|
def through?
|
85
77
|
Oboe::Config[:tracing_mode] == "through"
|
86
78
|
end
|
data/oboe.gemspec
CHANGED
@@ -16,4 +16,14 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.test_files = Dir.glob("{spec}/**/*.rb")
|
17
17
|
s.add_development_dependency 'rake'
|
18
18
|
s.add_development_dependency 'rspec'
|
19
|
+
|
20
|
+
s.post_install_message = "
|
21
|
+
|
22
|
+
This oboe gem requires updated AppNeta liboboe (>= 1.1.1) and
|
23
|
+
tracelytics-java-agent packages (if using JRuby). Make sure to update all
|
24
|
+
of your hosts or this gem will just sit in the corner and weep quietly.
|
25
|
+
|
26
|
+
- Your Friendly AppNeta TraceView Team
|
27
|
+
|
28
|
+
"
|
19
29
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oboe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 2.1.
|
9
|
+
- 4
|
10
|
+
version: 2.1.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tracelytics, Inc.
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-
|
18
|
+
date: 2013-08-01 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rake
|
@@ -55,6 +55,7 @@ extra_rdoc_files:
|
|
55
55
|
- LICENSE
|
56
56
|
files:
|
57
57
|
- .gitignore
|
58
|
+
- CHANGELOG
|
58
59
|
- Gemfile
|
59
60
|
- Gemfile.lock
|
60
61
|
- Guardfile
|
@@ -63,6 +64,9 @@ files:
|
|
63
64
|
- Rakefile
|
64
65
|
- ext/oboe_metal/extconf.rb
|
65
66
|
- ext/oboe_metal/noop/noop.c
|
67
|
+
- ext/oboe_metal/src/bson/bson.h
|
68
|
+
- ext/oboe_metal/src/bson/platform_hacks.h
|
69
|
+
- ext/oboe_metal/src/oboe.h
|
66
70
|
- ext/oboe_metal/src/oboe.hpp
|
67
71
|
- ext/oboe_metal/src/oboe_wrap.cxx
|
68
72
|
- ext/oboe_metal/tests/test.rb
|
@@ -121,7 +125,15 @@ files:
|
|
121
125
|
homepage: http://tracelytics.com
|
122
126
|
licenses: []
|
123
127
|
|
124
|
-
post_install_message:
|
128
|
+
post_install_message: |+
|
129
|
+
|
130
|
+
|
131
|
+
This oboe gem requires updated AppNeta liboboe (>= 1.1.1) and
|
132
|
+
tracelytics-java-agent packages (if using JRuby). Make sure to update all
|
133
|
+
of your hosts or this gem will just sit in the corner and weep quietly.
|
134
|
+
|
135
|
+
- Your Friendly AppNeta TraceView Team
|
136
|
+
|
125
137
|
rdoc_options: []
|
126
138
|
|
127
139
|
require_paths:
|