lib/lens/trace.rb in lens-0.0.6 vs lib/lens/trace.rb in lens-0.0.7
- old
+ new
@@ -1,41 +1,71 @@
-require 'rails'
-
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(duration: event.duration)
+ @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)
- formatted_data = Lens::EventFormatter.new(event, @data).json_formatted
- log(formatted_data)
+ 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
+ private
def send(data)
- log(data)
- Lens.sender.send_to_lens(data)
+ Worker.instance.push(data)
end
+ end
- def log(data)
- Rails.logger.info "all [LENS] >>> #{data}" if verbose?
+ 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 verbose?
- true
+ def present?
+ current.present?
end
- end
- class << Trace
+ 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)