simpleworker 0.0.1 → 0.1.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.
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}/"