Module: QueryCounter
- Defined in:
- lib/query_counter/global.rb,
lib/query_counter.rb,
lib/query_counter/stat.rb,
lib/query_counter/collector.rb,
lib/query_counter/middleware.rb,
lib/query_counter/request_helper.rb
Overview
Purpose is to collect stats for the life time of the process
Defined Under Namespace
Modules: RequestHelper
Classes: Collector, Global, Middleware, Stat
Class Method Summary
collapse
Class Method Details
.around ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/query_counter.rb', line 34
def self.around
new_collector = ::QueryCounter::Collector.new
old_collector, Thread.current[:temporary_query_counter_collector] = Thread.current[:temporary_query_counter_collector], new_collector
yield
if old_collector
Thread.current[:temporary_query_counter_collector] = old_collector.add(new_collector)
else
Thread.current[:temporary_query_counter_collector] = nil
end
new_collector
end
|
.auto_instrument!(resource, kls, method_name) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/query_counter.rb', line 64
def self.auto_instrument!(resource, kls, method_name)
method_name = method_name.to_s
if method_name =~ /^(.*?)([!\?])$/
method_name = $1
punctuation = $2
else
punctuation = ''
end
original_method_name_with_alias = "#{method_name}_without_instrumentation#{punctuation}"
new_method_name = "#{method_name}_with_instrumentation#{punctuation}"
kls.class_eval <<STR
def #{new_method_name}(*args)
started_at = Time.now
result = #{original_method_name_with_alias}(*args)
::QueryCounter.record(#{resource.inspect}, (Time.now - started_at) * 1_000.0)
result
end
STR
kls.send(:alias_method, original_method_name_with_alias, method_name + punctuation)
kls.send(:alias_method, method_name + punctuation, new_method_name)
end
|
.auto_subscribe!(resource, event_name) ⇒ Object
57
58
59
60
61
62
|
# File 'lib/query_counter.rb', line 57
def self.auto_subscribe!(resource, event_name)
require 'active_support/notifications'
ActiveSupport::Notifications.subscribe(event_name) do |*args|
::QueryCounter.record_event(resource, ActiveSupport::Notifications::Event.new(*args))
end
end
|
.count(resource) ⇒ Object
49
50
51
|
# File 'lib/query_counter.rb', line 49
def self.count(resource)
current_collector.count(resource)
end
|
.current_collector ⇒ Object
12
13
14
|
# File 'lib/query_counter.rb', line 12
def self.current_collector
Thread.current[:query_counter_collector] ||= ::QueryCounter::Collector.new
end
|
.global_collector ⇒ Object
8
9
10
|
# File 'lib/query_counter.rb', line 8
def self.global_collector
::QueryCounter::Global.instance
end
|
.global_count(resource) ⇒ Object
53
54
55
|
# File 'lib/query_counter.rb', line 53
def self.global_count(resource)
current_collector.count(resource)
end
|
.record(resource, duration, by = 1) ⇒ Object
20
21
22
23
|
# File 'lib/query_counter.rb', line 20
def self.record(resource, duration, by=1)
global_collector.record(resource, duration, by)
current_collector.record(resource, duration, by)
end
|
.record_event(resource, event) ⇒ Object
25
26
27
28
|
# File 'lib/query_counter.rb', line 25
def self.record_event(resource, event)
temporary_collector && temporary_collector.record_event(resource, event)
record(resource, event.duration)
end
|
.reset ⇒ Object
30
31
32
|
# File 'lib/query_counter.rb', line 30
def self.reset
current_collector.reset
end
|
.temporary_collector ⇒ Object
16
17
18
|
# File 'lib/query_counter.rb', line 16
def self.temporary_collector
Thread.current[:temporary_query_counter_collector]
end
|