async-job 0.0.0 → 0.2.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/async/job/backend/redis/delayed_queue.rb +15 -3
- data/lib/async/job/backend/redis/processing_queue.rb +3 -5
- data/lib/async/job/backend/redis/ready_queue.rb +5 -1
- data/lib/async/job/backend/redis/server.rb +19 -15
- data/lib/async/job/backend/redis.rb +18 -0
- data/lib/async/job/backend.rb +11 -0
- data/lib/async/job/generic.rb +6 -6
- data/lib/async/job/version.rb +1 -1
- data/lib/async/job.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +4 -2
- metadata.gz.sig +1 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a816771aa488ab674c70776181481a1de707a9e6eb4c8520325b62049015a89
|
4
|
+
data.tar.gz: d15d2f5f2276d96da9c91a7badf33b6bb86b9159de1839b25b8b77fc666166af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d47ff44888af2ce4ca369e2d1644e4d99f0dd179ca73f1f50d2362154087560031d11490f5b3887f4f1303e8eaaf4d597d8de66804b3b5f38d19d1a4ab29b03
|
7
|
+
data.tar.gz: e8f8c0a81b6980aacc5f46a5fa53de95d74ffe190af12a06542b14599d32331e941d39b44d60b80a00eff88fbb78605303dd58dc73be0b98ec42351becc49365
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -19,6 +19,7 @@ module Async
|
|
19
19
|
if #jobs > 0 then
|
20
20
|
redis.call('LPUSH', KEYS[2], unpack(jobs))
|
21
21
|
end
|
22
|
+
return #jobs
|
22
23
|
LUA
|
23
24
|
|
24
25
|
def initialize(client, key)
|
@@ -30,9 +31,16 @@ module Async
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def start(ready_queue, resolution: 10, parent: Async::Task.current)
|
34
|
+
Console.info(self, "Starting delayed queue...")
|
33
35
|
parent.async do
|
34
36
|
while true
|
35
|
-
|
37
|
+
Console.debug(self, "Checking for delayed jobs...")
|
38
|
+
count = move(destination: ready_queue.key)
|
39
|
+
|
40
|
+
if count > 0
|
41
|
+
Console.info(self, "Moved #{count} delayed jobs to ready queue.")
|
42
|
+
end
|
43
|
+
|
36
44
|
sleep(resolution)
|
37
45
|
end
|
38
46
|
end
|
@@ -40,8 +48,12 @@ module Async
|
|
40
48
|
|
41
49
|
attr :key
|
42
50
|
|
43
|
-
def add(job, job_store)
|
44
|
-
|
51
|
+
def add(job, timestamp, job_store)
|
52
|
+
id = SecureRandom.uuid
|
53
|
+
|
54
|
+
@client.evalsha(@add, 2, job_store.key, @key, id, job, timestamp.to_f)
|
55
|
+
|
56
|
+
return id
|
45
57
|
end
|
46
58
|
|
47
59
|
def move(destination:, now: Time.now.to_i)
|
@@ -69,10 +69,7 @@ module Async
|
|
69
69
|
attr :key
|
70
70
|
|
71
71
|
def fetch
|
72
|
-
|
73
|
-
id = @client.brpoplpush(@ready_queue.key, @pending_key, 0)
|
74
|
-
Console.info(self, "Fetching job: #{id}")
|
75
|
-
return id
|
72
|
+
@client.brpoplpush(@ready_queue.key, @pending_key, 0)
|
76
73
|
end
|
77
74
|
|
78
75
|
def complete(id)
|
@@ -87,9 +84,10 @@ module Async
|
|
87
84
|
|
88
85
|
def start(delay: 5, factor: 2, parent: Async::Task.current)
|
89
86
|
heartbeat_key = "#{@key}:#{@id}"
|
90
|
-
|
91
87
|
start_time = Time.now.to_f
|
92
88
|
|
89
|
+
Console.info(self, "Starting processing queue...", key: @key, id: @id, heartbeat_key: heartbeat_key, delay: delay, factor: factor)
|
90
|
+
|
93
91
|
parent.async do
|
94
92
|
while true
|
95
93
|
uptime = (Time.now.to_f - start_time).round(2)
|
@@ -23,7 +23,11 @@ module Async
|
|
23
23
|
attr :key
|
24
24
|
|
25
25
|
def add(job, job_store)
|
26
|
-
|
26
|
+
id = SecureRandom.uuid
|
27
|
+
|
28
|
+
@client.evalsha(@add, 2, job_store.key, @key, id, job)
|
29
|
+
|
30
|
+
return id
|
27
31
|
end
|
28
32
|
end
|
29
33
|
end
|
@@ -29,6 +29,7 @@ module Async
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def start
|
32
|
+
Console.info(self, "Starting server...")
|
32
33
|
# Start the delayed queue, which will move jobs to the ready queue when they are ready:
|
33
34
|
@delayed_queue.start(@ready_queue)
|
34
35
|
|
@@ -37,25 +38,28 @@ module Async
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def enqueue(job)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
@ready_queue.add(job, @job_store)
|
42
|
+
end
|
43
|
+
|
44
|
+
def schedule(job, timestamp)
|
45
|
+
@delayed_queue.add(job, timestamp, @job_store)
|
46
|
+
end
|
47
|
+
|
48
|
+
def process(&block)
|
49
|
+
id = @processing_queue.fetch
|
50
|
+
begin
|
51
|
+
job = @job_store.get(id)
|
52
|
+
yield id, job
|
53
|
+
@processing_queue.complete(id)
|
54
|
+
rescue => error
|
55
|
+
@processing_queue.retry(id)
|
56
|
+
raise
|
46
57
|
end
|
47
58
|
end
|
48
59
|
|
49
60
|
def each(&block)
|
50
|
-
while
|
51
|
-
|
52
|
-
job = @job_store.get(id)
|
53
|
-
yield id, job
|
54
|
-
@processing_queue.complete(id)
|
55
|
-
rescue => error
|
56
|
-
@processing_queue.retry(id)
|
57
|
-
raise
|
58
|
-
end
|
61
|
+
while true
|
62
|
+
process(&block)
|
59
63
|
end
|
60
64
|
end
|
61
65
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'redis/server'
|
2
|
+
|
3
|
+
module Async
|
4
|
+
module Job
|
5
|
+
module Backend
|
6
|
+
module Redis
|
7
|
+
def self.new(**options)
|
8
|
+
endpoint = options.fetch(:endpoint) {Async::Redis.local_endpoint}
|
9
|
+
prefix = options.fetch(:prefix) {"async:job"}
|
10
|
+
|
11
|
+
client = Async::Redis::Client.new(endpoint)
|
12
|
+
|
13
|
+
return Async::Job::Backend::Redis::Server.new(client, prefix)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/async/job/generic.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2024, by Samuel Williams.
|
5
|
+
|
1
6
|
module Async
|
2
7
|
module Job
|
3
8
|
class Generic
|
4
9
|
def self.enqueue(...)
|
5
10
|
self.new(...).enqueue
|
11
|
+
end
|
6
12
|
|
7
13
|
def initialize(id, perform_at: nil)
|
8
14
|
@id = id
|
@@ -22,9 +28,3 @@ module Async
|
|
22
28
|
end
|
23
29
|
end
|
24
30
|
end
|
25
|
-
|
26
|
-
|
27
|
-
server.enqueue(job)
|
28
|
-
-> job.serialize
|
29
|
-
|
30
|
-
Server.enqueue(job)
|
data/lib/async/job/version.rb
CHANGED
data/lib/async/job.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async-job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
@@ -37,7 +37,7 @@ cert_chain:
|
|
37
37
|
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
38
38
|
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
39
39
|
-----END CERTIFICATE-----
|
40
|
-
date: 2024-02-
|
40
|
+
date: 2024-02-24 00:00:00.000000000 Z
|
41
41
|
dependencies:
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: async
|
@@ -74,6 +74,8 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- lib/async/job.rb
|
77
|
+
- lib/async/job/backend.rb
|
78
|
+
- lib/async/job/backend/redis.rb
|
77
79
|
- lib/async/job/backend/redis/delayed_queue.rb
|
78
80
|
- lib/async/job/backend/redis/job_store.rb
|
79
81
|
- lib/async/job/backend/redis/processing_queue.rb
|
metadata.gz.sig
CHANGED
@@ -1,3 +1 @@
|
|
1
|
-
|
2
|
-
?~�G���&8���Zw2k�^�74��3 �r(�)���A��}L�Uߺ��$��E�Z��;�HO�#X�Q�������D�R�=������ f����M�Nxe�� HT�Ҥ�:�@_����@S5��>��ކ���{�� b>Ph0h]�}�ᑻ��]b鈆��2}̅�� �/h��TXJ���
|
3
|
-
|Zt��,l�$t�V��� ���8��&�)�d�38�pPS�U�Xp���^��5�l�b9,JOj�*�j6D�'
|
1
|
+
�;���9�4
|