oboe 2.3.2 → 2.3.3.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,10 @@ require "minitest/autorun"
2
2
  require "minitest/reporters"
3
3
 
4
4
  ENV["RACK_ENV"] = "test"
5
- MiniTest::Reporters.use!
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 = File.dirname(__FILE__) + "/../tmp/"
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
- hash: 7
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
- date: 2013-10-22 00:00:00 Z
20
- dependencies:
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
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
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
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
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
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
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
- version_requirements: *id003
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
- none: false
165
- requirements:
166
- - - ">="
167
- - !ruby/object:Gem::Version
168
- hash: 3
169
- segments:
170
- - 0
171
- version: "0"
172
- required_rubygems_version: !ruby/object:Gem::Requirement
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: 1.8.15
169
+ rubygems_version: 2.0.3
185
170
  signing_key:
186
- specification_version: 3
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/support/config_test.rb
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/mongo_test.rb
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