45 lines
1.7 KiB
Ruby
45 lines
1.7 KiB
Ruby
# 按天获取百度统计数据,pv,访问,ip和来源分类占比
|
||
# 其他统计:前一周用户留存率
|
||
class DailyPlatformStatisticsJob < ApplicationJob
|
||
queue_as :default
|
||
|
||
def perform(*args)
|
||
Rails.logger.info("*********开始统计*********")
|
||
|
||
tongji_service = Baidu::TongjiService.new
|
||
access_token = tongji_service.access_token
|
||
Rails.logger.info "job baidu_tongji_auth access_token ===== #{access_token}"
|
||
ActiveJob::Base.logger.info "job baidu_tongji_auth access_token ===== #{access_token}"
|
||
# 从最后一个记录日期开始,如果遗漏日期数据可以补充数据
|
||
last_date = DailyPlatformStatistic.order(:date).last
|
||
start_date = last_date.date
|
||
end_date = Time.now
|
||
if access_token.present?
|
||
tongji_service.overview_batch_add(start_date, end_date)
|
||
|
||
# 本周访问来源占比,每天记录一次,如果遗漏日期数据可以补充数据
|
||
tongji_service.source_from_batch_add(start_date, end_date)
|
||
end
|
||
# 周用户留存率
|
||
pre_week_user_ids = User.where(created_on: pre_week).pluck(:id).uniq
|
||
weekly_keep_user_count = User.where(id: pre_week_user_ids).where(last_login_on: current_week).count
|
||
weekly_keep_rate = format("%.2f", pre_week_user_ids.size > 0 ? weekly_keep_user_count.to_f / pre_week_user_ids.size : 0)
|
||
|
||
job_date = 1.days.ago
|
||
daily_statistic = DailyPlatformStatistic.find_or_initialize_by(date: job_date)
|
||
daily_statistic.weekly_keep_rate = weekly_keep_rate
|
||
daily_statistic.save
|
||
end
|
||
|
||
private
|
||
|
||
def current_week
|
||
Time.now.beginning_of_week..Time.now.end_of_day
|
||
end
|
||
|
||
def pre_week
|
||
# 7.days.ago.beginning_of_week..7.days.ago.beginning_of_week.end_of_week
|
||
Time.now.prev_week..Time.now.prev_week.end_of_week
|
||
end
|
||
end
|