Module: AppProfiler
- Includes:
- ActiveSupport::Deprecation::DeprecatedConstantAccessor
- Defined in:
- lib/app_profiler/server.rb,
lib/app_profiler.rb,
lib/app_profiler/backend.rb,
lib/app_profiler/profile.rb,
lib/app_profiler/railtie.rb,
lib/app_profiler/sampler.rb,
lib/app_profiler/version.rb,
lib/app_profiler/middleware.rb,
lib/app_profiler/parameters.rb,
lib/app_profiler/yarn/command.rb,
lib/app_profiler/sampler/config.rb,
lib/app_profiler/profile/vernier.rb,
lib/app_profiler/profile/stackprof.rb,
lib/app_profiler/request_parameters.rb,
lib/app_profiler/viewer/base_viewer.rb,
lib/app_profiler/backend/base_backend.rb,
lib/app_profiler/storage/base_storage.rb,
lib/app_profiler/storage/file_storage.rb,
lib/app_profiler/yarn/with_speedscope.rb,
lib/app_profiler/middleware/base_action.rb,
lib/app_profiler/middleware/view_action.rb,
lib/app_profiler/sampler/vernier_config.rb,
lib/app_profiler/backend/vernier_backend.rb,
lib/app_profiler/middleware/upload_action.rb,
lib/app_profiler/sampler/stackprof_config.rb,
lib/app_profiler/viewer/speedscope_viewer.rb,
lib/app_profiler/backend/stackprof_backend.rb,
lib/app_profiler/storage/google_cloud_storage.rb,
lib/app_profiler/viewer/speedscope_remote_viewer.rb,
lib/app_profiler/viewer/speedscope_remote_viewer/middleware.rb,
lib/app_profiler/viewer/speedscope_remote_viewer/base_middleware.rb
Overview
This module provides a means to start a golang-inspired profile server it is implemented using stdlib and Rack to avoid additional dependencies
Defined Under Namespace
Modules: Backend, Sampler, Server, Storage, Viewer, Yarn
Classes: BackendError, BaseProfile, ConfigurationError, Middleware, Parameters, Railtie, RequestParameters, StackprofProfile, VernierProfile
Constant Summary
collapse
- DefaultProfileFormatter =
proc do |upload|
"#{AppProfiler.speedscope_host}#profileURL=#{upload.url}"
end
- DefaultProfilePrefix =
proc do
Time.zone.now.strftime("%Y%m%d-%H%M%S")
end
- VERSION =
"0.2.3"
Class Method Summary
collapse
Class Method Details
.after_process_queue=(handler) ⇒ Object
173
174
175
176
177
178
179
|
# File 'lib/app_profiler.rb', line 173
def after_process_queue=(handler)
if handler && (!handler.is_a?(Proc) || (handler.lambda? && handler.arity != 2))
raise ArgumentError, "after_process_queue must be a proc or a lambda that accepts two arguments"
end
@@after_process_queue = handler end
|
.backend ⇒ Object
130
131
132
133
|
# File 'lib/app_profiler.rb', line 130
def backend
@profiler_backend ||= Backend::StackprofBackend
@profiler_backend.name
end
|
.backend=(new_backend) ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/app_profiler.rb', line 103
def backend=(new_backend)
return if new_backend == backend
new_profiler_backend = backend_for(new_backend)
if running?
raise BackendError,
"cannot change backend to #{new_backend} while #{backend} backend is running"
end
return if @profiler_backend == new_profiler_backend
clear
@profiler_backend = new_profiler_backend
end
|
.backend_for(backend_name) ⇒ Object
149
150
151
|
# File 'lib/app_profiler.rb', line 149
def
@@profile_data_header ||= .dup << "-Data" end
|
.profile_enqueue_failure=(handler) ⇒ Object
165
166
167
168
169
170
171
|
# File 'lib/app_profiler.rb', line 165
def profile_enqueue_failure=(handler)
if handler && (!handler.is_a?(Proc) || (handler.lambda? && handler.arity != 1))
raise ArgumentError, "profile_enqueue_failure must be a proc or a lambda that accepts one argument"
end
@@profile_enqueue_failure = handler end
|
.profile_enqueue_success=(handler) ⇒ Object
157
158
159
160
161
162
163
|
# File 'lib/app_profiler.rb', line 157
def profile_enqueue_success=(handler)
if handler && (!handler.is_a?(Proc) || (handler.lambda? && handler.arity != 0))
raise ArgumentError, "profile_enqueue_success must be proc or a lambda that accepts no argument"
end
@@profile_enqueue_success = handler end
|
139
140
141
142
143
|
# File 'lib/app_profiler.rb', line 139
def ()
@@profile_header = @@request_profile_header = nil @@profile_data_header = nil end
|
.profile_url(upload) ⇒ Object
181
182
183
184
185
|
# File 'lib/app_profiler.rb', line 181
def profile_url(upload)
return unless AppProfiler.profile_url_formatter
AppProfiler.profile_url_formatter.call(upload)
end
|
153
154
155
|
# File 'lib/app_profiler.rb', line 153
def profile_url_formatter=(block)
@@profile_url_formatter = block end
|
.profiler ⇒ Object
98
99
100
101
|
# File 'lib/app_profiler.rb', line 98
def profiler
backend
@backend ||= @profiler_backend.new
end
|
145
146
147
|
# File 'lib/app_profiler.rb', line 145
def
@@request_profile_header ||= .upcase.tr("-", "_").prepend("HTTP_") end
|
.run(*args, backend: nil, **kwargs, &block) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/app_profiler.rb', line 70
def run(*args, backend: nil, **kwargs, &block)
orig_backend = self.backend
begin
self.backend = backend if backend
profiler.run(*args, **kwargs, &block)
rescue BackendError => e
logger.error(
"[AppProfiler.run] exception #{e} configuring backend #{backend}: #{e.message}",
)
yield
end
ensure
AppProfiler.backend = orig_backend
end
|
.running? ⇒ Boolean
94
95
96
|
# File 'lib/app_profiler.rb', line 94
def running?
@backend&.running?
end
|
.start(*args) ⇒ Object
85
86
87
|
# File 'lib/app_profiler.rb', line 85
def start(*args)
profiler.start(*args)
end
|
.stop ⇒ Object
89
90
91
92
|
# File 'lib/app_profiler.rb', line 89
def stop
profiler.stop
profiler.results
end
|
.vernier_supported? ⇒ Boolean