mirror of
https://github.com/discourse/discourse.git
synced 2024-12-30 09:33:46 +08:00
bd4e8422fe
This commit brings back some reports hidden or changed
by the commit in 14b436923c
if
the site setting `use_legacy_pageviews` is false.
* Unhide the old “Consolidated Pageviews” report and rename it
to “Legacy Consolidated Pageviews”
* Add a legacy_page_view_total_reqs report called “Legacy Pageviews”,
which calculates pageviews in the same way the old page_view_total_reqs
report did.
This will allow admins to better compare old and new pageview
stats which are based on browser detection if they have switched
over to _not_ use legacy pageviews.
178 lines
5.1 KiB
Ruby
178 lines
5.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Admin::ReportsController < Admin::StaffController
|
|
REPORTS_LIMIT = 50
|
|
|
|
HIDDEN_PAGEVIEW_REPORTS = %w[site_traffic page_view_legacy_total_reqs]
|
|
|
|
HIDDEN_LEGACY_PAGEVIEW_REPORTS = %w[
|
|
consolidated_page_views_browser_detection
|
|
page_view_anon_reqs
|
|
page_view_logged_in_reqs
|
|
]
|
|
|
|
def index
|
|
page_view_req_report_methods =
|
|
["page_view_total_reqs"] +
|
|
ApplicationRequest
|
|
.req_types
|
|
.keys
|
|
.select { |r| r =~ /\Apage_view_/ && r !~ /mobile/ }
|
|
.map { |r| r + "_reqs" }
|
|
|
|
if !SiteSetting.use_legacy_pageviews
|
|
page_view_req_report_methods << "page_view_legacy_total_reqs"
|
|
end
|
|
|
|
reports_methods =
|
|
page_view_req_report_methods +
|
|
Report.singleton_methods.grep(/\Areport_(?!about|storage_stats)/)
|
|
|
|
reports =
|
|
reports_methods
|
|
.reduce([]) do |reports_acc, name|
|
|
type = name.to_s.gsub("report_", "")
|
|
description = I18n.t("reports.#{type}.description", default: "")
|
|
description_link = I18n.t("reports.#{type}.description_link", default: "")
|
|
|
|
if SiteSetting.use_legacy_pageviews
|
|
next reports_acc if HIDDEN_PAGEVIEW_REPORTS.include?(type)
|
|
else
|
|
next reports_acc if HIDDEN_LEGACY_PAGEVIEW_REPORTS.include?(type)
|
|
end
|
|
|
|
report_data = {
|
|
type: type,
|
|
title: I18n.t("reports.#{type}.title"),
|
|
description: description.presence ? description : nil,
|
|
description_link: description_link.presence ? description_link : nil,
|
|
}
|
|
|
|
# HACK: We need to show a different label and description for this
|
|
# old report while people are still relying on it, that lets us
|
|
# point toward the new 'Site traffic' report as well. Not ideal,
|
|
# but apart from duplicating the report there's not a nicer way to do this.
|
|
if SiteSetting.use_legacy_pageviews
|
|
if type == "consolidated_page_views" ||
|
|
type === "consolidated_page_views_browser_detection"
|
|
report_data[:title] = I18n.t("reports.#{type}.title_legacy")
|
|
report_data[:description] = I18n.t("reports.#{type}.description_legacy")
|
|
end
|
|
end
|
|
|
|
reports_acc << report_data
|
|
|
|
reports_acc
|
|
end
|
|
.sort_by { |report| report[:title] }
|
|
|
|
render_json_dump(reports: reports)
|
|
end
|
|
|
|
def bulk
|
|
reports = []
|
|
|
|
hijack do
|
|
params[:reports].each do |report_type, report_params|
|
|
args = parse_params(report_params)
|
|
|
|
report = nil
|
|
report = Report.find_cached(report_type, args) if (report_params[:cache])
|
|
|
|
if SiteSetting.use_legacy_pageviews
|
|
if HIDDEN_PAGEVIEW_REPORTS.include?(report_type)
|
|
report = Report._get(report_type, args)
|
|
report.error = :not_found
|
|
end
|
|
else
|
|
if HIDDEN_LEGACY_PAGEVIEW_REPORTS.include?(report_type)
|
|
report = Report._get(report_type, args)
|
|
report.error = :not_found
|
|
end
|
|
end
|
|
|
|
if report
|
|
reports << report
|
|
else
|
|
report = Report.find(report_type, args)
|
|
|
|
Report.cache(report) if (report_params[:cache]) && report
|
|
|
|
if report.blank?
|
|
report = Report._get(report_type, args)
|
|
report.error = :not_found
|
|
end
|
|
|
|
reports << report
|
|
end
|
|
end
|
|
|
|
render_json_dump(reports: reports)
|
|
end
|
|
end
|
|
|
|
def show
|
|
report_type = params[:type]
|
|
|
|
raise Discourse::NotFound unless report_type =~ /\A[a-z0-9\_]+\z/
|
|
|
|
if SiteSetting.use_legacy_pageviews
|
|
raise Discourse::NotFound if HIDDEN_PAGEVIEW_REPORTS.include?(report_type)
|
|
else
|
|
raise Discourse::NotFound if HIDDEN_LEGACY_PAGEVIEW_REPORTS.include?(report_type)
|
|
end
|
|
|
|
args = parse_params(params)
|
|
|
|
report = nil
|
|
report = Report.find_cached(report_type, args) if (params[:cache])
|
|
|
|
return render_json_dump(report: report) if report
|
|
|
|
hijack do
|
|
report = Report.find(report_type, args)
|
|
|
|
raise Discourse::NotFound if report.blank?
|
|
|
|
Report.cache(report) if (params[:cache])
|
|
|
|
render_json_dump(report: report)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def parse_params(report_params)
|
|
begin
|
|
start_date =
|
|
(
|
|
if report_params[:start_date].present?
|
|
Time.parse(report_params[:start_date]).to_date
|
|
else
|
|
1.days.ago
|
|
end
|
|
).beginning_of_day
|
|
end_date =
|
|
(
|
|
if report_params[:end_date].present?
|
|
Time.parse(report_params[:end_date]).to_date
|
|
else
|
|
start_date + 30.days
|
|
end
|
|
).end_of_day
|
|
rescue ArgumentError => e
|
|
raise Discourse::InvalidParameters.new(e.message)
|
|
end
|
|
|
|
facets = nil
|
|
facets = report_params[:facets].map { |s| s.to_s.to_sym } if Array === report_params[:facets]
|
|
|
|
limit = fetch_limit_from_params(params: report_params, default: nil, max: REPORTS_LIMIT)
|
|
|
|
filters = nil
|
|
filters = report_params[:filters] if report_params.has_key?(:filters)
|
|
|
|
{ start_date: start_date, end_date: end_date, filters: filters, facets: facets, limit: limit }
|
|
end
|
|
end
|