simpleworker 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -1
  3. data/.travis.yml +6 -0
  4. data/LICENSE +1 -1
  5. data/README.md +52 -15
  6. data/examples/basic.rb +26 -0
  7. data/examples/cucumber_worker.rb +20 -0
  8. data/examples/local_worker.rb +8 -0
  9. data/examples/ssh_worker.rb +13 -0
  10. data/examples/worker.rb +12 -0
  11. data/lib/simpleworker/abstract_listener.rb +41 -0
  12. data/lib/simpleworker/event_monitor.rb +50 -0
  13. data/lib/simpleworker/event_server.rb +48 -0
  14. data/lib/simpleworker/local_worker.rb +17 -10
  15. data/lib/simpleworker/logging_listener.rb +65 -0
  16. data/lib/simpleworker/redis_support.rb +33 -0
  17. data/lib/simpleworker/retry_listener.rb +32 -0
  18. data/lib/simpleworker/runner.rb +85 -26
  19. data/lib/simpleworker/scripts/expired_tasks.lua +13 -0
  20. data/lib/simpleworker/scripts/lpopall.lua +9 -0
  21. data/lib/simpleworker/scripts/reliable_queue.lua +12 -0
  22. data/lib/simpleworker/ssh_worker.rb +40 -19
  23. data/lib/simpleworker/task_queue.rb +78 -0
  24. data/lib/simpleworker/version.rb +1 -1
  25. data/lib/simpleworker.rb +12 -1
  26. data/simpleworker.gemspec +1 -1
  27. data/spec/simpleworker/event_monitor_spec.rb +92 -0
  28. data/spec/simpleworker/event_server_spec.rb +24 -0
  29. data/spec/simpleworker/local_worker_spec.rb +11 -18
  30. data/spec/simpleworker/logging_listener_spec.rb +44 -0
  31. data/spec/simpleworker/retry_listener_spec.rb +25 -0
  32. data/spec/simpleworker/runner_spec.rb +74 -12
  33. data/spec/simpleworker/ssh_worker_spec.rb +20 -31
  34. data/spec/simpleworker/task_queue_spec.rb +76 -0
  35. metadata +42 -5
  36. data/lib/simpleworker/abstract_worker.rb +0 -42
  37. data/lib/simpleworker/bash/simple-localworker +0 -8
  38. data/lib/simpleworker/bash/ssh-remoteworker +0 -21
@@ -0,0 +1,76 @@
1
+ require File.expand_path('../../spec_helper.rb', __FILE__)
2
+
3
+ module SimpleWorker
4
+ describe TaskQueue do
5
+ let(:redis) { double(Redis, :script => 'my_sha') }
6
+ let(:jobid) { 'my_jobid' }
7
+ let(:task) { 'my_task' }
8
+ let(:hostname) { 'my_hostname' }
9
+ let(:task_queue) { TaskQueue.new(redis, hostname, jobid) }
10
+
11
+ before(:each) do
12
+ redis.should_receive(:get).with("simpleworker:config:my_jobid").and_return({'task_timeout' => 10}.to_json)
13
+ end
14
+
15
+ it 'can log node start' do
16
+ redis.should_receive(:rpush).with('simpleworker:log:my_jobid', ['on_node_start', hostname].to_json)
17
+
18
+ task_queue.fire_start
19
+ end
20
+
21
+ it 'can log node stop' do
22
+ redis.should_receive(:rpush).with('simpleworker:log:my_jobid', ['on_node_stop', hostname].to_json)
23
+
24
+ task_queue.fire_stop
25
+ end
26
+
27
+ it 'can log task start' do
28
+ redis.should_receive(:rpush).with('simpleworker:log:my_jobid', ['on_task_start', hostname, task].to_json)
29
+
30
+ task_queue.fire_task_start(task)
31
+ end
32
+
33
+ it 'can log task stop' do
34
+ redis.should_receive(:rpush).with('simpleworker:log:my_jobid', ['on_task_stop', hostname, task].to_json)
35
+
36
+ task_queue.fire_task_stop(task)
37
+ end
38
+
39
+ it 'can log message' do
40
+ msg = 'hello'
41
+ redis.should_receive(:rpush).with('simpleworker:log:my_jobid', ['on_log', hostname, msg].to_json)
42
+
43
+ task_queue.fire_log_message(msg)
44
+ end
45
+
46
+ it 'can expire current task' do
47
+ redis.should_receive(:evalsha).and_return('first_task')
48
+ redis.should_receive(:del).with('simpleworker:active:my_jobid:my_hostname:first_task')
49
+
50
+ task_queue.pop
51
+ task_queue.expire_current_task
52
+ end
53
+
54
+ it 'can pop from reliable queue' do
55
+ redis.should_receive(:evalsha).and_return('first_task', 'second_task', nil)
56
+ redis.should_receive(:srem).with("simpleworker:active:#{jobid}", "simpleworker:active:#{jobid}:#{hostname}:first_task")
57
+ redis.should_receive(:srem).with("simpleworker:active:#{jobid}", "simpleworker:active:#{jobid}:#{hostname}:second_task")
58
+
59
+ task_queue.pop.should eq 'first_task'
60
+ task_queue.pop.should eq 'second_task'
61
+ task_queue.pop.should be nil
62
+ end
63
+
64
+ it 'can iterate through tasks' do
65
+ redis.should_receive(:evalsha).and_return('first_task', 'second_task', nil)
66
+ redis.stub(:srem)
67
+
68
+ expect(task_queue).to receive(:fire_task_start).exactly(2).times
69
+ expect(task_queue).to receive(:fire_task_stop).exactly(2).times
70
+
71
+ result = []
72
+ task_queue.each_task { |task| result << task }
73
+ result.should eq ['first_task', 'second_task']
74
+ end
75
+ end
76
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simpleworker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Gowan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-23 00:00:00.000000000 Z
11
+ date: 2014-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: childprocess
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.5.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: redis
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.1
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -60,22 +74,40 @@ extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
76
  - ".rspec"
