scout_apm 3.0.0.pre14 → 3.0.0.pre15

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f476cb8dead66959ed3a2e07a102d4d6ee50c79
4
- data.tar.gz: 28266d8577a792a8faec963bf01e260360817e81
3
+ metadata.gz: 8acb94ef4095b224ee2d08a3d5a25410b104447b
4
+ data.tar.gz: 7d6493404c2dcd0346d6465d240cb428eb1f23ab
5
5
  SHA512:
6
- metadata.gz: bd5647c9cd02c2fe3e2d670bd71af12cde9d7df06cca03e16561873ee02beab8dda5b5001ec3c397b9dbb1df9b31dde57ef3e7e1ef0ecfdd2755e4ecfae92f69
7
- data.tar.gz: 031e7b683fc6ab6cd3c56a52e03a81a3e1a059c1ffbea594e0cc5ca0d3a67120ca7b35a31726becc0acaf39e54f9bd77d09488c3ed4c89bd524d56d07dcf959e
6
+ metadata.gz: e3f6cd0b3fb6413bc36a18b69a7e24ed6cb65d7f32f0b0d9ce5bef7b71b41640e80a34c8255540b9d8171312bca630bf35d79568ad7976bb6d0e83f7fe8f4253
7
+ data.tar.gz: 885869be52cb6836df31063bcb2818433511e6001115490e926256de2c70d924452a1feed70ad4a8501155388520ae8efff12a77584f653e6499ae269c2212e5
@@ -2,6 +2,26 @@
2
2
 
3
3
  * ScoutProf BETA
4
4
 
5
+ # 2.4.0
6
+
7
+ * Rework agent startup sequence
8
+
9
+ # 2.3.4
10
+
11
+ * Capture 300 characters of a url from net/http and httpclient instruments (up from 100).
12
+
13
+ # 2.3.3
14
+
15
+ * Capture ActiveRecord calls that generate more complex queries
16
+ * More aggressively determine names of complex queries (to determine "User/find", "Account/create" and similar)
17
+ * Increases the maximum size of SQL queries that are sanitized to 16KB from 4 KB
18
+ * Captures all SQL individual queries generated in a given AR call (previous only a single query was captured)
19
+
20
+ # 2.3.2
21
+
22
+ * More robust startup sequence when using `rails server` vs. directly launching an app server
23
+ * Avoid incompatibility with 3rd party gems that aggressively obtain database connections
24
+
5
25
  # 2.3.1
6
26
 
7
27
  * Fix DevTrace bug
@@ -66,6 +66,7 @@ module ScoutApm
66
66
  'report_format',
67
67
  'scm_subdirectory',
68
68
  'uri_reporting',
69
+ 'instrument_http_url_length',
69
70
  ]
70
71
 
71
72
  ################################################################################
@@ -153,6 +154,7 @@ module ScoutApm
153
154
  "monitor" => BooleanCoercion.new,
154
155
  'database_metric_limit' => IntegerCoercion.new,
155
156
  'database_metric_report_limit' => IntegerCoercion.new,
157
+ 'instrument_http_url_length' => IntegerCoercion.new,
156
158
  }
157
159
 
158
160
 
@@ -256,6 +258,7 @@ module ScoutApm
256
258
  'remote_agent_port' => 7721, # picked at random
257
259
  'database_metric_limit' => 5000, # The hard limit on db metrics
258
260
  'database_metric_report_limit' => 1000,
261
+ 'instrument_http_url_length' => 300,
259
262
  }.freeze
260
263
 
261
264
  def value(key)
@@ -1,6 +1,38 @@
1
1
  require 'scout_apm/utils/sql_sanitizer'
2
2
 
3
3
  module ScoutApm
4
+ class SqlList
5
+ attr_reader :sqls
6
+
7
+ def initialize(sql=nil)
8
+ @sqls = []
9
+
10
+ if !sql.nil?
11
+ push(sql)
12
+ end
13
+ end
14
+
15
+ def <<(sql)
16
+ push(sql)
17
+ end
18
+
19
+ def push(sql)
20
+ if !(Utils::SqlSanitizer === sql)
21
+ sql = Utils::SqlSanitizer.new(sql)
22
+ end
23
+ @sqls << sql
24
+ end
25
+
26
+ # All of this one, then all of the other.
27
+ def merge(other)
28
+ @sqls += other.sqls
29
+ end
30
+
31
+ def to_s
32
+ @sqls.map{|s| s.to_s }.join(";\n")
33
+ end
34
+ end
35
+
4
36
  module Instruments
5
37
  class ActiveRecord
6
38
  attr_reader :context
@@ -129,13 +161,12 @@ module ScoutApm
129
161
  # Extract data from the arguments
130
162
  sql, name = args
131
163
  metric_name = Utils::ActiveRecordMetricName.new(sql, name)
132
- desc = Utils::SqlSanitizer.new(sql)
164
+ desc = SqlList.new(sql)
133
165
 
134
166
  # Get current ScoutApm context
135
167
  req = ScoutApm::RequestManager.lookup
