hard_worker 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +6 -1
- data/Gemfile.lock +1 -1
- data/README.md +19 -8
- data/lib/hard_worker.rb +23 -0
- data/lib/hard_worker/version.rb +1 -1
- data/lib/hard_worker/worker.rb +12 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b52df482216a2a82f96d8bdaca1f10e7982cb5c897fb0488abb2294ecfa0e33a
|
4
|
+
data.tar.gz: 5b7368324bff956a7f31987a209f07ab685e0fdc9aed96dd4cec5e2bf20014eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 680f5d641d281b19b5362ba5380a804582efa1d9a46be5c582f527639aea056351cc310768edeca85fc600770390f20d79198edda9856efc93aefe5beb030ec3
|
7
|
+
data.tar.gz: c4f544d238c9f2403fde1f88009b3c5f0d75001b5310d84c9cd97c6f1049d6e5618e08b274a1b3778feb2e83ae80a1311063d9128d0344325a9247757b92b9b2
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -8,4 +8,9 @@ Things are almost working. You can enqueue jobs! That should be more than enough
|
|
8
8
|
|
9
9
|
## [0.0.2] - 2021-07-15
|
10
10
|
|
11
|
-
- Bugfix: was requiring byebug.
|
11
|
+
- Bugfix: was requiring byebug.
|
12
|
+
|
13
|
+
## [0.0.3] - 2021-07-16
|
14
|
+
|
15
|
+
- YAML Marshalled queue! So now the queue stays in memory even if restarted. Though kill and term signals still need catching.. that is not done yet.
|
16
|
+
- Also, now you can use classes! As long as the class has a perform-method.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
# Hardworker
|
2
2
|
|
3
|
-
This is HardWorker, a new Ruby backend job library! It supports running procs in the background.
|
4
|
-
|
3
|
+
This is HardWorker, a new Ruby backend job library! It supports running procs and classes in the background.
|
4
|
+
~~Also, you lose all jobs if you restart the process.~~ It now uses YAML to load the queue into a file, which it then calls at startup to find the previous jobs.
|
5
5
|
|
6
|
-
|
6
|
+
It uses dRuby to do the communication! Which is absolute great. No need for Redis or PostgreSQL, just Ruby standard libraries.
|
7
7
|
|
8
8
|
TODO LIST:
|
9
|
-
- Marshal the job queue into a file so you don't lose all progress
|
9
|
+
- ~~Marshal the job queue into a file so you don't lose all progress~~
|
10
|
+
(Ended up using YAML)
|
10
11
|
- Support Rails and ActiveJob
|
11
12
|
- Have a web UI
|
12
13
|
- Do some performance testing
|
@@ -26,13 +27,13 @@ And then execute:
|
|
26
27
|
|
27
28
|
Or install it yourself as:
|
28
29
|
|
29
|
-
$ gem install
|
30
|
+
$ gem install hard_worker
|
30
31
|
|
31
32
|
## Usage
|
32
33
|
|
33
34
|
Start up HardWorker!
|
34
35
|
|
35
|
-
$
|
36
|
+
$ hard_worker
|
36
37
|
|
37
38
|
Then, in another program, connect to HardWorker and give it a job to do.
|
38
39
|
Sample below:
|
@@ -47,8 +48,18 @@ class DummyWorker
|
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
51
|
+
class DumDum
|
52
|
+
# classes need to have a perform method
|
53
|
+
def perform
|
54
|
+
5 / 4
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Need to start dRuby on the client side
|
59
|
+
DRb.start_service
|
50
60
|
dummy = DummyWorker.new
|
51
61
|
dummy.queue.push(proc { 2 / 1 })
|
62
|
+
dummy.queue.push(DumDum.new)
|
52
63
|
```
|
53
64
|
|
54
65
|
|
@@ -60,7 +71,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
60
71
|
|
61
72
|
## Contributing
|
62
73
|
|
63
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
74
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/sampokuokkanen/hard_worker. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/hardworker/blob/master/CODE_OF_CONDUCT.md).
|
64
75
|
|
65
76
|
## License
|
66
77
|
|
@@ -68,4 +79,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
68
79
|
|
69
80
|
## Code of Conduct
|
70
81
|
|
71
|
-
Everyone interacting in the
|
82
|
+
Everyone interacting in the HardWorker project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/hardworker/blob/master/CODE_OF_CONDUCT.md).
|
data/lib/hard_worker.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative 'hard_worker/version'
|
4
4
|
require_relative 'hard_worker/worker'
|
5
5
|
require 'drb'
|
6
|
+
require 'yaml'
|
6
7
|
|
7
8
|
# HardWorker is a pure Ruby job backend.
|
8
9
|
# It has limited functionality, as it only accepts
|
@@ -11,9 +12,11 @@ require 'drb'
|
|
11
12
|
# Loses all jobs if restarted.
|
12
13
|
class HardWorker
|
13
14
|
URI = 'druby://localhost:8788'
|
15
|
+
FILE_NAME = 'hard_worker_dump'
|
14
16
|
@@queue = Queue.new
|
15
17
|
|
16
18
|
def initialize(workers: 1, connect: false)
|
19
|
+
load_jobs
|
17
20
|
@worker_list = []
|
18
21
|
workers.times do |_i|
|
19
22
|
@worker_list << Thread.new { Worker.new }
|
@@ -25,10 +28,30 @@ class HardWorker
|
|
25
28
|
DRb.thread.join
|
26
29
|
end
|
27
30
|
|
31
|
+
def load_jobs
|
32
|
+
jobs = YAML.load(File.binread(FILE_NAME))
|
33
|
+
jobs.each do |job|
|
34
|
+
@@queue.push(job)
|
35
|
+
end
|
36
|
+
rescue StandardError
|
37
|
+
# do nothing
|
38
|
+
end
|
39
|
+
|
28
40
|
def stop_workers
|
29
41
|
@worker_list.each do |worker|
|
30
42
|
Thread.kill(worker)
|
31
43
|
end
|
44
|
+
class_array = []
|
45
|
+
@@queue.size.times do |_i|
|
46
|
+
next if (klass_or_proc = @@queue.pop).instance_of?(Proc)
|
47
|
+
|
48
|
+
class_array << klass_or_proc
|
49
|
+
end
|
50
|
+
File.open(FILE_NAME, 'wb') { |f| f.write(YAML.dump(class_array)) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def reset_queue!
|
54
|
+
@@queue = Queue.new
|
32
55
|
end
|
33
56
|
|
34
57
|
def job_list
|
data/lib/hard_worker/version.rb
CHANGED
data/lib/hard_worker/worker.rb
CHANGED
@@ -8,9 +8,20 @@ class HardWorker
|
|
8
8
|
|
9
9
|
def start_working
|
10
10
|
loop do
|
11
|
-
|
11
|
+
job = HardWorker.fetch_job
|
12
|
+
next unless job
|
13
|
+
|
14
|
+
call_job(job)
|
12
15
|
puts 'fetching jobs...'
|
13
16
|
end
|
14
17
|
end
|
18
|
+
|
19
|
+
def call_job(job)
|
20
|
+
if job.instance_of?(Proc)
|
21
|
+
pp job.call
|
22
|
+
else
|
23
|
+
pp job&.perform
|
24
|
+
end
|
25
|
+
end
|
15
26
|
end
|
16
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hard_worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sampo Kuokkanen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: drb
|