Sha256: 98d5c97bceabf0babf334f0ff5c84beb7129d439cc540c33db69b6872b3a2edf

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

module Lens
  class Trace
    def initialize(id)
      @id = id
      @data = []

      @gc_statistics = Lens::GC.new
      @gc_statistics.enable

      @allocations_data = Lens::AllocationsData.new
      @allocations_data.enable
    end

    def add(event)
      @data.push event.payload.merge(
        etype: event.name,
        eduration: event.duration,
        estart: event.time.to_f,
        efinish: event.end.to_f
      )
    end

    def complete(event)
      formatter = Lens::EventFormatter.new(
        event,
        @data,
        @gc_statistics.total_time,
        @allocations_data
      )
      formatted_data = formatter.json_formatted
      send(formatted_data)
      Thread.current[:__lens_trace] = nil
    end

    private

    def send(data)
      Worker.instance.push(data)
    end
  end

  class << Trace
    def process(event)
      create(event.transaction_id) if first_event?(event)

      if Trace.present?
        current.add(event)
        current.complete(event) if last_event?(event)
      end
    end

    def present?
      current.present?
    end

    private

    def first_event?(event)
      event.name == 'start_processing.action_controller'
    end

    def last_event?(event)
      event.name == 'process_action.action_controller' &&
        event.payload[:controller] &&
        event.payload[:action]
    end

    def current
      Thread.current[:__lens_trace]
    end

    def create(id)
      Thread.current[:__lens_trace] = new(id)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lens-0.0.8.2 lib/lens/trace.rb
lens-0.0.8 lib/lens/trace.rb
lens-0.0.7 lib/lens/trace.rb