workless_revived 1.2.4.2 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/workless/middleware/workless_checker.rb +3 -3
- data/lib/workless/railtie.rb +1 -1
- data/lib/workless/scaler.rb +15 -18
- data/lib/workless/scalers/base.rb +4 -8
- data/lib/workless/scalers/heroku.rb +3 -7
- data/lib/workless/scalers/heroku_cedar.rb +5 -5
- data/lib/workless/scalers/local.rb +5 -6
- data/lib/workless/scalers/null.rb +0 -4
- data/lib/workless_revived.rb +5 -0
- data/rails/init.rb +1 -1
- metadata +6 -6
- data/lib/workless.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98e47054154aee4abcc5275e895a0ce1695370b4
|
4
|
+
data.tar.gz: 3d1aacf639ccafff4f39b05932cdd2a57fd3121e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23bf9f4b9e0d9cdebf6f731d87f19d574ebdb99f59dc5130875b7a6719a853958dd5336ad3fe09ad480e44717da504fb38b224d13025917ac3b87d4dd72a67b4
|
7
|
+
data.tar.gz: c27916acaa6088249f0d264be8f3ea78c38100c90eedcccfd61191be47eaead40147d32dee2bf2b2c593bce91bc0464f87aef894aefde780616d63b57665fb3b
|
data/README.md
CHANGED
@@ -13,6 +13,7 @@ By adding the gem to your project and configuring our Heroku app with some confi
|
|
13
13
|
|
14
14
|
## Updates
|
15
15
|
|
16
|
+
* Version 1.2.5 Added middleware to check on delayed jobs, fixed Rails 5 support
|
16
17
|
* Version 1.2.4 drops support for older versions!
|
17
18
|
* Version 1.2.3 replaces multiple commit callback with two callbacks for compatibility by @lostboy
|
18
19
|
* Version 1.2.2 includes after_commit fix by @collectiveip
|
@@ -14,7 +14,7 @@ class WorklessChecker
|
|
14
14
|
headers['Content-Length'] = response_body.bytesize.to_s
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
[status, headers, response_body ? [response_body] : response]
|
18
18
|
end
|
19
19
|
|
20
20
|
# fix issue if response's body is a Proc
|
@@ -28,10 +28,10 @@ class WorklessChecker
|
|
28
28
|
|
29
29
|
# if send file?
|
30
30
|
def file?(headers)
|
31
|
-
headers[
|
31
|
+
headers['Content-Transfer-Encoding'] == 'binary'
|
32
32
|
end
|
33
33
|
|
34
34
|
def html_request?(headers, response)
|
35
|
-
headers['Content-Type'] && headers['Content-Type'].include?('text/html') && response.body.include?(
|
35
|
+
headers['Content-Type'] && headers['Content-Type'].include?('text/html') && response.body.include?('<html')
|
36
36
|
end
|
37
37
|
end
|
data/lib/workless/railtie.rb
CHANGED
data/lib/workless/scaler.rb
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
module Delayed
|
2
2
|
module Workless
|
3
3
|
module Scaler
|
4
|
-
|
5
|
-
autoload :
|
6
|
-
autoload :
|
7
|
-
autoload :
|
8
|
-
autoload :Null, "workless/scalers/null"
|
4
|
+
autoload :Heroku, 'workless/scalers/heroku'
|
5
|
+
autoload :HerokuCedar, 'workless/scalers/heroku_cedar'
|
6
|
+
autoload :Local, 'workless/scalers/local'
|
7
|
+
autoload :Null, 'workless/scalers/null'
|
9
8
|
|
10
9
|
def self.included(base)
|
11
10
|
base.send :extend, ClassMethods
|
12
11
|
if base.to_s =~ /ActiveRecord/
|
13
12
|
base.class_eval do
|
14
|
-
after_commit
|
15
|
-
after_commit
|
16
|
-
after_commit
|
17
|
-
end
|
13
|
+
after_commit 'self.class.scaler.down'.to_sym, on: :update, if: proc { |r| !r.failed_at.nil? }
|
14
|
+
after_commit 'self.class.scaler.down'.to_sym, on: :destroy, if: proc { |r| r.destroyed? || !r.failed_at.nil? }
|
15
|
+
after_commit 'self.class.scaler.up'.to_sym, on: :create
|
16
|
+
end
|
18
17
|
elsif base.to_s =~ /Sequel/
|
19
18
|
base.send(:define_method, 'after_destroy') do
|
20
19
|
super
|
@@ -30,19 +29,19 @@ module Delayed
|
|
30
29
|
end
|
31
30
|
else
|
32
31
|
base.class_eval do
|
33
|
-
after_destroy
|
34
|
-
after_create
|
35
|
-
after_update
|
32
|
+
after_destroy 'self.class.scaler.down'
|
33
|
+
after_create 'self.class.scaler.up'
|
34
|
+
after_update 'self.class.scaler.down', unless: proc { |r| r.failed_at.nil? }
|
36
35
|
end
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
39
|
module ClassMethods
|
41
40
|
def scaler
|
42
|
-
@scaler ||= if ENV.include?(
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
@scaler ||= if ENV.include?('HEROKU_API_KEY')
|
42
|
+
Scaler::HerokuCedar
|
43
|
+
else
|
44
|
+
Scaler::Local
|
46
45
|
end
|
47
46
|
end
|
48
47
|
|
@@ -50,8 +49,6 @@ module Delayed
|
|
50
49
|
@scaler = "Delayed::Workless::Scaler::#{scaler.to_s.camelize}".constantize
|
51
50
|
end
|
52
51
|
end
|
53
|
-
|
54
52
|
end
|
55
|
-
|
56
53
|
end
|
57
54
|
end
|
@@ -3,25 +3,21 @@ require 'delayed_job'
|
|
3
3
|
module Delayed
|
4
4
|
module Workless
|
5
5
|
module Scaler
|
6
|
-
|
7
6
|
class Base
|
8
7
|
def self.jobs
|
9
|
-
if Rails.version >=
|
10
|
-
Delayed::Job.where(:
|
8
|
+
if Rails.version >= '3.0.0'
|
9
|
+
Delayed::Job.where(failed_at: nil)
|
11
10
|
else
|
12
|
-
Delayed::Job.all(:
|
11
|
+
Delayed::Job.all(conditions: { failed_at: nil })
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
16
|
module HerokuClient
|
18
|
-
|
19
17
|
def client
|
20
|
-
@client ||= ::Heroku::API.new(:
|
18
|
+
@client ||= ::Heroku::API.new(api_key: ENV['HEROKU_API_KEY'])
|
21
19
|
end
|
22
|
-
|
23
20
|
end
|
24
|
-
|
25
21
|
end
|
26
22
|
end
|
27
23
|
end
|
@@ -3,25 +3,21 @@ require 'heroku-api'
|
|
3
3
|
module Delayed
|
4
4
|
module Workless
|
5
5
|
module Scaler
|
6
|
-
|
7
6
|
class Heroku < Base
|
8
|
-
|
9
7
|
extend Delayed::Workless::Scaler::HerokuClient
|
10
8
|
|
11
9
|
def self.up
|
12
|
-
client.put_workers(ENV['APP_NAME'], 1) if
|
10
|
+
client.put_workers(ENV['APP_NAME'], 1) if workers == 0
|
13
11
|
end
|
14
12
|
|
15
13
|
def self.down
|
16
|
-
client.put_workers(ENV['APP_NAME'], 0) unless
|
14
|
+
client.put_workers(ENV['APP_NAME'], 0) unless jobs.count > 0 || workers == 0
|
17
15
|
end
|
18
16
|
|
19
17
|
def self.workers
|
20
|
-
client.get_ps(ENV['APP_NAME']).body.count { |p| p[
|
18
|
+
client.get_ps(ENV['APP_NAME']).body.count { |p| p['process'] =~ /worker\.\d?/ }
|
21
19
|
end
|
22
|
-
|
23
20
|
end
|
24
|
-
|
25
21
|
end
|
26
22
|
end
|
27
23
|
end
|
@@ -7,15 +7,15 @@ module Delayed
|
|
7
7
|
extend Delayed::Workless::Scaler::HerokuClient
|
8
8
|
|
9
9
|
def self.up
|
10
|
-
client.post_ps_scale(ENV['APP_NAME'], 'worker',
|
10
|
+
client.post_ps_scale(ENV['APP_NAME'], 'worker', workers_needed) if workers_needed > min_workers && workers < workers_needed
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.down
|
14
|
-
client.post_ps_scale(ENV['APP_NAME'], 'worker',
|
14
|
+
client.post_ps_scale(ENV['APP_NAME'], 'worker', workers_needed) unless workers == workers_needed
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.workers
|
18
|
-
client.get_ps(ENV['APP_NAME']).body.count { |p| p[
|
18
|
+
client.get_ps(ENV['APP_NAME']).body.count { |p| p['process'] =~ /worker\.\d?/ }
|
19
19
|
end
|
20
20
|
|
21
21
|
# Returns the number of workers needed based on the current number of pending jobs and the settings defined by:
|
@@ -25,7 +25,7 @@ module Delayed
|
|
25
25
|
# ENV['WORKLESS_MIN_WORKERS']
|
26
26
|
#
|
27
27
|
def self.workers_needed
|
28
|
-
[[(
|
28
|
+
[[(jobs.count.to_f / workers_ratio).ceil, max_workers].min, min_workers].max
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.workers_ratio
|
@@ -46,4 +46,4 @@ module Delayed
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
|
-
end
|
49
|
+
end
|
@@ -4,7 +4,6 @@ module Delayed
|
|
4
4
|
module Workless
|
5
5
|
module Scaler
|
6
6
|
class Local < Base
|
7
|
-
|
8
7
|
def self.executable_prefix
|
9
8
|
if defined? Delayed::Compatibility.executable_prefix
|
10
9
|
Delayed::Compatibility.executable_prefix
|
@@ -14,22 +13,22 @@ module Delayed
|
|
14
13
|
end
|
15
14
|
|
16
15
|
def self.up
|
17
|
-
if
|
18
|
-
Rush::Box.new[Rails.root].bash("#{executable_prefix}/delayed_job start -i workless", :
|
16
|
+
if workers == 0
|
17
|
+
Rush::Box.new[Rails.root].bash("#{executable_prefix}/delayed_job start -i workless", background: true)
|
19
18
|
sleep 1
|
20
19
|
end
|
21
20
|
true
|
22
21
|
end
|
23
22
|
|
24
23
|
def self.down
|
25
|
-
if
|
26
|
-
Rush::Box.new[Rails.root].bash("#{executable_prefix}/delayed_job stop -i workless", :
|
24
|
+
if workers > 0 && jobs.count == 0
|
25
|
+
Rush::Box.new[Rails.root].bash("#{executable_prefix}/delayed_job stop -i workless", background: true)
|
27
26
|
end
|
28
27
|
true
|
29
28
|
end
|
30
29
|
|
31
30
|
def self.workers
|
32
|
-
Rush::Box.new.processes.filter(:
|
31
|
+
Rush::Box.new.processes.filter(cmdline: /delayed_job start -i workless|delayed_job.workless/).size
|
33
32
|
end
|
34
33
|
end
|
35
34
|
end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
require 'heroku-api'
|
2
|
+
require File.dirname(__FILE__) + '/workless/scalers/base'
|
3
|
+
require File.dirname(__FILE__) + '/workless/scaler'
|
4
|
+
require File.dirname(__FILE__) + '/workless/middleware/workless_checker' if defined?(Rails::Railtie)
|
5
|
+
require File.dirname(__FILE__) + '/workless/railtie' if defined?(Rails::Railtie)
|
data/rails/init.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require File.dirname(__FILE__) +
|
1
|
+
require File.dirname(__FILE__) + '/../lib/workless/initialize'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workless_revived
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- davidakachaos
|
@@ -14,16 +14,16 @@ dependencies:
|
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: heroku-api
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,7 +88,6 @@ extra_rdoc_files: []
|
|
88
88
|
files:
|
89
89
|
- LICENSE
|
90
90
|
- README.md
|
91
|
-
- lib/workless.rb
|
92
91
|
- lib/workless/initialize.rb
|
93
92
|
- lib/workless/middleware/workless_checker.rb
|
94
93
|
- lib/workless/railtie.rb
|
@@ -98,6 +97,7 @@ files:
|
|
98
97
|
- lib/workless/scalers/heroku_cedar.rb
|
99
98
|
- lib/workless/scalers/local.rb
|
100
99
|
- lib/workless/scalers/null.rb
|
100
|
+
- lib/workless_revived.rb
|
101
101
|
- rails/init.rb
|
102
102
|
homepage: http://github.com/davidakachaos/workless_revived
|
103
103
|
licenses: []
|
data/lib/workless.rb
DELETED
@@ -1,5 +0,0 @@
|
|
1
|
-
require "heroku-api"
|
2
|
-
require File.dirname(__FILE__) + "/workless/scalers/base"
|
3
|
-
require File.dirname(__FILE__) + "/workless/scaler"
|
4
|
-
require File.dirname(__FILE__) + "/workless/middleware/workless_checker" if defined?(Rails::Railtie)
|
5
|
-
require File.dirname(__FILE__) + "/workless/railtie" if defined?(Rails::Railtie)
|