Class: RubyCms::Analytics::Report
- Inherits:
-
Object
- Object
- RubyCms::Analytics::Report
- Defined in:
- app/services/ruby_cms/analytics/report.rb
Constant Summary collapse
- DEFAULT_CACHE_DURATION_SECONDS =
600- DEFAULT_MAX_POPULAR_PAGES =
10- DEFAULT_MAX_TOP_VISITORS =
10- DEFAULT_MAX_REFERRERS =
10- DEFAULT_MAX_LANDING_PAGES =
10- DEFAULT_MAX_UTM_SOURCES =
10- DEFAULT_HIGH_VOLUME_THRESHOLD =
1000- DEFAULT_RAPID_REQUEST_THRESHOLD =
50- DEFAULT_RECENT_PAGE_VIEWS_LIMIT =
25- DEFAULT_PAGE_DETAILS_LIMIT =
100- DEFAULT_VISITOR_DETAILS_LIMIT =
100
Instance Method Summary collapse
- #dashboard_stats ⇒ Object
-
#initialize(start_date:, end_date:, period: nil) ⇒ Report
constructor
A new instance of Report.
- #page_stats(page_name) ⇒ Object
- #visitor_stats(ip_address) ⇒ Object
Constructor Details
#initialize(start_date:, end_date:, period: nil) ⇒ Report
Returns a new instance of Report.
18 19 20 21 22 23 24 |
# File 'app/services/ruby_cms/analytics/report.rb', line 18 def initialize(start_date:, end_date:, period: nil) @start_date = start_date.to_date.beginning_of_day @end_date = end_date.to_date.end_of_day @period = period.presence || RubyCms::Settings.get(:analytics_default_period, default: "week").to_s @range = @start_date..@end_date end |
Instance Method Details
#dashboard_stats ⇒ Object
26 27 28 29 30 |
# File 'app/services/ruby_cms/analytics/report.rb', line 26 def dashboard_stats Rails.cache.fetch(cache_key("dashboard"), expires_in: cache_duration) do dashboard_stats_payload end end |
#page_stats(page_name) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'app/services/ruby_cms/analytics/report.rb', line 32 def page_stats(page_name) scoped = page_view_events.where(page_name:) { page_views: scoped.order(time: :desc).limit(page_details_limit), stats: { total_views: scoped.count, unique_visitors: scoped.joins(:visit).distinct.count("ahoy_visits.visitor_token"), avg_views_per_day: (scoped.count.to_f / days_in_range).round(2) } } end |
#visitor_stats(ip_address) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/services/ruby_cms/analytics/report.rb', line 45 def visitor_stats(ip_address) visitor_visits = visits.where(ip: ip_address) visitor_events = page_view_events.joins(:visit).where(ahoy_visits: { ip: ip_address }) { visitor_views: visitor_events.order(time: :desc).limit(visitor_details_limit), stats: { total_views: visitor_events.count, unique_pages: visitor_events.where.not(page_name: [nil, ""]).distinct.count(:page_name), first_visit: visitor_visits.minimum(:started_at), last_visit: visitor_visits.maximum(:started_at) } } end |