scout_apm 1.4.4 → 1.4.5
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/CHANGELOG.markdown +5 -0
- data/lib/scout_apm.rb +2 -0
- data/lib/scout_apm/agent.rb +2 -0
- data/lib/scout_apm/instruments/elasticsearch.rb +77 -0
- data/lib/scout_apm/instruments/influxdb.rb +45 -0
- data/lib/scout_apm/tracer.rb +1 -1
- data/lib/scout_apm/tracked_request.rb +14 -1
- data/lib/scout_apm/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32c7de1b69ce4dfb33779efa5ac201c95d155cf7
|
4
|
+
data.tar.gz: 9179a6163ebe2a3277d589fc9e20a77d715b17e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85f3023eec77d1884e7beebf3d1d2a08ac0126405c25db4fa3533edd90d40ce4439a6f87029ae5922f4db1063a4a14765b16e4bc9e92a2698423c2556d479321
|
7
|
+
data.tar.gz: a2c3ba865dff42734b1cf6dd7a712ff102e948f53a0f7087fb29be6bca8505d48b7aa73f1b39d7d84685b594c50df52aff1518eb8f8553d893172b52f95b3a42
|
data/CHANGELOG.markdown
CHANGED
data/lib/scout_apm.rb
CHANGED
@@ -63,6 +63,8 @@ require 'scout_apm/instruments/http_client'
|
|
63
63
|
require 'scout_apm/instruments/moped'
|
64
64
|
require 'scout_apm/instruments/mongoid'
|
65
65
|
require 'scout_apm/instruments/redis'
|
66
|
+
require 'scout_apm/instruments/influxdb'
|
67
|
+
require 'scout_apm/instruments/elasticsearch'
|
66
68
|
require 'scout_apm/instruments/delayed_job'
|
67
69
|
require 'scout_apm/instruments/active_record'
|
68
70
|
require 'scout_apm/instruments/action_controller_rails_2'
|
data/lib/scout_apm/agent.rb
CHANGED
@@ -254,6 +254,8 @@ module ScoutApm
|
|
254
254
|
install_instrument(ScoutApm::Instruments::NetHttp)
|
255
255
|
install_instrument(ScoutApm::Instruments::HttpClient)
|
256
256
|
install_instrument(ScoutApm::Instruments::Redis)
|
257
|
+
install_instrument(ScoutApm::Instruments::InfluxDB)
|
258
|
+
install_instrument(ScoutApm::Instruments::Elasticsearch)
|
257
259
|
|
258
260
|
if StackProf.respond_to?(:fake?) && StackProf.fake?
|
259
261
|
logger.info 'StackProf not found - add `gem "stackprof"` to your Gemfile to enable advanced code profiling (only for Ruby 2.1+)'
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module ScoutApm
|
2
|
+
module Instruments
|
3
|
+
class Elasticsearch
|
4
|
+
attr_reader :logger
|
5
|
+
|
6
|
+
def initalize(logger=ScoutApm::Agent.instance.logger)
|
7
|
+
@logger = logger
|
8
|
+
@installed = false
|
9
|
+
end
|
10
|
+
|
11
|
+
def installed?
|
12
|
+
@installed
|
13
|
+
end
|
14
|
+
|
15
|
+
def install
|
16
|
+
@installed = true
|
17
|
+
|
18
|
+
if defined?(::Elasticsearch) &&
|
19
|
+
defined?(::Elasticsearch::Transport) &&
|
20
|
+
defined?(::Elasticsearch::Transport::Client)
|
21
|
+
|
22
|
+
ScoutApm::Agent.instance.logger.info "Instrumenting Elasticsearch"
|
23
|
+
|
24
|
+
::Elasticsearch::Transport::Client.class_eval do
|
25
|
+
include ScoutApm::Tracer
|
26
|
+
|
27
|
+
def perform_request_with_scout_instruments(*args, &block)
|
28
|
+
name = _sanitize_name(args[1])
|
29
|
+
|
30
|
+
self.class.instrument("Elasticsearch", name, :ignore_children => true) do
|
31
|
+
perform_request_without_scout_instruments(*args, &block)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
alias_method :perform_request_without_scout_instruments, :perform_request
|
36
|
+
alias_method :perform_request, :perform_request_with_scout_instruments
|
37
|
+
|
38
|
+
def _sanitize_name(name)
|
39
|
+
name = name.split("/").last.gsub(/^_/, '')
|
40
|
+
allowed_names = ["bench",
|
41
|
+
"bulk",
|
42
|
+
"count",
|
43
|
+
"exists",
|
44
|
+
"explain",
|
45
|
+
"field_stats",
|
46
|
+
"health",
|
47
|
+
"mget",
|
48
|
+
"mlt",
|
49
|
+
"mpercolate",
|
50
|
+
"msearch",
|
51
|
+
"mtermvectors",
|
52
|
+
"percolate",
|
53
|
+
"query",
|
54
|
+
"scroll",
|
55
|
+
"search_shards",
|
56
|
+
"source",
|
57
|
+
"suggest",
|
58
|
+
"template",
|
59
|
+
"termvectors",
|
60
|
+
"update",
|
61
|
+
"search", ]
|
62
|
+
|
63
|
+
if allowed_names.include?(name)
|
64
|
+
name
|
65
|
+
else
|
66
|
+
"Unknown"
|
67
|
+
end
|
68
|
+
rescue
|
69
|
+
"Unknown"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module ScoutApm
|
2
|
+
module Instruments
|
3
|
+
class InfluxDB
|
4
|
+
attr_reader :logger
|
5
|
+
|
6
|
+
def initalize(logger=ScoutApm::Agent.instance.logger)
|
7
|
+
@logger = logger
|
8
|
+
@installed = false
|
9
|
+
end
|
10
|
+
|
11
|
+
def installed?
|
12
|
+
@installed
|
13
|
+
end
|
14
|
+
|
15
|
+
def install
|
16
|
+
@installed = true
|
17
|
+
|
18
|
+
if defined?(::InfluxDB)
|
19
|
+
ScoutApm::Agent.instance.logger.debug "Instrumenting InfluxDB"
|
20
|
+
|
21
|
+
::InfluxDB::Client.class_eval do
|
22
|
+
include ScoutApm::Tracer
|
23
|
+
end
|
24
|
+
|
25
|
+
::InfluxDB::HTTP.module_eval do
|
26
|
+
def do_request_with_scout_instruments(http, req, data = nil)
|
27
|
+
params = req.path[1..-1].split("?").last
|
28
|
+
cleaned_params = CGI.unescape(params).gsub(/(\s{2,})/,' ')
|
29
|
+
|
30
|
+
self.class.instrument("InfluxDB",
|
31
|
+
"#{req.path[1..-1].split("?").first.capitalize}",
|
32
|
+
:desc => cleaned_params,
|
33
|
+
:ignore_children => true) do
|
34
|
+
do_request_without_scout_instruments(http, req, data)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
alias_method :do_request_without_scout_instruments, :do_request
|
39
|
+
alias_method :do_request, :do_request_with_scout_instruments
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/scout_apm/tracer.rb
CHANGED
@@ -40,14 +40,20 @@ module ScoutApm
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def start_layer(layer)
|
43
|
+
if ignoring_children?
|
44
|
+
ScoutApm::Agent.instance.logger.info("Skipping layer because we're ignoring children: #{layer.inspect}")
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
43
48
|
start_request(layer) unless @root_layer
|
44
49
|
|
45
|
-
# ScoutApm::Agent.instance.logger.info("Starting Layer: #{layer.to_s}")
|
46
50
|
@layers[-1].add_child(layer) if @layers.any?
|
47
51
|
@layers.push(layer)
|
48
52
|
end
|
49
53
|
|
50
54
|
def stop_layer
|
55
|
+
return if ignoring_children?
|
56
|
+
|
51
57
|
layer = @layers.pop
|
52
58
|
layer.record_stop_time!
|
53
59
|
|
@@ -160,6 +166,9 @@ module ScoutApm
|
|
160
166
|
# internally
|
161
167
|
#
|
162
168
|
# When enabled, new layers won't be added to the current Request.
|
169
|
+
#
|
170
|
+
# Do not forget to turn if off when leaving a layer, it is the
|
171
|
+
# instrumentation's task to do that.
|
163
172
|
|
164
173
|
def ignore_children!
|
165
174
|
@ignoring_children = true
|
@@ -168,5 +177,9 @@ module ScoutApm
|
|
168
177
|
def acknowledge_children!
|
169
178
|
@ignoring_children = false
|
170
179
|
end
|
180
|
+
|
181
|
+
def ignoring_children?
|
182
|
+
@ignoring_children
|
183
|
+
end
|
171
184
|
end
|
172
185
|
end
|
data/lib/scout_apm/version.rb
CHANGED
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: 1.4.
|
4
|
+
version: 1.4.5
|
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: 2016-03-
|
12
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -92,7 +92,9 @@ files:
|
|
92
92
|
- lib/scout_apm/instruments/action_controller_rails_3_rails4.rb
|
93
93
|
- lib/scout_apm/instruments/active_record.rb
|
94
94
|
- lib/scout_apm/instruments/delayed_job.rb
|
95
|
+
- lib/scout_apm/instruments/elasticsearch.rb
|
95
96
|
- lib/scout_apm/instruments/http_client.rb
|
97
|
+
- lib/scout_apm/instruments/influxdb.rb
|
96
98
|
- lib/scout_apm/instruments/middleware_detailed.rb
|
97
99
|
- lib/scout_apm/instruments/middleware_summary.rb
|
98
100
|
- lib/scout_apm/instruments/mongoid.rb
|