Sha256: a111a9b6c69c407cc105a0108a4e26bd281f841cbc2e45b87a483f30451b9212

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

module Staccato
  module Subscribers
    class Timing
      def self.call(*args)
        new(args).track!
      end

      def initialize(args)
        @args = args
      end

      def total_runtime
        @total_runtime ||= event.duration
      end

      def db_runtime
        @db_runtime ||= payload[:db_runtime]
      end

      def view_runtime
        @view_runtime ||= payload[:view_runtime]
      end

      def times
        [
          {label: :total, time: total_runtime},
          {label: :db, time: db_runtime},
          {label: :view, time: view_runtime}
        ]
      end

      def track!
        params = context.merge(category: :rails, variable: :runtime)

        times.each do |time|
          tracker.timing(params.merge(time))
        end
      end

      private
      def event
        @event ||= ActiveSupport::Notifications::Event.new(*@args)
      end

      def payload
        @payload ||= event.payload
      end

      def tracker
        @tracker ||= payload['staccato.tracker']
      end

      def context
        @context ||= payload['staccato.context']
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
staccato-rails-0.1.0 lib/staccato/subscribers/timing.rb