oboe 2.3.2 → 2.3.3.7
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 +7 -0
- data/.travis.yml +26 -0
- data/CHANGELOG +28 -2
- data/Gemfile +2 -2
- data/README.md +4 -4
- data/Rakefile +18 -7
- data/lib/base.rb +58 -0
- data/lib/joboe_metal.rb +45 -62
- data/lib/method_profiling.rb +50 -57
- data/lib/oboe.rb +17 -12
- data/lib/oboe/api/util.rb +46 -0
- data/lib/oboe/config.rb +3 -14
- data/lib/oboe/inst/cassandra.rb +1 -1
- data/lib/oboe/inst/mongo.rb +1 -1
- data/lib/oboe/inst/rack.rb +16 -11
- data/lib/oboe/inst/resque.rb +5 -5
- data/lib/oboe/version.rb +2 -2
- data/lib/oboe_metal.rb +43 -36
- data/test/instrumentation/cassandra_test.rb +79 -33
- data/test/instrumentation/mongo_test.rb +10 -2
- data/test/instrumentation/moped_test.rb +429 -424
- data/test/minitest_helper.rb +5 -5
- data/test/profiling/method_test.rb +198 -0
- metadata +70 -84
data/test/minitest_helper.rb
CHANGED
@@ -2,7 +2,10 @@ require "minitest/autorun"
|
|
2
2
|
require "minitest/reporters"
|
3
3
|
|
4
4
|
ENV["RACK_ENV"] = "test"
|
5
|
-
|
5
|
+
|
6
|
+
unless RUBY_VERSION =~ /^1.8/
|
7
|
+
MiniTest::Reporters.use! MiniTest::Reporters::SpecReporter.new
|
8
|
+
end
|
6
9
|
|
7
10
|
require 'rubygems'
|
8
11
|
require 'bundler'
|
@@ -12,12 +15,9 @@ Bundler.require(:default, :test)
|
|
12
15
|
# Preload memcache-client
|
13
16
|
require 'memcache'
|
14
17
|
|
15
|
-
@trace_dir =
|
18
|
+
@trace_dir = "/tmp/"
|
16
19
|
$trace_file = @trace_dir + "trace_output.bson"
|
17
20
|
|
18
|
-
# Create a oboe-ruby/tmp dir to store trace output
|
19
|
-
Dir.mkdir @trace_dir unless File.exists?(@trace_dir) and File.directory?(@trace_dir)
|
20
|
-
|
21
21
|
# Configure Oboe
|
22
22
|
Oboe::Config[:tracing_mode] = "always"
|
23
23
|
Oboe::Config[:sample_rate] = 1000000
|
@@ -0,0 +1,198 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe OboeMethodProfiling do
|
4
|
+
before do
|
5
|
+
clear_all_traces
|
6
|
+
# Conditionally Undefine TestWorker
|
7
|
+
# http://stackoverflow.com/questions/11503558/how-to-undefine-class-in-ruby
|
8
|
+
Object.send(:remove_const, :TestWorker) if defined?(TestWorker)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should be loaded, defined and ready' do
|
12
|
+
defined?(::OboeMethodProfiling).wont_match nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should trace Class methods' do
|
16
|
+
class TestWorker
|
17
|
+
def self.do_work
|
18
|
+
sleep 1
|
19
|
+
end
|
20
|
+
|
21
|
+
class << self
|
22
|
+
include OboeMethodProfiling
|
23
|
+
profile_method :do_work, 'do_work'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
::Oboe::API.start_trace('method_profiling', '', {}) do
|
28
|
+
# Call the profiled class method
|
29
|
+
TestWorker.do_work
|
30
|
+
end
|
31
|
+
|
32
|
+
traces = get_all_traces
|
33
|
+
traces.count.must_equal 4
|
34
|
+
|
35
|
+
validate_outer_layers(traces, 'method_profiling')
|
36
|
+
|
37
|
+
kvs = {}
|
38
|
+
kvs["Layer"] = ""
|
39
|
+
kvs["Label"] = 'profile_entry'
|
40
|
+
kvs["Language"] = "ruby"
|
41
|
+
kvs["ProfileName"] = "do_work"
|
42
|
+
kvs["FunctionName"] = "do_work"
|
43
|
+
kvs["Class"] = "TestWorker"
|
44
|
+
|
45
|
+
validate_event_keys(traces[1], kvs)
|
46
|
+
|
47
|
+
traces[1].has_key?("File").must_equal true
|
48
|
+
traces[1].has_key?("LineNumber").must_equal true
|
49
|
+
|
50
|
+
kvs.clear
|
51
|
+
kvs["Layer"] = ""
|
52
|
+
kvs["Label"] = "profile_exit"
|
53
|
+
kvs["Language"] = "ruby"
|
54
|
+
kvs["ProfileName"] = "do_work"
|
55
|
+
|
56
|
+
validate_event_keys(traces[2], kvs)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should trace Instance methods' do
|
60
|
+
class TestWorker
|
61
|
+
def do_work
|
62
|
+
sleep 1
|
63
|
+
end
|
64
|
+
|
65
|
+
include OboeMethodProfiling
|
66
|
+
profile_method :do_work, 'do_work'
|
67
|
+
end
|
68
|
+
|
69
|
+
::Oboe::API.start_trace('method_profiling', '', {}) do
|
70
|
+
# Call the profiled class method
|
71
|
+
tw = TestWorker.new
|
72
|
+
tw.do_work
|
73
|
+
end
|
74
|
+
|
75
|
+
traces = get_all_traces
|
76
|
+
traces.count.must_equal 4
|
77
|
+
|
78
|
+
validate_outer_layers(traces, 'method_profiling')
|
79
|
+
|
80
|
+
kvs = {}
|
81
|
+
kvs["Layer"] = ""
|
82
|
+
kvs["Label"] = 'profile_entry'
|
83
|
+
kvs["Language"] = "ruby"
|
84
|
+
kvs["ProfileName"] = "do_work"
|
85
|
+
kvs["FunctionName"] = "do_work"
|
86
|
+
kvs["Class"] = "TestWorker"
|
87
|
+
|
88
|
+
validate_event_keys(traces[1], kvs)
|
89
|
+
|
90
|
+
traces[1].has_key?("File").must_equal true
|
91
|
+
traces[1].has_key?("LineNumber").must_equal true
|
92
|
+
|
93
|
+
kvs.clear
|
94
|
+
kvs["Layer"] = ""
|
95
|
+
kvs["Label"] = "profile_exit"
|
96
|
+
kvs["Language"] = "ruby"
|
97
|
+
kvs["ProfileName"] = "do_work"
|
98
|
+
|
99
|
+
validate_event_keys(traces[2], kvs)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should trace Module class methods' do
|
103
|
+
module TestWorker
|
104
|
+
def self.do_work
|
105
|
+
sleep 1
|
106
|
+
end
|
107
|
+
|
108
|
+
class << self
|
109
|
+
include OboeMethodProfiling
|
110
|
+
profile_method :do_work, 'do_work'
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
::Oboe::API.start_trace('method_profiling', '', {}) do
|
115
|
+
# Call the profiled class method
|
116
|
+
TestWorker.do_work
|
117
|
+
end
|
118
|
+
|
119
|
+
traces = get_all_traces
|
120
|
+
traces.count.must_equal 4
|
121
|
+
validate_outer_layers(traces, 'method_profiling')
|
122
|
+
|
123
|
+
kvs = {}
|
124
|
+
kvs["Layer"] = ""
|
125
|
+
kvs["Label"] = 'profile_entry'
|
126
|
+
kvs["Language"] = "ruby"
|
127
|
+
kvs["ProfileName"] = "do_work"
|
128
|
+
kvs["FunctionName"] = "do_work"
|
129
|
+
kvs["Module"] = "TestWorker"
|
130
|
+
|
131
|
+
validate_event_keys(traces[1], kvs)
|
132
|
+
|
133
|
+
traces[1].has_key?("File").must_equal true
|
134
|
+
traces[1].has_key?("LineNumber").must_equal true
|
135
|
+
|
136
|
+
kvs.clear
|
137
|
+
kvs["Layer"] = ""
|
138
|
+
kvs["Label"] = "profile_exit"
|
139
|
+
kvs["Language"] = "ruby"
|
140
|
+
kvs["ProfileName"] = "do_work"
|
141
|
+
|
142
|
+
validate_event_keys(traces[2], kvs)
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'should not store arguments and return value by default' do
|
146
|
+
class TestWorker
|
147
|
+
def self.do_work(s, i, a, h)
|
148
|
+
sleep 1
|
149
|
+
return "the zebra is loose"
|
150
|
+
end
|
151
|
+
|
152
|
+
class << self
|
153
|
+
include OboeMethodProfiling
|
154
|
+
# Default call method
|
155
|
+
profile_method :do_work, 'do_work'
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
::Oboe::API.start_trace('method_profiling', '', {}) do
|
160
|
+
# Call the profiled class method
|
161
|
+
TestWorker.do_work('String Argument', 203984, ["1", "2", 3], { :color => :black })
|
162
|
+
end
|
163
|
+
|
164
|
+
traces = get_all_traces
|
165
|
+
traces.count.must_equal 4
|
166
|
+
|
167
|
+
traces[1].has_key?("Args").must_equal false
|
168
|
+
traces[2].has_key?("ReturnValue").must_equal false
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'should store arguments and return value when asked' do
|
172
|
+
class TestWorker
|
173
|
+
def self.do_work(s, i, a, h)
|
174
|
+
sleep 1
|
175
|
+
return "the zebra is loose"
|
176
|
+
end
|
177
|
+
|
178
|
+
class << self
|
179
|
+
include OboeMethodProfiling
|
180
|
+
profile_method :do_work, 'do_work', true, true
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
::Oboe::API.start_trace('method_profiling', '', {}) do
|
185
|
+
# Call the profiled class method
|
186
|
+
TestWorker.do_work('String Argument', 203984, ["1", "2", 3], { :color => :black })
|
187
|
+
end
|
188
|
+
|
189
|
+
traces = get_all_traces
|
190
|
+
traces.count.must_equal 4
|
191
|
+
|
192
|
+
traces[1].has_key?("Args").must_equal true
|
193
|
+
traces[1]["Args"].must_equal "\"String Argument\"\n203984\n[\"1\", \"2\", 3]\n{:color=>:black}\n"
|
194
|
+
|
195
|
+
traces[2].has_key?("ReturnValue").must_equal true
|
196
|
+
traces[2]["ReturnValue"].must_equal "\"the zebra is loose\"\n"
|
197
|
+
end
|
198
|
+
end
|
metadata
CHANGED
@@ -1,75 +1,68 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: oboe
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 2
|
8
|
-
- 3
|
9
|
-
- 2
|
10
|
-
version: 2.3.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.3.3.7
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Peter Giacomo Lombardo
|
14
8
|
- Spiros Eliopoulos
|
15
9
|
autorequire:
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-11-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rake
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
33
21
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: minitest
|
37
22
|
prerelease: false
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: minitest
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
47
35
|
type: :development
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: bson
|
51
36
|
prerelease: false
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: bson
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
61
49
|
type: :development
|
62
|
-
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
63
56
|
description: The oboe gem provides TraceView instrumentation for Ruby and Ruby frameworks.
|
64
57
|
email: traceviewsupport@appneta.com
|
65
58
|
executables: []
|
66
|
-
|
67
|
-
extensions:
|
59
|
+
extensions:
|
68
60
|
- ext/oboe_metal/extconf.rb
|
69
|
-
extra_rdoc_files:
|
61
|
+
extra_rdoc_files:
|
70
62
|
- LICENSE
|
71
|
-
files:
|
63
|
+
files:
|
72
64
|
- .gitignore
|
65
|
+
- .travis.yml
|
73
66
|
- Appraisals
|
74
67
|
- CHANGELOG
|
75
68
|
- Gemfile
|
@@ -94,6 +87,7 @@ files:
|
|
94
87
|
- gemfiles/rails3.2.gemfile.lock
|
95
88
|
- get_version.rb
|
96
89
|
- init.rb
|
90
|
+
- lib/base.rb
|
97
91
|
- lib/joboe_metal.rb
|
98
92
|
- lib/method_profiling.rb
|
99
93
|
- lib/oboe.rb
|
@@ -151,49 +145,41 @@ files:
|
|
151
145
|
- test/instrumentation/rack_test.rb
|
152
146
|
- test/instrumentation/resque_test.rb
|
153
147
|
- test/minitest_helper.rb
|
148
|
+
- test/profiling/method_test.rb
|
154
149
|
- test/support/config_test.rb
|
155
150
|
homepage: http://www.appneta.com/application-performance-management
|
156
151
|
licenses: []
|
157
|
-
|
152
|
+
metadata: {}
|
158
153
|
post_install_message:
|
159
154
|
rdoc_options: []
|
160
|
-
|
161
|
-
require_paths:
|
155
|
+
require_paths:
|
162
156
|
- lib
|
163
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
none: false
|
174
|
-
requirements:
|
175
|
-
- - ">="
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
hash: 3
|
178
|
-
segments:
|
179
|
-
- 0
|
180
|
-
version: "0"
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - '>='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
181
167
|
requirements: []
|
182
|
-
|
183
168
|
rubyforge_project:
|
184
|
-
rubygems_version:
|
169
|
+
rubygems_version: 2.0.3
|
185
170
|
signing_key:
|
186
|
-
specification_version:
|
171
|
+
specification_version: 4
|
187
172
|
summary: AppNeta TraceView performance instrumentation gem for Ruby
|
188
|
-
test_files:
|
173
|
+
test_files:
|
189
174
|
- test/minitest_helper.rb
|
190
|
-
- test/
|
191
|
-
- test/instrumentation/memcached_test.rb
|
192
|
-
- test/instrumentation/memcache_test.rb
|
175
|
+
- test/instrumentation/mongo_test.rb
|
193
176
|
- test/instrumentation/dalli_test.rb
|
194
177
|
- test/instrumentation/http_test.rb
|
195
|
-
- test/instrumentation/cassandra_test.rb
|
196
178
|
- test/instrumentation/resque_test.rb
|
197
|
-
- test/instrumentation/rack_test.rb
|
198
179
|
- test/instrumentation/moped_test.rb
|
199
|
-
- test/instrumentation/
|
180
|
+
- test/instrumentation/rack_test.rb
|
181
|
+
- test/instrumentation/memcache_test.rb
|
182
|
+
- test/instrumentation/cassandra_test.rb
|
183
|
+
- test/instrumentation/memcached_test.rb
|
184
|
+
- test/profiling/method_test.rb
|
185
|
+
- test/support/config_test.rb
|