beanworker 0.0.1 → 0.0.2
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.
- data/History.txt +7 -0
- data/Manifest.txt +2 -1
- data/README.rdoc +34 -0
- data/bin/beanworker +27 -0
- data/lib/beanworker/worker.rb +26 -0
- data/lib/beanworker.rb +1 -1
- metadata +11 -9
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -21,6 +21,40 @@ beanstalk-client
|
|
21
21
|
-P|--pid - path to the directory, where pid-file(s) will be saved, default is current directory
|
22
22
|
|
23
23
|
== DSL
|
24
|
+
jobs.rb:
|
25
|
+
|
26
|
+
class SomeWorker
|
27
|
+
extend Beanworker::Worker
|
28
|
+
|
29
|
+
class << self
|
30
|
+
def some_job(args={})
|
31
|
+
do_somethin_slow_with(args)
|
32
|
+
end
|
33
|
+
|
34
|
+
def another_job(args={})
|
35
|
+
do_something
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class AnotherWorker
|
41
|
+
extend Beanworker::Worker
|
42
|
+
|
43
|
+
class << self
|
44
|
+
def scheduled_job(args={})
|
45
|
+
do_somethin_slow_with(args)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
schedule :scheduled_job, 2*24*3600, at: '04:30', timeout: 3600, { param1: 'some_value' }
|
50
|
+
end
|
51
|
+
|
52
|
+
SlowWorker.perform 2, :some_job.
|
53
|
+
:another_job
|
54
|
+
|
55
|
+
AnotherWorker.perform 1, :scheduled_jov
|
56
|
+
|
57
|
+
== API:
|
24
58
|
|
25
59
|
TODO
|
26
60
|
|
data/bin/beanworker
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
if ARGV[0] == '-h' || ARGV[0] == '--help'
|
3
|
+
abort 'beanworker <jobs.rb> <host:port|path/to/file.yml> [-d|--daemonize] [-m|--monitor] [-P|--pid <path/to/pid/dir>]'
|
4
|
+
end
|
5
|
+
|
6
|
+
if ARGV[0] == '-v' || ARGV[0] == '--version'
|
7
|
+
abort Beanworker::VERSION
|
8
|
+
end
|
9
|
+
|
10
|
+
opts = {
|
11
|
+
daemonize: ARGV.include?('-d') || ARGV.include?('--daemonize'),
|
12
|
+
monitor: ARGV.include?('-m') || ARGV.include?('--monitor'),
|
13
|
+
pid_dir: (i = ARGV.index('-P') || ARGV.index('--pid')) ? File.expand_path(ARGV[i+1], Dir.pwd) : './',
|
14
|
+
jobs_file: File.expand_path(ARGV[0], Dir.pwd)
|
15
|
+
}
|
16
|
+
|
17
|
+
conn_file = File.expand_path(ARGV[1], Dir.pwd)
|
18
|
+
File.file?(conn_file) ? opts[:connection_file] = conn_file : opts[:connection_host] = ARGV[1]
|
19
|
+
|
20
|
+
trap('INT') do
|
21
|
+
puts 'Exiting'
|
22
|
+
exit
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
require File.expand_path('../../lib/beanworker', __FILE__)
|
27
|
+
Beanworker.run opts
|
data/lib/beanworker/worker.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#coding: utf-8
|
2
2
|
require 'timeout'
|
3
|
+
require 'time'
|
3
4
|
require 'pry'
|
4
5
|
|
5
6
|
module Beanworker
|
@@ -16,6 +17,22 @@ module Beanworker
|
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
20
|
+
def schedule(name, frequency, opts={}, *args)
|
21
|
+
at = make_first_schedule(frequency, opts[:at])
|
22
|
+
timeout_secs = [opts[:timeout] || frequency, frequency-5].min
|
23
|
+
Thread.new do
|
24
|
+
loop do
|
25
|
+
sleep(at - Time.now)
|
26
|
+
Timeout.timeout timeout_secs do
|
27
|
+
self.send(name, *args)
|
28
|
+
end
|
29
|
+
at += frequency
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
19
36
|
def get_one_job(connection)
|
20
37
|
job = connection.reserve
|
21
38
|
name, args = job.stats['tube'].gsub('.', '_'), job.ybody
|
@@ -47,5 +64,14 @@ module Beanworker
|
|
47
64
|
def fork_default(val)
|
48
65
|
@need_fork = val
|
49
66
|
end
|
67
|
+
|
68
|
+
def make_first_schedule(frequency, at)
|
69
|
+
if at && (frequency % (24*3600) == 0)
|
70
|
+
t = Time.parse at
|
71
|
+
t > Time.now ? t : (t + 24*3600)
|
72
|
+
else
|
73
|
+
Time.now + frequency
|
74
|
+
end
|
75
|
+
end
|
50
76
|
end
|
51
77
|
end
|
data/lib/beanworker.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beanworker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
12
|
+
date: 2011-10-24 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: beanstalk-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &15411580 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *15411580
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: beanqueue
|
27
|
-
requirement: &
|
27
|
+
requirement: &15410040 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.1.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *15410040
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: hoe
|
38
|
-
requirement: &
|
38
|
+
requirement: &15407500 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,13 +43,14 @@ dependencies:
|
|
43
43
|
version: '2.12'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *15407500
|
47
47
|
description: ! 'It is a worker-side Beanstalk-based job-queueing dispatcher
|
48
48
|
|
49
49
|
This is a pre-release, I will complete tests and docs in couple days'
|
50
50
|
email:
|
51
51
|
- gearhead@it-primorye.ru
|
52
|
-
executables:
|
52
|
+
executables:
|
53
|
+
- beanworker
|
53
54
|
extensions: []
|
54
55
|
extra_rdoc_files:
|
55
56
|
- History.txt
|
@@ -61,6 +62,7 @@ files:
|
|
61
62
|
- Rakefile
|
62
63
|
- lib/beanworker.rb
|
63
64
|
- lib/beanworker/worker.rb
|
65
|
+
- bin/beanworker
|
64
66
|
- test/test_beanworker.rb
|
65
67
|
- .gemtest
|
66
68
|
homepage: http://github.com/GearHead90/beanworker
|