sidekiq-status 2.1.0 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc3436d5bc785da39c9f4f9d56d8179d75acc534935b9cab980ef7266bcdbe94
4
- data.tar.gz: 373f55bc1dc6cb235fe1f858ceb6ccb49fbe4e8864e9dd1951c83cd1ae053e69
3
+ metadata.gz: c02846f130e9fc47945e6e85e03d2e5cb5033e1d5a55f8b9ade921b72839f3a4
4
+ data.tar.gz: e236b4fd1fd3b94387b31786fe0aff021904b1947cf3bc2b26e66fceb6e38ca2
5
5
  SHA512:
6
- metadata.gz: 30ac2390e17ceb73ace6481921e28ad42ab2111012007ff2577a997ca7f34a6e8da59f06fa856f7abcbb07086c1863110417a6c2063399af672ee3e17fc227ad
7
- data.tar.gz: b0084cbfdd76b4215d6787b5d910d84722bc538de84ef0f0663990a2dd0ec2ed3bc3e8aee9b71b50336517c11c86843c5abd190964c6321e5a0c27f8353f3fb3
6
+ metadata.gz: 274efd30dff5904a2c1b39c2940e6785f8a446aada35e2a6fe38e58ddbc22ce0866e84e487e2bebfa439ca7ed06f862ff30c15fd3df5c48a3b59f03a6eabb95b
7
+ data.tar.gz: 590bd3e108417ba70cfa7706885a524f014f80ead06aef364b113099620fb362cafa181c0640ef2adb9309891ed33b3bac41585944e9a091716bc4ae4cf553ef
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ **Version 2.1.2**
2
+ * Casts values to strings when HTML-encoding
3
+
4
+ **Version 2.1.1**
5
+ * Ensures parameter outputs are properly HTML-encoded
6
+
7
+ **Version 2.1.0**
8
+ * Adds support for Sidekiq 6.2.2+ (https://github.com/mperham/sidekiq/issues/4955)
9
+
1
10
  **Version 2.0.2**
2
11
  * Fixes for dark mode theme
3
12
 
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Status
3
- VERSION = '2.1.0'
3
+ VERSION = '2.1.2'
4
4
  end
5
5
  end
@@ -12,13 +12,13 @@ describe Sidekiq::Status::ClientMiddleware do
12
12
  describe "without :expiration parameter" do
13
13
 
14
14
  it "sets queued status" do
15
- expect(StubJob.perform_async arg1: 'val1').to eq(job_id)
15
+ expect(StubJob.perform_async 'arg1' => 'val1').to eq(job_id)
16
16
  expect(redis.hget("sidekiq:status:#{job_id}", :status)).to eq('queued')
17
17
  expect(Sidekiq::Status::queued?(job_id)).to be_truthy
18
18
  end
19
19
 
20
20
  it "sets status hash ttl" do
21
- expect(StubJob.perform_async arg1: 'val1').to eq(job_id)
21
+ expect(StubJob.perform_async 'arg1' => 'val1').to eq(job_id)
22
22
  expect(1..Sidekiq::Status::DEFAULT_EXPIRY).to cover redis.ttl("sidekiq:status:#{job_id}")
23
23
  end
24
24
 
@@ -50,7 +50,7 @@ describe Sidekiq::Status::ClientMiddleware do
50
50
  end
51
51
 
52
52
  it "overwrites default expiry value" do
53
- StubJob.perform_async arg1: 'val1'
53
+ StubJob.perform_async 'arg1' => 'val1'
54
54
  expect((Sidekiq::Status::DEFAULT_EXPIRY+1)..huge_expiration).to cover redis.ttl("sidekiq:status:#{job_id}")
55
55
  end
56
56
 
@@ -10,7 +10,7 @@ describe Sidekiq::Status::ServerMiddleware do
10
10
  allow(SecureRandom).to receive(:hex).once.and_return(job_id)
11
11
  start_server do
12
12
  thread = redis_thread 4, "status_updates", "job_messages_#{job_id}"
13
- expect(ConfirmationJob.perform_async arg1: 'val1').to eq(job_id)
13
+ expect(ConfirmationJob.perform_async 'arg1' => 'val1').to eq(job_id)
14
14
  expect(thread.value).to eq([
15
15
  job_id,
16
16
  job_id,
@@ -90,7 +90,7 @@ describe Sidekiq::Status::ServerMiddleware do
90
90
  it "sets status hash ttl" do
91
91
  allow(SecureRandom).to receive(:hex).once.and_return(job_id)
92
92
  start_server do
93
- expect(StubJob.perform_async arg1: 'val1').to eq(job_id)
93
+ expect(StubJob.perform_async 'arg1' => 'val1').to eq(job_id)
94
94
  end
95
95
  expect(1..Sidekiq::Status::DEFAULT_EXPIRY).to cover redis.ttl("sidekiq:status:#{job_id}")
96
96
  end
@@ -104,7 +104,7 @@ describe Sidekiq::Status::ServerMiddleware do
104
104
 
105
105
  it "overwrites default expiry value" do
106
106
  start_server(:expiration => huge_expiration) do
107
- StubJob.perform_async arg1: 'val1'
107
+ StubJob.perform_async 'arg1' => 'val1'
108
108
  end
109
109
  expect((Sidekiq::Status::DEFAULT_EXPIRY-1)..huge_expiration).to cover redis.ttl("sidekiq:status:#{job_id}")
110
110
  end
@@ -113,7 +113,7 @@ describe Sidekiq::Status::ServerMiddleware do
113
113
  overwritten_expiration = huge_expiration * 100
114
114
  allow_any_instance_of(StubJob).to receive(:expiration).and_return(overwritten_expiration)
115
115
  start_server(:expiration => huge_expiration) do
116
- StubJob.perform_async arg1: 'val1'
116
+ StubJob.perform_async 'arg1' => 'val1'
117
117
  end
118
118
  expect((huge_expiration+1)..overwritten_expiration).to cover redis.ttl("sidekiq:status:#{job_id}")
119
119
  end
@@ -61,7 +61,7 @@ describe 'sidekiq status web' do
61
61
  get "/statuses/#{job_id}"
62
62
  expect(last_response).to be_ok
63
63
  expect(last_response.body).to match(/#{job_id}/)
64
- expect(last_response.body).to match(/1,"another argument"/)
64
+ expect(last_response.body).to match(/1,"another argument"/)
65
65
  expect(last_response.body).to match(/working/)
66
66
  end
67
67
 
@@ -119,13 +119,13 @@ end
119
119
 
120
120
  class RetriedJob < StubJob
121
121
 
122
- sidekiq_options 'retry' => true
122
+ sidekiq_options retry: true
123
123
  sidekiq_retry_in do |count| 3 end # 3 second delay > job timeout in test suite
124
124
 
125
- def perform()
125
+ def perform
126
126
  Sidekiq.redis do |conn|
127
127
  key = "RetriedJob_#{jid}"
128
- unless conn.exists key
128
+ if [0, false].include? conn.exists(key)
129
129
  conn.set key, 'tried'
130
130
  raise StandardError
131
131
  end
data/web/views/status.erb CHANGED
@@ -1,3 +1,4 @@
1
+ <% require 'cgi'; def h(v); CGI.escape_html(v.to_s); end %>
1
2
  <style>
2
3
  .progress {
3
4
  background-color: #C8E1ED;
@@ -14,9 +15,9 @@
14
15
  </style>
15
16
 
16
17
  <h3>
17
- Job Status: <%= @status["jid"] %>
18
- <span class='label label-<%= @status["label"] %>'>
19
- <%= @status["status"] %>
18
+ Job Status: <%= h @status["jid"] %>
19
+ <span class='label label-<%= h @status["label"] %>'>
20
+ <%= h @status["status"] %>
20
21
  </span>
21
22
  </h3>
22
23
 
@@ -30,14 +31,14 @@
30
31
 
31
32
  <div class="panel panel-default" style="background-color: inherit">
32
33
  <div class="panel-body">
33
- <h4><%= @status["worker"] %></h4>
34
+ <h4><%= h @status["worker"] %></h4>
34
35
 
35
36
  <div class="row">
36
37
  <div class="col-sm-2">
37
38
  <strong>Arguments</strong>
38
39
  </div>
39
40
  <div class="col-sm-10">
40
- <p><%= @status["args"].empty? ? "<i>none</i>" : @status["args"] %></p>
41
+ <p><%= @status["args"].empty? ? "<i>none</i>" : h(@status["args"]) %></p>
41
42
  </div>
42
43
  </div>
43
44
 
@@ -46,7 +47,7 @@
46
47
  <strong>Message</strong>
47
48
  </div>
48
49
  <div class="col-sm-10">
49
- <p><%= @status["message"] || "<i>none</i>" %></p>
50
+ <p><%= h(@status["message"]) || "<i>none</i>" %></p>
50
51
  </div>
51
52
  </div>
52
53
 
@@ -75,9 +76,9 @@
75
76
  </div>
76
77
  <div class="col-sm-10">
77
78
  <% if val && val.include?("\n") %>
78
- <pre><%= val %></pre>
79
+ <pre><%= h val %></pre>
79
80
  <% else %>
80
- <p><%= val || "<i>none</i>" %></p>
81
+ <p><%= h(val) || "<i>none</i>" %></p>
81
82
  <% end %>
82
83
  </div>
83
84
  </div>
@@ -1,4 +1,5 @@
1
- <h3>Job Status: <%= params[:jid] %></h3>
1
+ <% require 'cgi'; def h(v); CGI.escape_html(v.to_s); end %>
2
+ <h3>Job Status: <%= h params[:jid] %></h3>
2
3
 
3
4
  <div role="alert">
4
5
  <strong>Uh oh!</strong> That job can't be found. It may have expired already.
@@ -1,3 +1,4 @@
1
+ <% require 'cgi'; def h(v); CGI.escape_html(v.to_s); end %>
1
2
  <style>
2
3
  .progress {
3
4
  background-color: #C8E1ED;
@@ -78,9 +79,9 @@ function setPerPage(select){
78
79
  </div>
79
80
  <table class="table table-hover table-bordered table-striped">
80
81
  <tr>
81
- <% @headers.each do |h| %>
82
- <th class="header <%= h[:class] %> header_<%= h[:id] %>">
83
- <a href="<%= h[:url] %>"><%= h[:name] %></a>
82
+ <% @headers.each do |hdr| %>
83
+ <th class="header <%= h hdr[:class] %> header_<%= h hdr[:id] %>">
84
+ <a href="<%= h hdr[:url] %>"><%= h hdr[:name] %></a>
84
85
  </th>
85
86
  <% end %>
86
87
  <th class="header">
@@ -90,13 +91,13 @@ function setPerPage(select){
90
91
  <% @statuses.each do |container| %>
91
92
  <tr>
92
93
  <td>
93
- <div title='<%= container["jid"] %>'><a href="<%= root_path %>statuses/<%= container["jid"] %>"><%= container["worker"] %></a></div>
94
+ <div title='<%= h container["jid"] %>'><a href="<%= root_path %>statuses/<%= h container["jid"] %>"><%= h container["worker"] %></a></div>
94
95
  </td>
95
96
  <td>
96
- <div class='args' title='<%= container["jid"] %>'><%= container["args"] %></div>
97
+ <div class='args' title='<%= h container["jid"] %>'><%= h container["args"] %></div>
97
98
  </td>
98
99
  <td style='text-align: center;'>
99
- <div class='label label-<%= container["label"] %>'><%= container["status"] %></div>
100
+ <div class='label label-<%= h container["label"] %>'><%= h container["status"] %></div>
100
101
  </td>
101
102
  <% secs = Time.now.to_i - container["update_time"].to_i %>
102
103
  <td style='text-align: center; white-space: nowrap;' title="<%= Time.at(container["update_time"].to_i) %>">
@@ -109,11 +110,11 @@ function setPerPage(select){
109
110
  <td>
110
111
  <div class="progress progress-striped" style="margin-bottom: 0">
111
112
  <div class='message' style='text-align:right; padding-right:0.5em; background-color: transparent; float:right;'>
112
- <%= container["message"] %>
113
+ <%= h container["message"] %>
113
114
  </div>
114
115
  <% if container["pct_complete"].to_i > 0 %>
115
- <div class="bar message" style="width: <%= container["pct_complete"] %>%;">
116
- <%= container["pct_complete"] %>%
116
+ <div class="bar message" style="width: <%= h container["pct_complete"] %>%;">
117
+ <%= h container["pct_complete"] %>%
117
118
  </div>
118
119
  <% end %>
119
120
  </div>
@@ -121,7 +122,7 @@ function setPerPage(select){
121
122
  <td>
122
123
  <div class="actions">
123
124
  <form action="statuses" method="post">
124
- <input type="hidden" name="jid" value="<%= container["jid"] %>" />
125
+ <input type="hidden" name="jid" value="<%= h container["jid"] %>" />
125
126
  <%= csrf_tag %>
126
127
  <% if container["status"] == "complete" %>
127
128
  <input type="hidden" name="_method" value="delete" />
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-status
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeniy Tsvigun
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-09-23 00:00:00.000000000 Z
12
+ date: 2022-01-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sidekiq
@@ -187,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
187
  - !ruby/object:Gem::Version
188
188
  version: '0'
189
189
  requirements: []
190
- rubygems_version: 3.2.15
190
+ rubygems_version: 3.2.32
191
191
  signing_key:
192
192
  specification_version: 4
193
193
  summary: An extension to the sidekiq message processing to track your jobs