sidekiq-debouncer 3.0.0 → 3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -1
- data/lib/sidekiq/debouncer/job.rb +1 -1
- data/lib/sidekiq/debouncer/version.rb +1 -1
- data/lib/sidekiq/debouncer/views/index.html.erb +49 -47
- data/lib/sidekiq/debouncer/views/show.html.erb +39 -37
- data/lib/sidekiq/debouncer/web.rb +20 -2
- data/lib/sidekiq/debouncer/web_extension.rb +30 -4
- data/sidekiq-debouncer.gemspec +2 -1
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a48a55ff72c620ec5c777c51d93008502eee9a5a5e6ac5678936a0a937f9300
|
4
|
+
data.tar.gz: a3a99b8171604c90d3e3fb2ee2665e8601d2a53e22cae488d7a3018f298c734a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: caf0fe8240dd387090d730f7421ed6f92897bbbb770410b7f2861f1bf898f261c8cf801519c9f974c50e9a4929fff3da5f275280bca4de4506bf17ea48fbaff4
|
7
|
+
data.tar.gz: 262ca59401d304f301413beda565c40f2557a2352f156ad84e9422e0ab2cf30006e7038e31bcbb67c80ecbe4a575880a3074e6ec74657c74fca4ce250f645c61
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,17 @@
|
|
1
|
+
## [3.1.0] - 2025-03-28
|
2
|
+
- Drop support for Ruby < 3.2.0
|
3
|
+
- Support for Sidekiq 8 ([#31](https://github.com/paladinsoftware/sidekiq-debouncer/pull/31), [#32](https://github.com/paladinsoftware/sidekiq-debouncer/pull/32))
|
4
|
+
- DragonflyDB support ([#29](https://github.com/paladinsoftware/sidekiq-debouncer/pull/29))
|
5
|
+
|
1
6
|
## [3.0.0] - 2024-10-22
|
2
7
|
- Complete rewrite of the library ([#25](https://github.com/paladinsoftware/sidekiq-debouncer/pull/25))
|
3
8
|
- Read only Web UI ([#26](https://github.com/paladinsoftware/sidekiq-debouncer/pull/26))
|
4
9
|
- Drop support for sidekiq 6.x and ruby 2.7 ([#28](https://github.com/paladinsoftware/sidekiq-debouncer/pull/28))
|
5
10
|
- Respect sidekiq_options overridden by .set ([#27](https://github.com/paladinsoftware/sidekiq-debouncer/pull/27))
|
6
11
|
|
12
|
+
**Upgrade notes:**
|
13
|
+
Since the job format changed, V3 won't debounce jobs enqueued with V2, although they'll still get executed
|
14
|
+
|
7
15
|
## [2.0.2] - 2023-03-13
|
8
16
|
- support Sidekiq::Testing
|
9
17
|
|
@@ -11,7 +19,7 @@
|
|
11
19
|
- don't remove debounce key in redis to avoid invalid debouncing
|
12
20
|
|
13
21
|
## [2.0.0] - 2023-02-28
|
14
|
-
Complete rewrite of the library:
|
22
|
+
Complete rewrite of the library:
|
15
23
|
- Instead of iterating through whole schedule set, sidekiq-debouncer will now cache debounce key in redis with a reference to the job.
|
16
24
|
Thanks to that there is a huge performance boost compared to V1. With 1k jobs in schedule set it's over 100x faster.
|
17
25
|
The difference is even bigger with larger amount of jobs.
|
@@ -1,48 +1,50 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
</header>
|
9
|
-
|
10
|
-
<% if @debounces.size > 0 %>
|
11
|
-
<form action="<%= root_path %>debounces" method="post">
|
12
|
-
<%= csrf_tag %>
|
13
|
-
<div class="table_container">
|
14
|
-
<table class="table table-striped table-bordered table-hover">
|
15
|
-
<thead>
|
16
|
-
<tr>
|
17
|
-
<th class="table-checkbox checkbox-column">
|
18
|
-
<label>
|
19
|
-
<input type="checkbox" class="check_all" />
|
20
|
-
</label>
|
21
|
-
</th>
|
22
|
-
<th><%= t('When') %></th>
|
23
|
-
<th><%= t('DebounceKey') %></th>
|
24
|
-
</tr>
|
25
|
-
</thead>
|
26
|
-
<% @debounces.each do |entry| %>
|
27
|
-
<tr>
|
28
|
-
<td class="table-checkbox">
|
29
|
-
<label>
|
30
|
-
<input type='checkbox' name='key[]' value='<%= entry.key %>' class='shift_clickable' />
|
31
|
-
</label>
|
32
|
-
</td>
|
33
|
-
<td>
|
34
|
-
<a href="<%= root_path %>debounces/<%= ::Base64.urlsafe_encode64(entry.key) %>"><%= relative_time(entry.at) %></a>
|
35
|
-
</td>
|
36
|
-
<td>
|
37
|
-
<a href="<%= root_path %>debounces/<%= ::Base64.urlsafe_encode64(entry.key) %>"><%= entry.key %></a>
|
38
|
-
</td>
|
39
|
-
</tr>
|
40
|
-
<% end %>
|
41
|
-
</table>
|
1
|
+
<section>
|
2
|
+
<header class='row'>
|
3
|
+
<div class='col-sm-5 pull-left'>
|
4
|
+
<h3><%= t('Debounces') %></h3>
|
5
|
+
</div>
|
6
|
+
<div class='col-sm-7 pull-right'>
|
7
|
+
<%= erb :_paging, locals: { url: "#{root_path}debounces" } %>
|
42
8
|
</div>
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
9
|
+
</header>
|
10
|
+
|
11
|
+
<% if @debounces.size > 0 %>
|
12
|
+
<form action="<%= root_path %>debounces" method="post">
|
13
|
+
<%= csrf_tag %>
|
14
|
+
<div class="table_container">
|
15
|
+
<table class="table table-striped table-bordered table-hover">
|
16
|
+
<thead>
|
17
|
+
<tr>
|
18
|
+
<th class="table-checkbox checkbox-column">
|
19
|
+
<label>
|
20
|
+
<input type="checkbox" class="check_all" />
|
21
|
+
</label>
|
22
|
+
</th>
|
23
|
+
<th><%= t('When') %></th>
|
24
|
+
<th><%= t('DebounceKey') %></th>
|
25
|
+
</tr>
|
26
|
+
</thead>
|
27
|
+
<% @debounces.each do |entry| %>
|
28
|
+
<tr>
|
29
|
+
<td class="table-checkbox">
|
30
|
+
<label>
|
31
|
+
<input type='checkbox' name='key[]' value='<%= entry.key %>' class='shift_clickable' />
|
32
|
+
</label>
|
33
|
+
</td>
|
34
|
+
<td>
|
35
|
+
<a href="<%= root_path %>debounces/<%= ::Base64.urlsafe_encode64(entry.key) %>"><%= relative_time(entry.at) %></a>
|
36
|
+
</td>
|
37
|
+
<td>
|
38
|
+
<a href="<%= root_path %>debounces/<%= ::Base64.urlsafe_encode64(entry.key) %>"><%= entry.key %></a>
|
39
|
+
</td>
|
40
|
+
</tr>
|
41
|
+
<% end %>
|
42
|
+
</table>
|
43
|
+
</div>
|
44
|
+
<!-- <input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%#= t('Delete') %>" />-->
|
45
|
+
<!-- <input class="btn btn-danger pull-right flip" type="submit" name="add_to_queue" value="<%#= t('AddToQueue') %>" />-->
|
46
|
+
</form>
|
47
|
+
<% else %>
|
48
|
+
<div class="alert alert-success"><%= t('NoDebouncesFound') %></div>
|
49
|
+
<% end %>
|
50
|
+
</section>
|
@@ -1,38 +1,40 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
|
1
|
+
<section>
|
2
|
+
<header class="header-container">
|
3
|
+
<h3><%= t('Job') %></h3>
|
4
|
+
</header>
|
4
5
|
|
5
|
-
<div class="table_container">
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
</div>
|
6
|
+
<div class="table_container">
|
7
|
+
<table class="table table-bordered table-striped table-hover">
|
8
|
+
<tbody>
|
9
|
+
<tr>
|
10
|
+
<th><%= t('Queue') %></th>
|
11
|
+
<td><%= @job.queue %></td>
|
12
|
+
</tr>
|
13
|
+
<tr>
|
14
|
+
<th><%= t('When') %></th>
|
15
|
+
<td><%= relative_time(@job.at) %></td>
|
16
|
+
</tr>
|
17
|
+
<tr>
|
18
|
+
<th><%= t('DebounceKey') %></th>
|
19
|
+
<td>
|
20
|
+
<%= @job.key %>
|
21
|
+
</td>
|
22
|
+
</tr>
|
23
|
+
<tr>
|
24
|
+
<th><%= t('Job') %></th>
|
25
|
+
<td>
|
26
|
+
<%= @job.display_class %>
|
27
|
+
</td>
|
28
|
+
</tr>
|
29
|
+
<tr>
|
30
|
+
<th><%= t('Arguments') %></th>
|
31
|
+
<td>
|
32
|
+
<code class="code-wrap">
|
33
|
+
<div class="args-extended"><%= display_args(@job.args, nil) %></div>
|
34
|
+
</code>
|
35
|
+
</td>
|
36
|
+
</tr>
|
37
|
+
</tbody>
|
38
|
+
</table>
|
39
|
+
</div>
|
40
|
+
</section>
|
@@ -3,6 +3,24 @@
|
|
3
3
|
if defined?(Sidekiq::Web)
|
4
4
|
require "sidekiq/debouncer/web_extension"
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0")
|
7
|
+
Sidekiq::Web.configure do |config|
|
8
|
+
config.register(
|
9
|
+
Sidekiq::Debouncer::WebExtension,
|
10
|
+
name: "debounces",
|
11
|
+
tab: "Debounces",
|
12
|
+
index: "debounces"
|
13
|
+
)
|
14
|
+
end
|
15
|
+
elsif Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("7.3.0")
|
16
|
+
Sidekiq::Web.register(
|
17
|
+
Sidekiq::Debouncer::WebExtension,
|
18
|
+
name: "debounces",
|
19
|
+
tab: "Debounces",
|
20
|
+
index: "debounces"
|
21
|
+
)
|
22
|
+
else
|
23
|
+
Sidekiq::Web.register Sidekiq::Debouncer::WebExtension
|
24
|
+
Sidekiq::Web.tabs["Debounces"] = "debounces"
|
25
|
+
end
|
8
26
|
end
|
@@ -5,14 +5,40 @@ require "base64"
|
|
5
5
|
module Sidekiq
|
6
6
|
module Debouncer
|
7
7
|
module WebExtension
|
8
|
+
module Helpers
|
9
|
+
def get_route_param(key)
|
10
|
+
if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0")
|
11
|
+
route_params(key)
|
12
|
+
else
|
13
|
+
route_params[key]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_url_param(key)
|
18
|
+
if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0")
|
19
|
+
url_params(key)
|
20
|
+
else
|
21
|
+
params[key]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
8
26
|
def self.registered(app)
|
9
|
-
|
27
|
+
locales = if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0")
|
28
|
+
Sidekiq::Web.configure.locales
|
29
|
+
else
|
30
|
+
app.settings.locales
|
31
|
+
end
|
32
|
+
|
33
|
+
locales << File.join(File.expand_path("..", __FILE__), "locales")
|
34
|
+
|
35
|
+
app.helpers(Helpers)
|
10
36
|
|
11
37
|
app.get "/debounces" do
|
12
38
|
view_path = File.join(File.expand_path("..", __FILE__), "views")
|
13
39
|
|
14
|
-
@count = (
|
15
|
-
(@current_page, @total_size, @debounces) = page("debouncer",
|
40
|
+
@count = (get_url_param("count") || 25).to_i
|
41
|
+
(@current_page, @total_size, @debounces) = page("debouncer", get_url_param("page"), @count)
|
16
42
|
@debounces = @debounces.map { |key, score| Sidekiq::Debouncer::Job.new(key, score) }
|
17
43
|
|
18
44
|
render(:erb, File.read(File.join(view_path, "index.html.erb")))
|
@@ -21,7 +47,7 @@ module Sidekiq
|
|
21
47
|
app.get "/debounces/:key" do
|
22
48
|
view_path = File.join(File.expand_path("..", __FILE__), "views")
|
23
49
|
|
24
|
-
@job = Sidekiq::Debouncer::Set.new.fetch_by_key(Base64.urlsafe_decode64(
|
50
|
+
@job = Sidekiq::Debouncer::Set.new.fetch_by_key(Base64.urlsafe_decode64(get_route_param(:key)))
|
25
51
|
|
26
52
|
render(:erb, File.read(File.join(view_path, "show.html.erb")))
|
27
53
|
end
|
data/sidekiq-debouncer.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |gem|
|
|
27
27
|
"sidekiq-debouncer.gemspec"
|
28
28
|
]
|
29
29
|
|
30
|
-
gem.add_dependency "sidekiq", ">= 7.0", "<
|
30
|
+
gem.add_dependency "sidekiq", ">= 7.0", "< 9.0"
|
31
31
|
|
32
32
|
gem.add_development_dependency "rspec", "~> 3.12.0"
|
33
33
|
gem.add_development_dependency "timecop", "~> 0.9.6"
|
@@ -35,4 +35,5 @@ Gem::Specification.new do |gem|
|
|
35
35
|
gem.add_development_dependency "parallel", "~> 1.22.1"
|
36
36
|
gem.add_development_dependency "standard", "~> 1.24.3"
|
37
37
|
gem.add_development_dependency "rack-test", "~> 2.1.0"
|
38
|
+
gem.add_development_dependency "rack-session", "~> 2.1.0"
|
38
39
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-debouncer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Zuchmański
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2025-03-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sidekiq
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: '7.0'
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '9.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
version: '7.0'
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '9.0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rspec
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,6 +115,20 @@ dependencies:
|
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: 2.1.0
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: rack-session
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.1.0
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 2.1.0
|
118
132
|
description: |
|
119
133
|
Sidekiq extension that adds the ability to debounce job execution.
|
120
134
|
Worker will postpone its execution after `wait time` have elapsed since the last time it was invoked.
|
@@ -169,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
183
|
- !ruby/object:Gem::Version
|
170
184
|
version: '0'
|
171
185
|
requirements: []
|
172
|
-
rubygems_version: 3.
|
186
|
+
rubygems_version: 3.5.22
|
173
187
|
signing_key:
|
174
188
|
specification_version: 4
|
175
189
|
summary: Sidekiq extension that adds the ability to debounce job execution
|