class SystemMetrics::AsyncStore

Public Class Methods

new() click to toggle source
# File lib/system_metrics/async_store.rb, line 15
def initialize
  @queue = Queue.new
  @thread = Thread.new do
    set_void_instrumenter
    consume
  end
end

Public Instance Methods

save(events) click to toggle source
# File lib/system_metrics/async_store.rb, line 23
def save(events)
  @queue << events
end

Protected Instance Methods

consume() click to toggle source
# File lib/system_metrics/async_store.rb, line 36
def consume
  while events = @queue.pop
    root_event = SystemMetrics::NestedEvent.arrange(events, :presort => false)
    root_model = create_metric(root_event)
    root_model.update_attributes(:request_id => root_model.id)
    save_tree(root_event.children, root_model.id, root_model.id)
  end
end
create_metric(event, merge_params={}) click to toggle source
# File lib/system_metrics/async_store.rb, line 52
def create_metric(event, merge_params={})
  SystemMetrics::Metric.create(event.to_hash.merge(merge_params))
end
notifier() click to toggle source
# File lib/system_metrics/async_store.rb, line 32
def notifier
  ActiveSupport::Notifications.notifier
end
save_tree(events, request_id, parent_id) click to toggle source
# File lib/system_metrics/async_store.rb, line 45
def save_tree(events, request_id, parent_id)
  events.each do |event|
    model = create_metric(event, :request_id => request_id, :parent_id => parent_id)
    save_tree(event.children, request_id, model.id)
  end
end
set_void_instrumenter() click to toggle source
# File lib/system_metrics/async_store.rb, line 28
def set_void_instrumenter
  Thread.current[:"instrumentation_#{notifier.object_id}"] = VoidInstrumenter.new(notifier)
end