sad 1.5.14 → 1.5.15

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -7,5 +7,6 @@ gem 'eventmachine'
7
7
  gem 'em-hiredis'
8
8
  gem 'daemons'
9
9
  gem 'logger'
10
+ gem 'redis'
10
11
  gem "json"
11
12
  gem 'pry'
data/Gemfile.lock CHANGED
@@ -28,6 +28,7 @@ GEM
28
28
  rake (10.0.4)
29
29
  rdoc (4.0.0)
30
30
  json (~> 1.4)
31
+ redis (3.0.3)
31
32
  slop (3.4.4)
32
33
 
33
34
  PLATFORMS
@@ -42,3 +43,4 @@ DEPENDENCIES
42
43
  json
43
44
  logger
44
45
  pry
46
+ redis
data/README.md CHANGED
@@ -14,6 +14,11 @@ class SadJob
14
14
  'MySadJob'
15
15
  end
16
16
 
17
+ # optional
18
+ def self.redis
19
+ # support: em-hiredis, redis, redis-namespace
20
+ end
21
+
17
22
  def self.perform(*args)
18
23
  puts "I'm in sad job perform method."
19
24
  puts args
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.14
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
@@ -21,8 +21,8 @@ module Sad
21
21
  @_redis ||= EM::Hiredis.connect(@_redis_url)
22
22
  end
23
23
 
24
- def interval=(int)
25
- @_interval = int.to_i
24
+ def interval=(float)
25
+ @_interval = float.to_f
26
26
  end
27
27
 
28
28
  def interval
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
- ::Sad::Config.redis.rpush(self.sad_args['queue'], self.encode) do |value|
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
@@ -12,6 +12,7 @@ module Sad
12
12
  def enqueue(*args)
13
13
  payload = ::Sad::Payload.new(self.to_s, args)
14
14
  payload.sad_args['queue'] = queue_name
15
+ payload.redis = self.redis if self.respond_to?(:redis)
15
16
  payload.enqueue do |value|
16
17
  yield value if block_given?
17
18
  end
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.14"
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-18"
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'})
@@ -0,0 +1,8 @@
1
+ $:.unshift(File.dirname __FILE__)
2
+ require 'helper'
3
+
4
+ EM.run {
5
+ EM::PeriodicTimer.new(3){
6
+ SadJob.enqueue('this is some args', {:hello => 'code'})
7
+ }
8
+ }
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.14
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-18 00:00:00.000000000 Z
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: -4473646825682193399
206
+ hash: -2176915248707527757
190
207
  required_rubygems_version: !ruby/object:Gem::Requirement
191
208
  none: false
192
209
  requirements: