sad 1.5.14 → 1.5.15
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/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/README.md +5 -0
- data/VERSION +1 -1
- data/lib/sad.rb +1 -5
- data/lib/sad/config.rb +2 -2
- data/lib/sad/payload.rb +18 -2
- data/lib/sad/runner.rb +17 -0
- data/lib/sad/tasks.rb +5 -4
- data/lib/sad/worker.rb +1 -0
- data/sad.gemspec +6 -2
- data/test/helper.rb +20 -0
- data/test/test_perform_with_exception.rb +0 -12
- data/test/test_redis_in_job.rb +8 -0
- metadata +20 -3
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.5.
|
|
1
|
+
1.5.15
|
data/lib/sad.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
$:.unshift File.join(File.dirname(__FILE__), '.')
|
|
2
2
|
|
|
3
|
-
require "active_support"
|
|
3
|
+
require "active_support/core_ext"
|
|
4
4
|
require "eventmachine"
|
|
5
5
|
require "em-hiredis"
|
|
6
6
|
|
|
@@ -28,7 +28,3 @@ module Sad
|
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
|
-
|
|
32
|
-
# EM.error_handler{
|
|
33
|
-
# ::Sad.logger.fatal("exception hit eventmachine!!!\n#{$!.inspect}")
|
|
34
|
-
# }
|
data/lib/sad/config.rb
CHANGED
data/lib/sad/payload.rb
CHANGED
|
@@ -2,7 +2,7 @@ require "json"
|
|
|
2
2
|
|
|
3
3
|
module Sad
|
|
4
4
|
class Payload
|
|
5
|
-
attr_accessor :klass, :args, :sad_args
|
|
5
|
+
attr_accessor :klass, :args, :sad_args, :redis
|
|
6
6
|
|
|
7
7
|
def initialize(klass, args = [], sad_args = {})
|
|
8
8
|
@klass = klass
|
|
@@ -11,6 +11,7 @@ module Sad
|
|
|
11
11
|
'retry' => 0,
|
|
12
12
|
'delay' => 0
|
|
13
13
|
}.update(sad_args)
|
|
14
|
+
self.redis ||= ::Sad::Config.redis
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def encode
|
|
@@ -29,6 +30,7 @@ module Sad
|
|
|
29
30
|
begin
|
|
30
31
|
@klass.constantize.send :perform, *@args
|
|
31
32
|
rescue Exception => e
|
|
33
|
+
::Sad.logger.error "Payload perform error:\n#{e.to_s}\n#{e.backtrace.join($/)}"
|
|
32
34
|
if self.sad_args['retry'] and (self.sad_args['retry'].to_i < ::Sad::Config.max_retry)
|
|
33
35
|
self.sad_args['retry'] = self.sad_args['retry'].to_i + 1
|
|
34
36
|
self.sad_args['delay'] = ::Sad::Config.interval * self.sad_args['retry']
|
|
@@ -40,11 +42,25 @@ module Sad
|
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
def enqueue(&blk)
|
|
43
|
-
|
|
45
|
+
self.wrap_redis_rpush(self.sad_args['queue'], self.encode) do |value|
|
|
44
46
|
blk.call(value) if blk
|
|
45
47
|
end
|
|
46
48
|
end
|
|
47
49
|
|
|
50
|
+
def wrap_redis_rpush(queue, data, &blk)
|
|
51
|
+
case self.redis.class.to_s
|
|
52
|
+
when "EM::Hiredis::Client", "EventMachine::Hiredis::Client"
|
|
53
|
+
self.redis.rpush(queue, data) do |value|
|
|
54
|
+
blk.call(value)
|
|
55
|
+
end
|
|
56
|
+
when "Redis", "Redis::Namespace"
|
|
57
|
+
self.redis.rpush(queue, data)
|
|
58
|
+
blk.call(data)
|
|
59
|
+
else
|
|
60
|
+
raise RuntimeError, "No redis client support!\nself.redis => #{self.redis.to_s}\n#{self.inspect}"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
48
64
|
def self.decode(json)
|
|
49
65
|
h = JSON.parse(json)
|
|
50
66
|
if h['sad_args'] or h['sad_args'] != ''
|
data/lib/sad/runner.rb
CHANGED
|
@@ -22,6 +22,8 @@ module Sad
|
|
|
22
22
|
if count and count != 0
|
|
23
23
|
count.times do |t|
|
|
24
24
|
Daemons.run_proc("Sad-#{Sad::Config.queue(ENV['QUEUE'])}-#{t+1}", opts) do
|
|
25
|
+
self.require_libs
|
|
26
|
+
self.show_info
|
|
25
27
|
EM.run{
|
|
26
28
|
Sad.logger.reopen
|
|
27
29
|
Sad::Server.run(ENV['QUEUE'])
|
|
@@ -30,5 +32,20 @@ module Sad
|
|
|
30
32
|
end
|
|
31
33
|
end
|
|
32
34
|
end
|
|
35
|
+
|
|
36
|
+
def self.show_info
|
|
37
|
+
p "Interval:#{::Sad::Config.interval}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.require_libs
|
|
41
|
+
if ENV['LIBS']
|
|
42
|
+
p "Require libs:"
|
|
43
|
+
ENV['LIBS'].split(',').each do |f|
|
|
44
|
+
file = File.join(ENV['SAD_OLD_ROOT'], f)
|
|
45
|
+
p("===LIBS: #{file}")
|
|
46
|
+
require file
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
33
50
|
end
|
|
34
51
|
end
|
data/lib/sad/tasks.rb
CHANGED
|
@@ -3,9 +3,10 @@ namespace :sad do
|
|
|
3
3
|
if defined?(Rails)
|
|
4
4
|
Rake::Task["environment"].invoke
|
|
5
5
|
end
|
|
6
|
+
ENV['SAD_OLD_ROOT'] = Dir.pwd
|
|
6
7
|
end
|
|
7
8
|
|
|
8
|
-
desc "start sad with args - COUNT=4 QUEUE=sosad DIR=./tmp/pids"
|
|
9
|
+
desc "start sad with args - COUNT=4 QUEUE=sosad DIR=./tmp/pids LIBS=lib/a.rb,ext/b.so"
|
|
9
10
|
task :start => [ :setup ] do
|
|
10
11
|
ENV['COUNT'] = '1' unless ENV['COUNT']
|
|
11
12
|
opts = {
|
|
@@ -18,7 +19,7 @@ namespace :sad do
|
|
|
18
19
|
Sad::Runner.exec(opts)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
desc "stop sad with args - COUNT=4 QUEUE=sosad DIR=./tmp/pids"
|
|
22
|
+
desc "stop sad with args - COUNT=4 QUEUE=sosad DIR=./tmp/pids LIBS=lib/a.rb,ext/b.so"
|
|
22
23
|
task :stop => [ :setup ] do
|
|
23
24
|
ENV['COUNT'] = '1' unless ENV['COUNT']
|
|
24
25
|
opts = {
|
|
@@ -31,7 +32,7 @@ namespace :sad do
|
|
|
31
32
|
Sad::Runner.exec(opts)
|
|
32
33
|
end
|
|
33
34
|
|
|
34
|
-
desc "restart sad with args - COUNT=4 QUEUE=sosad DIR=./tmp/pids"
|
|
35
|
+
desc "restart sad with args - COUNT=4 QUEUE=sosad DIR=./tmp/pids LIBS=lib/a.rb,ext/b.so"
|
|
35
36
|
task :restart => [ :setup ] do
|
|
36
37
|
ENV['COUNT'] = '1' unless ENV['COUNT']
|
|
37
38
|
opts = {
|
|
@@ -44,7 +45,7 @@ namespace :sad do
|
|
|
44
45
|
Sad::Runner.exec(opts)
|
|
45
46
|
end
|
|
46
47
|
|
|
47
|
-
desc "ontop sad with args - QUEUE=sosad DIR=./tmp/pids"
|
|
48
|
+
desc "ontop sad with args - QUEUE=sosad DIR=./tmp/pids LIBS=lib/a.rb,ext/b.so"
|
|
48
49
|
task :ontop => [ :setup ] do
|
|
49
50
|
ENV['COUNT'] = '1'
|
|
50
51
|
opts = {
|
data/lib/sad/worker.rb
CHANGED
data/sad.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "sad"
|
|
8
|
-
s.version = "1.5.
|
|
8
|
+
s.version = "1.5.15"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["\u{5d14}\u{5ce5}"]
|
|
12
|
-
s.date = "2013-07-
|
|
12
|
+
s.date = "2013-07-30"
|
|
13
13
|
s.description = "a simple em baseed background job worker."
|
|
14
14
|
s.email = "zheng.cuizh@gmail.com"
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -40,6 +40,7 @@ Gem::Specification.new do |s|
|
|
|
40
40
|
"test/test_logger_write_closed_file.rb",
|
|
41
41
|
"test/test_perform_with_exception.rb",
|
|
42
42
|
"test/test_redis.rb",
|
|
43
|
+
"test/test_redis_in_job.rb",
|
|
43
44
|
"test/test_sad.rb"
|
|
44
45
|
]
|
|
45
46
|
s.homepage = "http://github.com/charlescui/sad"
|
|
@@ -58,6 +59,7 @@ Gem::Specification.new do |s|
|
|
|
58
59
|
s.add_runtime_dependency(%q<em-hiredis>, [">= 0"])
|
|
59
60
|
s.add_runtime_dependency(%q<daemons>, [">= 0"])
|
|
60
61
|
s.add_runtime_dependency(%q<logger>, [">= 0"])
|
|
62
|
+
s.add_runtime_dependency(%q<redis>, [">= 0"])
|
|
61
63
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
|
62
64
|
s.add_runtime_dependency(%q<pry>, [">= 0"])
|
|
63
65
|
else
|
|
@@ -67,6 +69,7 @@ Gem::Specification.new do |s|
|
|
|
67
69
|
s.add_dependency(%q<em-hiredis>, [">= 0"])
|
|
68
70
|
s.add_dependency(%q<daemons>, [">= 0"])
|
|
69
71
|
s.add_dependency(%q<logger>, [">= 0"])
|
|
72
|
+
s.add_dependency(%q<redis>, [">= 0"])
|
|
70
73
|
s.add_dependency(%q<json>, [">= 0"])
|
|
71
74
|
s.add_dependency(%q<pry>, [">= 0"])
|
|
72
75
|
end
|
|
@@ -77,6 +80,7 @@ Gem::Specification.new do |s|
|
|
|
77
80
|
s.add_dependency(%q<em-hiredis>, [">= 0"])
|
|
78
81
|
s.add_dependency(%q<daemons>, [">= 0"])
|
|
79
82
|
s.add_dependency(%q<logger>, [">= 0"])
|
|
83
|
+
s.add_dependency(%q<redis>, [">= 0"])
|
|
80
84
|
s.add_dependency(%q<json>, [">= 0"])
|
|
81
85
|
s.add_dependency(%q<pry>, [">= 0"])
|
|
82
86
|
end
|
data/test/helper.rb
CHANGED
|
@@ -11,3 +11,23 @@ end
|
|
|
11
11
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
12
12
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
13
13
|
require 'sad'
|
|
14
|
+
require "redis"
|
|
15
|
+
|
|
16
|
+
$redis = Redis.new
|
|
17
|
+
|
|
18
|
+
class SadJob
|
|
19
|
+
extend ::Sad::Worker
|
|
20
|
+
|
|
21
|
+
def self.queue
|
|
22
|
+
'MySadJob'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.redis
|
|
26
|
+
$redis
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.perform(*args)
|
|
30
|
+
::Sad.logger.info("Enqueue with self.redis.")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
::Sad::Config.interval = 0.1
|
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
$:.unshift(File.dirname __FILE__)
|
|
2
2
|
require 'helper'
|
|
3
3
|
|
|
4
|
-
class SadJob
|
|
5
|
-
extend ::Sad::Worker
|
|
6
|
-
|
|
7
|
-
def self.queue
|
|
8
|
-
'MySadJob'
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def self.perform(*args)
|
|
12
|
-
raise RuntimeError, 'Error for test!!!!'
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
4
|
EM.run {
|
|
17
5
|
EM::PeriodicTimer.new(3){
|
|
18
6
|
SadJob.enqueue('this is some args', {:hello => 'code'})
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sad
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.5.
|
|
4
|
+
version: 1.5.15
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-07-
|
|
12
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: jeweler
|
|
@@ -107,6 +107,22 @@ dependencies:
|
|
|
107
107
|
- - ! '>='
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
109
|
version: '0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: redis
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
none: false
|
|
114
|
+
requirements:
|
|
115
|
+
- - ! '>='
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :runtime
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
122
|
+
requirements:
|
|
123
|
+
- - ! '>='
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '0'
|
|
110
126
|
- !ruby/object:Gem::Dependency
|
|
111
127
|
name: json
|
|
112
128
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -170,6 +186,7 @@ files:
|
|
|
170
186
|
- test/test_logger_write_closed_file.rb
|
|
171
187
|
- test/test_perform_with_exception.rb
|
|
172
188
|
- test/test_redis.rb
|
|
189
|
+
- test/test_redis_in_job.rb
|
|
173
190
|
- test/test_sad.rb
|
|
174
191
|
homepage: http://github.com/charlescui/sad
|
|
175
192
|
licenses:
|
|
@@ -186,7 +203,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
186
203
|
version: '0'
|
|
187
204
|
segments:
|
|
188
205
|
- 0
|
|
189
|
-
hash: -
|
|
206
|
+
hash: -2176915248707527757
|
|
190
207
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
208
|
none: false
|
|
192
209
|
requirements:
|