app_profiler 0.4.0 → 0.6.0
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/lib/app_profiler/backend/vernier_backend.rb +17 -3
- data/lib/app_profiler/base_profile.rb +1 -1
- data/lib/app_profiler/railtie.rb +1 -0
- data/lib/app_profiler/request_parameters.rb +1 -1
- data/lib/app_profiler/vernier_profile.rb +2 -1
- data/lib/app_profiler/version.rb +1 -1
- data/lib/app_profiler.rb +20 -10
- metadata +46 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eded37ca4bd7b77dcf4bd68a1814eb0900ca1ba7e2cfdb0c5d2490d68f61ba7d
|
|
4
|
+
data.tar.gz: e69bf61f50c4d7baf3a8d9b748fb5e295d0901fb7d0d0903d3689e230e5526df
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '098504043e35bf17909c781047ba83eacdff0dffd7115e9f3910d5d3e3664ef58ee726ced428c6f5fb4750b06eb0193755d096f93d41692074e2eeb049e7f23a'
|
|
7
|
+
data.tar.gz: 7ea8cbe0cc7d6adfd7b386dae7386f7b08179f112d52e4280cce305e296bb70efe6baab5da983510832b4c511faa3ce9a789a377bd94a9816994c23122cec9ff
|
|
@@ -15,6 +15,10 @@ module AppProfiler
|
|
|
15
15
|
:retained,
|
|
16
16
|
].freeze
|
|
17
17
|
|
|
18
|
+
PRIVATE_METADATA = [
|
|
19
|
+
:started_at, # started_at uses a monotonic source, not realtime
|
|
20
|
+
].freeze
|
|
21
|
+
|
|
18
22
|
class << self
|
|
19
23
|
def name
|
|
20
24
|
:vernier
|
|
@@ -29,7 +33,9 @@ module AppProfiler
|
|
|
29
33
|
@mode = params.delete(:mode) || DEFAULTS[:mode]
|
|
30
34
|
raise ArgumentError unless AVAILABLE_MODES.include?(@mode)
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
if Gem.loaded_specs["vernier"].version < Gem::Version.new("1.7.0")
|
|
37
|
+
@metadata = params.delete(:metadata)
|
|
38
|
+
end
|
|
33
39
|
clear
|
|
34
40
|
|
|
35
41
|
@collector ||= ::Vernier::Collector.new(@mode, **params)
|
|
@@ -60,11 +66,19 @@ module AppProfiler
|
|
|
60
66
|
|
|
61
67
|
return unless vernier_profile
|
|
62
68
|
|
|
69
|
+
# Store all vernier metadata
|
|
70
|
+
meta = vernier_profile.meta.reject { |k, v| k == :user_metadata || v.nil? || PRIVATE_METADATA.include?(k) }
|
|
71
|
+
meta.merge!(@metadata) if @metadata
|
|
72
|
+
|
|
73
|
+
# Internal metadata takes precedence over user metadata, but store
|
|
74
|
+
# everything in user metadata
|
|
75
|
+
vernier_profile.meta[:user_metadata]&.merge!(meta)
|
|
76
|
+
|
|
63
77
|
# HACK: - "data" is private, but we want to avoid serializing to JSON then
|
|
64
78
|
# parsing back from JSON by just directly getting the hash
|
|
65
79
|
data = ::Vernier::Output::Firefox.new(vernier_profile).send(:data)
|
|
66
|
-
data[:meta][:mode] = @mode
|
|
67
|
-
data[:meta]
|
|
80
|
+
data[:meta][:mode] = @mode
|
|
81
|
+
data[:meta][:vernierUserMetadata] ||= meta # for compatibility with < 1.7.0
|
|
68
82
|
@mode = nil
|
|
69
83
|
@metadata = nil
|
|
70
84
|
|
|
@@ -23,7 +23,7 @@ module AppProfiler
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def from_vernier(data)
|
|
26
|
-
options = INTERNAL_METADATA_KEYS.map { |key| [key, data[:meta]&.delete(key)] }.to_h
|
|
26
|
+
options = INTERNAL_METADATA_KEYS.map { |key| [key, data[:meta]&.[](:vernierUserMetadata)&.delete(key)] }.to_h
|
|
27
27
|
|
|
28
28
|
VernierProfile.new(data, **options).tap do |profile|
|
|
29
29
|
raise ArgumentError, "invalid profile data" unless profile.valid?
|
data/lib/app_profiler/railtie.rb
CHANGED
|
@@ -34,6 +34,7 @@ module AppProfiler
|
|
|
34
34
|
)
|
|
35
35
|
AppProfiler.profile_header = app.config.app_profiler.profile_header || "X-Profile"
|
|
36
36
|
AppProfiler.profile_async_header = app.config.app_profiler.profile_async_header || "X-Profile-Async"
|
|
37
|
+
AppProfiler.profile_param = app.config.app_profiler.profile_param || "profile"
|
|
37
38
|
AppProfiler.profile_root = app.config.app_profiler.profile_root || Rails.root.join(
|
|
38
39
|
"tmp", "app_profiler"
|
|
39
40
|
)
|
|
@@ -14,6 +14,7 @@ module AppProfiler
|
|
|
14
14
|
|
|
15
15
|
def initialize(data, id: nil, context: nil)
|
|
16
16
|
data[:meta] ||= {}
|
|
17
|
+
data[:meta][:vernierUserMetadata] ||= {}
|
|
17
18
|
super(data, id: id, context: context)
|
|
18
19
|
end
|
|
19
20
|
|
|
@@ -22,7 +23,7 @@ module AppProfiler
|
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
def metadata
|
|
25
|
-
@data[:meta]
|
|
26
|
+
@data[:meta][:vernierUserMetadata]
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def format
|
data/lib/app_profiler/version.rb
CHANGED
data/lib/app_profiler.rb
CHANGED
|
@@ -41,15 +41,16 @@ module AppProfiler
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
autoload(:Middleware, "app_profiler/middleware")
|
|
44
|
-
autoload(:Parameters, "app_profiler/parameters")
|
|
45
|
-
autoload(:RequestParameters, "app_profiler/request_parameters")
|
|
46
44
|
autoload(:BaseProfile, "app_profiler/base_profile")
|
|
47
45
|
autoload :StackprofProfile, "app_profiler/stackprof_profile"
|
|
48
46
|
autoload :VernierProfile, "app_profiler/vernier_profile"
|
|
49
47
|
autoload(:Backend, "app_profiler/backend")
|
|
50
48
|
autoload(:Server, "app_profiler/server")
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
|
|
50
|
+
require "app_profiler/parameters"
|
|
51
|
+
require "app_profiler/request_parameters"
|
|
52
|
+
require "app_profiler/profile_id"
|
|
53
|
+
require "app_profiler/sampler"
|
|
53
54
|
|
|
54
55
|
mattr_accessor :logger, default: Logger.new($stdout)
|
|
55
56
|
mattr_accessor :root
|
|
@@ -59,6 +60,7 @@ module AppProfiler
|
|
|
59
60
|
mattr_accessor :autoredirect, default: false
|
|
60
61
|
mattr_reader :profile_header, default: "X-Profile"
|
|
61
62
|
mattr_accessor :profile_async_header, default: "X-Profile-Async"
|
|
63
|
+
mattr_accessor :profile_param, default: "profile"
|
|
62
64
|
mattr_accessor :context, default: nil
|
|
63
65
|
mattr_reader :profile_url_formatter, default: DefaultProfileFormatter
|
|
64
66
|
mattr_accessor :storage, default: Storage::FileStorage
|
|
@@ -90,9 +92,13 @@ module AppProfiler
|
|
|
90
92
|
end
|
|
91
93
|
profiler.run(*args, **kwargs, &block)
|
|
92
94
|
rescue BackendError => e
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
if ActiveSupport.respond_to?(:error_reporter)
|
|
96
|
+
ActiveSupport.error_reporter.report(e, context: { app_profiler: { backend: backend } })
|
|
97
|
+
else
|
|
98
|
+
logger.error(
|
|
99
|
+
"[AppProfiler.run] exception #{e} configuring backend #{backend}: #{e.message}",
|
|
100
|
+
)
|
|
101
|
+
end
|
|
96
102
|
yield
|
|
97
103
|
ensure
|
|
98
104
|
self.backend = original_backend if backend
|
|
@@ -159,9 +165,13 @@ module AppProfiler
|
|
|
159
165
|
|
|
160
166
|
@profile_sampler_enabled.is_a?(Proc) ? @profile_sampler_enabled.call : @profile_sampler_enabled
|
|
161
167
|
rescue => e
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
168
|
+
if ActiveSupport.respond_to?(:error_reporter)
|
|
169
|
+
ActiveSupport.error_reporter.report(e)
|
|
170
|
+
else
|
|
171
|
+
logger.error(
|
|
172
|
+
"[AppProfiler.profile_sampler_enabled] exception: #{e}, message: #{e.message}",
|
|
173
|
+
)
|
|
174
|
+
end
|
|
165
175
|
false
|
|
166
176
|
end
|
|
167
177
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: app_profiler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gannon McGibbon
|
|
@@ -12,7 +12,7 @@ authors:
|
|
|
12
12
|
- Scott Francis
|
|
13
13
|
bindir: bin
|
|
14
14
|
cert_chain: []
|
|
15
|
-
date:
|
|
15
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
16
16
|
dependencies:
|
|
17
17
|
- !ruby/object:Gem::Dependency
|
|
18
18
|
name: activesupport
|
|
@@ -28,6 +28,48 @@ dependencies:
|
|
|
28
28
|
- - ">="
|
|
29
29
|
- !ruby/object:Gem::Version
|
|
30
30
|
version: '5.2'
|
|
31
|
+
- !ruby/object:Gem::Dependency
|
|
32
|
+
name: base64
|
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
|
34
|
+
requirements:
|
|
35
|
+
- - ">="
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '0'
|
|
38
|
+
type: :runtime
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
requirements:
|
|
42
|
+
- - ">="
|
|
43
|
+
- !ruby/object:Gem::Version
|
|
44
|
+
version: '0'
|
|
45
|
+
- !ruby/object:Gem::Dependency
|
|
46
|
+
name: bigdecimal
|
|
47
|
+
requirement: !ruby/object:Gem::Requirement
|
|
48
|
+
requirements:
|
|
49
|
+
- - ">="
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: '0'
|
|
52
|
+
type: :runtime
|
|
53
|
+
prerelease: false
|
|
54
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
version: '0'
|
|
59
|
+
- !ruby/object:Gem::Dependency
|
|
60
|
+
name: mutex_m
|
|
61
|
+
requirement: !ruby/object:Gem::Requirement
|
|
62
|
+
requirements:
|
|
63
|
+
- - ">="
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '0'
|
|
66
|
+
type: :runtime
|
|
67
|
+
prerelease: false
|
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
69
|
+
requirements:
|
|
70
|
+
- - ">="
|
|
71
|
+
- !ruby/object:Gem::Version
|
|
72
|
+
version: '0'
|
|
31
73
|
- !ruby/object:Gem::Dependency
|
|
32
74
|
name: rack
|
|
33
75
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -194,14 +236,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
194
236
|
requirements:
|
|
195
237
|
- - ">="
|
|
196
238
|
- !ruby/object:Gem::Version
|
|
197
|
-
version:
|
|
239
|
+
version: 3.2.1
|
|
198
240
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
241
|
requirements:
|
|
200
242
|
- - ">="
|
|
201
243
|
- !ruby/object:Gem::Version
|
|
202
244
|
version: '0'
|
|
203
245
|
requirements: []
|
|
204
|
-
rubygems_version:
|
|
246
|
+
rubygems_version: 4.0.10
|
|
205
247
|
specification_version: 4
|
|
206
248
|
summary: Collect performance profiles for your Rails application.
|
|
207
249
|
test_files: []
|