Class: Sidekiq::Middleware::Server::InfluxDB

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq/middleware/server/influxdb.rb

Constant Summary collapse

MILLISECONDS_PER_SECOND =
1000.0

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ InfluxDB

Returns a new instance of InfluxDB.



10
11
12
13
14
15
16
17
18
19
# File 'lib/sidekiq/middleware/server/influxdb.rb', line 10

def initialize(options = {})
  @influxdb = options.fetch(:influxdb_client)
  @series = options.fetch(:series_name, 'sidekiq_jobs')
  @retention = options.fetch(:retention_policy, nil)
  @start_events = options.fetch(:start_events, true)
  @tags = options.fetch(:tags, {})
  @secret_agents = class_names(options.fetch(:except, []))
  @clock = options.fetch(:clock, -> { Time.now.to_f })
  @measurement_key = options.fetch(:measurement_key, :values)
end

Instance Method Details

#call(_worker, msg, _queue) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/sidekiq/middleware/server/influxdb.rb', line 21

def call(_worker, msg, _queue)
  if @secret_agents.include?(job_class_name(msg))
    yield
    return
  end

  started_at = @clock.call
  waited = started_at - created_at_in_seconds(msg)
  record(started_at, msg, { event: 'start' }, { waited: waited }) if @start_events

  error = nil
  begin
    yield
    tags = { event: 'finish' }
  rescue StandardError => e
    tags = { event: 'error', error: e.class.name }
    error = e
  end

  finished_at = @clock.call
  worked = finished_at - started_at
  record(finished_at, msg, tags, { waited: waited, worked: worked, total: waited + worked })

  raise error if error
end