From cdc914de0d36cdab9ad27d9c8436b4200db7554f Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Sep 2015 22:06:31 +0200 Subject: [PATCH 1/5] moves storing of visits to queue --- app/jobs/stats_job.rb | 6 ++++++ config/initializers/ahoy.rb | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 app/jobs/stats_job.rb diff --git a/app/jobs/stats_job.rb b/app/jobs/stats_job.rb new file mode 100644 index 000000000..14e530bc5 --- /dev/null +++ b/app/jobs/stats_job.rb @@ -0,0 +1,6 @@ +class StatsJob < ActiveJob::Base + queue_as :default + + def perform(*args) + end +end diff --git a/config/initializers/ahoy.rb b/config/initializers/ahoy.rb index 9a1215c68..095fe5ed0 100644 --- a/config/initializers/ahoy.rb +++ b/config/initializers/ahoy.rb @@ -1,9 +1,13 @@ class Ahoy::Store < Ahoy::Stores::ActiveRecordStore + def track_visit(options) + StatsJob.perform_later(super) + end + # Track user IP def track_event(name, properties, options) super do |event| event.ip = request.ip end end -end +end \ No newline at end of file From e555126331e63bbdbb8d062c91e1486633a0af25 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 9 Sep 2015 14:39:31 +0200 Subject: [PATCH 2/5] tracks debate visits from the controller --- app/controllers/debates_controller.rb | 2 ++ app/models/debate.rb | 3 --- spec/controllers/debates_controller_spec.rb | 24 +++++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index b336a924a..4828e1827 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -13,6 +13,7 @@ class DebatesController < ApplicationController @debates = @debates.page(params[:page]).for_render.send("sort_by_#{@order}") @tag_cloud = Debate.tag_counts.order(taggings_count: :desc, name: :asc).limit(20) set_debate_votes(@debates) + ahoy.track_visit end def show @@ -23,6 +24,7 @@ class DebatesController < ApplicationController @all_visible_comments = @root_comments + @comments set_comment_flags(@all_visible_comments) + ahoy.track_visit end def new diff --git a/app/models/debate.rb b/app/models/debate.rb index 4dfb7b51f..f3443dc2e 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -34,9 +34,6 @@ class Debate < ActiveRecord::Base scope :sort_by_most_commented, -> { order(comments_count: :desc) } scope :sort_by_random, -> { order("RANDOM()") } - # Ahoy setup - visitable # Ahoy will automatically assign visit_id on create - def likes cached_votes_up end diff --git a/spec/controllers/debates_controller_spec.rb b/spec/controllers/debates_controller_spec.rb index f87635a6b..23c49bcf2 100644 --- a/spec/controllers/debates_controller_spec.rb +++ b/spec/controllers/debates_controller_spec.rb @@ -11,6 +11,30 @@ describe DebatesController do SimpleCaptcha.always_pass = @original_captcha_pass_value end + describe 'GET show' do + it 'should create an ahoy visit' do + debate = create(:debate) + sign_in create(:user) + + get :show, id: debate.id + + expect(Visit.count).to eq 1 + expect(Visit.first.landing_page).to eq debate_url(debate) + end + end + + describe 'GET index' do + it 'should create an ahoy visit' do + debate = create(:debate) + sign_in create(:user) + + get :index + + expect(Visit.count).to eq 1 + expect(Visit.first.landing_page).to eq debates_url + end + end + describe 'POST create' do it 'should create an ahoy event' do From d7f046bd3bd9af650c9fdddbf6860f0d32d7e0c1 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 9 Sep 2015 14:39:55 +0200 Subject: [PATCH 3/5] displays total stat count --- app/controllers/stats_controller.rb | 1 + app/views/stats/show.html.erb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/stats_controller.rb b/app/controllers/stats_controller.rb index fe224eb8d..595de397f 100644 --- a/app/controllers/stats_controller.rb +++ b/app/controllers/stats_controller.rb @@ -4,6 +4,7 @@ class StatsController < ApplicationController def show @event_types = Ahoy::Event.select(:name).uniq.pluck(:name) + @debates_created_count = Ahoy::Event.where(name: 'debate_created').count end private diff --git a/app/views/stats/show.html.erb b/app/views/stats/show.html.erb index f5df82b98..ff6765318 100644 --- a/app/views/stats/show.html.erb +++ b/app/views/stats/show.html.erb @@ -4,7 +4,7 @@