77
+ - ".travis.yml"
63
78
  - Gemfile
64
79
  - LICENSE
65
80
  - README.md
66
81
  - Rakefile
82
+ - examples/basic.rb
83
+ - examples/cucumber_worker.rb
84
+ - examples/local_worker.rb
85
+ - examples/ssh_worker.rb
86
+ - examples/worker.rb
67
87
  - lib/simpleworker.rb
68
- - lib/simpleworker/abstract_worker.rb
69
- - lib/simpleworker/bash/simple-localworker
70
- - lib/simpleworker/bash/ssh-remoteworker
88
+ - lib/simpleworker/abstract_listener.rb
89
+ - lib/simpleworker/event_monitor.rb
90
+ - lib/simpleworker/event_server.rb
71
91
  - lib/simpleworker/local_worker.rb
92
+ - lib/simpleworker/logging_listener.rb
93
+ - lib/simpleworker/redis_support.rb
94
+ - lib/simpleworker/retry_listener.rb
72
95
  - lib/simpleworker/runner.rb
96
+ - lib/simpleworker/scripts/expired_tasks.lua
97
+ - lib/simpleworker/scripts/lpopall.lua
98
+ - lib/simpleworker/scripts/reliable_queue.lua
73
99
  - lib/simpleworker/ssh_worker.rb
100
+ - lib/simpleworker/task_queue.rb
74
101
  - lib/simpleworker/version.rb
75
102
  - simpleworker.gemspec
103
+ - spec/simpleworker/event_monitor_spec.rb
104
+ - spec/simpleworker/event_server_spec.rb
76
105
  - spec/simpleworker/local_worker_spec.rb
106
+ - spec/simpleworker/logging_listener_spec.rb
107
+ - spec/simpleworker/retry_listener_spec.rb
77
108
  - spec/simpleworker/runner_spec.rb
78
109
  - spec/simpleworker/ssh_worker_spec.rb
110
+ - spec/simpleworker/task_queue_spec.rb
79
111
  - spec/spec_helper.rb
80
112
  homepage: https://github.com/jesg/simpleworker
81
113
  licenses:
@@ -102,7 +134,12 @@ signing_key:
102
134
  specification_version: 4
103
135
  summary: Distribute ruby scripts on multiple machines
104
136
  test_files:
137
+ - spec/simpleworker/event_monitor_spec.rb
138
+ - spec/simpleworker/event_server_spec.rb
105
139
  - spec/simpleworker/local_worker_spec.rb
140
+ - spec/simpleworker/logging_listener_spec.rb
141
+ - spec/simpleworker/retry_listener_spec.rb
106
142
  - spec/simpleworker/runner_spec.rb
107
143
  - spec/simpleworker/ssh_worker_spec.rb
144
+ - spec/simpleworker/task_queue_spec.rb
108
145
  - spec/spec_helper.rb
@@ -1,42 +0,0 @@
1
-
2
- module SimpleWorker::AbstractWorker
3
-
4
- attr_accessor :script, :cmd
5
-
6
- def start
7
- if script.kind_of? Array
8
- @process = ChildProcess.build *script
9
- else
10
- @process = ChildProcess.build script
11
- end
12
-
13
- @process.io.inherit!
14
-
15
- set_process_env
16
-
17
- @process.start
18
- end
19
-
20
- def wait
21
- @process.wait
22
- end
23
-
24
- def stop
25
- @process.stop
26
- end
27
-
28
- def env
29
- @env
30
- end
31
-
32
- private
33
-
34
- def set_process_env
35
- env['cmd'] ||= cmd
36
-
37
- env.each do |key, value|
38
- @process.environment[key] = value
39
- end
40
- end
41
-
42
- end
@@ -1,8 +0,0 @@
1
- #!/bin/bash
2
-
3
- echo "Ruby Version $(ruby -v)"
4
- echo "Which ruby: $(which ruby)"
5
-
6
- bundle install
7
- bundle exec ${cmd}
8
-
@@ -1,21 +0,0 @@
1
- #!/bin/bash
2
-
3
- rsync -ar --delete -e ssh "${PWD}/" "${user}@${host}:${directory}"
4
-
5
- remote_script=$(cat << EOF
6
-
7
- cd ${directory};
8
- echo "Ruby Version: \$(ruby -v)";
9
- echo "Which ruby: \$(which ruby)";
10
-
11
- echo "PWD: \${PWD}";
12
-
13
- bundle install;
14
- bundle exec ${cmd};
15
-
16
- EOF
17
- )
18
-
19
- ssh "${user}@${host}" "bash -lc '${remote_script}'"
20
-
21
- rsync -ar -e ssh "${user}@${host}:${directory}/" "${PWD}/"