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