Class: Sidekiq::ResourceTelemetryMiddleware
- Inherits:
-
Object
- Object
- Sidekiq::ResourceTelemetryMiddleware
- Includes:
- ServerMiddleware
- Defined in:
- lib/sidekiq/resource_telemetry_middleware.rb
Overview
Records duration and process-RSS movement for every completed Sidekiq job.
Slow jobs and jobs followed by a large RSS increase also emit a structured
Rails event so AppSignal logs can identify workloads that deserve profiling.
Constant Summary collapse
- DEFAULT_LONG_JOB_SECONDS =
60- DEFAULT_RSS_GROWTH_MB =
128
Instance Method Summary collapse
-
#call(worker, job, queue) { ... } ⇒ Object
The wrapped worker's result.
-
#initialize(options = {}) ⇒ ResourceTelemetryMiddleware
constructor
A new instance of ResourceTelemetryMiddleware.
Constructor Details
#initialize(options = {}) ⇒ ResourceTelemetryMiddleware
Returns a new instance of ResourceTelemetryMiddleware.
20 21 22 23 24 |
# File 'lib/sidekiq/resource_telemetry_middleware.rb', line 20 def initialize( = {}) @role = .fetch(:role, ENV.fetch('SIDEKIQ_ROLE', 'sidekiq')).to_s @long_job_seconds = Float(.fetch(:long_job_seconds, DEFAULT_LONG_JOB_SECONDS)) @rss_growth_mb = Float(.fetch(:rss_growth_mb, DEFAULT_RSS_GROWTH_MB)) end |
Instance Method Details
#call(worker, job, queue) { ... } ⇒ Object
Returns the wrapped worker's result.
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/sidekiq/resource_telemetry_middleware.rb', line 31 def call(worker, job, queue) started_at = safely_measure { monotonic_time } rss_before = safely_measure { current_rss_mb } completed = false result = yield completed = true result ensure safely_record(worker, job, queue, started_at, rss_before, completed:) end |