Class: MongoidTraffic::Logger
- Inherits:
-
Object
- Object
- MongoidTraffic::Logger
show all
- Defined in:
- lib/mongoid_traffic/logger.rb,
lib/mongoid_traffic/logger/bots.rb,
lib/mongoid_traffic/logger/geo_ip.rb,
lib/mongoid_traffic/logger/browser.rb,
lib/mongoid_traffic/logger/referer.rb
Defined Under Namespace
Classes: Bots, Browser, GeoIp, Referer
Constant Summary
collapse
- TIME_SCOPE_OPTIONS =
%i(year month week day).freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(log_cls, ip_address: nil, referer: nil, scope: nil, time_scope: %i(month day), unique_id: nil, user_agent: nil) ⇒ Logger
22
23
24
25
26
27
28
29
30
|
# File 'lib/mongoid_traffic/logger.rb', line 22
def initialize(log_cls, ip_address: nil, referer: nil, scope: nil, time_scope: %i(month day), unique_id: nil, user_agent: nil)
@log_cls = log_cls
@ip_address = ip_address
@referer_string = referer
@scope = scope
@time_scope = time_scope
@unique_id = unique_id
@user_agent_string = user_agent
end
|
Class Method Details
.log(log_cls, *args) ⇒ Object
16
17
18
|
# File 'lib/mongoid_traffic/logger.rb', line 16
def self.log(log_cls, *args)
new(log_cls, *args).log
end
|
Instance Method Details
#access_count_query ⇒ Object
56
57
58
|
# File 'lib/mongoid_traffic/logger.rb', line 56
def access_count_query
{ ac: 1 }
end
|
#browser_query ⇒ Object
60
61
62
63
64
|
# File 'lib/mongoid_traffic/logger.rb', line 60
def browser_query
return {} unless browser.present?
browser_path = [browser.platform, browser.name, browser.version].map { |s| escape_key(s) }.join('.')
{ "b.#{browser_path}" => 1 }
end
|
#country_query ⇒ Object
66
67
68
69
70
71
|
# File 'lib/mongoid_traffic/logger.rb', line 66
def country_query
return {} unless @ip_address.present?
return {} unless country_code2 = GeoIp.country_code2(@ip_address)
country_code_key = escape_key(country_code2)
{ "c.#{country_code_key}" => 1 }
end
|
#escape_key(key) ⇒ Object
87
88
89
|
# File 'lib/mongoid_traffic/logger.rb', line 87
def escape_key(key)
CGI.escape(key).gsub('.', '%2E')
end
|
#find_query(ts) ⇒ Object
93
94
95
96
97
|
# File 'lib/mongoid_traffic/logger.rb', line 93
def find_query(ts)
res = time_query(ts)
res = res.merge(scope_query) if @scope.present?
res
end
|
#log ⇒ Object
32
33
34
35
36
37
38
39
|
# File 'lib/mongoid_traffic/logger.rb', line 32
def log
return if Bots.is_a_bot?(@referer_string)
raise "Invalid time scope definition: #{@time_scope}" unless @time_scope.all? { |ts| TIME_SCOPE_OPTIONS.include?(ts) }
@time_scope.each do |ts|
@log_cls.collection.find(find_query(ts)).update_many(upsert_query, upsert: true)
end
end
|
#referer_query ⇒ Object
73
74
75
76
77
|
# File 'lib/mongoid_traffic/logger.rb', line 73
def referer_query
return {} unless referer.present?
referer_key = escape_key(referer.to_s)
{ "r.#{referer_key}" => 1 }
end
|
#scope_query ⇒ Object
99
100
101
|
# File 'lib/mongoid_traffic/logger.rb', line 99
def scope_query
{ s: @scope }
end
|
#time_query(ts) ⇒ Object
103
104
105
106
107
108
109
|
# File 'lib/mongoid_traffic/logger.rb', line 103
def time_query(ts)
date = Date.today
case ts
when :day then { df: date, dt: date }
else { df: date.send("at_beginning_of_#{ts}"), dt: date.send("at_end_of_#{ts}") }
end
end
|
#unique_id_query ⇒ Object
79
80
81
82
83
|
# File 'lib/mongoid_traffic/logger.rb', line 79
def unique_id_query
return {} unless @unique_id.present?
unique_id_key = escape_key(@unique_id.to_s)
{ "u.#{unique_id_key}" => 1 }
end
|
#upsert_query ⇒ Object
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/mongoid_traffic/logger.rb', line 43
def upsert_query
{
'$inc' => access_count_query
.merge(browser_query)
.merge(country_query)
.merge(referer_query)
.merge(unique_id_query),
'$set' => { uat: Time.now }
}
end
|