sidekiq 6.0.0 → 6.0.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq might be problematic. Click here for more details.

Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -0
  3. data/6.0-Upgrade.md +3 -1
  4. data/Changes.md +97 -1
  5. data/Ent-Changes.md +7 -1
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +76 -73
  8. data/Pro-Changes.md +9 -1
  9. data/README.md +3 -1
  10. data/bin/sidekiqload +8 -4
  11. data/bin/sidekiqmon +4 -5
  12. data/lib/generators/sidekiq/worker_generator.rb +11 -1
  13. data/lib/sidekiq/api.rb +122 -89
  14. data/lib/sidekiq/cli.rb +24 -17
  15. data/lib/sidekiq/client.rb +18 -4
  16. data/lib/sidekiq/fetch.rb +7 -7
  17. data/lib/sidekiq/job_logger.rb +11 -3
  18. data/lib/sidekiq/job_retry.rb +23 -10
  19. data/lib/sidekiq/launcher.rb +1 -3
  20. data/lib/sidekiq/logger.rb +107 -11
  21. data/lib/sidekiq/middleware/chain.rb +11 -2
  22. data/lib/sidekiq/monitor.rb +1 -16
  23. data/lib/sidekiq/paginator.rb +7 -2
  24. data/lib/sidekiq/processor.rb +17 -19
  25. data/lib/sidekiq/redis_connection.rb +3 -0
  26. data/lib/sidekiq/scheduled.rb +13 -12
  27. data/lib/sidekiq/testing.rb +12 -0
  28. data/lib/sidekiq/util.rb +0 -2
  29. data/lib/sidekiq/version.rb +1 -1
  30. data/lib/sidekiq/web/application.rb +17 -14
  31. data/lib/sidekiq/web/helpers.rb +22 -10
  32. data/lib/sidekiq/worker.rb +4 -4
  33. data/lib/sidekiq.rb +12 -0
  34. data/sidekiq.gemspec +1 -1
  35. data/web/assets/javascripts/dashboard.js +2 -2
  36. data/web/assets/stylesheets/application-dark.css +125 -0
  37. data/web/assets/stylesheets/application.css +9 -0
  38. data/web/locales/de.yml +14 -2
  39. data/web/locales/en.yml +2 -0
  40. data/web/views/_job_info.erb +2 -1
  41. data/web/views/busy.erb +4 -1
  42. data/web/views/dead.erb +2 -2
  43. data/web/views/layout.erb +1 -0
  44. data/web/views/morgue.erb +4 -1
  45. data/web/views/queue.erb +10 -1
  46. data/web/views/queues.erb +8 -0
  47. data/web/views/retries.erb +4 -1
  48. data/web/views/retry.erb +2 -2
  49. data/web/views/scheduled.erb +4 -1
  50. metadata +5 -4
data/lib/sidekiq.rb CHANGED
@@ -192,6 +192,7 @@ module Sidekiq
192
192
 
193
193
  def self.log_formatter=(log_formatter)
194
194
  @log_formatter = log_formatter
195
+ logger.formatter = log_formatter
195
196
  end
196
197
 
197
198
  def self.logger
@@ -199,9 +200,20 @@ module Sidekiq
199
200
  end
200
201
 
201
202
  def self.logger=(logger)
203
+ if logger.nil?
204
+ self.logger.level = Logger::FATAL
205
+ return self.logger
206
+ end
207
+
208
+ logger.extend(Sidekiq::LoggingUtils)
209
+
202
210
  @logger = logger
203
211
  end
204
212
 
213
+ def self.pro?
214
+ defined?(Sidekiq::Pro)
215
+ end
216
+
205
217
  # How frequently Redis should be checked by a random Sidekiq process for
206
218
  # scheduled and retriable jobs. Each individual process will take turns by
207
219
  # waiting some multiple of this value.
data/sidekiq.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.homepage = "http://sidekiq.org"
9
9
  gem.license = "LGPL-3.0"
10
10
 
11
- gem.executables = ["sidekiq"]
11
+ gem.executables = ["sidekiq", "sidekiqmon"]
12
12
  gem.files = `git ls-files | grep -Ev '^(test|myapp|examples)'`.split("\n")
13
13
  gem.name = "sidekiq"
14
14
  gem.version = Sidekiq::VERSION
