fix impression page counter
This commit is contained in:
parent
c763817ebf
commit
ceac2b842c
|
@ -7,4 +7,10 @@ class OrbitFrontendComponentController< ApplicationController
|
||||||
@app_title = request.fullpath.split('/')[2]
|
@app_title = request.fullpath.split('/')[2]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delay_impressionist(item)
|
||||||
|
user_id = current_user.nil? ? nil : current_user.id
|
||||||
|
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
|
@ -1,5 +1,5 @@
|
||||||
module ApplicationHelper
|
module ApplicationHelper
|
||||||
|
include OrbitApp::Module::VisitorCounter
|
||||||
FLASH_NOTICE_KEYS = [:error, :notice, :warning]
|
FLASH_NOTICE_KEYS = [:error, :notice, :warning]
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,8 +7,9 @@ module ApplicationHelper
|
||||||
request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?')
|
request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?')
|
||||||
end
|
end
|
||||||
|
|
||||||
def delayed_impressionist(object)
|
def delayed_impressionist(item)
|
||||||
# Resque.enqueue_at(1.minute.from_now,DelayedImpressionist,object)
|
user_id = current_user.nil? ? nil : current_user.id
|
||||||
|
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_user_role_enable(attribute_fields)
|
def check_user_role_enable(attribute_fields)
|
||||||
|
@ -242,25 +243,27 @@ module ApplicationHelper
|
||||||
"#{t(:view_count)}: #{object.view_count}"
|
"#{t(:view_count)}: #{object.view_count}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def display_visitors(options={})
|
# def display_visitors(options={})
|
||||||
Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
|
# # Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
|
||||||
end
|
# impressions = Impression.where(options).and(:referrer.ne => nil)
|
||||||
|
# impressions.map{|i| i[:session_hash]}.uniq.count
|
||||||
|
# end
|
||||||
|
|
||||||
def display_visitors_today
|
# def display_visitors_today
|
||||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
|
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
|
||||||
end
|
# end
|
||||||
|
|
||||||
def display_visitors_this_week
|
# def display_visitors_this_week
|
||||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
|
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
|
||||||
end
|
# end
|
||||||
|
|
||||||
def display_visitors_this_month
|
# def display_visitors_this_month
|
||||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
|
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
|
||||||
end
|
# end
|
||||||
|
|
||||||
def display_visitors_this_year
|
# def display_visitors_this_year
|
||||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
|
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
|
||||||
end
|
# end
|
||||||
|
|
||||||
def display_date_time(object)
|
def display_date_time(object)
|
||||||
object.strftime("%Y-%m-%d %H:%M")
|
object.strftime("%Y-%m-%d %H:%M")
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
class DashboardCounter < Resque::Plugins::RestrictionJob
|
class DashboardCounter < Resque::Plugins::RestrictionJob
|
||||||
|
include OrbitApp::Module::VisitorCounter
|
||||||
|
|
||||||
@queue = :high
|
@queue = :high
|
||||||
|
|
||||||
def self.perform(*args)
|
def self.perform(*args)
|
||||||
|
@ -9,28 +11,9 @@ class DashboardCounter < Resque::Plugins::RestrictionJob
|
||||||
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year
|
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year
|
||||||
site.save
|
site.save
|
||||||
OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}"
|
OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}"
|
||||||
end
|
|
||||||
|
|
||||||
|
#Notice this is mainly used at user dashbroad. however the code there is currentlly using realtime evaluation.
|
||||||
def display_visitors(options={})
|
#and the site model will need a field call dashboard_counter to complete this job.
|
||||||
impressions = Impression.where(options).and(:referrer.ne => nil)
|
|
||||||
impressions.map{|i| i[:session_hash]}.uniq.count
|
|
||||||
end
|
|
||||||
|
|
||||||
def display_visitors_today
|
|
||||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
|
|
||||||
end
|
|
||||||
|
|
||||||
def display_visitors_this_week
|
|
||||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
|
|
||||||
end
|
|
||||||
|
|
||||||
def display_visitors_this_month
|
|
||||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
|
|
||||||
end
|
|
||||||
|
|
||||||
def display_visitors_this_year
|
|
||||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,45 @@
|
||||||
class DelayedImpressionist
|
class DelayedImpressionist
|
||||||
@queue = :low
|
def self.before_filter(*args)
|
||||||
def self.perform(object)
|
return
|
||||||
impressionist(object)
|
end
|
||||||
true
|
|
||||||
end
|
include ImpressionistController::InstanceMethods
|
||||||
|
@queue = :low
|
||||||
|
|
||||||
|
def initialize(request,controller_name,action_name,user,obj)
|
||||||
|
@controller_name = controller_name
|
||||||
|
@action_name = action_name
|
||||||
|
@user = User.find user unless user.nil?
|
||||||
|
@request = request
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.perform(*args)
|
||||||
|
arg = args[0]
|
||||||
|
@request= DelayImpressionistRequest.new
|
||||||
|
@request.restore(arg["request"])
|
||||||
|
request = @request
|
||||||
|
obj = eval(arg["class"]).find arg["obj"]["_id"]
|
||||||
|
# imp = new(@request,arg["controller_name"],arg["action_name"],arg["user"],obj)
|
||||||
|
new_impression = obj.impressions.build(:user_id=>arg["user"],:controller_name=>arg["controller_name"],:action_name=>arg["action_name"],:ip_address=>@request.remote_ip,:referrer=>@request.referer)
|
||||||
|
new_impression.save
|
||||||
|
obj.update_attribute(:view_count,obj.impression_count)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def user
|
||||||
|
@user
|
||||||
|
end
|
||||||
|
|
||||||
|
def action_name
|
||||||
|
@action_name
|
||||||
|
end
|
||||||
|
|
||||||
|
def controller_name
|
||||||
|
@controller_name
|
||||||
|
end
|
||||||
|
|
||||||
|
def request
|
||||||
|
@request
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -3,7 +3,7 @@ class Page < Item
|
||||||
include Impressionist::Impressionable
|
include Impressionist::Impressionable
|
||||||
include ParserFrontEnd
|
include ParserFrontEnd
|
||||||
|
|
||||||
is_impressionable :counter_cache => { :column_name => :view_count }
|
is_impressionable #:counter_cache => { :column_name => :view_count }
|
||||||
|
|
||||||
field :content, localize: true
|
field :content, localize: true
|
||||||
field :app_frontend_url
|
field :app_frontend_url
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
class DelayImpressionistRequest
|
||||||
|
attr_accessor :session_options,:remote_ip,:referer,:user_agent
|
||||||
|
def initialize(request=nil)
|
||||||
|
if request
|
||||||
|
self.session_options=request.session_options
|
||||||
|
self.remote_ip=request.remote_ip
|
||||||
|
self.referer=request.referer
|
||||||
|
self.user_agent=request.user_agent
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def restore(args)
|
||||||
|
args.each do |key,value|
|
||||||
|
self.send("#{key}=", value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,29 @@
|
||||||
|
module OrbitApp
|
||||||
|
module Module
|
||||||
|
module VisitorCounter
|
||||||
|
Version = "0.1"
|
||||||
|
|
||||||
|
def display_visitors(options={})
|
||||||
|
impressions = Impression.where(options).and(:referrer.ne => nil)
|
||||||
|
impressions.map{|i| i[:session_hash]}.uniq.count
|
||||||
|
end
|
||||||
|
|
||||||
|
def display_visitors_today
|
||||||
|
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
|
||||||
|
end
|
||||||
|
|
||||||
|
def display_visitors_this_week
|
||||||
|
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
|
||||||
|
end
|
||||||
|
|
||||||
|
def display_visitors_this_month
|
||||||
|
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
|
||||||
|
end
|
||||||
|
|
||||||
|
def display_visitors_this_year
|
||||||
|
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
|
||||||
|
end
|
||||||
|
|
||||||
|
end # of VisitorCounter
|
||||||
|
end # of Module
|
||||||
|
end # of OrbitApp
|
|
@ -14,7 +14,7 @@ class Bulletin
|
||||||
include OrbitTag::Taggable
|
include OrbitTag::Taggable
|
||||||
taggable
|
taggable
|
||||||
|
|
||||||
is_impressionable :counter_cache => { :column_name => :view_count }
|
is_impressionable #:counter_cache => { :column_name => :view_count }
|
||||||
|
|
||||||
field :title, localize: true
|
field :title, localize: true
|
||||||
field :subtitle, localize: true
|
field :subtitle, localize: true
|
||||||
|
|
Loading…
Reference in New Issue