lib/staccato/rack.rb in staccato-rack-0.2.0 vs lib/staccato/rack.rb in staccato-rack-0.3.0
- old
+ new
@@ -3,69 +3,77 @@
require 'rack/request'
require 'ostruct'
module Staccato
module Rack
- # middleware
- class Middleware
- # page view wrapper
- class PageView < OpenStruct
- def initialize
- super
- @custom_metrics = []
- @custom_dimensions = []
- end
+ class PageView < OpenStruct
+ def initialize
+ super
+ @custom_metrics = []
+ @custom_dimensions = []
+ end
- def add_custom_metric(position, value)
- @custom_metrics << [position, value]
- end
+ def add_custom_metric(position, value)
+ @custom_metrics << [position, value]
+ end
- def add_custom_dimension(position, value)
- @custom_dimensions << [position, value]
- end
+ def add_custom_dimension(position, value)
+ @custom_dimensions << [position, value]
+ end
- def track!(default_tracker, tracking_id, request)
- page_view_params = marshal_dump
- if page_view_params[:client_id]
- tracker = Staccato.tracker(tracking_id, page_view_params[:client_id])
- else
- tracker = default_tracker
- end
- track_hit(tracker, page_view_params, request)
+ def track!(default_tracker, tracking_id, request)
+ page_view_params = marshal_dump
+ if page_view_params[:client_id]
+ tracker = Staccato.tracker(tracking_id, page_view_params[:client_id])
+ else
+ tracker = default_tracker
end
+ track_hit(tracker, page_view_params, request)
+ end
- private
+ private
- def track_hit(tracker, page_view_params, request)
- hit = Staccato::Pageview.new(tracker, page_view_params.merge(path: request.fullpath,
- hostname: request.host,
- user_agent: request.env['HTTP_USER_AGENT'],
- user_ip: request.ip))
- add_custom_to_hit(hit)
- hit.track!
- hit
- end
+ def track_hit(tracker, page_view_params, request)
+ hit = Staccato::Pageview.new(tracker, page_view_params.merge(path: request.fullpath,
+ hostname: request.host,
+ user_agent: request.env['HTTP_USER_AGENT'],
+ user_ip: request.ip))
+ add_custom_to_hit(hit)
+ r = hit.track!
+ logger.info "GA Tracking: #{hit.params.inspect} => #{r.response.code}"
+ hit
+ end
- def add_custom_to_hit(hit)
- @custom_metrics.each do |p, v|
- hit.add_custom_metric(p, v)
- end
- @custom_dimensions.each do |p, v|
- hit.add_custom_dimension(p, v)
- end
+ def add_custom_to_hit(hit)
+ @custom_metrics.each do |p, v|
+ hit.add_custom_metric(p, v)
end
+ @custom_dimensions.each do |p, v|
+ hit.add_custom_dimension(p, v)
+ end
end
+ end
+ class NullLogger
+ def info(*)
+ end
+ end
+
+ # middleware
+ class Middleware
+ # page view wrapper
+
attr_accessor :last_hit
- def initialize(app, tracking_id)
+ def initialize(app, tracking_id, options = {})
@app = app
@tracking_id = tracking_id
@default_tracker = Staccato.tracker(tracking_id)
+ @logger = options[:logger] || NullLogger.new
end
def call(env)
- env['staccato.pageview'] = PageView.new
+ env['staccato.pageview'] = PageView.new.tap{|p| p.logger = @logger }
@last_hit = nil
status, headers, body = @app.call(env)
if (200..299).include?(status.to_i)