Commit c31a5c33c947df50fcaee9152f3bb1f1b9f80d73

Authored by Weblate
2 parents d7cd9c29 e65ff0a5

Merge remote-tracking branch 'origin/master'

config/initializers/unicorn.rb
1 -require_dependency 'scheduler/defer' 1 +require_dependency 'noosfero/scheduler/defer'
2 2
3 if defined? Unicorn 3 if defined? Unicorn
4 ObjectSpace.each_object Unicorn::HttpServer do |s| 4 ObjectSpace.each_object Unicorn::HttpServer do |s|
5 - s.extend Scheduler::Defer::Unicorn 5 + s.extend Noosfero::Scheduler::Defer::Unicorn
6 end 6 end
7 end 7 end
8 8
lib/noosfero/scheduler/defer.rb
1 # based on https://github.com/discourse/discourse/blob/master/lib/scheduler/defer.rb 1 # based on https://github.com/discourse/discourse/blob/master/lib/scheduler/defer.rb
2 2
3 -module Scheduler  
4 - module Deferrable  
5 - def initialize  
6 - # FIXME: do some other way when not using Unicorn  
7 - @async = (not Rails.env.test?) and defined? Unicorn  
8 - @queue = Queue.new  
9 - @mutex = Mutex.new  
10 - @paused = false  
11 - @thread = nil  
12 - end 3 +module Noosfero
  4 + module Scheduler
  5 + module Deferrable
  6 + def initialize
  7 + # FIXME: do some other way when not using Unicorn
  8 + @async = (not Rails.env.test?) and defined? Unicorn
  9 + @queue = Queue.new
  10 + @mutex = Mutex.new
  11 + @paused = false
  12 + @thread = nil
  13 + end
13 14
14 - def pause  
15 - stop!  
16 - @paused = true  
17 - end 15 + def pause
  16 + stop!
  17 + @paused = true
  18 + end
18 19
19 - def resume  
20 - @paused = false  
21 - end 20 + def resume
  21 + @paused = false
  22 + end
22 23
23 - # for test  
24 - def async= val  
25 - @async = val  
26 - end 24 + # for test
  25 + def async= val
  26 + @async = val
  27 + end
27 28
28 - def later desc = nil, &blk  
29 - if @async  
30 - start_thread unless (@thread && @thread.alive?) || @paused  
31 - @queue << [blk, desc]  
32 - else  
33 - blk.call 29 + def later desc = nil, &blk
  30 + if @async
  31 + start_thread unless (@thread && @thread.alive?) || @paused
  32 + @queue << [blk, desc]
  33 + else
  34 + blk.call
  35 + end
34 end 36 end
35 - end  
36 37
37 - def stop!  
38 - @thread.kill if @thread and @thread.alive?  
39 - @thread = nil  
40 - end 38 + def stop!
  39 + @thread.kill if @thread and @thread.alive?
  40 + @thread = nil
  41 + end
41 42
42 - # test only  
43 - def stopped?  
44 - !(@thread and @thread.alive?)  
45 - end 43 + # test only
  44 + def stopped?
  45 + !(@thread and @thread.alive?)
  46 + end
46 47
47 - def do_all_work  
48 - while !@queue.empty?  
49 - do_work _non_block=true 48 + def do_all_work
  49 + while !@queue.empty?
  50 + do_work _non_block=true
  51 + end
50 end 52 end
51 - end  
52 53
53 - private 54 + private
54 55
55 - def start_thread  
56 - @mutex.synchronize do  
57 - return if @thread && @thread.alive?  
58 - @thread = Thread.new do  
59 - while true  
60 - do_work 56 + def start_thread
  57 + @mutex.synchronize do
  58 + return if @thread && @thread.alive?
  59 + @thread = Thread.new do
  60 + while true
  61 + do_work
  62 + end
61 end 63 end
  64 + @thread.priority = -2
62 end 65 end
63 - @thread.priority = -2  
64 end 66 end
65 - end  
66 67
67 - # using non_block to match Ruby #deq  
68 - def do_work non_block=false  
69 - job, desc = @queue.deq non_block  
70 - begin  
71 - job.call 68 + # using non_block to match Ruby #deq
  69 + def do_work non_block=false
  70 + job, desc = @queue.deq non_block
  71 + begin
  72 + job.call
  73 + rescue => ex
  74 + ExceptionNotifier.notify_exception ex, message: "Running deferred code '#{desc}'"
  75 + end
72 rescue => ex 76 rescue => ex
73 - ExceptionNotifier.notify_exception ex, message: "Running deferred code '#{desc}'" 77 + ExceptionNotifier.notify_exception ex, message: "Processing deferred code queue"
74 end 78 end
75 - rescue => ex  
76 - ExceptionNotifier.notify_exception ex, message: "Processing deferred code queue"  
77 end 79 end
78 - end  
79 80
80 - class Defer 81 + class Defer
81 82
82 - module Unicorn  
83 - def process_client client  
84 - ::Scheduler::Defer.pause  
85 - super client  
86 - ::Scheduler::Defer.do_all_work  
87 - ::Scheduler::Defer.resume 83 + module Unicorn
  84 + def process_client client
  85 + ::Noosfero::Scheduler::Defer.pause
  86 + super client
  87 + ::Noosfero::Scheduler::Defer.do_all_work
  88 + ::Noosfero::Scheduler::Defer.resume
  89 + end
88 end 90 end
  91 +
  92 + extend Deferrable
  93 + initialize
89 end 94 end
90 95
91 - extend Deferrable  
92 - initialize  
93 end 96 end
94 -  
95 end 97 end
plugins/analytics/controllers/profile/analytics_plugin/time_on_page_controller.rb
@@ -4,7 +4,7 @@ class AnalyticsPlugin::TimeOnPageController &lt; ProfileController @@ -4,7 +4,7 @@ class AnalyticsPlugin::TimeOnPageController &lt; ProfileController
4 4
5 def page_load 5 def page_load
6 # to avoid concurrency problems with the original deferred request, also defer this 6 # to avoid concurrency problems with the original deferred request, also defer this
7 - Scheduler::Defer.later do 7 + Noosfero::Scheduler::Defer.later do
8 page_view = profile.page_views.where(request_id: params[:id]).first 8 page_view = profile.page_views.where(request_id: params[:id]).first
9 page_view.request = request 9 page_view.request = request
10 page_view.page_load! 10 page_view.page_load!
plugins/analytics/lib/analytics_plugin/base.rb
@@ -22,7 +22,7 @@ class AnalyticsPlugin::Base &lt; Noosfero::Plugin @@ -22,7 +22,7 @@ class AnalyticsPlugin::Base &lt; Noosfero::Plugin
22 return if @analytics_skip_page_view 22 return if @analytics_skip_page_view
23 return unless profile and profile.analytics_enabled? 23 return unless profile and profile.analytics_enabled?
24 24
25 - Scheduler::Defer.later 'analytics: register page view' do 25 + Noosfero::Scheduler::Defer.later 'analytics: register page view' do
26 page_view = profile.page_views.build request: request, profile_id: profile, 26 page_view = profile.page_views.build request: request, profile_id: profile,
27 request_started_at: request_started_at, request_finished_at: request_finished_at 27 request_started_at: request_started_at, request_finished_at: request_finished_at
28 28