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 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: