Class: AnalyticsService
- Inherits:
-
Object
- Object
- AnalyticsService
- Defined in:
- lib/generators/ruby_cms/templates/services/analytics_service.rb
Constant Summary collapse
- CACHE_VERSION =
"v3"- CACHE_DURATION =
10.minutes
- MAX_POPULAR_PAGES =
10- MAX_REFERRERS =
10- MAX_LANDING_PAGES =
10- MAX_UTM_SOURCES =
10- HIGH_VOLUME_THRESHOLD =
1000- RAPID_REQUEST_THRESHOLD =
50
Instance Method Summary collapse
- #dashboard_stats ⇒ Object
-
#initialize(start_date, end_date, period = nil) ⇒ AnalyticsService
constructor
A new instance of AnalyticsService.
- #page_stats(page_name) ⇒ Object
- #visitor_stats(ip_address) ⇒ Object
Constructor Details
#initialize(start_date, end_date, period = nil) ⇒ AnalyticsService
Returns a new instance of AnalyticsService.
11 12 13 14 15 16 |
# File 'lib/generators/ruby_cms/templates/services/analytics_service.rb', line 11 def initialize(start_date, end_date, period = nil) @start_date = start_date.beginning_of_day @end_date = end_date.end_of_day @range = @start_date..@end_date @period = period || determine_period_from_date_range end |
Instance Method Details
#dashboard_stats ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/generators/ruby_cms/templates/services/analytics_service.rb', line 18 def dashboard_stats Rails.cache.fetch(cache_key("dashboard_stats"), expires_in: CACHE_DURATION) do { total_page_views: page_view_events.count, unique_visitors: visits.distinct.count(:visitor_token), total_sessions: visits.distinct.count(:visit_token), popular_pages: popular_pages_data, top_visitors: visits.group(:ip).order(Arel.sql("COUNT(*) DESC")).limit(10).count, hourly_activity: hourly_activity_data, daily_activity: daily_activity_data, daily_visitors: daily_visitors_data, top_referrers: referrer_data, browser_stats: browser_analysis, device_stats: device_analysis, recent_page_views: page_view_events.order(time: :desc).limit(20), suspicious_activity: suspicious_activity_data, os_stats: os_analysis, landing_pages: landing_page_analysis, utm_sources: utm_source_analysis } end end |
#page_stats(page_name) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/generators/ruby_cms/templates/services/analytics_service.rb', line 41 def page_stats(page_name) events = page_view_events.where(page_name:) { page_views: events.order(time: :desc).limit(100), stats: { total_views: events.count, unique_visitors: events.joins(:visit).distinct.count("ahoy_visits.visitor_token"), avg_views_per_day: (events.count.to_f / days_in_range).round(2) } } end |
#visitor_stats(ip_address) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/generators/ruby_cms/templates/services/analytics_service.rb', line 54 def visitor_stats(ip_address) visitor_visits = visits.where(ip: ip_address) events = page_view_events.joins(:visit).where(ahoy_visits: { ip: ip_address }) { visitor_views: events.order(time: :desc).limit(100), stats: { total_views: events.count, unique_pages: count_unique_pages(events), first_visit: visitor_visits.minimum(:started_at), last_visit: visitor_visits.maximum(:started_at) } } end |