136
168
  current_layer = req.current_layer
137
169
 
138
-
139
170
  # If we call #log, we have a real query to run, and we've already
140
171
  # gotten through the cache gatekeeper. Since we want to only trace real
141
172
  # queries, and not repeated identical queries that just hit cache, we
@@ -150,9 +181,13 @@ module ScoutApm
150
181
  # TODO: Get rid of call .to_s, need to find this without forcing a previous run of the name logic
151
182
  if current_layer.name.to_s == Utils::ActiveRecordMetricName::DEFAULT_METRIC
152
183
  current_layer.name = metric_name
153
- current_layer.desc = desc
154
184
  end
155
185
 
186
+ if current_layer.desc.nil?
187
+ current_layer.desc = SqlList.new
188
+ end
189
+ current_layer.desc.merge(desc)
190
+
156
191
  log_without_scout_instruments(*args, &block)
157
192
 
158
193
  # OR: Start a new layer, we didn't pick up instrumentation earlier in the stack.
@@ -229,6 +264,7 @@ module ScoutApm
229
264
  req = ScoutApm::RequestManager.lookup
230
265
  layer = ScoutApm::Layer.new("ActiveRecord", Utils::ActiveRecordMetricName::DEFAULT_METRIC)
231
266
  layer.annotate_layer(:ignorable => true)
267
+ layer.desc = SqlList.new
232
268
  req.start_layer(layer)
233
269
  req.ignore_children!
234
270
  begin
@@ -247,6 +283,7 @@ module ScoutApm
247
283
 
248
284
  req = ScoutApm::RequestManager.lookup
249
285
  layer = ScoutApm::Layer.new("ActiveRecord", Utils::ActiveRecordMetricName.new("", "#{model} #{operation}"))
286
+ layer.desc = SqlList.new
250
287
  req.start_layer(layer)
251
288
  req.ignore_children!
252
289
  begin
@@ -26,9 +26,12 @@ module ScoutApm
26
26
  include ScoutApm::Tracer
27
27
 
28
28
  def request_with_scout_instruments(*args, &block)
29
+
29
30
  method = args[0].to_s
30
31
  url = args[1]
31
- url = url && url.to_s[0..99]
32
+
33
+ max_length = ScoutApm::Agent.instance.context.config.value('instrument_http_url_length')
34
+ url = url && url.to_s[0..(max_length - 1)]
32
35
 
33
36
  self.class.instrument("HTTP", method, :desc => url) do
34
37
  request_without_scout_instruments(*args, &block)
@@ -34,7 +34,9 @@ module ScoutApm
34
34
  def request_scout_description(req)
35
35
  path = req.path
36
36
  path = path.path if path.respond_to?(:path)
37
- (@address + path.split('?').first)[0..99]
37
+
38
+ max_length = ScoutApm::Agent.instance.context.config.value('instrument_http_url_length')
39
+ (@address + path.split('?').first)[0..(max_length - 1)]
38
40
  end
39
41
 
40
42
  alias request_without_scout_instruments request
@@ -145,7 +145,7 @@ module ScoutApm
145
145
  end
146
146
  end
147
147
 
148
- def make_meta_options_desc_hash(layer, max_desc_length=1000)
148
+ def make_meta_options_desc_hash(layer, max_desc_length=32768)
149
149
  if layer.desc
150
150
  desc_s = layer.desc.to_s
151
151
  trimmed_desc = desc_s[0 .. max_desc_length]
@@ -74,8 +74,10 @@ module ScoutApm
74
74
  encodings.all?{|enc| Encoding.find(enc) rescue false}
75
75
  end
76
76
 
77
+ MAX_SQL_LENGTH = 16384
78
+
77
79
  def scrubbed(str)
78
- return '' if !str.is_a?(String) || str.length > 4000 # safeguard - don't sanitize or scrub large SQL statements
80
+ return '' if !str.is_a?(String) || str.length > MAX_SQL_LENGTH # safeguard - don't sanitize or scrub large SQL statements
79
81
  return str if !str.respond_to?(:encode) # Ruby <= 1.8 doesn't have string encoding
80
82
  return str if str.valid_encoding? # Whatever encoding it is, it is valid and we can operate on it
81
83
  ScoutApm::Agent.instance.context.logger.debug "Scrubbing invalid sql encoding."
@@ -1,3 +1,3 @@
1
1
  module ScoutApm
2
- VERSION = "3.0.0.pre14"
2
+ VERSION = "3.0.0.pre15"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout_apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.pre14
4
+ version: 3.0.0.pre15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Haynes
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-12-18 00:00:00.000000000 Z
12
+ date: 2018-01-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
@@ -372,7 +372,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
372
372
  version: 1.3.1
373
373
  requirements: []
374
374
  rubyforge_project: scout_apm
375
- rubygems_version: 2.4.5.2
375
+ rubygems_version: 2.5.2.1
376
376
  signing_key:
377
377
  specification_version: 4
378
378
  summary: Ruby application performance monitoring