Class: CloseYourIt::Sidekiq::JobMetricsMiddleware
- Inherits:
-
Object
- Object
- CloseYourIt::Sidekiq::JobMetricsMiddleware
- Defined in:
- lib/closeyourit/sidekiq/job_metrics_middleware.rb
Overview
Server middleware Sidekiq (registrato dal railtie solo se Sidekiq è presente) che misura la durata
di esecuzione e l'attesa in coda del job, poi delega a Subscribers::JobPerformance l'emissione
delle metriche oltre soglia. Non altera il job: cronometra attorno allo yield e ri-solleva
qualunque errore invariato (la cattura degli errori è dell'ErrorHandler). La misurazione avviene
nell'ensure, così è presa anche per i job che sollevano; la telemetria è isolata (un errore nel
nostro codice non disturba mai il job ospite). No-op effettivo se monitor_jobs è OFF (la
decisione vive in #record).
Instance Method Summary collapse
- #call(_worker, job, queue) ⇒ Object
-
#initialize(subscriber = nil) ⇒ JobMetricsMiddleware
constructor
A new instance of JobMetricsMiddleware.
Constructor Details
#initialize(subscriber = nil) ⇒ JobMetricsMiddleware
Returns a new instance of JobMetricsMiddleware.
15 16 17 |
# File 'lib/closeyourit/sidekiq/job_metrics_middleware.rb', line 15 def initialize(subscriber = nil) @subscriber = subscriber end |
Instance Method Details
#call(_worker, job, queue) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/closeyourit/sidekiq/job_metrics_middleware.rb', line 19 def call(_worker, job, queue) started = Process.clock_gettime(Process::CLOCK_MONOTONIC) # L'attesa in coda si conosce all'INIZIO (now - enqueued_at); Sidekiq mette enqueued_at come # epoch in secondi. Calcolata prima dello yield per non includere la durata del job. latency = Subscribers::JobPerformance.latency_ms(job["enqueued_at"], now: Time.now.utc) yield ensure emit(job, queue, started, latency) end |