filesystem_queue 0.2.0 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e960414c06a8d0a9fe7d7fc0b8b1ed90cf604d7648ab74c64f924648a137e94
4
- data.tar.gz: 06f0a8e59cbb4c64a2de4af00360b317bb13e8a136f3d1647ff802b8b7617939
3
+ metadata.gz: d990e413d523a1f7f803a4dd653c5ce8e6ddbba0de25d726607bc5184e725c3c
4
+ data.tar.gz: db3595416a552ad54297792d288cca66603ed71bd53d5629eddca72b383aae09
5
5
  SHA512:
6
- metadata.gz: 6a9d6f4d5c55313ed7af2bc85245c019f97a66a691a4511c67ed78a53e74fa91f6574e513ebaf1e288aaeeb74cca74bbb53de289c294ff4ad781c496a9e4edf1
7
- data.tar.gz: a71491c4ac7e6f46b8834ef9ca7f1f7534216d6036c4e98877c2f0ae34a050202699fb471b9886a51f6fb61fa3359aa297980f4debc74e93db90108adbf8f756
6
+ metadata.gz: ceba85b6215ccdd11186fe7f255cfff6eb3b4df90ba919c3b493af9c7f3a9b6a0f75239d4712ba70c558553756f13940bd2018071ddeb9d74bbbc860ed48cdec
7
+ data.tar.gz: e2571be6746a4b6fdd5063ae8ce796713db6d8bf446679cfd8a8f557fbb4c9fc0368af53a86f3a1d19a31c68c8f7a741f9c824d2720b83ad9d0b6245ac5d1382
data/CHANGELOG.md CHANGED
@@ -1,11 +1,20 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.4.0] - 2024-10-3
4
+ - Failed jobs have added metadata including `last_exception` and `retry_count`
5
+
6
+ ## [0.3.0] - 2024-09-20
7
+ - Added `reenqueue_failed_jobs` method to move failed jobs back to the queue
8
+ - Added `reenqueue_completed_jobs` method to move completed jobs back to the queue
9
+
3
10
  ## [0.2.0] - 2024-09-16
4
11
  - Replaced old index for an in-memory index for job tracking
5
12
  - Added `cleanup` method to delete files and directories created by the queue
13
+
6
14
  ## [0.1.1] - 2024-09-13
7
15
  - Added unit tests
8
16
  - Fixed Github Actions
9
17
  - Minor refactors
18
+
10
19
  ## [0.1.0] - 2024-09-12
11
20
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- filesystem_queue (0.2.0)
4
+ filesystem_queue (0.4.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -74,6 +74,18 @@ Returns the number of jobs currently in the queue.
74
74
  - **Returns**:
75
75
  - `Integer`: The number of jobs in the queue.
76
76
 
77
+ ### `reenqueue_failed_jobs`
78
+
79
+ Moves all failed jobs back to the queue for reprocessing.
80
+
81
+ ### `reenqueue_completed_jobs`
82
+
83
+ Moves all completed jobs back to the queue for reprocessing.
84
+
85
+ ### `cleanup`
86
+
87
+ Removes all files and directories created by the queue.
88
+
77
89
  ## Usage
78
90
 
79
91
  ```ruby
@@ -120,6 +132,12 @@ puts 'Queue is empty'
120
132
  puts "Queue size: #{queue.size}"
121
133
  puts "Failed jobs: #{queue.failed_size}"
122
134
 
135
+ # Reenqueue all failed jobs back to the queue
136
+ queue.reenqueue_failed_jobs
137
+
138
+ # Reenqueue all completed jobs back to the queue
139
+ queue.reenqueue_completed_jobs
140
+
123
141
  # Cleanup all files and directories created by the queue
124
142
  queue.cleanup
125
143
  ```
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FilesystemQueue
4
- VERSION = '0.2.0'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -44,7 +44,8 @@ module FilesystemQueue
44
44
  move_job(job_file, @completed_dir)
45
45
  end
46
46
 
47
- def fail(job_file)
47
+ def fail(job_file, exception)
48
+ mark_failed_job(job_file, exception)
48
49
  move_job(job_file, @failed_dir)
49
50
  end
50
51
 
@@ -56,6 +57,23 @@ module FilesystemQueue
56
57
  Dir[File.join(@failed_dir, '*')].count { |file| File.file?(file) }
57
58
  end
58
59
 
60
+ def retry_failed_jobs
61
+ failed_jobs = Dir.glob(File.join(@failed_dir, '*.json'))
62
+ failed_jobs.each do |job_file|
63
+ new_job_file = File.join(@jobs_dir, File.basename(job_file))
64
+ FileUtils.mv(job_file, new_job_file)
65
+ @index << new_job_file
66
+ end
67
+ end
68
+
69
+ def reenqueue_failed_jobs
70
+ reenqueue_jobs(@failed_dir)
71
+ end
72
+
73
+ def reenqueue_completed_jobs
74
+ reenqueue_jobs(@completed_dir)
75
+ end
76
+
59
77
  # CAUTION: Cleanup the queue directory, removing all files and directories
60
78
  def cleanup
61
79
  [@jobs_dir, @completed_dir, @failed_dir].each do |dir|
@@ -74,5 +92,22 @@ module FilesystemQueue
74
92
  FileUtils.mv(job_file, target_dir)
75
93
  @index.delete(job_file)
76
94
  end
95
+
96
+ def reenqueue_jobs(source_dir)
97
+ job_files = Dir.glob(File.join(source_dir, '*.json'))
98
+ job_files.each do |job_file|
99
+ new_job_file = File.join(@jobs_dir, File.basename(job_file))
100
+ FileUtils.mv(job_file, new_job_file)
101
+ @index << new_job_file
102
+ end
103
+ end
104
+
105
+ # Adds metadata for the job for the retry count and the exception details
106
+ def mark_failed_job(job_file)
107
+ job_data = JSON.parse(File.read(job_file), symbolize_names: true)
108
+ job_data[:retry_count] = (job_data[:retry_count] || 0) + 1
109
+ job_data[:last_exception] = exception.message if exception
110
+ File.write(job_file, job_data.to_json)
111
+ end
77
112
  end
78
113
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filesystem_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Westman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-09-16 00:00:00.000000000 Z
11
+ date: 2024-10-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: FilesystemQueue is a Ruby gem that provides a persistent queue system
14
14
  using the local filesystem.It allows you to enqueue and dequeue jobs, and keeps