@@ -27,7 +27,7 @@ var realtimeGraph = function(updatePath) {
27
27
  renderer: 'line',
28
28
  interpolation: 'linear',
29
29
 
30
- series: new Rickshaw.Series.FixedDuration([{ name: graphElement.dataset.failedLabel, color: '#B1003E' }, { name: graphElement.dataset.processedLabel, color: '#006f68' }], undefined, {
30
+ series: new Rickshaw.Series.FixedDuration([{ name: graphElement.dataset.failedLabel, color: '#af0014' }, { name: graphElement.dataset.processedLabel, color: '#006f68' }], undefined, {
31
31
  timeInterval: timeInterval,
32
32
  maxDataPoints: 100,
33
33
  })
@@ -125,7 +125,7 @@ var historyGraph = function() {
125
125
  interpolation: 'linear',
126
126
  series: [
127
127
  {
128
- color: "#B1003E",
128
+ color: "#af0014",
129
129
  data: failed,
130
130
  name: graphElement.dataset.failedLabel
131
131
  }, {
@@ -0,0 +1,125 @@
1
+ @media (prefers-color-scheme: dark) {
2
+
3
+ body {
4
+ background-color: #000;
5
+ color: #ccc;
6
+ }
7
+
8
+ a,
9
+ .title,
10
+ .summary_bar ul .count,
11
+ .navbar .navbar-brand {
12
+ color: #af0014;
13
+ }
14
+
15
+ .navbar .navbar-brand:hover {
16
+ color: #ccc;
17
+ }
18
+
19
+ .navbar .navbar-brand .status {
20
+ color: #ccc;
21
+ }
22
+
23
+ .navbar-inverse {
24
+ background-color: #000;
25
+ border-color: #333;
26
+ }
27
+
28
+ table.table-white {
29
+ background-color: #111;
30
+ }
31
+
32
+ .table-striped > tbody > tr:nth-of-type(odd) {
33
+ background-color: #222;
34
+ }
35
+
36
+ .table-bordered,
37
+ .table-bordered > tbody > tr > td,
38
+ .table-bordered > tbody > tr > th,
39
+ .table-bordered > tfoot > tr > td,
40
+ .table-bordered > tfoot > tr > th,
41
+ .table-bordered > thead > tr > td,
42
+ .table-bordered > thead > tr > th {
43
+ border: 1px solid #333;
44
+ }
45
+
46
+ .table-hover > tbody > tr:hover {
47
+ background-color: #333;
48
+ }
49
+
50
+ .alert {
51
+ border: none;
52
+ color: #ccc;
53
+ }
54
+
55
+ .alert-success {
56
+ background-color: #000;
57
+ }
58
+
59
+ a:link,
60
+ a:active,
61
+ a:hover,
62
+ a:visited {
63
+ color: #63798c;
64
+ }
65
+
66
+ a.btn {
67
+ color: #000;
68
+ }
69
+
70
+ .summary_bar .summary {
71
+ background-color: #000;
72
+ border: 1px solid #333;
73
+ }
74
+
75
+ .navbar-default {
76
+ background-color: #000;
77
+ border-color: #3d3d3d;
78
+ }
79
+
80
+ .navbar-default .navbar-nav > .active > a,
81
+ .navbar-default .navbar-nav > .active > a:focus,
82
+ .navbar-default .navbar-nav > .active > a:hover {
83
+ color: #ccc;
84
+ background-color: #282828;
85
+ }
86
+
87
+ .navbar-default .navbar-nav > li > a:hover {
88
+ color: #ccc;
89
+ }
90
+
91
+ .pagination > li > a,
92
+ .pagination > li > a:hover,
93
+ .pagination > li > span {
94
+ color: #ccc;
95
+ background-color: #282828;
96
+ border-color: #353535;
97
+ }
98
+ .pagination > .disabled > a,
99
+ .pagination > .disabled > a:focus,
100
+ .pagination > .disabled > a:hover,
101
+ .pagination > .disabled > span,
102
+ .pagination > .disabled > span:focus,
103
+ .pagination > .disabled > span:hover {
104
+ color: #a5a5a5;
105
+ background-color: #282828;
106
+ border-color: #353535;
107
+ }
108
+
109
+ .stat {
110
+ border: 1px solid rgba(255, 255, 255, 0.1);
111
+ }
112
+
113
+ #live-poll {
114
+ color: #ccc;
115
+ }
116
+
117
+ .btn-warn {
118
+ color: #333;
119
+ }
120
+
121
+ .rickshaw_graph .y_ticks.glow text {
122
+ fill: #ccc;
123
+ color: #ccc;
124
+ }
125
+ }
@@ -201,6 +201,15 @@ td form {
201
201
  padding: 0;
202
202
  }
203
203
 
204
+ .jobtag a {
205
+ color: white;
206
+ }
207
+
208
+ .jobtag a:hover {
209
+ color: white;
210
+ text-decoration: underline;
211
+ }
212
+
204
213
  table .table-checkbox label {
205
214
  height: 100%;
206
215
  width: 100%;
data/web/locales/de.yml CHANGED
@@ -13,7 +13,7 @@ de:
13
13
  Retries: Versuche
14
14
  Enqueued: In der Warteschlange
15
15
  Worker: Arbeiter
16
- LivePoll: Live Poll
16
+ LivePoll: Echtzeitabfrage
17
17
  StopPolling: Abfrage stoppen
18
18
  Queue: Warteschlange
19
19
  Class: Klasse
@@ -33,12 +33,13 @@ de:
33
33
  NextRetry: Nächster Versuch
34
34
  RetryCount: Anzahl der Versuche
35
35
  RetryNow: Jetzt erneut versuchen
36
- Kill: Töten
36
+ Kill: Vernichten
37
37
  LastRetry: Letzter Versuch
38
38
  OriginallyFailed: Ursprünglich fehlgeschlagen
39
39
  AreYouSure: Bist du sicher?
40
40
  DeleteAll: Alle löschen
41
41
  RetryAll: Alle erneut versuchen
42
+ KillAll: Alle vernichten
42
43
  NoRetriesFound: Keine erneuten Versuche gefunden
43
44
  Error: Fehler
44
45
  ErrorClass: Fehlerklasse
@@ -67,3 +68,14 @@ de:
67
68
  Thread: Thread
68
69
  Threads: Threads
69
70
  Jobs: Jobs
71
+ Paused: Pausiert
72
+ Stop: Stopp
73
+ Quiet: Leise
74
+ StopAll: Alle stoppen
75
+ QuietAll: Alle leise
76
+ PollingInterval: Abfrageintervall
77
+ Plugins: Erweiterungen
78
+ NotYetEnqueued: Noch nicht in der Warteschlange
79
+ CreatedAt: Erstellt
80
+ BackToApp: Zurück zur Anwendung
81
+ Latency: Latenz
data/web/locales/en.yml CHANGED
@@ -79,3 +79,5 @@ en: # <---- change this to your locale code
79
79
  CreatedAt: Created At
80
80
  BackToApp: Back to App
81
81
  Latency: Latency
82
+ Pause: Pause
83
+ Unpause: Unpause
@@ -14,7 +14,8 @@
14
14
  <tr>
15
15
  <th><%= t('Job') %></th>
16
16
  <td>
17
- <code><%= job.display_class %></code>
17
+ <%= job.display_class %>
18
+ <%= display_tags(job) %>
18
19
  </td>
19
20
  </tr>
20
21
  <tr>
data/web/views/busy.erb CHANGED
@@ -87,7 +87,10 @@
87
87
  <td>
88
88
  <a href="<%= root_path %>queues/<%= msg['queue'] %>"><%= msg['queue'] %></a>
89
89
  </td>
90
- <td><%= job.display_class %></td>
90
+ <td>
91
+ <%= job.display_class %>
92
+ <%= display_tags(job, nil) %>
93
+ </td>
91
94
  <td>
92
95
  <div class="args"><%= display_args(job.display_args) %></div>
93
96
  </td>
data/web/views/dead.erb CHANGED
@@ -14,11 +14,11 @@
14
14
  <th><%= t('ErrorMessage') %></th>
15
15
  <td><%= h(@dead['error_message']) %></td>
16
16
  </tr>
17
- <% if !@dead['error_backtrace'].nil? %>
17
+ <% if @dead.error_backtrace %>
18
18
  <tr>
19
19
  <th><%= t('ErrorBacktrace') %></th>
20
20
  <td>
21
- <code><%= @dead['error_backtrace'].join("<br/>") %></code>
21
+ <code><%= @dead.error_backtrace.join("<br/>") %></code>
22
22
  </td>
23
23
  </tr>
24
24
  <% end %>
data/web/views/layout.erb CHANGED
@@ -11,6 +11,7 @@
11
11
  <% end %>
12
12
 
13
13
  <link href="<%= root_path %>stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
14
+ <link href="<%= root_path %>stylesheets/application-dark.css" media="screen" rel="stylesheet" type="text/css" />
14
15
  <% if rtl? %>
15
16
  <link href="<%= root_path %>stylesheets/application-rtl.css" media="screen" rel="stylesheet" type="text/css" />
16
17
  <% end %>
data/web/views/morgue.erb CHANGED
@@ -42,7 +42,10 @@
42
42
  <td>
43
43
  <a href="<%= root_path %>queues/<%= entry.queue %>"><%= entry.queue %></a>
44
44
  </td>
45
- <td><%= entry.display_class %></td>
45
+ <td>
46
+ <%= entry.display_class %>
47
+ <%= display_tags(entry, "morgue") %>
48
+ </td>
46
49
  <td>
47
50
  <div class="args"><%= display_args(entry.display_args) %></div>
48
51
  </td>
data/web/views/queue.erb CHANGED
@@ -15,13 +15,22 @@
15
15
  <div class="table_container">
16
16
  <table class="queue table table-hover table-bordered table-striped">
17
17
  <thead>
18
+ <th><a href="<%= url %>?direction=<%= params[:direction] == 'asc' ? 'desc' : 'asc' %>"># <%= sort_direction_label %></a></th>
18
19
  <th><%= t('Job') %></th>
19
20
  <th><%= t('Arguments') %></th>
20
21
  <th></th>
21
22
  </thead>
22
23
  <% @messages.each_with_index do |msg, index| %>
23
24
  <tr>
24
- <td><%= h(msg.display_class) %></td>
25
+ <% if params[:direction] == 'asc' %>
26
+ <td><%= @count * (@current_page - 1) + index + 1 %></td>
27
+ <% else %>
28
+ <td><%= @total_size - (@count * (@current_page - 1) + index) %></td>
29
+ <% end %>
30
+ <td>
31
+ <%= h(msg.display_class) %>
32
+ <%= display_tags(msg, nil) %>
33
+ </td>
25
34
  <td>
26
35
  <% a = msg.display_args %>
27
36
  <% if a.inspect.size > 100 %>
data/web/views/queues.erb CHANGED
@@ -22,6 +22,14 @@
22
22
  <form action="<%=root_path %>queues/<%= CGI.escape(queue.name) %>" method="post">
23
23
  <%= csrf_tag %>
24
24
  <input class="btn btn-danger btn-xs" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSureDeleteQueue', :queue => h(queue.name)) %>" />
25
+
26
+ <% if Sidekiq.pro? %>
27
+ <% if queue.paused? %>
28
+ <input class="btn btn-danger btn-xs" type="submit" name="unpause" value="<%= t('Unpause') %>" />
29
+ <% else %>
30
+ <input class="btn btn-danger btn-xs" type="submit" name="pause" value="<%= t('Pause') %>" />
31
+ <% end %>
32
+ <% end %>
25
33
  </form>
26
34
  </td>
27
35
  </tr>
@@ -44,7 +44,10 @@
44
44
  <td>
45
45
  <a href="<%= root_path %>queues/<%= entry.queue %>"><%= entry.queue %></a>
46
46
  </td>
47
- <td><%= entry.display_class %></td>
47
+ <td>
48
+ <%= entry.display_class %>
49
+ <%= display_tags(entry, "retries") %>
50
+ </td>
48
51
  <td>
49
52
  <div class="args"><%= display_args(entry.display_args) %></div>
50
53
  </td>
data/web/views/retry.erb CHANGED
@@ -14,11 +14,11 @@
14
14
  <th><%= t('ErrorMessage') %></th>
15
15
  <td><%= h(@retry['error_message']) %></td>
16
16
  </tr>
17
- <% if !@retry['error_backtrace'].nil? %>
17
+ <% if @retry.error_backtrace %>
18
18
  <tr>
19
19
  <th><%= t('ErrorBacktrace') %></th>
20
20
  <td>
21
- <code><%= @retry['error_backtrace'].join("<br/>") %></code>
21
+ <code><%= @retry.error_backtrace.join("<br/>") %></code>
22
22
  </td>
23
23
  </tr>
24
24
  <% end %>
@@ -38,7 +38,10 @@
38
38
  <td>
39
39
  <a href="<%= root_path %>queues/<%= entry.queue %>"><%= entry.queue %></a>
40
40
  </td>
41
- <td><%= entry.display_class %></td>
41
+ <td>
42
+ <%= entry.display_class %>
43
+ <%= display_tags(entry, "scheduled") %>
44
+ </td>
42
45
  <td>
43
46
  <div class="args"><%= display_args(entry.display_args) %></div>
44
47
  </td>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0
4
+ version: 6.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-30 00:00:00.000000000 Z
11
+ date: 2019-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -71,6 +71,7 @@ email:
71
71
  - mperham@gmail.com
72
72
  executables:
73
73
  - sidekiq
74
+ - sidekiqmon
74
75
  extensions: []
75
76
  extra_rdoc_files: []
76
77
  files:
@@ -145,6 +146,7 @@ files:
145
146
  - web/assets/images/status.png
146
147
  - web/assets/javascripts/application.js
147
148
  - web/assets/javascripts/dashboard.js
149
+ - web/assets/stylesheets/application-dark.css
148
150
  - web/assets/stylesheets/application-rtl.css
149
151
  - web/assets/stylesheets/application.css
150
152
  - web/assets/stylesheets/bootstrap-rtl.min.css
@@ -212,8 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
214
  - !ruby/object:Gem::Version
213
215
  version: '0'
214
216
  requirements: []
215
- rubyforge_project:
216
- rubygems_version: 2.7.6
217
+ rubygems_version: 3.0.3
217
218
  signing_key:
218
219
  specification_version: 4
219
220
  summary: Simple, efficient background processing for Ruby