Class: Sidekiq::Middleware::Server::Datadog

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

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Datadog

Configure and install datadog instrumentation. Example:

Sidekiq.configure_server do |config|
  config.server_middleware do |chain|
    chain.add Sidekiq::Middleware::Server::Datadog
  end
end

Options:

  • :hostname - the hostname used for instrumentation, defaults to system hostname, respects INSTRUMENTATION_HOSTNAME env variable

  • :metric_name - the metric name (prefix) to use, defaults to “sidekiq.job”

  • :tags - array of custom tags, these can be plain strings or lambda blocks accepting a rack env instance

  • :skip_tags - array of tag names that shouldn’t be emitted

  • :statsd_host - the statsD host, defaults to “localhost”, respects STATSD_HOST env variable

  • :statsd_port - the statsD port, defaults to 8125, respects STATSD_PORT env variable

  • :statsd - custom statsd instance



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/sidekiq/middleware/server/datadog.rb', line 27

def initialize(opts = {})
  statsd_host = opts[:statsd_host] || ENV['STATSD_HOST'] || 'localhost'
  statsd_port = (opts[:statsd_port] || ENV['STATSD_PORT'] || 8125).to_i

  @metric_name  = opts[:metric_name] || 'sidekiq.job'
  @statsd       = opts[:statsd] || ::Datadog::Statsd.new(statsd_host, statsd_port)
  @tag_builder  = Sidekiq::Datadog::TagBuilder.new(
    opts[:tags],
    opts[:skip_tags],
    opts[:hostname],
  )
end

Instance Method Details

#call(worker, job, queue) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/sidekiq/middleware/server/datadog.rb', line 40

def call(worker, job, queue, *)
  start = Time.now
  clock = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC, :millisecond)

  begin
    yield
    record(worker, job, queue, start, clock)
  rescue StandardError => e
    record(worker, job, queue, start, clock, e)
    raise
  end
end