sweatshop 1.4.0

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/script/sweatshop ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ARGV.include?('-d')
4
+ ARGV.delete('-d')
5
+ ARGV.unshift('start') unless ARGV.detect{|a| ['start', 'restart'].include?(a)}
6
+
7
+ root = File.expand_path(File.dirname(__FILE__) + '/..')
8
+ ARGV << "--rails=#{root}"
9
+
10
+ system("ruby #{root}/vendor/gems/sweat_shop/lib/sweat_shop/sweatd.rb #{ARGV.join(' ')}")
11
+ exit $?.exitstatus
12
+ else
13
+ puts "Loading Rails..."
14
+ require File.dirname(__FILE__) + '/../config/environment'
15
+ puts "Listening for new tasks..."
16
+ SweatShop.do_all_tasks
17
+ end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/../lib/sweat_shop'
2
+ class HelloWorker < SweatShop::Worker
3
+ TEST_FILE = File.dirname(__FILE__) + '/test.txt' unless defined?(TEST_FILE)
4
+
5
+ def hello(name)
6
+ puts name
7
+ "Hi, #{name}"
8
+ end
9
+
10
+ after_task do |task|
11
+ File.open(TEST_FILE, 'w'){|f| f << task[:result]}
12
+ end
13
+ end
@@ -0,0 +1,72 @@
1
+ require File.dirname(__FILE__) + '/../lib/sweat_shop'
2
+ require File.dirname(__FILE__) + '/test_helper'
3
+ require File.dirname(__FILE__) + '/hello_worker'
4
+
5
+ class WorkerTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ File.delete(HelloWorker::TEST_FILE) if File.exist?(HelloWorker::TEST_FILE)
9
+ end
10
+
11
+ def teardown
12
+ SweatShop.instance_variable_set("@config", nil)
13
+ SweatShop.instance_variable_set("@queues", nil)
14
+ File.delete(HelloWorker::TEST_FILE) if File.exist?(HelloWorker::TEST_FILE)
15
+ end
16
+
17
+ should "daemonize" do
18
+ begin
19
+ SweatShop.config['enable'] = true
20
+ SweatShop.logger = :silent
21
+
22
+ HelloWorker.async_hello('Amos')
23
+
24
+ worker = File.expand_path(File.dirname(__FILE__) + '/hello_worker')
25
+ sweatd = "#{File.dirname(__FILE__)}/../lib/sweat_shop/sweatd.rb"
26
+
27
+ `ruby #{sweatd} --worker-file #{worker} start`
28
+ `ruby #{sweatd} stop`
29
+
30
+ File.delete('sweatd.log') if File.exist?('sweatd.log')
31
+ assert_equal 'Hi, Amos', File.read(HelloWorker::TEST_FILE)
32
+
33
+ rescue Exception => e
34
+ puts e.message
35
+ puts e.backtrace.join("\n")
36
+ fail "\n\n*** Functional test failed, is the rabbit server running on localhost? ***\n"
37
+ end
38
+ end
39
+
40
+ should "connect to fallback servers if the default one is down" do
41
+ begin
42
+ SweatShop.logger = :silent
43
+ SweatShop.config['enable'] = true
44
+ SweatShop.config['default']['cluster'] =
45
+ [
46
+ 'localhost:5671', # invalid
47
+ 'localhost:5672' # valid
48
+ ]
49
+ HelloWorker.async_hello('Amos')
50
+
51
+ assert_equal 'Amos', HelloWorker.dequeue[:args].first
52
+
53
+ HelloWorker.queue.client = nil
54
+
55
+ HelloWorker.stop
56
+ SweatShop.config['default']['cluster'] =
57
+ [
58
+ 'localhost:5671',# valid
59
+ 'localhost:5672' # invalid
60
+ ]
61
+
62
+ HelloWorker.async_hello('Amos')
63
+ assert_equal 'Amos', HelloWorker.dequeue[:args].first
64
+
65
+ rescue Exception => e
66
+ puts e.message
67
+ puts e.backtrace.join("\n")
68
+ fail "\n\n*** Functional test failed, is the rabbit server running on localhost? ***\n"
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,4 @@
1
+ require 'test/unit'
2
+ require 'shoulda'
3
+ require 'pp'
4
+
@@ -0,0 +1,78 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+ require File.dirname(__FILE__) + '/../lib/sweat_shop'
3
+
4
+ class SweatShopTest < Test::Unit::TestCase
5
+ SweatShop.workers = []
6
+
7
+ class HelloWorker < SweatShop::Worker
8
+ def hello(name)
9
+ "Hi, #{name}"
10
+ end
11
+ end
12
+
13
+ class GroupedWorker < SweatShop::Worker
14
+ queue_group :foo
15
+ end
16
+
17
+ should "group workers" do
18
+ assert_equal [HelloWorker, GroupedWorker], SweatShop.workers_in_group(:all)
19
+ assert_equal [HelloWorker], SweatShop.workers_in_group(:default)
20
+ assert_equal [GroupedWorker], SweatShop.workers_in_group(:foo)
21
+ end
22
+
23
+ should "synch call" do
24
+ worker = HelloWorker.new
25
+ assert_equal "Hi, Amos", worker.hello('Amos')
26
+ end
27
+
28
+ should "assign a uid" do
29
+ SweatShop.logger = :silent
30
+ SweatShop.config['enable'] = false
31
+ uid = HelloWorker.async_hello('Amos')
32
+ assert_not_nil uid
33
+ end
34
+
35
+ should "have before task" do
36
+ HelloWorker.before_task do
37
+ "hello"
38
+ end
39
+ assert_equal "hello", HelloWorker.before_task.call
40
+ end
41
+
42
+ should "have after task" do
43
+ HelloWorker.after_task do
44
+ "goodbye"
45
+ end
46
+ assert_equal "goodbye", HelloWorker.after_task.call
47
+ end
48
+
49
+ should "exception handler" do
50
+ SweatShop.logger = :silent
51
+
52
+ exception = nil
53
+ HelloWorker.on_exception do |e|
54
+ exception = e
55
+ end
56
+
57
+ HelloWorker.do_task(nil)
58
+ assert_equal NoMethodError, exception.class
59
+ end
60
+
61
+ should "chain before tasks" do
62
+ MESSAGES = []
63
+ class BaseWorker < SweatShop::Worker
64
+ before_task do |task|
65
+ MESSAGES << 'base'
66
+ end
67
+ end
68
+ class SubWorker < BaseWorker
69
+ before_task do |task|
70
+ MESSAGES << 'sub'
71
+ end
72
+ end
73
+ SubWorker.call_before_task('foo')
74
+ assert_equal ['base', 'sub'], MESSAGES
75
+ SweatShop.workers.delete(BaseWorker)
76
+ SweatShop.workers.delete(SubWorker)
77
+ end
78
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sweatshop
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Amos Elliston
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-19 00:00:00 -07:00
13
+ default_executable: sweatd
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: famoseagle-carrot
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.7.0
24
+ version:
25
+ description: See summary
26
+ email: amos@geni.com
27
+ executables:
28
+ - sweatd
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - LICENSE
33
+ - README.markdown
34
+ files:
35
+ - History.txt
36
+ - LICENSE
37
+ - README.markdown
38
+ - Rakefile
39
+ - VERSION.yml
40
+ - config/defaults.yml
41
+ - config/sweatshop.yml
42
+ - install.rb
43
+ - lib/message_queue/base.rb
44
+ - lib/message_queue/kestrel.rb
45
+ - lib/message_queue/rabbit.rb
46
+ - lib/sweat_shop.rb
47
+ - lib/sweat_shop/daemoned.rb
48
+ - lib/sweat_shop/metaid.rb
49
+ - lib/sweat_shop/sweatd.rb
50
+ - lib/sweat_shop/worker.rb
51
+ - script/initd.sh
52
+ - script/kestrel
53
+ - script/kestrel.sh
54
+ - script/sweatshop
55
+ - test/hello_worker.rb
56
+ - test/test_functional_worker.rb
57
+ - test/test_helper.rb
58
+ - test/test_sweatshop.rb
59
+ has_rdoc: true
60
+ homepage: http://github.com/famoseagle/sweat-shop
61
+ licenses: []
62
+
63
+ post_install_message:
64
+ rdoc_options:
65
+ - --charset=UTF-8
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ version:
80
+ requirements: []
81
+
82
+ rubyforge_project:
83
+ rubygems_version: 1.3.5
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: Sweatshop is a simple asynchronous worker queue build on top of rabbitmq/ampq
87
+ test_files:
88
+ - test/hello_worker.rb
89
+ - test/test_functional_worker.rb
90
+ - test/test_helper.rb
91
+ - test/test_sweatshop.rb