sidekiq-status 3.0.3 → 4.0.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/Dockerfile +2 -0
  3. data/.devcontainer/README.md +57 -0
  4. data/.devcontainer/devcontainer.json +55 -0
  5. data/.devcontainer/docker-compose.yml +19 -0
  6. data/.github/workflows/ci.yaml +9 -6
  7. data/Appraisals +14 -6
  8. data/CHANGELOG.md +12 -0
  9. data/Dockerfile +5 -0
  10. data/README.md +756 -41
  11. data/Rakefile +153 -0
  12. data/docker-compose.yml +15 -0
  13. data/gemfiles/{sidekiq_6.1.gemfile → sidekiq_7.0.gemfile} +1 -1
  14. data/gemfiles/sidekiq_7.3.gemfile +7 -0
  15. data/gemfiles/sidekiq_8.0.gemfile +7 -0
  16. data/gemfiles/{sidekiq_6.x.gemfile → sidekiq_8.x.gemfile} +1 -1
  17. data/lib/sidekiq-status/client_middleware.rb +4 -3
  18. data/lib/sidekiq-status/helpers.rb +94 -0
  19. data/lib/sidekiq-status/server_middleware.rb +6 -21
  20. data/lib/sidekiq-status/storage.rb +12 -3
  21. data/lib/sidekiq-status/version.rb +1 -1
  22. data/lib/sidekiq-status/web.rb +67 -93
  23. data/lib/sidekiq-status/worker.rb +6 -10
  24. data/lib/sidekiq-status.rb +21 -5
  25. data/sidekiq-status.gemspec +7 -1
  26. data/spec/environment.rb +12 -1
  27. data/spec/lib/sidekiq-status/client_middleware_spec.rb +8 -0
  28. data/spec/lib/sidekiq-status/server_middleware_spec.rb +13 -0
  29. data/spec/lib/sidekiq-status/web_spec.rb +72 -3
  30. data/spec/lib/sidekiq-status/worker_spec.rb +3 -3
  31. data/spec/lib/sidekiq-status_spec.rb +20 -3
  32. data/spec/spec_helper.rb +3 -8
  33. data/spec/support/test_jobs.rb +11 -0
  34. data/spec/test_environment.rb +1 -0
  35. data/web/assets/statuses.css +124 -0
  36. data/web/assets/statuses.js +24 -0
  37. data/web/views/status.erb +131 -93
  38. data/web/views/status_not_found.erb +1 -1
  39. data/web/views/statuses.erb +23 -79
  40. metadata +93 -14
data/web/views/status.erb CHANGED
@@ -1,117 +1,155 @@
1
1
  <% require 'cgi'; def h(v); CGI.escape_html(v.to_s); end %>
2
- <style>
3
- .progress {
4
- background-color: #C8E1ED;
5
- }
6
- .progress-percentage {
7
- margin: 5px;
8
- padding-left: 4px;
9
- color: #333;
10
- text-align: left;
11
- text-shadow: 0 0 5px white;
12
- font-weight: bold;
13
- font-size: 14px;
14
- }
15
- </style>
16
-
17
- <h3>
18
- Job Status: <%= h @status["jid"] %>
2
+ <%
3
+ def format_iso_timestamp(timestamp)
4
+ return "<i>n/a</i>" unless timestamp && !timestamp.empty?
5
+ Time.at(timestamp.to_i).utc.iso8601
6
+ end
7
+ %>
8
+ <link rel="stylesheet" href="<%= root_path %>assets/statuses.css" />
9
+ <script type="text/javascript" src="<%= root_path %>assets/statuses.js"></script>
10
+ <h3 class="status-header">
11
+ Job Status
19
12
  <span class='label label-<%= h @status["label"] %>'>
20
13
  <%= h @status["status"] %>
21
14
  </span>
22
15
  </h3>
23
16
 
