appoptics_apm 4.0.2 → 4.0.3
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 +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
@@ -8,12 +8,14 @@ unless defined?(JRUBY_VERSION)
|
|
8
8
|
class TyphoeusMockedTest < Minitest::Test
|
9
9
|
|
10
10
|
def setup
|
11
|
+
AppOpticsAPM::Context.clear
|
11
12
|
AppOpticsAPM.config_lock.synchronize do
|
12
13
|
@sample_rate = AppOpticsAPM::Config[:sample_rate]
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
17
|
def teardown
|
18
|
+
AppOpticsAPM::Context.clear
|
17
19
|
AppOpticsAPM.config_lock.synchronize do
|
18
20
|
AppOpticsAPM::Config[:sample_rate] = @sample_rate
|
19
21
|
AppOpticsAPM::Config[:blacklist] = []
|
@@ -30,6 +32,8 @@ unless defined?(JRUBY_VERSION)
|
|
30
32
|
assert request.options[:headers]['X-Trace']
|
31
33
|
assert_match /^2B[0-9,A-F]*01$/,request.options[:headers]['X-Trace']
|
32
34
|
end
|
35
|
+
|
36
|
+
refute AppOpticsAPM::Context.isValid
|
33
37
|
end
|
34
38
|
|
35
39
|
def test_tracing_not_sampling
|
@@ -44,6 +48,7 @@ unless defined?(JRUBY_VERSION)
|
|
44
48
|
refute_match /^2B0*$/, request.options[:headers]['X-Trace']
|
45
49
|
end
|
46
50
|
end
|
51
|
+
refute AppOpticsAPM::Context.isValid
|
47
52
|
end
|
48
53
|
|
49
54
|
def test_no_xtrace
|
@@ -51,6 +56,7 @@ unless defined?(JRUBY_VERSION)
|
|
51
56
|
request.run
|
52
57
|
|
53
58
|
refute request.options[:headers]['X-Trace']
|
59
|
+
refute AppOpticsAPM::Context.isValid
|
54
60
|
end
|
55
61
|
|
56
62
|
def test_blacklisted
|
@@ -63,6 +69,7 @@ unless defined?(JRUBY_VERSION)
|
|
63
69
|
refute request.options[:headers]['X-Trace']
|
64
70
|
end
|
65
71
|
end
|
72
|
+
refute AppOpticsAPM::Context.isValid
|
66
73
|
end
|
67
74
|
|
68
75
|
def test_not_sampling_blacklisted
|
@@ -76,6 +83,7 @@ unless defined?(JRUBY_VERSION)
|
|
76
83
|
refute request.options[:headers]['X-Trace']
|
77
84
|
end
|
78
85
|
end
|
86
|
+
refute AppOpticsAPM::Context.isValid
|
79
87
|
end
|
80
88
|
|
81
89
|
def test_preserves_custom_headers
|
@@ -86,6 +94,7 @@ unless defined?(JRUBY_VERSION)
|
|
86
94
|
assert request.options[:headers]['Custom']
|
87
95
|
assert_match /specialvalue/, request.options[:headers]['Custom']
|
88
96
|
end
|
97
|
+
refute AppOpticsAPM::Context.isValid
|
89
98
|
end
|
90
99
|
|
91
100
|
|
@@ -105,6 +114,7 @@ unless defined?(JRUBY_VERSION)
|
|
105
114
|
assert request_2.options[:headers]['X-Trace'], "There is an X-Trace header"
|
106
115
|
assert_match /^2B[0-9,A-F]*01$/, request_2.options[:headers]['X-Trace']
|
107
116
|
end
|
117
|
+
refute AppOpticsAPM::Context.isValid
|
108
118
|
end
|
109
119
|
|
110
120
|
def test_hydra_tracing_not_sampling
|
@@ -126,6 +136,7 @@ unless defined?(JRUBY_VERSION)
|
|
126
136
|
refute_match /^2B0*$/, request_2.options[:headers]['X-Trace']
|
127
137
|
end
|
128
138
|
end
|
139
|
+
refute AppOpticsAPM::Context.isValid
|
129
140
|
end
|
130
141
|
|
131
142
|
def test_hydra_no_xtrace
|
@@ -138,6 +149,7 @@ unless defined?(JRUBY_VERSION)
|
|
138
149
|
|
139
150
|
refute request_1.options[:headers]['X-Trace'], "There should not be an X-Trace header"
|
140
151
|
refute request_2.options[:headers]['X-Trace'], "There should not be an X-Trace header"
|
152
|
+
refute AppOpticsAPM::Context.isValid
|
141
153
|
end
|
142
154
|
|
143
155
|
def test_hydra_blacklisted
|
@@ -155,6 +167,7 @@ unless defined?(JRUBY_VERSION)
|
|
155
167
|
refute request_2.options[:headers]['X-Trace'], "There should not be an X-Trace header"
|
156
168
|
end
|
157
169
|
end
|
170
|
+
refute AppOpticsAPM::Context.isValid
|
158
171
|
end
|
159
172
|
|
160
173
|
def test_hydra_not_sampling_blacklisted
|
@@ -173,6 +186,7 @@ unless defined?(JRUBY_VERSION)
|
|
173
186
|
refute request_2.options[:headers]['X-Trace'], "There should not be an X-Trace header"
|
174
187
|
end
|
175
188
|
end
|
189
|
+
refute AppOpticsAPM::Context.isValid
|
176
190
|
end
|
177
191
|
|
178
192
|
|
@@ -186,6 +200,7 @@ unless defined?(JRUBY_VERSION)
|
|
186
200
|
assert request.options[:headers]['Custom']
|
187
201
|
assert_match /specialvalue/, request.options[:headers]['Custom']
|
188
202
|
end
|
203
|
+
refute AppOpticsAPM::Context.isValid
|
189
204
|
end
|
190
205
|
|
191
206
|
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
# Copyright (c) 2016 SolarWinds, LLC.
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
# Force noop by setting the platform to something we don't support
|
6
|
+
RUBY_PLATFORM = 'noop'
|
7
|
+
|
8
|
+
# These tests assert:
|
9
|
+
# - that there is no instrumentation nor tracing in noop mode
|
10
|
+
# - that the 'official' SDK methods don't create
|
11
|
+
|
12
|
+
require 'minitest_helper'
|
13
|
+
require 'rack/lobster'
|
14
|
+
require 'net/http'
|
15
|
+
|
16
|
+
class NoopTest < Minitest::Test
|
17
|
+
include Rack::Test::Methods
|
18
|
+
|
19
|
+
class ArrayTest < Array; end
|
20
|
+
|
21
|
+
def setup
|
22
|
+
clear_all_traces
|
23
|
+
end
|
24
|
+
|
25
|
+
def app
|
26
|
+
@app = Rack::Builder.new {
|
27
|
+
use Rack::CommonLogger
|
28
|
+
use Rack::ShowExceptions
|
29
|
+
use AppOpticsAPM::Rack
|
30
|
+
map '/lobster' do
|
31
|
+
use Rack::Lint
|
32
|
+
run Rack::Lobster.new
|
33
|
+
end
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_requests_still_work
|
38
|
+
get '/lobster'
|
39
|
+
traces = get_all_traces
|
40
|
+
assert_equal 0, traces.count, 'generate no traces'
|
41
|
+
assert AppOpticsAPM::Rack.noop?, 'This is not running in noop mode.'
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_appoptics_config_doesnt_barf
|
45
|
+
tm = AppOpticsAPM::Config[:tracing_mode]
|
46
|
+
vb = AppOpticsAPM::Config[:verbose]
|
47
|
+
la = AppOpticsAPM::Config[:rack][:log_args]
|
48
|
+
|
49
|
+
# Test that we can set various things into AppOpticsAPM::Config still
|
50
|
+
AppOpticsAPM::Config[:tracing_mode] = :always
|
51
|
+
AppOpticsAPM::Config[:verbose] = false
|
52
|
+
AppOpticsAPM::Config[:rack][:log_args] = true
|
53
|
+
|
54
|
+
assert_equal :always, AppOpticsAPM::Config[:tracing_mode]
|
55
|
+
assert_equal false, AppOpticsAPM::Config[:verbose]
|
56
|
+
assert_equal true, AppOpticsAPM::Config[:rack][:log_args]
|
57
|
+
|
58
|
+
# Restore the originals
|
59
|
+
AppOpticsAPM::Config[:tracing_mode] = tm
|
60
|
+
AppOpticsAPM::Config[:verbose] = vb
|
61
|
+
AppOpticsAPM::Config[:rack][:log_args] = la
|
62
|
+
end
|
63
|
+
|
64
|
+
# ===== Make sure the AppOpticsAPM::Inst module does not exist ============================
|
65
|
+
# this is the module in which all the instrumented methods are defined
|
66
|
+
def test_not_instrumented
|
67
|
+
refute ::AppOpticsAPM.const_defined?('Inst'), 'This should be noop mode, but instrumentation was found.'
|
68
|
+
end
|
69
|
+
|
70
|
+
# ===== Make sure the frameworks are not instrumented =====================================
|
71
|
+
def test_rails_not_instrumented
|
72
|
+
refute ::AppOpticsAPM.const_defined?('Rails'), 'This should be noop mode, but Rails is instrumented.'
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_sinatra_not_instrumented
|
76
|
+
refute ::AppOpticsAPM.const_defined?('Sinatra'), 'This should be noop mode, but Sinatra is instrumented.'
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_grape_not_instrumented
|
80
|
+
refute ::AppOpticsAPM.const_defined?('Grape'), 'This should be noop mode, but Grape is instrumented.'
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_padrino_not_instrumented
|
84
|
+
refute ::AppOpticsAPM.const_defined?('Padrino'), 'This should be noop mode, but Padrino is instrumented.'
|
85
|
+
end
|
86
|
+
|
87
|
+
# ===== Make sure the methods we document as SDK don't barf in noop mode ==================
|
88
|
+
|
89
|
+
def test_start_trace_doesnt_barf
|
90
|
+
AppOpticsAPM::API.start_trace('noop_test') do
|
91
|
+
AppOpticsAPM::API.trace('blah_block') do
|
92
|
+
"this block should not be traced"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
traces = get_all_traces
|
97
|
+
assert_equal 0, traces.count, "generate no traces"
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_trace_doesnt_barf
|
101
|
+
AppOpticsAPM::API.trace('noop_test') do
|
102
|
+
"this block should not be traced"
|
103
|
+
end
|
104
|
+
|
105
|
+
traces = get_all_traces
|
106
|
+
assert_equal 0, traces.count, "generate no traces"
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_method_profiling_doesnt_barf
|
110
|
+
AppOpticsAPM::API.profile_method(ArrayTest, :sort)
|
111
|
+
|
112
|
+
x = ArrayTest.new
|
113
|
+
x.push(1).push(3).push(2)
|
114
|
+
assert_equal [1, 2, 3], x.sort
|
115
|
+
|
116
|
+
traces = get_all_traces
|
117
|
+
assert_equal 0, traces.count, "generate no traces" end
|
118
|
+
|
119
|
+
def test_profile_doesnt_barf
|
120
|
+
def fib(n)
|
121
|
+
return n if n <= 1
|
122
|
+
n + fib(n-1)
|
123
|
+
end
|
124
|
+
|
125
|
+
def computation(n)
|
126
|
+
AppOpticsAPM::API.profile('fib', { :n => n }) do
|
127
|
+
fib(n)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
result = computation(4)
|
132
|
+
assert_equal 10, result
|
133
|
+
|
134
|
+
|
135
|
+
traces = get_all_traces
|
136
|
+
assert_equal 0, traces.count, "generate no traces" end
|
137
|
+
|
138
|
+
def test_log_info_doesnt_barf
|
139
|
+
AppOpticsAPM::API.log_info(nil, {:ok => :yeah })
|
140
|
+
|
141
|
+
traces = get_all_traces
|
142
|
+
assert_equal 0, traces.count, "generate no traces"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appoptics_apm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maia Engeli
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-
|
13
|
+
date: 2018-02-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- gemfiles/frameworks.gemfile
|
175
175
|
- gemfiles/instrumentation_mocked.gemfile
|
176
176
|
- gemfiles/libraries.gemfile
|
177
|
+
- gemfiles/noop.gemfile
|
177
178
|
- gemfiles/rails23.gemfile
|
178
179
|
- gemfiles/rails30.gemfile
|
179
180
|
- gemfiles/rails31.gemfile
|
@@ -330,6 +331,7 @@ files:
|
|
330
331
|
- test/mocked/rest_client_mocked_test.rb
|
331
332
|
- test/mocked/typhoeus_mocked_test.rb
|
332
333
|
- test/models/widget.rb
|
334
|
+
- test/noop/noop_test.rb
|
333
335
|
- test/profiling/legacy_method_profiling_test.rb
|
334
336
|
- test/profiling/method_profiling_test.rb
|
335
337
|
- test/queues/delayed_job-client_test.rb
|
@@ -352,7 +354,6 @@ files:
|
|
352
354
|
- test/support/init_report_test.rb
|
353
355
|
- test/support/liboboe_settings_test.rb
|
354
356
|
- test/support/logging_test.rb
|
355
|
-
- test/support/noop_test.rb
|
356
357
|
- test/support/sql_sanitize_test.rb
|
357
358
|
- test/support/tracing_mode_test.rb
|
358
359
|
- test/support/tvalias_test.rb
|
@@ -393,6 +394,7 @@ test_files:
|
|
393
394
|
- test/mocked/faraday_mocked_test.rb
|
394
395
|
- test/mocked/typhoeus_mocked_test.rb
|
395
396
|
- test/mocked/curb_mocked_test.rb
|
397
|
+
- test/noop/noop_test.rb
|
396
398
|
- test/reporter/reporter_test.rb
|
397
399
|
- test/models/widget.rb
|
398
400
|
- test/instrumentation/sequel_mysql_test.rb
|
@@ -430,7 +432,6 @@ test_files:
|
|
430
432
|
- test/instrumentation/httpclient_test.rb
|
431
433
|
- test/support/config_test.rb
|
432
434
|
- test/support/xtrace_test.rb
|
433
|
-
- test/support/noop_test.rb
|
434
435
|
- test/support/tracing_mode_test.rb
|
435
436
|
- test/support/init_report_test.rb
|
436
437
|
- test/support/backcompat_test.rb
|
data/test/support/noop_test.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
# Copyright (c) 2016 SolarWinds, LLC.
|
2
|
-
# All rights reserved.
|
3
|
-
|
4
|
-
require 'minitest_helper'
|
5
|
-
require 'rack/test'
|
6
|
-
require 'rack/lobster'
|
7
|
-
require 'appoptics_apm/inst/rack'
|
8
|
-
require 'net/http'
|
9
|
-
|
10
|
-
class NoopTest < Minitest::Test
|
11
|
-
include Rack::Test::Methods
|
12
|
-
|
13
|
-
class ArrayTest < Array; end
|
14
|
-
|
15
|
-
def setup
|
16
|
-
AppOpticsAPM.loaded = false
|
17
|
-
end
|
18
|
-
|
19
|
-
def teardown
|
20
|
-
AppOpticsAPM.loaded = true
|
21
|
-
end
|
22
|
-
|
23
|
-
def app
|
24
|
-
@app = Rack::Builder.new {
|
25
|
-
use Rack::CommonLogger
|
26
|
-
use Rack::ShowExceptions
|
27
|
-
use AppOpticsAPM::Rack
|
28
|
-
map "/lobster" do
|
29
|
-
use Rack::Lint
|
30
|
-
run Rack::Lobster.new
|
31
|
-
end
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_requests_still_work
|
36
|
-
clear_all_traces
|
37
|
-
|
38
|
-
get "/lobster"
|
39
|
-
|
40
|
-
traces = get_all_traces
|
41
|
-
assert_equal 0, traces.count, "generate no traces"
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_tracing_api_doesnt_barf
|
45
|
-
AppOpticsAPM::API.start_trace('noop_test') do
|
46
|
-
AppOpticsAPM::API.trace('blah_block') do
|
47
|
-
"this block should not be traced"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
AppOpticsAPM::API.log_start('noop_test')
|
52
|
-
AppOpticsAPM::API.log_info(nil, {:ok => :yeah })
|
53
|
-
AppOpticsAPM::API.log_exception(nil, Exception.new("yeah ok"))
|
54
|
-
AppOpticsAPM::API.log_end('noop_test')
|
55
|
-
|
56
|
-
traces = get_all_traces
|
57
|
-
assert_equal 0, traces.count, "generate no traces"
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_method_profiling_doesnt_barf
|
61
|
-
AppOpticsAPM::API.profile_method(ArrayTest, :sort)
|
62
|
-
|
63
|
-
x = ArrayTest.new
|
64
|
-
x.push(1).push(3).push(2)
|
65
|
-
assert_equal [1, 2, 3], x.sort
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_appoptics_config_doesnt_barf
|
69
|
-
tm = AppOpticsAPM::Config[:tracing_mode]
|
70
|
-
vb = AppOpticsAPM::Config[:verbose]
|
71
|
-
la = AppOpticsAPM::Config[:rack][:log_args]
|
72
|
-
|
73
|
-
# Test that we can set various things into AppOpticsAPM::Config still
|
74
|
-
AppOpticsAPM::Config[:tracing_mode] = :always
|
75
|
-
AppOpticsAPM::Config[:verbose] = false
|
76
|
-
AppOpticsAPM::Config[:rack][:log_args] = true
|
77
|
-
|
78
|
-
assert_equal :always, AppOpticsAPM::Config[:tracing_mode]
|
79
|
-
assert_equal false, AppOpticsAPM::Config[:verbose]
|
80
|
-
assert_equal true, AppOpticsAPM::Config[:rack][:log_args]
|
81
|
-
|
82
|
-
# Restore the originals
|
83
|
-
AppOpticsAPM::Config[:tracing_mode] = tm
|
84
|
-
AppOpticsAPM::Config[:verbose] = vb
|
85
|
-
AppOpticsAPM::Config[:rack][:log_args] = la
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|