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.
@@ -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