Sha256: dea290ccf4210df8fe3c0beccbf6d92ccbd65b98eebe66f13d5b8754f813d84c

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 KB

Contents

module Twirl
  module Instrumentation
    class Subscriber
      # Public: Use this as the subscribed block.
      def self.call(name, start, ending, transaction_id, payload)
        new(name, start, ending, transaction_id, payload).update
      end

      # Private: Initializes a new event processing instance.
      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: Actually update all the metriks timers for the event.
      #
      # Returns nothing.
      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

      # Internal: Override in subclass.
      def update_timer(metric)
        raise NotImplementedError
      end

      # Internal: Override in subclass.
      def update_counter(metric, value = 1)
        raise NotImplementedError
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
twirl-0.2.0 lib/twirl/instrumentation/subscriber.rb
twirl-0.1.0 lib/twirl/instrumentation/subscriber.rb