Skip to content

Commit

Permalink
controller additions
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasc committed Aug 14, 2014
1 parent 31c7f00 commit fa01774
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 10 deletions.
19 changes: 15 additions & 4 deletions lib/mongoid_traffic/controller_additions.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
module MongoidTraffic
module ControllerAdditions

module ClassMethods
def log_traffic
end
def log_traffic scope: nil
MongoidTraffic::Logger.log(
ip_address: request.remote_ip,
referer: request.headers['Referer'],
unique_id: request.session_options[:id], # FIXME: not sure about this
user_agent: request.headers['User-Agent']
)
end

def log_scoped_traffic scope: nil
log_traffic(scope: (scope || request.fullpath.split('?').first))
end

# ---------------------------------------------------------------------

def self.included base
base.extend ClassMethods
base.helper_method :log_traffic if base.respond_to? :log_traffic
base.helper_method :log_traffic
base.helper_method :log_scoped_traffic
end

end
Expand Down
15 changes: 12 additions & 3 deletions lib/mongoid_traffic/logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ def self.log *args

# ---------------------------------------------------------------------

def initialize ip_address: nil, referer: nil, scope: nil, time_scope: %i(month day), user_agent: nil
def initialize ip_address: nil, referer: nil, scope: nil, time_scope: %i(month day), unique_id: nil, user_agent: nil
@ip_address = ip_address
@referer_string = referer
@scope = scope
@time_scope = time_scope
@unique_id = unique_id
@user_agent_string = user_agent
end

Expand All @@ -45,7 +46,8 @@ def upsert_query
'$inc' => access_count_query.
merge(browser_query).
merge(country_query).
merge(referer_query),
merge(referer_query).
merge(unique_id_query),
'$set' => { uat: Time.now }
}
end
Expand All @@ -65,7 +67,8 @@ def browser_query
def country_query
return {} unless @ip_address.present?
return {} unless country_code2 = GeoIp.country_code2(@ip_address)
{ "c.#{country_code2}" => 1 }
country_code_key = escape_key(country_code2)
{ "c.#{country_code_key}" => 1 }
end

def referer_query
Expand All @@ -74,6 +77,12 @@ def referer_query
{ "r.#{referer_key}" => 1 }
end

def unique_id_query
return {} unless @unique_id.present?
unique_id_key = escape_key(@unique_id.to_s)
{ "u.#{unique_id_key}" => 1 }
end

# ---------------------------------------------------------------------

def escape_key key
Expand Down
22 changes: 21 additions & 1 deletion test/mongoid_traffic/controller_additions_test.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,26 @@
require 'test_helper'

require_relative '../../lib/mongoid_traffic/controller_additions'

module MongoidTraffic
describe 'ControllerAdditions' do

before(:each) do
@controller_class = Class.new
@controller = @controller_class.new
@controller_class.send(:include, MongoidTraffic::ControllerAdditions)
end

describe '.log_traffic' do
# it 'logs with :user_agent'
# it 'logs with :referer'
# it 'logs with :ip_address'
# it 'logs with :unique_id'
end

describe '.log_scoped_traffic' do
# it 'infers scope from request path'
end

end
end
end
8 changes: 6 additions & 2 deletions test/mongoid_traffic/logger_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ module MongoidTraffic
let(:user_agent_string) { 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/538.46 (KHTML, like Gecko) Version/8.0 Safari/538.46' }
let(:referer) { 'http://www.google.com' }
let(:ip_address) { '88.198.50.152' }
let(:unique_id) { 'ABC' }

describe 'ClassMethods' do
describe '.log' do
before do
Logger.log(user_agent: user_agent_string, referer: referer, ip_address: ip_address)
Logger.log(scope: scope, user_agent: user_agent_string, referer: referer, ip_address: ip_address)
Logger.log(user_agent: user_agent_string, referer: referer, ip_address: ip_address, unique_id: unique_id)
Logger.log(scope: scope, user_agent: user_agent_string, referer: referer, ip_address: ip_address, unique_id: unique_id)
end

it 'logs for month' do
Expand All @@ -42,6 +43,9 @@ module MongoidTraffic
it 'logs country' do
Log.first.countries.fetch('DE').must_equal 1
end
it 'logs unique_id' do
Log.first.unique_ids.fetch('ABC').must_equal 1
end
it 'logs updated_at' do
Log.first.updated_at.must_be :present?
end
Expand Down

0 comments on commit fa01774

Please sign in to comment.