Class: CloseYourIt::Sidekiq::JobMetricsMiddleware

Inherits:
Object
  • Object
show all
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

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