24
- <div class="progress" style="height: 30px;">
25
- <div class="progress-bar" role="progressbar" aria-valuenow="<%= @status["pct_complete"].to_i %>" aria-valuemin="0" aria-valuemax="100" style="width: <%= @status["pct_complete"].to_i %>%">
26
- <div class="progress-percentage">
17
+ <div class="progress h-30px">
18
+ <div class="progress-bar" role="progressbar" aria-valuenow="<%= @status["pct_complete"].to_i %>" aria-valuemin="0" aria-valuemax="100">
19
+ <div class="progress-percentage fs-lg">
27
20
  <%= @status["pct_complete"].to_i %>%
28
21
  </div>
29
22
  </div>
30
23
  </div>
31
24
 
32
- <div class="panel panel-default" style="background-color: inherit">
33
- <div class="panel-body">
34
- <h4><%= h @status["worker"] %></h4>
35
-
36
- <div class="row">
37
- <div class="col-sm-2">
38
- <strong>Arguments</strong>
39
- </div>
40
- <div class="col-sm-10">
41
- <p><%= @status["args"].empty? ? "<i>none</i>" : h(@status["args"]) %></p>
42
- </div>
43
- </div>
25
+ <br />
44
26
 
45
- <div class="row">
46
- <div class="col-sm-2">
47
- <strong>Message</strong>
48
- </div>
49
- <div class="col-sm-10">
50
- <p><%= h(@status["message"]) || "<i>none</i>" %></p>
51
- </div>
52
- </div>
27
+ <div class="header-container">
28
+ <h3>Job Details</h3>
29
+ </div>
53
30
 
54
- <div class="row">
55
- <div class="col-sm-2">
56
- <strong>Last Updated</strong>
57
- </div>
58
- <div class="col-sm-10">
59
- <p>
60
- <% secs = Time.now.to_i - @status["update_time"].to_i %>
61
- <% if secs > 0 %>
62
- <%= ChronicDuration.output(secs, :weeks => true, :units => 2) %> ago
31
+ <table class="table table-bordered table-striped status-table">
32
+ <tbody>
33
+ <tr>
34
+ <th>Job ID</th>
35
+ <td><code><%= h @status["jid"] %></code></td>
36
+ </tr>
37
+ <tr>
38
+ <th>Job</th>
39
+ <td><%= h @status["worker"] %></td>
40
+ </tr>
41
+ <tr>
42
+ <th>Arguments</th>
43
+ <td>
44
+ <% if @status["args"] && !@status["args"].empty? %>
45
+ <% args_content = h(@status["args"]) %>
46
+ <% if args_content.include?("\n") %>
47
+ <div class="multiline"><%= args_content %></div>
48
+ <% else %>
49
+ <%= args_content %>
50
+ <% end %>
63
51
  <% else %>
64
- Now
52
+ <i>none</i>
65
53
  <% end %>
66
- </p>
67
- </div>
68
- </div>
69
-
70
- <div class="row">
71
- <div class="col-sm-2">
72
- <strong>Elapsed Time</strong>
73
- </div>
74
- <div class="col-sm-10">
75
- <p>
76
- <% if @status["elapsed"] %>
77
- <%= ChronicDuration.output(@status["elapsed"].to_i, :weeks => true, :units => 2) %>
54
+ </td>
55
+ </tr>
56
+ <tr>
57
+ <th>Status</th>
58
+ <td><span class='label label-<%= h @status["label"] %>'><%= h @status["status"] %></span></td>
59
+ </tr>
60
+ <tr>
61
+ <th>Elapsed Time</th>
62
+ <td>
63
+ <% unless @status["elapsed"].nil? %>
64
+ <%= ChronicDuration.output(@status["elapsed"].to_i, :weeks => true, :units => 2) || '0 secs' %>
65
+ <% else %>
66
+ <i>n/a</i>
78
67
  <% end %>
79
- </p>
80
- </div>
81
- </div>
82
-
83
- <div class="row">
84
- <div class="col-sm-2">
85
- <strong>ETA</strong>
86
- </div>
87
- <div class="col-sm-10">
88
- <p>
68
+ </td>
69
+ </tr>
70
+ <tr>
71
+ <th>Progress</th>
72
+ <td>
73
+ <%= @status["pct_complete"].to_i %>%
74
+ <% if @status["at"] && @status["total"] %>
75
+ (<%= @status["at"] %> of <%= @status["total"] %>)
76
+ <% end %>
77
+ </td>
78
+ </tr>
79
+ <% if @status["status"] == "working" %>
80
+ <tr>
81
+ <th>ETA</th>
82
+ <td>
89
83
  <% if @status["eta"] %>