Stats

-

Visits

+

Visits (<%= Visit.count %>)

<%= visits_chart_tag id: "visits" %>
@@ -15,7 +15,7 @@
<% @event_types.each do |event_type| %> -

<%= event_type.titleize %>

+

<%= event_type.titleize %> (<%= @debates_created_count %>)

<%= events_chart_tag event_type %> <% end %>
From dca7e1e38f9d5802b6530e97b606d4f70d1bbb56 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 9 Sep 2015 14:40:17 +0200 Subject: [PATCH 4/5] moves stats storing to queue --- config/initializers/ahoy.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/config/initializers/ahoy.rb b/config/initializers/ahoy.rb index 095fe5ed0..378b21eb1 100644 --- a/config/initializers/ahoy.rb +++ b/config/initializers/ahoy.rb @@ -1,13 +1,11 @@ class Ahoy::Store < Ahoy::Stores::ActiveRecordStore def track_visit(options) - StatsJob.perform_later(super) + StatsJob.perform_later(super, name: "visit") end # Track user IP def track_event(name, properties, options) - super do |event| - event.ip = request.ip - end + StatsJob.perform_later(super { |event| event.ip = request.ip }, name: "event") end end \ No newline at end of file From b2690348db7e35b96e8ebf7a44ef7ce705f1fda7 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 9 Sep 2015 14:40:32 +0200 Subject: [PATCH 5/5] adds specs for stats in queue --- spec/features/active_jobs_spec.rb | 45 +++++++++++++++++++++++++++++++ spec/support/common_actions.rb | 11 ++++++++ 2 files changed, 56 insertions(+) create mode 100644 spec/features/active_jobs_spec.rb diff --git a/spec/features/active_jobs_spec.rb b/spec/features/active_jobs_spec.rb new file mode 100644 index 000000000..bfb289641 --- /dev/null +++ b/spec/features/active_jobs_spec.rb @@ -0,0 +1,45 @@ +require 'rails_helper' + +feature 'ActiveJob' do + include ActiveJob::TestHelper + + let(:admin) { create(:administrator) } + + scenario 'use queue to track visits' do + debate = create(:debate) + + visit debate_path(debate) + + expect(enqueued_jobs.size).to eq(1) + perform_enqueued_jobs { StatsJob.perform_now(enqueued_jobs.first) } + + login_as(admin.user) + visit stats_path + + expect(page).to have_content 'Visits (1)' + end + + scenario "use queue to track new debates" do + user = create(:user) + + login_as(user) + visit new_debate_path + + create_a_debate + + expect(enqueued_jobs.size).to eq(2) + + expect(enqueued_jobs.first[:args][1]["name"]).to eq("event") + expect(enqueued_jobs.last[:args][1]["name"]).to eq("visit") + + perform_enqueued_jobs do + enqueued_jobs.each { |job| StatsJob.perform_now(job) } + end + + login_as(admin.user) + visit stats_path + + expect(page).to have_content 'Debate Created (1)' + end + +end \ No newline at end of file diff --git a/spec/support/common_actions.rb b/spec/support/common_actions.rb index 4753abbbb..407c8292d 100644 --- a/spec/support/common_actions.rb +++ b/spec/support/common_actions.rb @@ -34,6 +34,17 @@ module CommonActions click_button 'Send me reset password instructions' end + def create_a_debate + fill_in 'debate_title', with: 'Acabar con los desahucios' + fill_in 'debate_description', with: 'Esto es un tema muy importante porque...' + fill_in 'debate_captcha', with: correct_captcha_text + check 'debate_terms_of_service' + + click_button 'Start a debate' + + expect(page).to have_content 'Debate was successfully created.' + end + def comment_on(debate) user = create(:user)