class Twirl::Instrumentation::Subscriber

Public Class Methods

call(name, start, ending, transaction_id, payload) click to toggle source

Public: Use this as the subscribed block.

# File lib/twirl/instrumentation/subscriber.rb, line 5
def self.call(name, start, ending, transaction_id, payload)
  new(name, start, ending, transaction_id, payload).update
end
new(name, start, ending, transaction_id, payload) click to toggle source

Private: Initializes a new event processing instance.

# File lib/twirl/instrumentation/subscriber.rb, line 10
def initialize(name, start, ending, transaction_id, payload)
  @name = name
  @start = start
  @ending = ending
  @payload = payload
  @duration = ending - start
  @transaction_id = transaction_id
end

Public Instance Methods

update() click to toggle source

Public: Actually update all the metriks timers for the event.

Returns nothing.

# File lib/twirl/instrumentation/subscriber.rb, line 22
def update
  op = @payload[:op]
  bytes = @payload[:bytes]
  queue_name = @payload[:queue_name]
  metric_type = @payload[:metric_type] || :timer

  return unless op

  send "update_#{metric_type}", "twirl.op_#{op}"

  if @payload[:retry]
    update_counter "twirl.retries_op_#{op}"
  end

  if bytes
    update_counter "twirl.bytes_op_#{op}"

    if queue_name
      update_counter "twirl.bytes_queue_#{queue_name}_op_#{op}"
    end
  end

  if queue_name
    update_timer "twirl.queue_#{queue_name}_op_#{op}"
  end
end
update_counter(metric, value = 1) click to toggle source

Internal: Override in subclass.

# File lib/twirl/instrumentation/subscriber.rb, line 55
def update_counter(metric, value = 1)
  raise NotImplementedError
end
update_timer(metric) click to toggle source

Internal: Override in subclass.

# File lib/twirl/instrumentation/subscriber.rb, line 50
def update_timer(metric)
  raise NotImplementedError
end