90
84
  <%= ChronicDuration.output(@status["eta"].to_i, :weeks => true, :units => 2) %>
85
+ <% else %>
86
+ <i>n/a</i>
91
87
  <% end %>
92
- </p>
93
- </div>
94
- </div>
95
-
96
- <% if @status["custom"].any? %>
97
- <hr>
98
- <% @status["custom"].each do |key, val| %>
99
- <div class="row">
100
- <div class="col-sm-2">
101
- <strong><%= key %></strong>
102
- </div>
103
- <div class="col-sm-10">
104
- <% if val && val.include?("\n") %>
105
- <pre><%= h val %></pre>
106
- <% else %>
107
- <p><%= h(val) || "<i>none</i>" %></p>
108
- <% end %>
109
- </div>
110
- </div>
88
+ </td>
89
+ </tr>
111
90
  <% end %>
112
- <% end %>
91
+ <tr>
92
+ <th>Message</th>
93
+ <td>
94
+ <% if @status["message"] && !@status["message"].empty? %>
95
+ <%= h(@status["message"]) %>
96
+ <% else %>
97
+ <i>none</i>
98
+ <% end %>
99
+ </td>
100
+ </tr>
101
+ <tr>
102
+ <th>Enqueued At</th>
103
+ <td class="timestamp"><%= format_iso_timestamp(@status["enqueued_at"]) %></td>
104
+ </tr>
105
+ <tr>
106
+ <th>Started At</th>
107
+ <td class="timestamp"><%= format_iso_timestamp(@status["started_at"]) %></td>
108
+ </tr>
109
+ <tr>
110
+ <th>Last Updated</th>
111
+ <td class="timestamp">
112
+ <%= format_iso_timestamp(@status["updated_at"]) %>
113
+ <% if @status["updated_at"] %>
114
+ <br><small class="text-muted">
115
+ <% secs = Time.now.to_i - @status["updated_at"].to_i %>
116
+ <% if secs > 0 %>
117
+ (<%= ChronicDuration.output(secs, :weeks => true, :units => 2) %> ago)
118
+ <% else %>
119
+ (now)
120
+ <% end %>
121
+ </small>
122
+ <% end %>
123
+ </td>
124
+ </tr>
125
+ <tr>
126
+ <th>Ended At</th>
127
+ <td class="timestamp"><%= format_iso_timestamp(@status["ended_at"]) %></td>
128
+ </tr>
129
+ </tbody>
130
+ </table>
131
+
132
+ <% if @status["custom"] && @status["custom"].any? %>
133
+ <div class="header-container">
134
+ <h3>Custom Data</h3>
113
135
  </div>
114
- </div>
136
+ <table class="table table-bordered table-striped status-table">
137
+ <% @status["custom"].each do |key, val| %>
138
+ <tr>
139
+ <th><%= h key %></th>
140
+ <td>
141
+ <% if val && val.to_s.include?("\n") %>
142
+ <div class="multiline"><%= h val %></div>
143
+ <% else %>
144
+ <%= h(val) || "<i>none</i>" %>
145
+ <% end %>
146
+ </td>
147
+ </tr>
148
+ <% end %>
149
+ </table>
150
+ <% end %>
151
+
152
+ <br />
115
153
 
116
154
  <a href="<%= root_path %>statuses">
117
155
  <small>&larr; back to all statuses</small>
@@ -1,5 +1,5 @@
1
1
  <% require 'cgi'; def h(v); CGI.escape_html(v.to_s); end %>
2
- <h3>Job Status: <%= h params[:jid] %></h3>
2
+ <h3>Job Status: <%= h safe_url_params("jid") %></h3>
3
3
 
4
4
  <div role="alert">
