newrelic_rpm 3.15.1.316 → 3.15.2.317
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +41 -0
- data/lib/new_relic/agent/agent.rb +1 -1
- data/lib/new_relic/agent/autostart.rb +1 -1
- data/lib/new_relic/agent/database.rb +72 -165
- data/lib/new_relic/agent/database/explain_plan_helpers.rb +127 -0
- data/lib/new_relic/agent/database/obfuscation_helpers.rb +2 -1
- data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +0 -2
- data/lib/new_relic/agent/instrumentation/active_record.rb +5 -5
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +10 -8
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +2 -1
- data/lib/new_relic/agent/instrumentation/grape.rb +23 -9
- data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +1 -6
- data/lib/new_relic/agent/instrumentation/padrino.rb +36 -0
- data/lib/new_relic/agent/method_tracer.rb +20 -18
- data/lib/new_relic/agent/new_relic_service.rb +3 -33
- data/lib/new_relic/agent/pipe_service.rb +0 -4
- data/lib/new_relic/agent/sql_sampler.rb +3 -3
- data/lib/new_relic/agent/transaction/trace_node.rb +2 -5
- data/lib/new_relic/agent/transaction_sampler.rb +2 -2
- data/lib/new_relic/metric_data.rb +6 -14
- data/lib/new_relic/version.rb +1 -1
- data/newrelic_rpm.gemspec +1 -1
- data/test/environments/lib/environments/runner.rb +1 -1
- data/test/environments/rails40/Gemfile +9 -0
- data/test/environments/rails41/Gemfile +9 -0
- data/test/environments/rails42/Gemfile +9 -0
- data/test/multiverse/lib/multiverse/suite.rb +12 -0
- data/test/multiverse/suites/agent_only/harvest_timestamps_test.rb +0 -31
- data/test/multiverse/suites/grape/Envfile +1 -1
- data/test/multiverse/suites/mongo/Envfile +3 -0
- data/test/multiverse/suites/mongo/mongo2_instrumentation_test.rb +3 -2
- data/test/multiverse/suites/padrino/Envfile +8 -0
- data/test/multiverse/suites/typhoeus/Envfile +21 -0
- data/test/new_relic/agent/database_test.rb +216 -144
- data/test/new_relic/agent/new_relic_service_test.rb +0 -58
- data/test/new_relic/metric_data_test.rb +24 -71
- data/test/new_relic/metric_spec_test.rb +3 -4
- data/test/new_relic/rack/developer_mode_test.rb +5 -2
- metadata +4 -2
@@ -267,7 +267,6 @@ class NewRelicServiceTest < Minitest::Test
|
|
267
267
|
@http_handle.respond_to(:metric_data, dummy_rsp)
|
268
268
|
stats_hash = NewRelic::Agent::StatsHash.new
|
269
269
|
stats_hash.harvested_at = Time.now
|
270
|
-
@service.expects(:fill_metric_id_cache).with(dummy_rsp)
|
271
270
|
response = @service.metric_data(stats_hash)
|
272
271
|
|
273
272
|
assert_equal 4, @http_handle.last_request_payload.size
|
@@ -276,7 +275,6 @@ class NewRelicServiceTest < Minitest::Test
|
|
276
275
|
|
277
276
|
def test_metric_data_sends_harvest_timestamps
|
278
277
|
@http_handle.respond_to(:metric_data, 'foo')
|
279
|
-
@service.stubs(:fill_metric_id_cache)
|
280
278
|
|
281
279
|
t0 = freeze_time
|
282
280
|
stats_hash = NewRelic::Agent::StatsHash.new
|
@@ -297,36 +295,6 @@ class NewRelicServiceTest < Minitest::Test
|
|
297
295
|
assert_in_delta(t0.to_f, last_harvest_timestamp, 0.0001)
|
298
296
|
end
|
299
297
|
|
300
|
-
def test_fill_metric_id_cache_from_collect_response
|
301
|
-
response = [[{"scope"=>"Controller/blogs/index", "name"=>"Database/SQL/other"}, 1328],
|
302
|
-
[{"scope"=>"", "name"=>"WebFrontend/QueueTime"}, 10],
|
303
|
-
[{"scope"=>"", "name"=>"ActiveRecord/Blog/find"}, 1017]]
|
304
|
-
|
305
|
-
@service.send(:fill_metric_id_cache, response)
|
306
|
-
|
307
|
-
cache = @service.metric_id_cache
|
308
|
-
assert_equal 1328, cache[NewRelic::MetricSpec.new('Database/SQL/other', 'Controller/blogs/index')]
|
309
|
-
assert_equal 10, cache[NewRelic::MetricSpec.new('WebFrontend/QueueTime')]
|
310
|
-
assert_equal 1017, cache[NewRelic::MetricSpec.new('ActiveRecord/Blog/find')]
|
311
|
-
end
|
312
|
-
|
313
|
-
def test_caches_metric_ids_for_future_use
|
314
|
-
dummy_rsp = [[{ 'name' => 'a', 'scope' => '' }, 42]]
|
315
|
-
@http_handle.respond_to(:metric_data, dummy_rsp)
|
316
|
-
|
317
|
-
hash = build_stats_hash('a' => 1)
|
318
|
-
|
319
|
-
@service.metric_data(hash)
|
320
|
-
|
321
|
-
hash = build_stats_hash('a' => 1)
|
322
|
-
stats = hash[NewRelic::MetricSpec.new('a')]
|
323
|
-
|
324
|
-
results = @service.build_metric_data_array(hash)
|
325
|
-
assert_nil(results.first.metric_spec)
|
326
|
-
assert_equal(stats, results.first.stats)
|
327
|
-
assert_equal(42, results.first.metric_id)
|
328
|
-
end
|
329
|
-
|
330
298
|
def test_metric_data_harvest_time_based_on_stats_hash_creation
|
331
299
|
t0 = freeze_time
|
332
300
|
dummy_rsp = 'met rick date uhh'
|
@@ -427,7 +395,6 @@ class NewRelicServiceTest < Minitest::Test
|
|
427
395
|
|
428
396
|
@service.connect
|
429
397
|
@http_handle.respond_to(:metric_data, 0)
|
430
|
-
@service.stubs(:fill_metric_id_cache)
|
431
398
|
stats_hash = NewRelic::Agent::StatsHash.new
|
432
399
|
stats_hash.harvested_at = Time.now
|
433
400
|
@service.metric_data(stats_hash)
|
@@ -680,25 +647,6 @@ class NewRelicServiceTest < Minitest::Test
|
|
680
647
|
assert_equal(hash[spec2], metric_data_2.stats)
|
681
648
|
end
|
682
649
|
|
683
|
-
def test_build_metric_data_array_uses_metric_id_cache_if_possible
|
684
|
-
hash = NewRelic::Agent::StatsHash.new
|
685
|
-
|
686
|
-
spec1 = NewRelic::MetricSpec.new('foo')
|
687
|
-
spec2 = NewRelic::MetricSpec.new('bar')
|
688
|
-
hash.record(spec1, 1)
|
689
|
-
hash.record(spec2, 1)
|
690
|
-
|
691
|
-
@service.stubs(:metric_id_cache).returns({ spec1 => 42 })
|
692
|
-
metric_data_array = @service.build_metric_data_array(hash)
|
693
|
-
|
694
|
-
assert_equal(2, metric_data_array.size)
|
695
|
-
|
696
|
-
metric_data1 = metric_data_array.find { |md| md.metric_id == 42 }
|
697
|
-
metric_data2 = metric_data_array.find { |md| md.metric_spec == spec2 }
|
698
|
-
assert_nil(metric_data1.metric_spec)
|
699
|
-
assert_nil(metric_data2.metric_id)
|
700
|
-
end
|
701
|
-
|
702
650
|
def test_build_metric_data_array_omits_empty_stats
|
703
651
|
hash = NewRelic::Agent::StatsHash.new
|
704
652
|
|
@@ -804,12 +752,6 @@ class NewRelicServiceTest < Minitest::Test
|
|
804
752
|
])
|
805
753
|
end
|
806
754
|
|
807
|
-
def test_force_restart_clears_metric_cache
|
808
|
-
@service.metric_id_cache[1] = "boo"
|
809
|
-
@service.force_restart
|
810
|
-
assert_empty @service.metric_id_cache
|
811
|
-
end
|
812
|
-
|
813
755
|
def test_force_restart_closes_shared_connections
|
814
756
|
@service.establish_shared_connection
|
815
757
|
@service.force_restart
|
@@ -8,19 +8,16 @@ class NewRelic::MetricDataTest < Minitest::Test
|
|
8
8
|
def test_initialize_basic
|
9
9
|
spec = mock('metric_spec')
|
10
10
|
stats = mock('stats')
|
11
|
-
|
12
|
-
md = NewRelic::MetricData.new(spec, stats, metric_id)
|
11
|
+
md = NewRelic::MetricData.new(spec, stats)
|
13
12
|
assert_equal spec, md.metric_spec
|
14
13
|
assert_equal stats, md.stats
|
15
|
-
assert_equal metric_id, md.metric_id
|
16
14
|
end
|
17
15
|
|
18
16
|
def test_eql_basic
|
19
17
|
spec = mock('metric_spec')
|
20
18
|
stats = mock('stats')
|
21
|
-
|
22
|
-
|
23
|
-
md2 = NewRelic::MetricData.new(spec, stats, metric_id)
|
19
|
+
md1 = NewRelic::MetricData.new(spec, stats)
|
20
|
+
md2 = NewRelic::MetricData.new(spec, stats)
|
24
21
|
assert(md1.eql?(md2), "The example metric data objects should be eql?: #{md1.inspect} #{md2.inspect}")
|
25
22
|
assert(md2.eql?(md1), "The example metric data objects should be eql?: #{md1.inspect} #{md2.inspect}")
|
26
23
|
end
|
@@ -29,39 +26,26 @@ class NewRelic::MetricDataTest < Minitest::Test
|
|
29
26
|
spec = mock('metric_spec')
|
30
27
|
other_spec = mock('other_spec')
|
31
28
|
stats = mock('stats')
|
32
|
-
|
33
|
-
|
34
|
-
md2 = NewRelic::MetricData.new(other_spec, stats, metric_id)
|
29
|
+
md1 = NewRelic::MetricData.new(spec, stats)
|
30
|
+
md2 = NewRelic::MetricData.new(other_spec, stats)
|
35
31
|
assert(!md1.eql?(md2), "The example metric data objects should not be eql?: #{md1.inspect} #{md2.inspect}")
|
36
32
|
assert(!md2.eql?(md1), "The example metric data objects should not be eql?: #{md1.inspect} #{md2.inspect}")
|
37
33
|
end
|
34
|
+
|
38
35
|
def test_eql_unequal_stats
|
39
36
|
spec = mock('metric_spec')
|
40
37
|
stats = mock('stats')
|
41
38
|
other_stats = mock('other_stats')
|
42
|
-
|
43
|
-
|
44
|
-
md2 = NewRelic::MetricData.new(spec, other_stats, metric_id)
|
39
|
+
md1 = NewRelic::MetricData.new(spec, stats)
|
40
|
+
md2 = NewRelic::MetricData.new(spec, other_stats)
|
45
41
|
assert(!md1.eql?(md2), "The example metric data objects should not be eql?: #{md1.inspect} #{md2.inspect}")
|
46
42
|
assert(!md2.eql?(md1), "The example metric data objects should not be eql?: #{md1.inspect} #{md2.inspect}")
|
47
43
|
end
|
48
44
|
|
49
|
-
def test_eql_unequal_metric_ids_dont_matter
|
50
|
-
spec = mock('metric_spec')
|
51
|
-
stats = mock('stats')
|
52
|
-
metric_id = mock('metric_id')
|
53
|
-
other_metric_id = mock('other_metric_id')
|
54
|
-
md1 = NewRelic::MetricData.new(spec, stats, metric_id)
|
55
|
-
md2 = NewRelic::MetricData.new(spec, stats, other_metric_id)
|
56
|
-
assert(md1.eql?(md2), "The example metric data objects should be eql? with different metric_ids: #{md1.inspect} #{md2.inspect}")
|
57
|
-
assert(md2.eql?(md1), "The example metric data objects should be eql? with different metric_ids: #{md1.inspect} #{md2.inspect}")
|
58
|
-
end
|
59
|
-
|
60
45
|
def test_original_spec_basic
|
61
46
|
spec = mock('metric_spec')
|
62
47
|
stats = mock('stats')
|
63
|
-
|
64
|
-
md1 = NewRelic::MetricData.new(spec, stats, metric_id)
|
48
|
+
md1 = NewRelic::MetricData.new(spec, stats)
|
65
49
|
original_spec = md1.instance_variable_get('@original_spec')
|
66
50
|
assert_equal(nil, original_spec, "should start with a nil original spec, but was #{original_spec.inspect}")
|
67
51
|
assert_equal(spec, md1.metric_spec, "should return the metric spec for original spec when original spec is nil, but was #{md1.original_spec}")
|
@@ -69,8 +53,7 @@ class NewRelic::MetricDataTest < Minitest::Test
|
|
69
53
|
|
70
54
|
def test_metric_spec_equal_should_not_set_original_spec_with_no_metric_spec
|
71
55
|
stats = mock('stats')
|
72
|
-
|
73
|
-
md1 = NewRelic::MetricData.new(nil, stats, metric_id)
|
56
|
+
md1 = NewRelic::MetricData.new(nil, stats)
|
74
57
|
original_spec = md1.instance_variable_get('@original_spec')
|
75
58
|
assert_equal(nil, original_spec, "should start with a nil original spec, but was #{original_spec.inspect}")
|
76
59
|
|
@@ -78,14 +61,13 @@ class NewRelic::MetricDataTest < Minitest::Test
|
|
78
61
|
assert_equal(new_spec, md1.metric_spec=(new_spec), "should return the new spec")
|
79
62
|
|
80
63
|
new_original_spec = md1.instance_variable_get('@original_spec')
|
81
|
-
assert_equal(nil, new_original_spec, "should not set @original_spec
|
64
|
+
assert_equal(nil, new_original_spec, "should not set @original_spec, but was #{new_original_spec.inspect}")
|
82
65
|
end
|
83
66
|
|
84
67
|
def test_metric_spec_equal_should_set_original_spec_with_existing_metric_spec
|
85
68
|
spec = mock('metric_spec')
|
86
69
|
stats = mock('stats')
|
87
|
-
|
88
|
-
md1 = NewRelic::MetricData.new(spec, stats, metric_id)
|
70
|
+
md1 = NewRelic::MetricData.new(spec, stats)
|
89
71
|
original_spec = md1.instance_variable_get('@original_spec')
|
90
72
|
assert_equal(nil, original_spec, "should start with a nil original spec, but was #{original_spec.inspect}")
|
91
73
|
|
@@ -99,67 +81,36 @@ class NewRelic::MetricDataTest < Minitest::Test
|
|
99
81
|
def test_hash
|
100
82
|
spec = mock('metric_spec')
|
101
83
|
stats = mock('stats')
|
102
|
-
|
103
|
-
md1 = NewRelic::MetricData.new(spec, stats, metric_id)
|
84
|
+
md1 = NewRelic::MetricData.new(spec, stats)
|
104
85
|
assert((spec.hash ^ stats.hash) == md1.hash, "expected #{spec.hash ^ stats.hash} to equal #{md1.hash}")
|
105
86
|
end
|
106
87
|
|
107
88
|
if {}.respond_to?(:to_json)
|
108
|
-
def
|
109
|
-
md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::Agent::Stats.new
|
89
|
+
def test_to_json
|
90
|
+
md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::Agent::Stats.new)
|
110
91
|
json = md.to_json
|
111
92
|
assert(json.include?('"Custom/test/method"'), "should include the metric spec in the json")
|
112
|
-
assert(json.include?('"metric_id":null}'), "should have a null metric_id")
|
113
93
|
end
|
114
94
|
|
115
|
-
def test_to_json_with_metric_id
|
116
|
-
md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::Agent::Stats.new, 12345)
|
117
|
-
assert_equal('{"metric_spec":null,"stats":{"total_exclusive_time":0.0,"min_call_time":0.0,"call_count":0,"sum_of_squares":0.0,"total_call_time":0.0,"max_call_time":0.0},"metric_id":12345}', md.to_json, "should not include the metric spec and should have a metric_id")
|
118
|
-
end
|
119
95
|
else
|
120
96
|
puts "Skipping tests in #{__FILE__} because Hash#to_json not available"
|
121
97
|
end
|
122
98
|
|
123
99
|
def test_to_s_with_metric_spec
|
124
|
-
md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::Agent::Stats.new
|
125
|
-
assert_equal('Custom/test/method(): [ 0 calls 0.0000s / 0.0000s ex]', md.to_s, "should
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_to_s_without_metric_spec
|
129
|
-
md = NewRelic::MetricData.new(nil, NewRelic::Agent::Stats.new, 12345)
|
130
|
-
assert_equal('12345: [ 0 calls 0.0000s / 0.0000s ex]', md.to_s, "should include the metric id and not have a metric spec")
|
100
|
+
md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::Agent::Stats.new)
|
101
|
+
assert_equal('Custom/test/method(): [ 0 calls 0.0000s / 0.0000s ex]', md.to_s, "should include the metric spec")
|
131
102
|
end
|
132
103
|
|
133
104
|
def test_to_collector_array_with_spec
|
134
105
|
stats = NewRelic::Agent::Stats.new
|
135
106
|
stats.record_data_point(1.0)
|
136
107
|
stats.record_data_point(2.0, 1.0)
|
137
|
-
md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', 'scope'),
|
138
|
-
stats, nil)
|
108
|
+
md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', 'scope'), stats)
|
139
109
|
expected = [ {'name' => 'Custom/test/method', 'scope' => 'scope'},
|
140
110
|
[2, 3.0, 2.0, 1.0, 2.0, 5.0] ]
|
141
111
|
assert_equal expected, md.to_collector_array
|
142
112
|
end
|
143
113
|
|
144
|
-
def test_to_collector_array_with_spec_and_id
|
145
|
-
stats = NewRelic::Agent::Stats.new
|
146
|
-
stats.record_data_point(1.0)
|
147
|
-
stats.record_data_point(2.0, 1.0)
|
148
|
-
md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', 'scope'),
|
149
|
-
stats, 1234)
|
150
|
-
expected = [ 1234, [2, 3.0, 2.0, 1.0, 2.0, 5.0] ]
|
151
|
-
assert_equal expected, md.to_collector_array
|
152
|
-
end
|
153
|
-
|
154
|
-
def test_to_collector_array_with_id
|
155
|
-
stats = NewRelic::Agent::Stats.new
|
156
|
-
stats.record_data_point(1.0)
|
157
|
-
stats.record_data_point(2.0, 1.0)
|
158
|
-
md = NewRelic::MetricData.new(nil, stats, 1234)
|
159
|
-
expected = [ 1234, [2, 3.0, 2.0, 1.0, 2.0, 5.0] ]
|
160
|
-
assert_equal expected, md.to_collector_array
|
161
|
-
end
|
162
|
-
|
163
114
|
# Rationals in metric data? -- https://support.newrelic.com/tickets/28053
|
164
115
|
def test_to_collector_array_with_rationals
|
165
116
|
stats = NewRelic::Agent::Stats.new
|
@@ -170,8 +121,9 @@ class NewRelic::MetricDataTest < Minitest::Test
|
|
170
121
|
stats.max_call_time = Rational(5, 1)
|
171
122
|
stats.sum_of_squares = Rational(6, 1)
|
172
123
|
|
173
|
-
|
174
|
-
|
124
|
+
spec = NewRelic::MetricSpec.new('foo')
|
125
|
+
md = NewRelic::MetricData.new(spec, stats)
|
126
|
+
expected = [{"name"=>"foo", "scope"=>""}, [1, 2.0, 3.0, 4.0, 5.0, 6.0]]
|
175
127
|
assert_equal expected, md.to_collector_array
|
176
128
|
end
|
177
129
|
|
@@ -184,8 +136,9 @@ class NewRelic::MetricDataTest < Minitest::Test
|
|
184
136
|
stats.max_call_time = {}
|
185
137
|
stats.sum_of_squares = Exception.new("Boo")
|
186
138
|
|
187
|
-
|
188
|
-
|
139
|
+
spec = NewRelic::MetricSpec.new('foo')
|
140
|
+
md = NewRelic::MetricData.new(spec, stats)
|
141
|
+
expected = [{"name"=>"foo", "scope"=>""}, [0, 0, 0, 0, 0, 0]]
|
189
142
|
assert_equal expected, md.to_collector_array
|
190
143
|
end
|
191
144
|
end
|
@@ -57,7 +57,7 @@ class NewRelic::MetricSpecTest < Minitest::Test
|
|
57
57
|
|
58
58
|
compare_stat(stats, import)
|
59
59
|
|
60
|
-
metric_data = NewRelic::MetricData.new(spec, stats
|
60
|
+
metric_data = NewRelic::MetricData.new(spec, stats)
|
61
61
|
|
62
62
|
import = ::ActiveSupport::JSON.decode(metric_data.to_json)
|
63
63
|
|
@@ -137,9 +137,8 @@ class NewRelic::MetricSpecTest < Minitest::Test
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def compare_metric_data(metric_data, import)
|
140
|
-
assert_equal
|
141
|
-
|
142
|
-
compare_spec(metric_data.metric_spec, import['metric_spec']) unless metric_data.metric_id
|
140
|
+
assert_equal 2, import.length
|
141
|
+
compare_spec(metric_data.metric_spec, import['metric_spec'])
|
143
142
|
compare_stat(metric_data.stats, import['stats'])
|
144
143
|
end
|
145
144
|
end
|
@@ -54,9 +54,12 @@ class DeveloperModeTest < Minitest::Test
|
|
54
54
|
def test_explain_sql_displays_query_plan
|
55
55
|
sample = @sampler.dev_mode_sample_buffer.samples[0]
|
56
56
|
sql_segment = app.send(:sql_segments, sample)[0]
|
57
|
-
explain_results =
|
58
|
-
|
57
|
+
explain_results = [["Id", "Select Type", "Table", "Type", "Possible Keys", "Key", "Key Length",
|
58
|
+
"Ref", "Rows", "Extra"],
|
59
|
+
[["1", "SIMPLE", "sandwiches", "range", "PRIMARY", "PRIMARY", "4", "", "1",
|
60
|
+
"Using index"]]]
|
59
61
|
NewRelic::Agent::Transaction::TraceNode.any_instance.expects(:explain_sql).returns(explain_results)
|
62
|
+
|
60
63
|
get "/newrelic/explain_sql?id=#{sample.sample_id}&segment=#{sql_segment.object_id}"
|
61
64
|
|
62
65
|
assert last_response.ok?
|
metadata
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: newrelic_rpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.15.
|
4
|
+
version: 3.15.2.317
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Krajcar
|
8
8
|
- Matthew Wear
|
9
9
|
- Katherine Wu
|
10
10
|
- Karl Sandwich
|
11
|
+
- Caito Scherr
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain: []
|
14
|
-
date: 2016-
|
15
|
+
date: 2016-04-18 00:00:00.000000000 Z
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
17
18
|
name: rake
|
@@ -253,6 +254,7 @@ files:
|
|
253
254
|
- lib/new_relic/agent/cross_app_tracing.rb
|
254
255
|
- lib/new_relic/agent/custom_event_aggregator.rb
|
255
256
|
- lib/new_relic/agent/database.rb
|
257
|
+
- lib/new_relic/agent/database/explain_plan_helpers.rb
|
256
258
|
- lib/new_relic/agent/database/obfuscation_helpers.rb
|
257
259
|
- lib/new_relic/agent/database/obfuscator.rb
|
258
260
|
- lib/new_relic/agent/database/postgres_explain_obfuscator.rb
|