From 1c5bab112071ec7f8811f812ea30bda901d03a96 Mon Sep 17 00:00:00 2001 From: Christian Aust Date: Wed, 20 Jun 2012 10:23:54 +0200 Subject: [PATCH] Improvements Track 404, forward DNT header if present --- lib/rakwik/tracker.rb | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/lib/rakwik/tracker.rb b/lib/rakwik/tracker.rb index f6e0a81..0f1605d 100644 --- a/lib/rakwik/tracker.rb +++ b/lib/rakwik/tracker.rb @@ -1,12 +1,13 @@ require 'em-http' -require 'pp' module Rakwik class Tracker include Rack::Response::Helpers - DEFAULT = {} + DEFAULT = { + :track_404 => true + } def initialize(app, options = {}) @app, @options = app, DEFAULT.merge(options) @@ -16,11 +17,15 @@ def initialize(app, options = {}) def call(env) @status, @headers, @body = @app.call(env) - track Rack::Request.new(env) if ok? + track Rack::Request.new(env) if track? [@status, @headers, @body] end private + + def track? + ok? || (not_found? && @options[:track_404] === true) + end def piwik_url @options[:piwik_url] @@ -33,23 +38,39 @@ def piwik_id def token_auth @options[:token_auth] end - - def track(request) + + def extract(request) header = { - 'User-Agent' => request.user_agent, - 'Accept-Language' => request.env["HTTP_ACCEPT_LANGUAGE"] + 'User-Agent' => request.user_agent } + header['Accept-Language'] = request.env["HTTP_ACCEPT_LANGUAGE"] unless request.env["HTTP_ACCEPT_LANGUAGE"].nil? + header['DNT'] = request.env["HTTP_DNT"] unless request.env["HTTP_DNT"].nil? data = { 'idsite' => piwik_id, 'token_auth' => token_auth, 'rec' => 1, 'url' => request.url, 'cip' => request.ip, + 'rand' => rand(1000000), 'apiv' => 1 } data['urlref'] = request.referer unless request.referer.nil? + + if not_found? && @options[:track_404] === true + data['action_name'] = "404/URL = #{data['url']}/FROM= #{data['urlref']}" + end + + [header, data] + end + + def track(request) + h, d = extract(request) EventMachine.schedule do - http = connection(piwik_url).get :head => header, :query => data + http = connection(piwik_url).get :head => h, :query => d + http.errback { + time = Time.now.strftime("%Y-%m-%d %H:%M:%S") + request.env['rack.errors'].puts "[#{time}] ERROR Rakwik::Tracker: #{http.error}" + } end end