5
5
  <strong>Uh oh!</strong> That job can't be found. It may have expired already.
@@ -1,77 +1,24 @@
1
1
  <% require 'cgi'; def h(v); CGI.escape_html(v.to_s); end %>
2
- <style>
3
- .progress {
4
- background-color: #C8E1ED;
5
- }
6
- .bar {
7
- background-color: #2897cb;
8
- color: white;
9
- text-shadow: 0 0 0;
10
- }
11
- .message {
12
- text-shadow: 0 0 5px white;
13
- font-weight: bold; padding-left: 4px;
14
- color: #333;
15
- }
16
- .actions {
17
- text-align: center;
18
- }
19
- .header {
20
- text-align: center;
21
- }
22
- .header_update_time {
23
- width: 10%;
24
- }
25
- .header_pct_complete {
26
- width: 45%;
27
- }
28
- .btn-warning {
29
- background-image: linear-gradient(#f0ad4e, #eea236)
30
- }
31
- .nav-container {
32
- display: flex;
33
- line-height: 45px;
34
- }
35
- .nav-container .pull-right {
36
- float: none !important;
37
- }
38
- .nav-container .pagination {
39
- display: flex;
40
- align-items: center;
41
- }
42
- .nav-container .per-page, .filter-status {
43
- display: flex;
44
- align-items: center;
45
- margin: 20px 0 20px 10px;
46
- white-space: nowrap;
47
- }
48
- .nav-container .per-page SELECT {
49
- margin: 0 0 0 5px;
50
- }
51
- </style>
52
- <script>
53
- function setPerPage(select){
54
- window.location = select.options[select.selectedIndex].getAttribute('data-url')
55
- }
56
- </script>
57
- <div style="display: flex; justify-content: space-between;">
2
+ <link rel="stylesheet" href="<%= root_path %>assets/statuses.css" />
3
+ <script type="text/javascript" src="<%= root_path %>assets/statuses.js"></script>
4
+ <div class="index-header">
58
5
  <h3 class="wi">Recent job statuses</h3>
59
6
  <div class="nav-container">
60
7
  <%= erb :_paging, locals: { url: "#{root_path}statuses" } %>
61
8
  <div class="filter-status">
62
- Filter Status:
63
- <select class="form-control" onchange="setPerPage(this)">
9
+ Filter Status:&nbsp;
10
+ <select class="form-control">
64
11
  <% (['all', 'complete', 'failed', 'interrupted', 'queued', 'retrying', 'stopped', 'working']).each do |status| %>
65
- <option data-url="?<%= qparams(status: status)%>" value="<%= status %>" <%= 'selected="selected"' if status == (params[:status]) %>><%= status %></option>
12
+ <option data-url="?<%= qparams(status: status)%>" value="<%= status %>" <%= 'selected="selected"' if status == (safe_url_params("status")) %>><%= status %></option>
66
13
  <% end %>
67
14
  </select>
68
15
  </div>
69
16
 
70
17
  <div class="per-page">
71
- Per page:
72
- <select class="form-control" onchange="setPerPage(this)">
18
+ Per page:&nbsp;
19
+ <select class="form-control">
73
20
  <% (Sidekiq::Status::Web.per_page_opts + ['all']).each do |num| %>
74
- <option data-url="?<%= qparams(page: 1, per_page: num)%>" value="<%= num %>" <%= 'selected="selected"' if num.to_s == (params[:per_page] || @count) %>><%= num %></option>
21
+ <option data-url="?<%= qparams(page: 1, per_page: num)%>" value="<%= num %>" <%= 'selected="selected"' if num.to_s == (safe_url_params("per_page") || @count) %>><%= num %></option>
75
22
  <% end %>
76
23
  </select>
77
24
  </div>
@@ -96,11 +43,11 @@ function setPerPage(select){
96
43
  <td>
97
44
  <div class='args' title='<%= h container["jid"] %>'><%= h container["args"] %></div>
98
45
  </td>
99
- <td style='text-align: center;'>
100
- <div class='label label-<%= h container["label"] %>'><%= h container["status"] %></div>
46
+ <td class='center'>
47
+ <span class='label label-<%= h container["label"] %>'><%= h container["status"] %></span>
101
48
  </td>
102
- <% secs = Time.now.to_i - container["update_time"].to_i %>
103
- <td style='text-align: center; white-space: nowrap;' title="<%= Time.at(container["update_time"].to_i) %>">
49
+ <% secs = Time.now.to_i - container["updated_at"].to_i %>
50
+ <td class='center nowrap' title="<%= Time.at(container["updated_at"].to_i) %>">
104
51
  <% if secs > 0 %>
105
52
  <%= ChronicDuration.output(secs, :weeks => true, :units => 2) %> ago
106
53
  <% else %>
@@ -108,23 +55,20 @@ function setPerPage(select){
108
55
  <% end %>
109
56
  </td>
110
57
  <td>
111
- <div class="progress progress-striped" style="margin-bottom: 0">
112
- <div class='message' style='text-align:right; padding-right:0.5em; background-color: transparent; float:right;'>
113
- <%= h container["message"] %>
114
- </div>
115
- <% if container["pct_complete"].to_i > 0 %>
116
- <div class="bar message" style="width: <%= h container["pct_complete"] %>%;">
117
- <%= h container["pct_complete"] %>%
58
+ <div class="progress" class="mb-0">
59
+ <div class="progress-bar" role="progressbar" aria-valuenow="<%= container["pct_complete"].to_i %>" aria-valuemin="0" aria-valuemax="100">
60
+ <div class="progress-percentage">
61
+ <%= container["pct_complete"].to_i %>%
118
62
  </div>
119
- <% end %>
63
+ </div>
120
64
  </div>
121
65
  </td>
122
- <td style='text-align: center; white-space: nowrap;'>
123
- <% if container["elapsed"] %>
124
- <%= ChronicDuration.output(container["elapsed"].to_i, :weeks => true, :units => 2) %>
66
+ <td class='center nowrap'>
67
+ <% unless container["elapsed"].nil? %>
68
+ <%= ChronicDuration.output(container["elapsed"].to_i, :weeks => true, :units => 2) || '0 secs' %>
125
69
  <% end %>
126
70
  </td>
127
- <td style='text-align: center; white-space: nowrap;'>
71
+ <td class='center nowrap'>
128
72
  <% if container["eta"] %>
129
73
  <%= ChronicDuration.output(container["eta"].to_i, :weeks => true, :units => 2) %>
130
74
  <% end %>
@@ -148,7 +92,7 @@ function setPerPage(select){
148
92
  <% end %>
149
93
  <% if @statuses.empty? %>
150
94
  <tr>
151
- <td colspan="6"></td>
95
+ <td colspan="8"></td>
152
96
  </tr>
153
97
  <% end %>
154
98
  </table>
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-status
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.3
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeniy Tsvigun
8
8
  - Kenaniah Cerny
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2023-05-04 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: sidekiq
@@ -17,20 +16,20 @@ dependencies:
17
16
  requirements:
18
17
  - - ">="
19
18
  - !ruby/object:Gem::Version
20
- version: '6.0'
19
+ version: '7'
21
20
  - - "<"
22
21
  - !ruby/object:Gem::Version
23
- version: '8'
22
+ version: '9'
24
23
  type: :runtime
25
24
  prerelease: false
26
25
  version_requirements: !ruby/object:Gem::Requirement
27
26
  requirements:
28
27
  - - ">="
29
28
  - !ruby/object:Gem::Version
30
- version: '6.0'
29
+ version: '7'
31
30
  - - "<"
32
31
  - !ruby/object:Gem::Version
33
- version: '8'
32
+ version: '9'
34
33
  - !ruby/object:Gem::Dependency
35
34
  name: chronic_duration
36
35
  requirement: !ruby/object:Gem::Requirement
@@ -45,6 +44,34 @@ dependencies:
45
44
  - - ">="
46
45
  - !ruby/object:Gem::Version
47
46
  version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: logger
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: base64
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
48
75
  - !ruby/object:Gem::Dependency
49
76
  name: appraisal
50
77
  requirement: !ruby/object:Gem::Requirement
@@ -73,6 +100,20 @@ dependencies:
73
100
  - - ">="
74
101
  - !ruby/object:Gem::Version
75
102
  version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: irb
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
76
117
  - !ruby/object:Gem::Dependency
77
118
  name: rack-test
78
119
  requirement: !ruby/object:Gem::Requirement
@@ -129,7 +170,34 @@ dependencies:
129
170
  - - ">="
130
171
  - !ruby/object:Gem::Version
131
172
  version: '0'
132
- description:
173
+ - !ruby/object:Gem::Dependency
174
+ name: webrick
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: rack-session
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
133
201
  email:
134
202
  - utgarda@gmail.com
135
203
  - kenaniah@gmail.com
@@ -137,21 +205,30 @@ executables: []
137
205
  extensions: []
138
206
  extra_rdoc_files: []
139
207
  files:
208
+ - ".devcontainer/Dockerfile"
209
+ - ".devcontainer/README.md"
210
+ - ".devcontainer/devcontainer.json"
211
+ - ".devcontainer/docker-compose.yml"
140
212
  - ".github/workflows/ci.yaml"
141
213
  - ".gitignore"
142
214
  - ".gitlab-ci.yml"
143
215
  - ".rspec"
144
216
  - Appraisals
145
217
  - CHANGELOG.md
218
+ - Dockerfile
146
219
  - Gemfile
147
220
  - LICENSE
148
221
  - README.md
149
222
  - Rakefile
150
- - gemfiles/sidekiq_6.1.gemfile
151
- - gemfiles/sidekiq_6.x.gemfile
223
+ - docker-compose.yml
224
+ - gemfiles/sidekiq_7.0.gemfile
225
+ - gemfiles/sidekiq_7.3.gemfile
152
226
  - gemfiles/sidekiq_7.x.gemfile
227
+ - gemfiles/sidekiq_8.0.gemfile
228
+ - gemfiles/sidekiq_8.x.gemfile
153
229
  - lib/sidekiq-status.rb
154
230
  - lib/sidekiq-status/client_middleware.rb
231
+ - lib/sidekiq-status/helpers.rb
155
232
  - lib/sidekiq-status/redis_adapter.rb
156
233
  - lib/sidekiq-status/redis_client_adapter.rb
157
234
  - lib/sidekiq-status/server_middleware.rb
@@ -171,6 +248,9 @@ files:
171
248
  - spec/lib/sidekiq-status_spec.rb
172
249
  - spec/spec_helper.rb
173
250
  - spec/support/test_jobs.rb
251
+ - spec/test_environment.rb
252
+ - web/assets/statuses.css
253
+ - web/assets/statuses.js
174
254
  - web/sidekiq-status-single-web.png
175
255
  - web/sidekiq-status-web.png
176
256
  - web/views/status.erb
@@ -180,7 +260,6 @@ homepage: https://github.com/kenaniah/sidekiq-status
180
260
  licenses:
181
261
  - MIT
182
262
  metadata: {}
183
- post_install_message:
184
263
  rdoc_options: []
185
264
  require_paths:
186
265
  - lib
@@ -188,15 +267,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
267
  requirements:
189
268
  - - ">="
190
269
  - !ruby/object:Gem::Version
191
- version: '0'
270
+ version: '3.2'
192
271
  required_rubygems_version: !ruby/object:Gem::Requirement
193
272
  requirements:
194
273
  - - ">="
195
274
  - !ruby/object:Gem::Version
196
275
  version: '0'
197
276
  requirements: []
198
- rubygems_version: 3.4.1
199
- signing_key:
277
+ rubygems_version: 3.6.9
200
278
  specification_version: 4
201
279
  summary: An extension to the sidekiq message processing to track your jobs
202
280
  test_files:
@@ -209,3 +287,4 @@ test_files:
209
287
  - spec/lib/sidekiq-status_spec.rb
210
288
  - spec/spec_helper.rb
211
289
  - spec/support/test_jobs.rb
290
+ - spec/test_environment.rb