job_boss 0.5.5 → 0.5.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +7 -7
- data/doc/ActiveSupport/TestCase.html +2 -2
- data/doc/JobBoss/Boss.html +222 -221
- data/doc/JobBoss/Config.html +43 -43
- data/doc/JobBoss/Job.html +4 -4
- data/doc/JobBoss/Queuer.html +40 -39
- data/doc/created.rid +9 -9
- data/doc/index.html +4 -4
- data/doc/lib/job_boss/boss_rb.html +1 -1
- data/doc/lib/job_boss/config_rb.html +3 -1
- data/doc/lib/job_boss/job_rb.html +1 -1
- data/doc/lib/job_boss/queuer_rb.html +3 -1
- data/doc/lib/migrate_rb.html +1 -1
- data/doc/test/test_helper_rb.html +1 -1
- data/doc/test/unit/daemon_test_rb.html +1 -1
- data/doc/test/unit/job_test_rb.html +1 -1
- data/job_boss.gemspec +1 -1
- data/lib/job_boss/boss.rb +46 -41
- data/lib/job_boss/config.rb +16 -14
- data/lib/job_boss/job.rb +3 -3
- data/lib/job_boss/queuer.rb +1 -0
- data/test/test_helper.rb +1 -1
- data/test/unit/daemon_test.rb +32 -5
- metadata +3 -3
data/lib/job_boss/config.rb
CHANGED
@@ -1,46 +1,48 @@
|
|
1
|
+
require 'active_support/core_ext/string'
|
2
|
+
|
1
3
|
module JobBoss
|
2
4
|
class Config
|
3
5
|
attr_accessor :application_root, :database_yaml_path, :log_path, :jobs_path, :sleep_interval, :employee_limit, :environment
|
4
6
|
|
5
7
|
def parse_args(argv, options = {})
|
6
|
-
@application_root = File.expand_path(options[:working_dir] || Dir.pwd)
|
7
|
-
@database_yaml_path = 'config/database.yml'
|
8
|
-
@log_path = 'log/job_boss.log'
|
9
|
-
@jobs_path = 'app/jobs'
|
10
|
-
@sleep_interval = 0.5
|
11
|
-
@employee_limit = 4
|
12
|
-
@environment = 'development'
|
8
|
+
@application_root = File.expand_path(ENV['JB_APPLICATION_ROOT'] || options[:working_dir] || Dir.pwd)
|
9
|
+
@database_yaml_path = ENV['JB_DATABASE_YAML_PATH'] || 'config/database.yml'
|
10
|
+
@log_path = ENV['JB_LOG_PATH'] || 'log/job_boss.log'
|
11
|
+
@jobs_path = ENV['JB_JOBS_PATH'] || 'app/jobs'
|
12
|
+
@sleep_interval = ENV['JB_SLEEP_INTERVAL'].blank? ? 0.5 : ENV['JB_SLEEP_INTERVAL'].to_f
|
13
|
+
@employee_limit = ENV['JB_EMPLOYEE_LIMIT'].blank? ? 4 : ENV['JB_EMPLOYEE_LIMIT'].to_i
|
14
|
+
@environment = ENV['JB_ENVIRONMENT'] || 'development'
|
13
15
|
|
14
16
|
require 'optparse'
|
15
17
|
|
16
18
|
OptionParser.new do |opts|
|
17
19
|
opts.banner = "Usage: job_boss [start|stop|restart|run|zap] [-- <options>]"
|
18
20
|
|
19
|
-
opts.on("-r", "--application-root PATH", "Path for the application root upon which other paths depend (defaults to .)") do |path|
|
21
|
+
opts.on("-r", "--application-root PATH", "Path for the application root upon which other paths depend (defaults to .) Environment variable: JB_APPLICATION_ROOT") do |path|
|
20
22
|
@application_root = File.expand_path(path)
|
21
23
|
end
|
22
24
|
|
23
|
-
opts.on("-d", "--database-yaml PATH", "Path for database YAML (defaults to <application-root>/#{@database_yaml_path})") do |path|
|
25
|
+
opts.on("-d", "--database-yaml PATH", "Path for database YAML (defaults to <application-root>/#{@database_yaml_path}) Environment variable: JB_DATABASE_YAML_PATH") do |path|
|
24
26
|
@database_yaml_path = path
|
25
27
|
end
|
26
28
|
|
27
|
-
opts.on("-l", "--log-path PATH", "Path for log file (defaults to <application-root>/#{@log_path})") do |path|
|
29
|
+
opts.on("-l", "--log-path PATH", "Path for log file (defaults to <application-root>/#{@log_path}) Environment variable: JB_LOG_PATH") do |path|
|
28
30
|
@log_path = path
|
29
31
|
end
|
30
32
|
|
31
|
-
opts.on("-j", "--jobs-path PATH", "Path to folder with job classes (defaults to <application-root>/#{@jobs_path})") do |path|
|
33
|
+
opts.on("-j", "--jobs-path PATH", "Path to folder with job classes (defaults to <application-root>/#{@jobs_path}) Environment variable: JB_JOBS_PATH") do |path|
|
32
34
|
@jobs_path = path
|
33
35
|
end
|
34
36
|
|
35
|
-
opts.on("-e", "--environment ENV", "Environment to use in database YAML file (defaults to '#{@environment}')") do |env|
|
37
|
+
opts.on("-e", "--environment ENV", "Environment to use in database YAML file (defaults to '#{@environment}') Environment variable: JB_ENVIRONMENT") do |env|
|
36
38
|
@environment = env
|
37
39
|
end
|
38
40
|
|
39
|
-
opts.on("-s", "--sleep-interval INTERVAL", Integer, "Number of seconds for the boss to sleep between checks of the queue (default #{@sleep_interval})") do |interval|
|
41
|
+
opts.on("-s", "--sleep-interval INTERVAL", Integer, "Number of seconds for the boss to sleep between checks of the queue (default #{@sleep_interval}) Environment variable: JB_SLEEP_INTERVAL") do |interval|
|
40
42
|
@sleep_interval = interval
|
41
43
|
end
|
42
44
|
|
43
|
-
opts.on("-c", "--employee-limit LIMIT", Integer, "Maximum number of employees (default 4)") do |limit|
|
45
|
+
opts.on("-c", "--employee-limit LIMIT", Integer, "Maximum number of employees (default 4) Environment variable: JB_EMPLOYEE_LIMIT") do |limit|
|
44
46
|
@employee_limit = limit
|
45
47
|
end
|
46
48
|
end.parse!(argv)
|
data/lib/job_boss/job.rb
CHANGED
@@ -12,9 +12,9 @@ module JobBoss
|
|
12
12
|
scope :completed, where('completed_at IS NOT NULL')
|
13
13
|
|
14
14
|
# Method used by the boss to dispatch an employee
|
15
|
-
def dispatch
|
15
|
+
def dispatch(boss)
|
16
16
|
mark_as_started
|
17
|
-
|
17
|
+
boss.logger.info "Dispatching Job ##{self.id}"
|
18
18
|
|
19
19
|
pid = fork do
|
20
20
|
ActiveRecord::Base.connection.reconnect!
|
@@ -29,7 +29,7 @@ module JobBoss
|
|
29
29
|
self.update_attribute(:result, value)
|
30
30
|
rescue Exception => exception
|
31
31
|
mark_exception(exception)
|
32
|
-
|
32
|
+
boss.logger.error "Error running job ##{self.id}!"
|
33
33
|
ensure
|
34
34
|
until mark_as_completed
|
35
35
|
sleep(1)
|
data/lib/job_boss/queuer.rb
CHANGED
data/test/test_helper.rb
CHANGED
data/test/unit/daemon_test.rb
CHANGED
@@ -1,29 +1,56 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class DaemonTest < ActiveSupport::TestCase
|
4
|
-
test "
|
4
|
+
test "Basic startup/shutdown" do
|
5
5
|
start_daemon(:application_root => @app_root_path)
|
6
6
|
|
7
7
|
wait_for_file(@log_path)
|
8
8
|
|
9
|
-
|
9
|
+
log_output = File.read(@log_path)
|
10
|
+
assert log_output.match("INFO -- : Started ActiveRecord connection in 'development' environment from database YAML: #{@db_yaml_path}")
|
11
|
+
assert log_output.match('INFO -- : Job Boss started')
|
12
|
+
assert log_output.match('INFO -- : Employee limit: 4')
|
13
|
+
|
10
14
|
|
11
15
|
stop_daemon
|
16
|
+
end
|
17
|
+
|
18
|
+
test "Startup/shutdown with environment variables" do
|
19
|
+
ENV['JB_APPLICATION_ROOT'] = @app_root_path
|
20
|
+
ENV['JB_EMPLOYEE_LIMIT'] = '2'
|
21
|
+
start_daemon
|
12
22
|
|
23
|
+
wait_for_file(@log_path)
|
13
24
|
|
25
|
+
log_output = File.read(@log_path)
|
26
|
+
assert log_output.match("INFO -- : Started ActiveRecord connection in 'development' environment from database YAML: #{@db_yaml_path}")
|
27
|
+
assert log_output.match('INFO -- : Job Boss started')
|
28
|
+
assert log_output.match('INFO -- : Employee limit: 2')
|
29
|
+
|
30
|
+
stop_daemon
|
31
|
+
|
32
|
+
ENV['JB_APPLICATION_ROOT'] = nil
|
33
|
+
ENV['JB_EMPLOYEE_LIMIT'] = nil
|
34
|
+
end
|
35
|
+
|
36
|
+
test "Startup with different command line options" do
|
14
37
|
custom_log_path = File.join('log', 'loggity.log')
|
15
38
|
full_custom_log_path = File.join(@app_root_path, custom_log_path)
|
16
39
|
|
17
|
-
|
40
|
+
ENV['JB_EMPLOYEE_LIMIT'] = '2' # Make sure application setting overrides environment variable
|
41
|
+
start_daemon(:application_root => @app_root_path, :log_path => custom_log_path, :environment => 'production', :employee_limit => 3)
|
18
42
|
wait_for_file(full_custom_log_path)
|
19
43
|
|
20
|
-
|
44
|
+
log_output = File.read(full_custom_log_path)
|
45
|
+
assert log_output.match("INFO -- : Started ActiveRecord connection in 'production' environment from database YAML: #{@db_yaml_path}")
|
46
|
+
assert log_output.match('INFO -- : Job Boss started')
|
47
|
+
assert log_output.match('INFO -- : Employee limit: 3')
|
21
48
|
assert File.exist?(File.join(@app_root_path, 'db', 'production.sqlite3'))
|
22
49
|
|
23
50
|
restart_daemon
|
24
51
|
|
25
52
|
stop_daemon
|
26
53
|
|
27
|
-
|
54
|
+
ENV['JB_EMPLOYEE_LIMIT'] = nil
|
28
55
|
end
|
29
56
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 5
|
8
|
-
-
|
9
|
-
version: 0.5.
|
8
|
+
- 7
|
9
|
+
version: 0.5.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Brian Underwood
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-12 00:00:00 -05:00
|
18
18
|
default_executable: job_boss
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|