Commit c7bb3a1f726be189ccce51bdd631b26eb4f64db1
1 parent
7bfd38ea
Exists in
master
and in
4 other branches
sidekiq
Showing
14 changed files
with
75 additions
and
94 deletions
Show diff stats
Gemfile
@@ -81,8 +81,10 @@ gem "acts-as-taggable-on", "2.3.3" | @@ -81,8 +81,10 @@ gem "acts-as-taggable-on", "2.3.3" | ||
81 | gem "draper", "~> 0.18.0" | 81 | gem "draper", "~> 0.18.0" |
82 | 82 | ||
83 | # Background jobs | 83 | # Background jobs |
84 | -gem "resque", git: "https://github.com/gitlabhq/resque.git", ref: "9ef4700306dd946a3ac000612428967ce0c32213" | ||
85 | -gem 'resque_mailer' | 84 | +gem 'slim' |
85 | +gem 'sinatra', :require => nil | ||
86 | +gem 'sidekiq', '2.6.4' | ||
87 | +gem 'sidekiq_mailer' | ||
86 | 88 | ||
87 | # HTTP requests | 89 | # HTTP requests |
88 | gem "httparty" | 90 | gem "httparty" |
@@ -157,7 +159,6 @@ group :test do | @@ -157,7 +159,6 @@ group :test do | ||
157 | gem "simplecov", require: false | 159 | gem "simplecov", require: false |
158 | gem "shoulda-matchers", "1.3.0" | 160 | gem "shoulda-matchers", "1.3.0" |
159 | gem 'email_spec' | 161 | gem 'email_spec' |
160 | - gem 'resque_spec' | ||
161 | gem "webmock" | 162 | gem "webmock" |
162 | gem 'test_after_commit' | 163 | gem 'test_after_commit' |
163 | end | 164 | end |
Gemfile.lock
@@ -55,17 +55,6 @@ GIT | @@ -55,17 +55,6 @@ GIT | ||
55 | raphael-rails (2.1.0) | 55 | raphael-rails (2.1.0) |
56 | 56 | ||
57 | GIT | 57 | GIT |
58 | - remote: https://github.com/gitlabhq/resque.git | ||
59 | - revision: 9ef4700306dd946a3ac000612428967ce0c32213 | ||
60 | - ref: 9ef4700306dd946a3ac000612428967ce0c32213 | ||
61 | - specs: | ||
62 | - resque (2.0.0.pre.1) | ||
63 | - json | ||
64 | - redis-namespace (~> 1.0) | ||
65 | - sinatra (>= 0.9.2) | ||
66 | - vegas (~> 0.1.2) | ||
67 | - | ||
68 | -GIT | ||
69 | remote: https://github.com/jonleighton/poltergeist.git | 58 | remote: https://github.com/jonleighton/poltergeist.git |
70 | revision: 5c2e092001074a8cf09f332d3714e9ba150bc8ca | 59 | revision: 5c2e092001074a8cf09f332d3714e9ba150bc8ca |
71 | ref: 5c2e092001074a8cf09f332d3714e9ba150bc8ca | 60 | ref: 5c2e092001074a8cf09f332d3714e9ba150bc8ca |
@@ -132,6 +121,9 @@ GEM | @@ -132,6 +121,9 @@ GEM | ||
132 | carrierwave (0.7.1) | 121 | carrierwave (0.7.1) |
133 | activemodel (>= 3.2.0) | 122 | activemodel (>= 3.2.0) |
134 | activesupport (>= 3.2.0) | 123 | activesupport (>= 3.2.0) |
124 | + celluloid (0.12.4) | ||
125 | + facter (>= 1.6.12) | ||
126 | + timers (>= 1.0.0) | ||
135 | charlock_holmes (0.6.9) | 127 | charlock_holmes (0.6.9) |
136 | childprocess (0.3.6) | 128 | childprocess (0.3.6) |
137 | ffi (~> 1.0, >= 1.0.6) | 129 | ffi (~> 1.0, >= 1.0.6) |
@@ -150,6 +142,7 @@ GEM | @@ -150,6 +142,7 @@ GEM | ||
150 | coffee-script-source (1.4.0) | 142 | coffee-script-source (1.4.0) |
151 | colored (1.2) | 143 | colored (1.2) |
152 | colorize (0.5.8) | 144 | colorize (0.5.8) |
145 | + connection_pool (1.0.0) | ||
153 | crack (0.3.1) | 146 | crack (0.3.1) |
154 | daemons (1.1.9) | 147 | daemons (1.1.9) |
155 | devise (2.1.2) | 148 | devise (2.1.2) |
@@ -169,6 +162,7 @@ GEM | @@ -169,6 +162,7 @@ GEM | ||
169 | eventmachine (1.0.0) | 162 | eventmachine (1.0.0) |
170 | execjs (1.4.0) | 163 | execjs (1.4.0) |
171 | multi_json (~> 1.0) | 164 | multi_json (~> 1.0) |
165 | + facter (1.6.17) | ||
172 | factory_girl (4.1.0) | 166 | factory_girl (4.1.0) |
173 | activesupport (>= 3.0.0) | 167 | activesupport (>= 3.0.0) |
174 | factory_girl_rails (4.1.0) | 168 | factory_girl_rails (4.1.0) |
@@ -370,11 +364,6 @@ GEM | @@ -370,11 +364,6 @@ GEM | ||
370 | redis (3.0.2) | 364 | redis (3.0.2) |
371 | redis-namespace (1.2.1) | 365 | redis-namespace (1.2.1) |
372 | redis (~> 3.0.0) | 366 | redis (~> 3.0.0) |
373 | - resque_mailer (2.1.0) | ||
374 | - actionmailer (~> 3.0) | ||
375 | - resque_spec (0.12.5) | ||
376 | - resque (>= 1.19.0) | ||
377 | - rspec (>= 2.5.0) | ||
378 | rspec (2.12.0) | 367 | rspec (2.12.0) |
379 | rspec-core (~> 2.12.0) | 368 | rspec-core (~> 2.12.0) |
380 | rspec-expectations (~> 2.12.0) | 369 | rspec-expectations (~> 2.12.0) |
@@ -412,6 +401,16 @@ GEM | @@ -412,6 +401,16 @@ GEM | ||
412 | sexp_processor (4.1.3) | 401 | sexp_processor (4.1.3) |
413 | shoulda-matchers (1.3.0) | 402 | shoulda-matchers (1.3.0) |
414 | activesupport (>= 3.0.0) | 403 | activesupport (>= 3.0.0) |
404 | + sidekiq (2.6.4) | ||
405 | + celluloid (~> 0.12.0) | ||
406 | + connection_pool (~> 1.0) | ||
407 | + multi_json (~> 1) | ||
408 | + redis (~> 3) | ||
409 | + redis-namespace | ||
410 | + sidekiq_mailer (0.0.4) | ||
411 | + actionmailer (~> 3.0) | ||
412 | + activesupport (~> 3.0) | ||
413 | + sidekiq (~> 2.3) | ||
415 | simplecov (0.7.1) | 414 | simplecov (0.7.1) |
416 | multi_json (~> 1.0) | 415 | multi_json (~> 1.0) |
417 | simplecov-html (~> 0.7.1) | 416 | simplecov-html (~> 0.7.1) |
@@ -421,6 +420,9 @@ GEM | @@ -421,6 +420,9 @@ GEM | ||
421 | rack-protection (~> 1.2) | 420 | rack-protection (~> 1.2) |
422 | tilt (~> 1.3, >= 1.3.3) | 421 | tilt (~> 1.3, >= 1.3.3) |
423 | six (0.2.0) | 422 | six (0.2.0) |
423 | + slim (1.3.6) | ||
424 | + temple (~> 0.5.5) | ||
425 | + tilt (~> 1.3.3) | ||
424 | slop (3.3.3) | 426 | slop (3.3.3) |
425 | spinach (0.5.2) | 427 | spinach (0.5.2) |
426 | colorize | 428 | colorize |
@@ -435,6 +437,7 @@ GEM | @@ -435,6 +437,7 @@ GEM | ||
435 | rack (~> 1.0) | 437 | rack (~> 1.0) |
436 | tilt (~> 1.1, != 1.3.0) | 438 | tilt (~> 1.1, != 1.3.0) |
437 | stamp (0.3.0) | 439 | stamp (0.3.0) |
440 | + temple (0.5.5) | ||
438 | test_after_commit (0.0.1) | 441 | test_after_commit (0.0.1) |
439 | therubyracer (0.10.2) | 442 | therubyracer (0.10.2) |
440 | libv8 (~> 3.3.10) | 443 | libv8 (~> 3.3.10) |
@@ -444,6 +447,7 @@ GEM | @@ -444,6 +447,7 @@ GEM | ||
444 | rack (>= 1.0.0) | 447 | rack (>= 1.0.0) |
445 | thor (0.16.0) | 448 | thor (0.16.0) |
446 | tilt (1.3.3) | 449 | tilt (1.3.3) |
450 | + timers (1.0.2) | ||
447 | treetop (1.4.12) | 451 | treetop (1.4.12) |
448 | polyglot | 452 | polyglot |
449 | polyglot (>= 0.3.1) | 453 | polyglot (>= 0.3.1) |
@@ -455,8 +459,6 @@ GEM | @@ -455,8 +459,6 @@ GEM | ||
455 | kgio (~> 2.6) | 459 | kgio (~> 2.6) |
456 | rack | 460 | rack |
457 | raindrops (~> 0.7) | 461 | raindrops (~> 0.7) |
458 | - vegas (0.1.11) | ||
459 | - rack (>= 1.0.0) | ||
460 | virtus (0.5.2) | 462 | virtus (0.5.2) |
461 | backports (~> 2.6.1) | 463 | backports (~> 2.6.1) |
462 | warden (1.2.1) | 464 | warden (1.2.1) |
@@ -534,17 +536,18 @@ DEPENDENCIES | @@ -534,17 +536,18 @@ DEPENDENCIES | ||
534 | rb-fsevent | 536 | rb-fsevent |
535 | rb-inotify | 537 | rb-inotify |
536 | redcarpet (~> 2.2.2) | 538 | redcarpet (~> 2.2.2) |
537 | - resque! | ||
538 | - resque_mailer | ||
539 | - resque_spec | ||
540 | rspec-rails | 539 | rspec-rails |
541 | sass-rails (~> 3.2.5) | 540 | sass-rails (~> 3.2.5) |
542 | sdoc | 541 | sdoc |
543 | seed-fu | 542 | seed-fu |
544 | settingslogic | 543 | settingslogic |
545 | shoulda-matchers (= 1.3.0) | 544 | shoulda-matchers (= 1.3.0) |
545 | + sidekiq (= 2.6.4) | ||
546 | + sidekiq_mailer | ||
546 | simplecov | 547 | simplecov |
548 | + sinatra | ||
547 | six | 549 | six |
550 | + slim | ||
548 | spinach-rails | 551 | spinach-rails |
549 | stamp | 552 | stamp |
550 | test_after_commit | 553 | test_after_commit |
Procfile
app/controllers/admin/dashboard_controller.rb
@@ -3,10 +3,6 @@ class Admin::DashboardController < AdminController | @@ -3,10 +3,6 @@ class Admin::DashboardController < AdminController | ||
3 | @projects = Project.order("created_at DESC").limit(10) | 3 | @projects = Project.order("created_at DESC").limit(10) |
4 | @users = User.order("created_at DESC").limit(10) | 4 | @users = User.order("created_at DESC").limit(10) |
5 | 5 | ||
6 | - @resque_accessible = true | ||
7 | - @workers = Resque.workers | ||
8 | - @pending_jobs = Resque.size(:post_receive) | ||
9 | - | ||
10 | rescue Redis::InheritedError | 6 | rescue Redis::InheritedError |
11 | @resque_accessible = false | 7 | @resque_accessible = false |
12 | end | 8 | end |
app/mailers/notify.rb
app/models/system_hook.rb
@@ -19,6 +19,6 @@ class SystemHook < WebHook | @@ -19,6 +19,6 @@ class SystemHook < WebHook | ||
19 | end | 19 | end |
20 | 20 | ||
21 | def async_execute(data) | 21 | def async_execute(data) |
22 | - Resque.enqueue(SystemHookWorker, id, data) | 22 | + Sidekiq::Client.enqueue(SystemHookWorker, id, data) |
23 | end | 23 | end |
24 | end | 24 | end |
app/views/admin/dashboard/index.html.haml
1 | .admin_dash.row | 1 | .admin_dash.row |
2 | - .span3 | 2 | + .span4 |
3 | .ui-box | 3 | .ui-box |
4 | %h5.title Projects | 4 | %h5.title Projects |
5 | .data.padded | 5 | .data.padded |
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | %h1= Project.count | 7 | %h1= Project.count |
8 | %hr | 8 | %hr |
9 | = link_to 'New Project', new_project_path, class: "btn small" | 9 | = link_to 'New Project', new_project_path, class: "btn small" |
10 | - .span3 | 10 | + .span4 |
11 | .ui-box | 11 | .ui-box |
12 | %h5.title Groups | 12 | %h5.title Groups |
13 | .data.padded | 13 | .data.padded |
@@ -15,7 +15,7 @@ | @@ -15,7 +15,7 @@ | ||
15 | %h1= Group.count | 15 | %h1= Group.count |
16 | %hr | 16 | %hr |
17 | = link_to 'New Group', new_admin_group_path, class: "btn small" | 17 | = link_to 'New Group', new_admin_group_path, class: "btn small" |
18 | - .span3 | 18 | + .span4 |
19 | .ui-box | 19 | .ui-box |
20 | %h5.title Users | 20 | %h5.title Users |
21 | .data.padded | 21 | .data.padded |
@@ -23,25 +23,6 @@ | @@ -23,25 +23,6 @@ | ||
23 | %h1= User.count | 23 | %h1= User.count |
24 | %hr | 24 | %hr |
25 | = link_to 'New User', new_admin_user_path, class: "btn small" | 25 | = link_to 'New User', new_admin_user_path, class: "btn small" |
26 | - .span3 | ||
27 | - .ui-box | ||
28 | - %h5.title | ||
29 | - Resque Workers | ||
30 | - .data.padded | ||
31 | - - if @resque_accessible | ||
32 | - = link_to admin_resque_path do | ||
33 | - %h1{class: @workers.present? ? "cgreen" : "cred"} | ||
34 | - = @workers.count | ||
35 | - %hr | ||
36 | - %p | ||
37 | - %strong{class: @pending_jobs > 0 ? "cred" : "cgreen"} | ||
38 | - #{@pending_jobs} post receive jobs waiting | ||
39 | - - else | ||
40 | - = link_to admin_resque_path do | ||
41 | - %h1.cdark ? | ||
42 | - %hr | ||
43 | - %p | ||
44 | - %strong Resque status unknown | ||
45 | 26 | ||
46 | .row | 27 | .row |
47 | .span6 | 28 | .span6 |
app/views/admin/resque/show.html.haml
app/views/layouts/admin.html.haml
@@ -19,6 +19,6 @@ | @@ -19,6 +19,6 @@ | ||
19 | = nav_link(controller: :hooks) do | 19 | = nav_link(controller: :hooks) do |
20 | = link_to "Hooks", admin_hooks_path | 20 | = link_to "Hooks", admin_hooks_path |
21 | = nav_link(controller: :resque) do | 21 | = nav_link(controller: :resque) do |
22 | - = link_to "Resque", admin_resque_path | 22 | + = link_to "Background Jobs", admin_resque_path |
23 | 23 | ||
24 | .content= yield | 24 | .content= yield |
app/workers/post_receive.rb
1 | class PostReceive | 1 | class PostReceive |
2 | - @queue = :post_receive | 2 | + include Sidekiq::Worker |
3 | 3 | ||
4 | - def self.perform(repo_path, oldrev, newrev, ref, identifier) | 4 | + sidekiq_options queue: :post_receive |
5 | + | ||
6 | + def perform(repo_path, oldrev, newrev, ref, identifier) | ||
5 | repo_path.gsub!(Gitlab.config.gitolite.repos_path.to_s, "") | 7 | repo_path.gsub!(Gitlab.config.gitolite.repos_path.to_s, "") |
6 | repo_path.gsub!(/.git$/, "") | 8 | repo_path.gsub!(/.git$/, "") |
7 | repo_path.gsub!(/^\//, "") | 9 | repo_path.gsub!(/^\//, "") |
app/workers/system_hook_worker.rb
1 | class SystemHookWorker | 1 | class SystemHookWorker |
2 | - @queue = :system_hook | 2 | + include Sidekiq::Worker |
3 | 3 | ||
4 | - def self.perform(hook_id, data) | 4 | + sidekiq_options queue: :system_hook |
5 | + | ||
6 | + def perform(hook_id, data) | ||
5 | SystemHook.find(hook_id).execute data | 7 | SystemHook.find(hook_id).execute data |
6 | end | 8 | end |
7 | end | 9 | end |
config/initializers/4_resque.rb
1 | # Custom Redis configuration | 1 | # Custom Redis configuration |
2 | config_file = Rails.root.join('config', 'resque.yml') | 2 | config_file = Rails.root.join('config', 'resque.yml') |
3 | 3 | ||
4 | -if File.exists?(config_file) | ||
5 | - resque_config = YAML.load_file(config_file) | ||
6 | - Resque.redis = resque_config[Rails.env] | ||
7 | -end | ||
8 | -Resque.redis.namespace = 'resque:gitlab' | ||
9 | -Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection } | ||
10 | - | ||
11 | -# Authentication | ||
12 | -require 'resque/server' | ||
13 | -class ResqueAuthentication | ||
14 | - def initialize(app) | ||
15 | - @app = app | ||
16 | - end | 4 | +resque_url = if File.exists?(config_file) |
5 | + YAML.load_file(config_file)[Rails.env] | ||
6 | + else | ||
7 | + "localhost:6379" | ||
8 | + end | ||
17 | 9 | ||
18 | - def call(env) | ||
19 | - account = env['warden'].authenticate!(:database_authenticatable, :rememberable, scope: :user) | ||
20 | - raise "Access denied" if !account.admin? | ||
21 | - @app.call(env) | ||
22 | - end | 10 | +Sidekiq.configure_server do |config| |
11 | + config.redis = { | ||
12 | + url: "redis://#{resque_url}", | ||
13 | + namespace: 'resque:gitlab' | ||
14 | + } | ||
23 | end | 15 | end |
24 | 16 | ||
25 | -Resque::Server.use ResqueAuthentication | ||
26 | - | ||
27 | -# Mailer | ||
28 | -Resque::Mailer.excluded_environments = [] | ||
29 | - | 17 | +Sidekiq.configure_client do |config| |
18 | + config.redis = { | ||
19 | + url: "redis://#{resque_url}", | ||
20 | + namespace: 'resque:gitlab' | ||
21 | + } | ||
22 | +end |
config/routes.rb
1 | +require 'sidekiq/web' | ||
2 | + | ||
1 | Gitlab::Application.routes.draw do | 3 | Gitlab::Application.routes.draw do |
2 | # | 4 | # |
3 | # Search | 5 | # Search |
@@ -8,9 +10,10 @@ Gitlab::Application.routes.draw do | @@ -8,9 +10,10 @@ Gitlab::Application.routes.draw do | ||
8 | require 'api' | 10 | require 'api' |
9 | mount Gitlab::API => '/api' | 11 | mount Gitlab::API => '/api' |
10 | 12 | ||
11 | - # Optionally, enable Resque here | ||
12 | - require 'resque/server' | ||
13 | - mount Resque::Server => '/info/resque', as: 'resque' | 13 | + constraint = lambda { |request| request.env["warden"].authenticate? and request.env['warden'].user.admin? } |
14 | + constraints constraint do | ||
15 | + mount Sidekiq::Web, at: "/admin/workers", as: :sidekiq | ||
16 | + end | ||
14 | 17 | ||
15 | # Enable Grack support | 18 | # Enable Grack support |
16 | mount Grack::Bundle.new({ | 19 | mount Grack::Bundle.new({ |
lib/tasks/resque.rake
@@ -2,20 +2,20 @@ require 'resque/tasks' | @@ -2,20 +2,20 @@ require 'resque/tasks' | ||
2 | 2 | ||
3 | namespace :resque do | 3 | namespace :resque do |
4 | task setup: :environment do | 4 | task setup: :environment do |
5 | - Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection } | 5 | + #Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection } |
6 | end | 6 | end |
7 | 7 | ||
8 | desc "Resque | kill all workers (using -QUIT), god will take care of them" | 8 | desc "Resque | kill all workers (using -QUIT), god will take care of them" |
9 | task :stop_workers => :environment do | 9 | task :stop_workers => :environment do |
10 | - pids = Array.new | 10 | + #pids = Array.new |
11 | 11 | ||
12 | - Resque.workers.each do |worker| | ||
13 | - pids << worker.to_s.split(/:/).second | ||
14 | - end | 12 | + #Resque.workers.each do |worker| |
13 | + #pids << worker.to_s.split(/:/).second | ||
14 | + #end | ||
15 | 15 | ||
16 | - if pids.size > 0 | ||
17 | - system("kill -QUIT #{pids.join(' ')}") | ||
18 | - end | 16 | + #if pids.size > 0 |
17 | + #system("kill -QUIT #{pids.join(' ')}") | ||
18 | + #end | ||
19 | end | 19 | end |
20 | end | 20 | end |
21 | 21 |