scout_apm 2.0.0.pre7 → 2.0.0.pre8
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 +9 -0
- data/lib/scout_apm/app_server_load.rb +2 -1
- data/lib/scout_apm/config.rb +5 -5
- data/lib/scout_apm/deploy_integrations/capistrano_3.rb +7 -1
- data/lib/scout_apm/environment.rb +4 -0
- data/lib/scout_apm/framework_integrations/rails_2.rb +14 -12
- data/lib/scout_apm/framework_integrations/rails_3_or_4.rb +4 -2
- data/lib/scout_apm/framework_integrations/ruby.rb +4 -0
- data/lib/scout_apm/framework_integrations/sinatra.rb +4 -0
- data/lib/scout_apm/instruments/mongoid.rb +76 -4
- data/lib/scout_apm/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdef63b6e4340550876655a7d9d8544e6667730d
|
4
|
+
data.tar.gz: af94bc60dd3364790210017f5615fa39b14e63ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b49b704dd2d10cc5ecc896e640f527cc0c4f740c3905ad786c4a651bf4b561f3d51585f73f9338afaaa61f05ecc979e0c8e6f375ad41c2989144bdb804ca5c5b
|
7
|
+
data.tar.gz: 9665d168ed2418c293c7f3fc73a0ab36919f34f5984dd38a756db30b1aa9f5383d01242c254a46603d15fabda5058b9e342ed097cc004312273d0f22f171c375
|
data/CHANGELOG.markdown
CHANGED
@@ -10,6 +10,15 @@
|
|
10
10
|
* Remove unused & old references to Stackprof
|
11
11
|
* Fixing exception on load if no config file is provided
|
12
12
|
|
13
|
+
# 1.6.6
|
14
|
+
|
15
|
+
* Bugfix related to DB detection
|
16
|
+
|
17
|
+
# 1.6.5
|
18
|
+
|
19
|
+
* Add Mongoid 5.x support
|
20
|
+
* Fix autodetection of mysql databases
|
21
|
+
|
13
22
|
# 1.6.4
|
14
23
|
|
15
24
|
* Add Grape instrumentation
|
@@ -34,7 +34,8 @@ module ScoutApm
|
|
34
34
|
:app_server => ScoutApm::Environment.instance.app_server,
|
35
35
|
:ruby_version => RUBY_VERSION,
|
36
36
|
:hostname => ScoutApm::Environment.instance.hostname,
|
37
|
-
:database_engine => ScoutApm::Environment.instance.database_engine,
|
37
|
+
:database_engine => ScoutApm::Environment.instance.database_engine, # Detected
|
38
|
+
:database_adapter => ScoutApm::Environment.instance.raw_database_adapter, # Raw
|
38
39
|
:application_name => ScoutApm::Environment.instance.application_name,
|
39
40
|
:libraries => ScoutApm::Utils::InstalledGems.new.run,
|
40
41
|
:paas => ScoutApm::Environment.instance.platform_integration.name
|
data/lib/scout_apm/config.rb
CHANGED
@@ -40,10 +40,10 @@ module ScoutApm
|
|
40
40
|
# Load up a config instance, attempting to load a yaml file. Allows a
|
41
41
|
# definite location if requested, or will attempt to load the default
|
42
42
|
# configuration file: APP_ROOT/config/scout_apm.yml
|
43
|
-
def self.with_file(file_path=nil)
|
43
|
+
def self.with_file(file_path=nil, config={})
|
44
44
|
overlays = [
|
45
45
|
ConfigEnvironment.new,
|
46
|
-
ConfigFile.new(file_path),
|
46
|
+
ConfigFile.new(file_path, config[:file]),
|
47
47
|
ConfigDefaults.new,
|
48
48
|
]
|
49
49
|
new(overlays)
|
@@ -104,7 +104,8 @@ module ScoutApm
|
|
104
104
|
# is not found, inaccessbile, or unparsable, log a message to that effect,
|
105
105
|
# and move on.
|
106
106
|
class ConfigFile
|
107
|
-
def initialize(file_path=nil)
|
107
|
+
def initialize(file_path=nil, config={})
|
108
|
+
@config = config || {}
|
108
109
|
@resolved_file_path = file_path || determine_file_path
|
109
110
|
load_file(@resolved_file_path)
|
110
111
|
end
|
@@ -162,9 +163,8 @@ module ScoutApm
|
|
162
163
|
end
|
163
164
|
|
164
165
|
def app_environment
|
165
|
-
ScoutApm::Environment.instance.env
|
166
|
+
@config[:environment] || ScoutApm::Environment.instance.env
|
166
167
|
end
|
167
|
-
|
168
168
|
def logger
|
169
169
|
if ScoutApm::Agent.instance.logger
|
170
170
|
return ScoutApm::Agent.instance.logger
|
@@ -58,7 +58,13 @@ module ScoutApm
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def reporter
|
61
|
-
|
61
|
+
config = if env == ''
|
62
|
+
ScoutApm::Agent.instance.config
|
63
|
+
else
|
64
|
+
ScoutApm::Config.with_file(nil, {:file => { :environment => env }}) # instantiate our own config, with an overridden environment for the deploy-to app name instead of deploy-from app name)
|
65
|
+
end
|
66
|
+
|
67
|
+
@reporter ||= ScoutApm::Reporter.new(:deploy_hook, config, @logger)
|
62
68
|
end
|
63
69
|
|
64
70
|
def deploy_data
|
@@ -37,18 +37,14 @@ module ScoutApm
|
|
37
37
|
default = :mysql
|
38
38
|
|
39
39
|
if defined?(ActiveRecord::Base)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
else default
|
49
|
-
end
|
50
|
-
else
|
51
|
-
default
|
40
|
+
case raw_database_adapter
|
41
|
+
when "postgres" then :postgres
|
42
|
+
when "postgresql" then :postgres
|
43
|
+
when "postgis" then :postgres
|
44
|
+
when "sqlite3" then :sqlite
|
45
|
+
when "mysql" then :mysql
|
46
|
+
when "mysql2" then :mysql
|
47
|
+
else default
|
52
48
|
end
|
53
49
|
else
|
54
50
|
default
|
@@ -56,6 +52,12 @@ module ScoutApm
|
|
56
52
|
rescue
|
57
53
|
default
|
58
54
|
end
|
55
|
+
|
56
|
+
def raw_database_adapter
|
57
|
+
ActiveRecord::Base.configurations[env]["adapter"]
|
58
|
+
rescue
|
59
|
+
nil
|
60
|
+
end
|
59
61
|
end
|
60
62
|
end
|
61
63
|
end
|
@@ -37,14 +37,16 @@ module ScoutApm
|
|
37
37
|
default = :postgres
|
38
38
|
|
39
39
|
@database_engine = if defined?(ActiveRecord::Base)
|
40
|
-
adapter =
|
40
|
+
adapter = raw_database_adapter # can be nil
|
41
41
|
|
42
42
|
case adapter.to_s
|
43
43
|
when "postgres" then :postgres
|
44
44
|
when "postgresql" then :postgres
|
45
45
|
when "postgis" then :postgres
|
46
46
|
when "sqlite3" then :sqlite
|
47
|
+
when "sqlite" then :sqlite
|
47
48
|
when "mysql" then :mysql
|
49
|
+
when "mysql2" then :mysql
|
48
50
|
else default
|
49
51
|
end
|
50
52
|
else
|
@@ -53,7 +55,7 @@ module ScoutApm
|
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
56
|
-
def
|
58
|
+
def raw_database_adapter
|
57
59
|
adapter = if ActiveRecord::Base.respond_to?(:connection_config)
|
58
60
|
ActiveRecord::Base.connection_config[:adapter].to_s
|
59
61
|
else
|
@@ -19,14 +19,86 @@ module ScoutApm
|
|
19
19
|
if defined?(::Mongoid) and !defined?(::Moped)
|
20
20
|
ScoutApm::Agent.instance.logger.info "Instrumenting Mongoid"
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
### OLD (2.x) mongoids
|
23
|
+
if defined?(::Mongoid::Collection)
|
24
|
+
::Mongoid::Collection.class_eval do
|
25
|
+
include ScoutApm::Tracer
|
26
|
+
(::Mongoid::Collections::Operations::ALL - [:<<, :[]]).each do |method|
|
27
|
+
instrument_method method, :type => "MongoDB", :name => '#{@klass}/' + method.to_s
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
### See moped instrument for Moped driven deploys
|
33
|
+
|
34
|
+
### 5.x Mongoid
|
35
|
+
if mongoid_v5? && defined?(::Mongoid::Contextual::Mongo)
|
36
|
+
# All the public methods from Mongoid::Contextual::Mongo.
|
37
|
+
# TODO: Geo and MapReduce support (?). They are in other Contextual::* classes
|
38
|
+
methods = [
|
39
|
+
:count, :delete, :destroy, :distinct, :each,
|
40
|
+
:explain, :find_first, :find_one_and_delete, :find_one_and_replace,
|
41
|
+
:find_one_and_update, :first, :geo_near, :initialize, :last,
|
42
|
+
:length, :limit, :map, :map_reduce, :pluck,
|
43
|
+
:skip, :sort, :update, :update_all,
|
44
|
+
]
|
45
|
+
# :exists?,
|
46
|
+
|
47
|
+
methods.each do |method|
|
48
|
+
if ::Mongoid::Contextual::Mongo.method_defined?(method)
|
49
|
+
with_scout_instruments = %Q|
|
50
|
+
def #{method}_with_scout_instruments(*args)
|
51
|
+
|
52
|
+
req = ScoutApm::RequestManager.lookup
|
53
|
+
*db, collection = view.collection.namespace.split(".")
|
54
|
+
|
55
|
+
name = collection + "/#{method}"
|
56
|
+
filter = ScoutApm::Instruments::Mongoid.anonymize_filter(view.filter)
|
57
|
+
|
58
|
+
layer = ScoutApm::Layer.new("MongoDB", name)
|
59
|
+
layer.desc = filter.inspect
|
60
|
+
|
61
|
+
req.start_layer( layer )
|
62
|
+
begin
|
63
|
+
#{method}_without_scout_instruments
|
64
|
+
ensure
|
65
|
+
req.stop_layer
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
alias_method :#{method}_without_scout_instruments, :#{method}
|
70
|
+
alias_method :#{method}, :#{method}_with_scout_instruments
|
71
|
+
|
|
72
|
+
|
73
|
+
::Mongoid::Contextual::Mongo.class_eval(with_scout_instruments)
|
74
|
+
end
|
26
75
|
end
|
27
76
|
end
|
28
77
|
end
|
29
78
|
end
|
79
|
+
|
80
|
+
def mongoid_v5?
|
81
|
+
if defined?(::Mongoid::VERSION)
|
82
|
+
::Mongoid::VERSION =~ /\A5/
|
83
|
+
else
|
84
|
+
false
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
# Example of what a filter looks like: => {"founded"=>{"$gte"=>"1980-1-1"}, "name"=>{"$in"=>["Tool", "Deftones", "Melvins"]}}
|
90
|
+
# Approach: find every leaf-node, clear it. inspect the whole thing when done.
|
91
|
+
def self.anonymize_filter(filter)
|
92
|
+
Hash[
|
93
|
+
filter.map do |k,v|
|
94
|
+
if v.is_a? Hash
|
95
|
+
[k, anonymize_filter(v)]
|
96
|
+
else
|
97
|
+
[k, "?"]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
]
|
101
|
+
end
|
30
102
|
end
|
31
103
|
end
|
32
104
|
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: 2.0.0.
|
4
|
+
version: 2.0.0.pre8
|
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-07-
|
12
|
+
date: 2016-07-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rusage
|