Module: ActiveAnalytics

Defined in:
lib/active_analytics.rb,
lib/active_analytics/engine.rb,
lib/active_analytics/version.rb,
app/lib/active_analytics/histogram.rb,
app/helpers/active_analytics/pages_helper.rb,
app/helpers/active_analytics/sites_helper.rb,
app/jobs/active_analytics/application_job.rb,
app/models/active_analytics/views_per_day.rb,
app/helpers/active_analytics/browsers_helper.rb,
app/models/active_analytics/browsers_per_day.rb,
app/helpers/active_analytics/referrers_helper.rb,
app/models/active_analytics/application_record.rb,
app/helpers/active_analytics/application_helper.rb,
app/mailers/active_analytics/application_mailer.rb,
app/controllers/active_analytics/pages_controller.rb,
app/controllers/active_analytics/sites_controller.rb,
app/controllers/active_analytics/assets_controller.rb,
app/controllers/active_analytics/browsers_controller.rb,
app/controllers/active_analytics/referrers_controller.rb,
app/controllers/active_analytics/application_controller.rb

Defined Under Namespace

Modules: ApplicationHelper, BrowsersHelper, PagesHelper, ReferrersHelper, SitesHelper Classes: ApplicationController, ApplicationJob, ApplicationMailer, ApplicationRecord, AssetsController, BrowsersController, BrowsersPerDay, Engine, Histogram, PagesController, ReferrersController, SitesController, ViewsPerDay

Constant Summary collapse

SEPARATOR =
"|"
PAGE_QUEUE =
"ActiveAnalytics::PageQueue"
BROWSER_QUEUE =
"ActiveAnalytics::BrowserQueue"
OLD_PAGE_QUEUE =
"ActiveAnalytics::OldPageQueue"
OLD_BROWSER_QUEUE =
"ActiveAnalytics::BrowserQueue"
VERSION =
'0.4.1'

Class Method Summary collapse

Class Method Details

.flush_browser_queueObject



89
90
91
92
93
94
95
96
97
98
# File 'lib/active_analytics.rb', line 89

def self.flush_browser_queue
  return if !redis.exists?(BROWSER_QUEUE)
  date = Date.today
  redis.rename(BROWSER_QUEUE, OLD_BROWSER_QUEUE)
  redis.hscan_each(OLD_BROWSER_QUEUE) do |key, count|
    site, name, version = key.split(SEPARATOR)
    BrowsersPerDay.append(date: date, site: site, name: name, version: version, total: count.to_i)
  end
  redis.del(OLD_BROWSER_QUEUE)
end

.flush_page_queueObject



78
79
80
81
82
83
84
85
86
87
# File 'lib/active_analytics.rb', line 78

def self.flush_page_queue
  return if !redis.exists?(PAGE_QUEUE)
  date = Date.today
  redis.rename(PAGE_QUEUE, OLD_PAGE_QUEUE)
  redis.hscan_each(OLD_PAGE_QUEUE) do |key, count|
    site, page, referrer_host, referrer_path = key.split(SEPARATOR)
    ViewsPerDay.append(date: date, site: site, page: page, referrer_host: referrer_host, referrer_path: referrer_path, total: count.to_i)
  end
  redis.del(OLD_PAGE_QUEUE)
end

.flush_queueObject



73
74
75
76
# File 'lib/active_analytics.rb', line 73

def self.flush_queue
  flush_page_queue
  flush_browser_queue
end

.queue_request(request) ⇒ Object



54
55
56
57
# File 'lib/active_analytics.rb', line 54

def self.queue_request(request)
  queue_request_page(request)
  queue_request_browser(request)
end

.queue_request_browser(request) ⇒ Object



67
68
69
70
71
# File 'lib/active_analytics.rb', line 67

def self.queue_request_browser(request)
  browser = Browser.new(request.headers["User-Agent"])
  keys = [request.host.downcase, browser.name, browser.version]
  redis.hincrby(BROWSER_QUEUE, keys.join(SEPARATOR), 1)
end

.queue_request_page(request) ⇒ Object



59
60
61
62
63
64
65
# File 'lib/active_analytics.rb', line 59

def self.queue_request_page(request)
  keys = [request.host, request.path]
  if request.referrer.present?
    keys.concat(ViewsPerDay.split_referrer(request.referrer))
  end
  redis.hincrby(PAGE_QUEUE, keys.join(SEPARATOR).downcase, 1)
end

.record_request(request) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/active_analytics.rb', line 24

def self.record_request(request)
  params = {
    site: request.host,
    page: request.path,
    date: Date.today,
  }
  if request.referrer.present?
    params[:referrer_host], params[:referrer_path] = ViewsPerDay.split_referrer(request.referrer)
  end
  ViewsPerDay.append(params)

  browser = Browser.new(request.headers["User-Agent"])
  BrowsersPerDay.append(site: request.host, date: Date.today, name: browser.name, version: browser.version)
rescue => ex
  if Rails.env.development? || Rails.env.test?
    raise ex
  else
    Rails.logger.error(ex.inspect)
    Rails.logger.error(ex.backtrace.join("\n"))
  end
end

.redisObject



20
21
22
# File 'lib/active_analytics.rb', line 20

def self.redis
  @redis ||= Redis.new(url: redis_url)
end

.redis=(connection) ⇒ Object



16
17
18
# File 'lib/active_analytics.rb', line 16

def self.redis=(connection)
  @redis = connection
end

.redis_urlObject



12
13
14
# File 'lib/active_analytics.rb', line 12

def self.redis_url
  @redis_url ||= ENV["ACTIVE_ANALYTICS_REDIS_URL"] || ENV["REDIS_URL"] || "redis://localhost"
end

.redis_url=(string) ⇒ Object



8
9
10
# File 'lib/active_analytics.rb', line 8

def self.redis_url=(string)
  @redis_url = string
end