class DashboardCounter < Resque::Plugins::RestrictionJob
  @queue = :high

  def self.perform(*args)
    site = Site.first
    obj = new(*args)
    site.dashboard_counter[:visitors_this_week] = obj.display_visitors_this_week 
    site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month 
    site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year
    site.save
    OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}"
  end


  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
