sidekiq 4.2.10 → 7.3.10
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 +5 -5
- data/Changes.md +932 -7
- data/LICENSE.txt +9 -0
- data/README.md +49 -50
- data/bin/multi_queue_bench +271 -0
- data/bin/sidekiq +22 -3
- data/bin/sidekiqload +218 -116
- data/bin/sidekiqmon +11 -0
- data/lib/active_job/queue_adapters/sidekiq_adapter.rb +75 -0
- data/lib/generators/sidekiq/job_generator.rb +59 -0
- data/lib/generators/sidekiq/templates/{worker.rb.erb → job.rb.erb} +2 -2
- data/lib/generators/sidekiq/templates/job_spec.rb.erb +6 -0
- data/lib/generators/sidekiq/templates/{worker_test.rb.erb → job_test.rb.erb} +1 -1
- data/lib/sidekiq/api.rb +710 -322
- data/lib/sidekiq/capsule.rb +132 -0
- data/lib/sidekiq/cli.rb +268 -248
- data/lib/sidekiq/client.rb +153 -101
- data/lib/sidekiq/component.rb +90 -0
- data/lib/sidekiq/config.rb +311 -0
- data/lib/sidekiq/deploy.rb +64 -0
- data/lib/sidekiq/embedded.rb +63 -0
- data/lib/sidekiq/fetch.rb +50 -42
- data/lib/sidekiq/iterable_job.rb +55 -0
- data/lib/sidekiq/job/interrupt_handler.rb +24 -0
- data/lib/sidekiq/job/iterable/active_record_enumerator.rb +53 -0
- data/lib/sidekiq/job/iterable/csv_enumerator.rb +47 -0
- data/lib/sidekiq/job/iterable/enumerators.rb +135 -0
- data/lib/sidekiq/job/iterable.rb +294 -0
- data/lib/sidekiq/job.rb +385 -0
- data/lib/sidekiq/job_logger.rb +52 -0
- data/lib/sidekiq/job_retry.rb +305 -0
- data/lib/sidekiq/job_util.rb +109 -0
- data/lib/sidekiq/launcher.rb +208 -108
- data/lib/sidekiq/logger.rb +131 -0
- data/lib/sidekiq/manager.rb +43 -47
- data/lib/sidekiq/metrics/query.rb +158 -0
- data/lib/sidekiq/metrics/shared.rb +106 -0
- data/lib/sidekiq/metrics/tracking.rb +148 -0
- data/lib/sidekiq/middleware/chain.rb +113 -56
- data/lib/sidekiq/middleware/current_attributes.rb +128 -0
- data/lib/sidekiq/middleware/i18n.rb +9 -7
- data/lib/sidekiq/middleware/modules.rb +23 -0
- data/lib/sidekiq/monitor.rb +147 -0
- data/lib/sidekiq/paginator.rb +33 -15
- data/lib/sidekiq/processor.rb +188 -98
- data/lib/sidekiq/rails.rb +53 -92
- data/lib/sidekiq/redis_client_adapter.rb +114 -0
- data/lib/sidekiq/redis_connection.rb +86 -77
- data/lib/sidekiq/ring_buffer.rb +32 -0
- data/lib/sidekiq/scheduled.rb +140 -51
- data/lib/sidekiq/sd_notify.rb +149 -0
- data/lib/sidekiq/systemd.rb +26 -0
- data/lib/sidekiq/testing/inline.rb +6 -5
- data/lib/sidekiq/testing.rb +95 -85
- data/lib/sidekiq/transaction_aware_client.rb +59 -0
- data/lib/sidekiq/version.rb +7 -1
- data/lib/sidekiq/web/action.rb +40 -18
- data/lib/sidekiq/web/application.rb +189 -89
- data/lib/sidekiq/web/csrf_protection.rb +183 -0
- data/lib/sidekiq/web/helpers.rb +239 -101
- data/lib/sidekiq/web/router.rb +28 -21
- data/lib/sidekiq/web.rb +123 -110
- data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
- data/lib/sidekiq.rb +97 -185
- data/sidekiq.gemspec +26 -27
- data/web/assets/images/apple-touch-icon.png +0 -0
- data/web/assets/javascripts/application.js +157 -61
- data/web/assets/javascripts/base-charts.js +106 -0
- data/web/assets/javascripts/chart.min.js +13 -0
- data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
- data/web/assets/javascripts/dashboard-charts.js +194 -0
- data/web/assets/javascripts/dashboard.js +43 -280
- data/web/assets/javascripts/metrics.js +298 -0
- data/web/assets/stylesheets/application-dark.css +147 -0
- data/web/assets/stylesheets/application-rtl.css +163 -0
- data/web/assets/stylesheets/application.css +176 -196
- data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
- data/web/assets/stylesheets/bootstrap.css +2 -2
- data/web/locales/ar.yml +87 -0
- data/web/locales/cs.yml +62 -62
- data/web/locales/da.yml +60 -53
- data/web/locales/de.yml +65 -53
- data/web/locales/el.yml +43 -24
- data/web/locales/en.yml +88 -64
- data/web/locales/es.yml +70 -53
- data/web/locales/fa.yml +65 -64
- data/web/locales/fr.yml +82 -62
- data/web/locales/gd.yml +98 -0
- data/web/locales/he.yml +80 -0
- data/web/locales/hi.yml +59 -59
- data/web/locales/it.yml +85 -54
- data/web/locales/ja.yml +74 -62
- data/web/locales/ko.yml +52 -52
- data/web/locales/lt.yml +83 -0
- data/web/locales/nb.yml +61 -61
- data/web/locales/nl.yml +52 -52
- data/web/locales/pl.yml +45 -45
- data/web/locales/pt-br.yml +82 -55
- data/web/locales/pt.yml +51 -51
- data/web/locales/ru.yml +68 -63
- data/web/locales/sv.yml +53 -53
- data/web/locales/ta.yml +60 -60
- data/web/locales/tr.yml +100 -0
- data/web/locales/uk.yml +85 -61
- data/web/locales/ur.yml +80 -0
- data/web/locales/vi.yml +83 -0
- data/web/locales/zh-cn.yml +42 -16
- data/web/locales/zh-tw.yml +41 -8
- data/web/views/_footer.erb +20 -3
- data/web/views/_job_info.erb +21 -4
- data/web/views/_metrics_period_select.erb +12 -0
- data/web/views/_nav.erb +5 -19
- data/web/views/_paging.erb +3 -1
- data/web/views/_poll_link.erb +3 -6
- data/web/views/_summary.erb +7 -7
- data/web/views/busy.erb +85 -31
- data/web/views/dashboard.erb +53 -20
- data/web/views/dead.erb +3 -3
- data/web/views/filtering.erb +6 -0
- data/web/views/layout.erb +17 -6
- data/web/views/metrics.erb +90 -0
- data/web/views/metrics_for_job.erb +59 -0
- data/web/views/morgue.erb +15 -16
- data/web/views/queue.erb +35 -25
- data/web/views/queues.erb +20 -4
- data/web/views/retries.erb +19 -16
- data/web/views/retry.erb +3 -3
- data/web/views/scheduled.erb +19 -17
- metadata +103 -194
- data/.github/contributing.md +0 -32
- data/.github/issue_template.md +0 -9
- data/.gitignore +0 -12
- data/.travis.yml +0 -18
- data/3.0-Upgrade.md +0 -70
- data/4.0-Upgrade.md +0 -53
- data/COMM-LICENSE +0 -95
- data/Ent-Changes.md +0 -173
- data/Gemfile +0 -29
- data/LICENSE +0 -9
- data/Pro-2.0-Upgrade.md +0 -138
- data/Pro-3.0-Upgrade.md +0 -44
- data/Pro-Changes.md +0 -628
- data/Rakefile +0 -12
- data/bin/sidekiqctl +0 -99
- data/code_of_conduct.md +0 -50
- data/lib/generators/sidekiq/templates/worker_spec.rb.erb +0 -6
- data/lib/generators/sidekiq/worker_generator.rb +0 -49
- data/lib/sidekiq/core_ext.rb +0 -119
- data/lib/sidekiq/exception_handler.rb +0 -31
- data/lib/sidekiq/extensions/action_mailer.rb +0 -57
- data/lib/sidekiq/extensions/active_record.rb +0 -40
- data/lib/sidekiq/extensions/class_methods.rb +0 -40
- data/lib/sidekiq/extensions/generic_proxy.rb +0 -25
- data/lib/sidekiq/logging.rb +0 -106
- data/lib/sidekiq/middleware/server/active_record.rb +0 -13
- data/lib/sidekiq/middleware/server/logging.rb +0 -31
- data/lib/sidekiq/middleware/server/retry_jobs.rb +0 -205
- data/lib/sidekiq/util.rb +0 -63
- data/lib/sidekiq/worker.rb +0 -121
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chart.min.js" nonce="<%= csp_nonce %>"></script>
|
|
2
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chartjs-plugin-annotation.min.js" nonce="<%= csp_nonce %>"></script>
|
|
3
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/base-charts.js" nonce="<%= csp_nonce %>"></script>
|
|
4
|
+
|
|
5
|
+
<div class="header-container">
|
|
6
|
+
<div class="page-title-container">
|
|
7
|
+
<h1><%= t('Metrics') %></h1>
|
|
8
|
+
<a target="blank" href="https://github.com/sidekiq/sidekiq/wiki/Metrics"><span class="info-circle" title="Click to learn more about metrics">?</span></a>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div>
|
|
12
|
+
<form id="metrics-form" class="form-inline" action="<%= root_path %>metrics" method="get">
|
|
13
|
+
<label for="substr"><%= t('Filter') %></label>
|
|
14
|
+
<input id="class-filter" class="form-control" type="text" name="substr" placeholder="<%= t('Name') %>" value="<%= h params[:substr] %>">
|
|
15
|
+
<select id="period-selector" class="form-control" name="period">
|
|
16
|
+
<% @periods.each_key do |code| %>
|
|
17
|
+
<% if code == @period %>
|
|
18
|
+
<option selected value="<%= code %>"><%= code %></option>
|
|
19
|
+
<% else %>
|
|
20
|
+
<option value="<%= code %>"><%= code %></option>
|
|
21
|
+
<% end %>
|
|
22
|
+
<% end %>
|
|
23
|
+
</select>
|
|
24
|
+
</form>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<%
|
|
29
|
+
table_limit = 20
|
|
30
|
+
chart_limit = 5
|
|
31
|
+
job_results = @query_result.job_results.sort_by { |(kls, jr)| jr.totals["s"] }.reverse.first(table_limit)
|
|
32
|
+
visible_kls = job_results.first(chart_limit).map(&:first)
|
|
33
|
+
%>
|
|
34
|
+
|
|
35
|
+
<% if job_results.any? %>
|
|
36
|
+
<canvas id="job-metrics-overview-chart">
|
|
37
|
+
<%= to_json({
|
|
38
|
+
series: job_results.map { |(kls, jr)| [kls, jr.dig("series", "s")] }.to_h,
|
|
39
|
+
marks: @query_result.marks.map { |m| [m.bucket, m.label] },
|
|
40
|
+
labels: @query_result.buckets,
|
|
41
|
+
visibleKls: visible_kls,
|
|
42
|
+
yLabel: t('TotalExecutionTime'),
|
|
43
|
+
units: t('Seconds').downcase,
|
|
44
|
+
markLabel: t('Deploy'),
|
|
45
|
+
}) %>
|
|
46
|
+
</canvas>
|
|
47
|
+
<% end %>
|
|
48
|
+
|
|
49
|
+
<div class="table_container">
|
|
50
|
+
<table class="table table-bordered table-striped table-hover">
|
|
51
|
+
<tbody>
|
|
52
|
+
<tr>
|
|
53
|
+
<th><%= t('Name') %></th>
|
|
54
|
+
<th><%= t('Success') %></th>
|
|
55
|
+
<th><%= t('Failure') %></th>
|
|
56
|
+
<th><%= t('TotalExecutionTime') %> (<%= t('Seconds') %>)</th>
|
|
57
|
+
<th><%= t('AvgExecutionTime') %> (<%= t('Seconds') %>)</th>
|
|
58
|
+
</tr>
|
|
59
|
+
<% if job_results.any? %>
|
|
60
|
+
<% job_results.each_with_index do |(kls, jr), i| %>
|
|
61
|
+
<tr>
|
|
62
|
+
<td>
|
|
63
|
+
<div class="metrics-swatch-wrapper">
|
|
64
|
+
<% id = "metrics-swatch-#{kls}" %>
|
|
65
|
+
<input
|
|
66
|
+
type="checkbox"
|
|
67
|
+
id="<%= id %>"
|
|
68
|
+
class="metrics-swatch"
|
|
69
|
+
value="<%= kls %>"
|
|
70
|
+
<%= visible_kls.include?(kls) ? 'checked' : '' %>
|
|
71
|
+
/>
|
|
72
|
+
<code><a href="<%= root_path %>metrics/<%= kls %>?period=<%= @period %>"><%= kls %></a></code>
|
|
73
|
+
</div>
|
|
74
|
+
</td>
|
|
75
|
+
<td class="num"><%= number_with_delimiter(jr.dig("totals", "p") - jr.dig("totals", "f")) %></td>
|
|
76
|
+
<td class="num"><%= number_with_delimiter(jr.dig("totals", "f")) %></td>
|
|
77
|
+
<td class="num"><%= number_with_delimiter(jr.dig("totals", "s"), precision: 2) %></td>
|
|
78
|
+
<td class="num"><%= number_with_delimiter(jr.total_avg("s"), precision: 2) %></td>
|
|
79
|
+
</tr>
|
|
80
|
+
<% end %>
|
|
81
|
+
<% else %>
|
|
82
|
+
<tr><td colspan=5><%= t("NoDataFound") %></td></tr>
|
|
83
|
+
<% end %>
|
|
84
|
+
</tbody>
|
|
85
|
+
</table>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<!--p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %></small></p-->
|
|
89
|
+
|
|
90
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/metrics.js" nonce="<%= csp_nonce %>"></script>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chart.min.js" nonce="<%= csp_nonce %>"></script>
|
|
2
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chartjs-plugin-annotation.min.js" nonce="<%= csp_nonce %>"></script>
|
|
3
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/base-charts.js" nonce="<%= csp_nonce %>"></script>
|
|
4
|
+
|
|
5
|
+
<%
|
|
6
|
+
job_result = @query_result.job_results[@name]
|
|
7
|
+
hist_totals = job_result.hist.values.first.zip(*job_result.hist.values[1..-1]).map(&:sum).reverse
|
|
8
|
+
bucket_labels = Sidekiq::Metrics::Histogram::LABELS
|
|
9
|
+
bucket_intervals = Sidekiq::Metrics::Histogram::BUCKET_INTERVALS
|
|
10
|
+
%>
|
|
11
|
+
|
|
12
|
+
<% if job_result.totals["s"] > 0 %>
|
|
13
|
+
<div class="header-container">
|
|
14
|
+
<div class="page-title-container">
|
|
15
|
+
<h1>
|
|
16
|
+
<a href="<%= root_path %>metrics?period=<%= @period %>"><%= t('Metrics') %></a> /
|
|
17
|
+
<%= h @name %>
|
|
18
|
+
</h1>
|
|
19
|
+
|
|
20
|
+
<a target="blank" href="https://github.com/sidekiq/sidekiq/wiki/Metrics"><span class="info-circle" title="Click to learn more about metrics">?</span></a>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<%= erb :_metrics_period_select, locals: { periods: @periods, period: @period, path: "#{root_path}metrics/#{@name}" } %>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<canvas id="hist-totals-chart">
|
|
27
|
+
<%= to_json({
|
|
28
|
+
series: hist_totals,
|
|
29
|
+
labels: bucket_labels,
|
|
30
|
+
xLabel: t('ExecutionTime'),
|
|
31
|
+
yLabel: t('Jobs'),
|
|
32
|
+
units: t('Jobs').downcase,
|
|
33
|
+
}) %>
|
|
34
|
+
</canvas>
|
|
35
|
+
|
|
36
|
+
<canvas id="hist-bubble-chart">
|
|
37
|
+
<%= to_json({
|
|
38
|
+
hist: job_result.hist,
|
|
39
|
+
marks: @query_result.marks.map { |m| [m.bucket, m.label] },
|
|
40
|
+
labels: @query_result.buckets,
|
|
41
|
+
histIntervals: bucket_intervals,
|
|
42
|
+
yLabel: t('ExecutionTime'),
|
|
43
|
+
markLabel: t('Deploy'),
|
|
44
|
+
yUnits: t('Seconds').downcase,
|
|
45
|
+
zUnits: t('Jobs').downcase,
|
|
46
|
+
}) %>
|
|
47
|
+
</canvas>
|
|
48
|
+
|
|
49
|
+
<!--p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %></small></p-->
|
|
50
|
+
<% else %>
|
|
51
|
+
<h1>
|
|
52
|
+
<a href="<%= root_path %>/metrics"><%= t('Metrics') %></a> /
|
|
53
|
+
<%= h @name %>
|
|
54
|
+
</h1>
|
|
55
|
+
|
|
56
|
+
<div class="alert alert-success"><%= t('NoJobMetricsFound') %></div>
|
|
57
|
+
<% end %>
|
|
58
|
+
|
|
59
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/metrics.js" nonce="<%= csp_nonce %>"></script>
|
data/web/views/morgue.erb
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
<
|
|
2
|
-
<
|
|
3
|
-
<h3><%= t('DeadJobs') %></h3>
|
|
4
|
-
</div>
|
|
1
|
+
<div class="header-container">
|
|
2
|
+
<h1><%= t('DeadJobs') %></h1>
|
|
5
3
|
<% if @dead.size > 0 && @total_size > @count %>
|
|
6
|
-
|
|
7
|
-
<%= erb :_paging, locals: { url: "#{root_path}morgue" } %>
|
|
8
|
-
</div>
|
|
4
|
+
<%= erb :_paging, locals: { url: "#{root_path}morgue" } %>
|
|
9
5
|
<% end %>
|
|
10
|
-
<%= filtering('
|
|
11
|
-
</
|
|
6
|
+
<%= filtering('morgue') %>
|
|
7
|
+
</div>
|
|
12
8
|
|
|
13
9
|
<% if @dead.size > 0 %>
|
|
14
10
|
<form action="<%= root_path %>morgue" method="post">
|
|
15
11
|
<%= csrf_tag %>
|
|
16
12
|
<div class="table_container">
|
|
17
|
-
<table class="table table-striped table-bordered table-
|
|
13
|
+
<table class="table table-striped table-bordered table-hover">
|
|
18
14
|
<thead>
|
|
19
15
|
<tr>
|
|
20
16
|
<th class="table-checkbox checkbox-column">
|
|
@@ -33,7 +29,7 @@
|
|
|
33
29
|
<tr>
|
|
34
30
|
<td class="table-checkbox">
|
|
35
31
|
<label>
|
|
36
|
-
<input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' />
|
|
32
|
+
<input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
|
|
37
33
|
</label>
|
|
38
34
|
</td>
|
|
39
35
|
<td>
|
|
@@ -42,7 +38,10 @@
|
|
|
42
38
|
<td>
|
|
43
39
|
<a href="<%= root_path %>queues/<%= entry.queue %>"><%= entry.queue %></a>
|
|
44
40
|
</td>
|
|
45
|
-
<td
|
|
41
|
+
<td>
|
|
42
|
+
<%= entry.display_class %>
|
|
43
|
+
<%= display_tags(entry, "morgue") %>
|
|
44
|
+
</td>
|
|
46
45
|
<td>
|
|
47
46
|
<div class="args"><%= display_args(entry.display_args) %></div>
|
|
48
47
|
</td>
|
|
@@ -55,18 +54,18 @@
|
|
|
55
54
|
<% end %>
|
|
56
55
|
</table>
|
|
57
56
|
</div>
|
|
58
|
-
<input class="btn btn-primary
|
|
59
|
-
<input class="btn btn-danger
|
|
57
|
+
<input class="btn btn-primary pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>" />
|
|
58
|
+
<input class="btn btn-danger pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>" />
|
|
60
59
|
</form>
|
|
61
60
|
|
|
62
61
|
<% unfiltered? do %>
|
|
63
62
|
<form action="<%= root_path %>morgue/all/delete" method="post">
|
|
64
63
|
<%= csrf_tag %>
|
|
65
|
-
<input class="btn btn-danger
|
|
64
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
|
66
65
|
</form>
|
|
67
66
|
<form action="<%= root_path %>morgue/all/retry" method="post">
|
|
68
67
|
<%= csrf_tag %>
|
|
69
|
-
<input class="btn btn-danger
|
|
68
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
|
70
69
|
</form>
|
|
71
70
|
<% end %>
|
|
72
71
|
|
data/web/views/queue.erb
CHANGED
|
@@ -1,40 +1,50 @@
|
|
|
1
|
-
<
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
<%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
|
|
12
|
-
</div>
|
|
13
|
-
</header>
|
|
1
|
+
<div class="header-container">
|
|
2
|
+
<h1><%= t('CurrentMessagesInQueue', :queue => h(@name)) %>
|
|
3
|
+
<% if @queue.paused? %>
|
|
4
|
+
<span class="label label-danger"><%= t('Paused') %></span>
|
|
5
|
+
<% end %>
|
|
6
|
+
<span class="badge badge-secondary"><%= number_with_delimiter(@total_size) %></span>
|
|
7
|
+
</h1>
|
|
8
|
+
<%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
14
11
|
<div class="table_container">
|
|
15
12
|
<table class="queue table table-hover table-bordered table-striped">
|
|
16
13
|
<thead>
|
|
14
|
+
<th><a href="<%= url %>?direction=<%= params[:direction] == 'asc' ? 'desc' : 'asc' %>"># <%= sort_direction_label %></a></th>
|
|
17
15
|
<th><%= t('Job') %></th>
|
|
18
16
|
<th><%= t('Arguments') %></th>
|
|
19
|
-
<th
|
|
17
|
+
<th><%= t('Context') %></th>
|
|
18
|
+
<th><%= t('Actions') %></th>
|
|
20
19
|
</thead>
|
|
21
|
-
<% @
|
|
22
|
-
<tr>
|
|
23
|
-
|
|
20
|
+
<% @jobs.each_with_index do |job, index| %>
|
|
21
|
+
<tr title="<%= job.jid %>">
|
|
22
|
+
<% if params[:direction] == 'asc' %>
|
|
23
|
+
<td><%= @count * (@current_page - 1) + index + 1 %></td>
|
|
24
|
+
<% else %>
|
|
25
|
+
<td><%= @total_size - (@count * (@current_page - 1) + index) %></td>
|
|
26
|
+
<% end %>
|
|
27
|
+
<td>
|
|
28
|
+
<%= h(job.display_class) %>
|
|
29
|
+
<%= display_tags(job, nil) %>
|
|
30
|
+
</td>
|
|
24
31
|
<td>
|
|
25
|
-
<% a =
|
|
26
|
-
<% if a.size > 100 %>
|
|
27
|
-
<span
|
|
28
|
-
<button data-toggle="
|
|
29
|
-
<div class="toggle
|
|
32
|
+
<% a = job.display_args %>
|
|
33
|
+
<% if a.inspect.size > 100 %>
|
|
34
|
+
<span id="job_<%= index %>"><%= h(a.inspect[0..100]) + "... " %></span>
|
|
35
|
+
<button data-toggle="job_<%= index %>_full" class="btn btn-default btn-xs"><%= t('ShowAll') %></button>
|
|
36
|
+
<div class="toggle" id="job_<%= index %>_full"><%= display_args(a) %></div>
|
|
30
37
|
<% else %>
|
|
31
|
-
<%=
|
|
38
|
+
<%= display_args(job.display_args) %>
|
|
32
39
|
<% end %>
|
|
33
40
|
</td>
|
|
41
|
+
<td>
|
|
42
|
+
<%= h(job["cattr"].inspect) if job["cattr"]&.any? %>
|
|
43
|
+
</td>
|
|
34
44
|
<td>
|
|
35
45
|
<form action="<%= root_path %>queues/<%= CGI.escape(@name) %>/delete" method="post">
|
|
36
46
|
<%= csrf_tag %>
|
|
37
|
-
<input name="key_val" value="<%= h
|
|
47
|
+
<input name="key_val" value="<%= h job.value %>" type="hidden" />
|
|
38
48
|
<input class="btn btn-danger btn-xs" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSure') %>" />
|
|
39
49
|
</form>
|
|
40
50
|
</td>
|
|
@@ -42,4 +52,4 @@
|
|
|
42
52
|
<% end %>
|
|
43
53
|
</table>
|
|
44
54
|
</div>
|
|
45
|
-
<%= erb :_paging, locals: { url: "#{root_path}queues/#{@name}" } %>
|
|
55
|
+
<%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
|
data/web/views/queues.erb
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
<
|
|
1
|
+
<div class="header-container">
|
|
2
|
+
<h1><%= t('Queues') %></h1>
|
|
3
|
+
</div>
|
|
2
4
|
|
|
3
5
|
<div class="table_container">
|
|
4
|
-
<table class="queues table table-hover table-bordered table-striped
|
|
6
|
+
<table class="queues table table-hover table-bordered table-striped">
|
|
5
7
|
<thead>
|
|
6
8
|
<th><%= t('Queue') %></th>
|
|
7
9
|
<th><%= t('Size') %></th>
|
|
10
|
+
<th><%= t('Latency') %></th>
|
|
8
11
|
<th><%= t('Actions') %></th>
|
|
9
12
|
</thead>
|
|
10
13
|
<% @queues.each do |queue| %>
|
|
@@ -15,11 +18,24 @@
|
|
|
15
18
|
<span class="label label-danger"><%= t('Paused') %></span>
|
|
16
19
|
<% end %>
|
|
17
20
|
</td>
|
|
18
|
-
<td><%= number_with_delimiter(queue.size) %> </td>
|
|
21
|
+
<td class="num"><%= number_with_delimiter(queue.size) %> </td>
|
|
22
|
+
<td class="num">
|
|
23
|
+
<% queue_latency = queue.latency %>
|
|
24
|
+
<%= (queue_latency < 60) ? '' : " (#{relative_time(Time.at(Time.now.to_f - queue_latency))})" %>
|
|
25
|
+
<%= number_with_delimiter(queue_latency, precision: 2) %>
|
|
26
|
+
</td>
|
|
19
27
|
<td class="delete-confirm">
|
|
20
28
|
<form action="<%=root_path %>queues/<%= CGI.escape(queue.name) %>" method="post">
|
|
21
29
|
<%= csrf_tag %>
|
|
22
|
-
<input class="btn btn-danger
|
|
30
|
+
<input class="btn btn-danger" type="submit" name="delete" title="This will delete all jobs within the queue, it will reappear if you push more jobs to it in the future." value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSureDeleteQueue', :queue => h(queue.name)) %>" />
|
|
31
|
+
|
|
32
|
+
<% if Sidekiq.pro? %>
|
|
33
|
+
<% if queue.paused? %>
|
|
34
|
+
<input class="btn btn-danger" type="submit" name="unpause" value="<%= t('Unpause') %>" />
|
|
35
|
+
<% else %>
|
|
36
|
+
<input class="btn btn-danger" type="submit" name="pause" value="<%= t('Pause') %>" />
|
|
37
|
+
<% end %>
|
|
38
|
+
<% end %>
|
|
23
39
|
</form>
|
|
24
40
|
</td>
|
|
25
41
|
</tr>
|
data/web/views/retries.erb
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
<
|
|
2
|
-
<
|
|
3
|
-
<h3><%= t('Retries') %></h3>
|
|
4
|
-
</div>
|
|
1
|
+
<div class="header-container">
|
|
2
|
+
<h1><%= t('Retries') %></h1>
|
|
5
3
|
<% if @retries.size > 0 && @total_size > @count %>
|
|
6
|
-
|
|
7
|
-
<%= erb :_paging, locals: { url: "#{root_path}retries" } %>
|
|
8
|
-
</div>
|
|
4
|
+
<%= erb :_paging, locals: { url: "#{root_path}retries" } %>
|
|
9
5
|
<% end %>
|
|
10
6
|
<%= filtering('retries') %>
|
|
11
|
-
</
|
|
7
|
+
</div>
|
|
12
8
|
|
|
13
9
|
<% if @retries.size > 0 %>
|
|
14
10
|
<form action="<%= root_path %>retries" method="post">
|
|
15
11
|
<%= csrf_tag %>
|
|
16
12
|
<div class="table_container">
|
|
17
|
-
<table class="table table-striped table-bordered table-
|
|
13
|
+
<table class="table table-striped table-bordered table-hover">
|
|
18
14
|
<thead>
|
|
19
15
|
<tr>
|
|
20
16
|
<th class="table-checkbox checkbox-column">
|
|
@@ -34,7 +30,7 @@
|
|
|
34
30
|
<tr>
|
|
35
31
|
<td class="table-checkbox">
|
|
36
32
|
<label>
|
|
37
|
-
<input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' />
|
|
33
|
+
<input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
|
|
38
34
|
</label>
|
|
39
35
|
</td>
|
|
40
36
|
<td>
|
|
@@ -44,7 +40,10 @@
|
|
|
44
40
|
<td>
|
|
45
41
|
<a href="<%= root_path %>queues/<%= entry.queue %>"><%= entry.queue %></a>
|
|
46
42
|
</td>
|
|
47
|
-
<td
|
|
43
|
+
<td>
|
|
44
|
+
<%= entry.display_class %>
|
|
45
|
+
<%= display_tags(entry, "retries") %>
|
|
46
|
+
</td>
|
|
48
47
|
<td>
|
|
49
48
|
<div class="args"><%= display_args(entry.display_args) %></div>
|
|
50
49
|
</td>
|
|
@@ -55,19 +54,23 @@
|
|
|
55
54
|
<% end %>
|
|
56
55
|
</table>
|
|
57
56
|
</div>
|
|
58
|
-
<input class="btn btn-primary
|
|
59
|
-
<input class="btn btn-danger
|
|
60
|
-
<input class="btn btn-danger
|
|
57
|
+
<input class="btn btn-primary pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>" />
|
|
58
|
+
<input class="btn btn-danger pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>" />
|
|
59
|
+
<input class="btn btn-danger pull-left flip" type="submit" name="kill" value="<%= t('Kill') %>" />
|
|
61
60
|
</form>
|
|
62
61
|
|
|
63
62
|
<% unfiltered? do %>
|
|
64
63
|
<form action="<%= root_path %>retries/all/delete" method="post">
|
|
65
64
|
<%= csrf_tag %>
|
|
66
|
-
<input class="btn btn-danger
|
|
65
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
|
67
66
|
</form>
|
|
68
67
|
<form action="<%= root_path %>retries/all/retry" method="post">
|
|
69
68
|
<%= csrf_tag %>
|
|
70
|
-
<input class="btn btn-danger
|
|
69
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
|
70
|
+
</form>
|
|
71
|
+
<form action="<%= root_path %>retries/all/kill" method="post">
|
|
72
|
+
<%= csrf_tag %>
|
|
73
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="kill" value="<%= t('KillAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
|
71
74
|
</form>
|
|
72
75
|
<% end %>
|
|
73
76
|
|
data/web/views/retry.erb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
<h3><%= t('Error') %></h3>
|
|
4
4
|
<div class="table_container">
|
|
5
|
-
<table class="error table table-bordered table-striped">
|
|
5
|
+
<table class="error table table-bordered table-striped table-hover">
|
|
6
6
|
<tbody>
|
|
7
7
|
<tr>
|
|
8
8
|
<th><%= t('ErrorClass') %></th>
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
<th><%= t('ErrorMessage') %></th>
|
|
15
15
|
<td><%= h(@retry['error_message']) %></td>
|
|
16
16
|
</tr>
|
|
17
|
-
<% if
|
|
17
|
+
<% if @retry.error_backtrace %>
|
|
18
18
|
<tr>
|
|
19
19
|
<th><%= t('ErrorBacktrace') %></th>
|
|
20
20
|
<td>
|
|
21
|
-
<code><%= @retry
|
|
21
|
+
<code><%= @retry.error_backtrace.join("<br/>") %></code>
|
|
22
22
|
</td>
|
|
23
23
|
</tr>
|
|
24
24
|
<% end %>
|
data/web/views/scheduled.erb
CHANGED
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
<
|
|
2
|
-
<
|
|
3
|
-
<h3><%= t('ScheduledJobs') %></h3>
|
|
4
|
-
</div>
|
|
1
|
+
<div class="header-container">
|
|
2
|
+
<h1><%= t('ScheduledJobs') %></h1>
|
|
5
3
|
<% if @scheduled.size > 0 && @total_size > @count %>
|
|
6
|
-
|
|
7
|
-
<%= erb :_paging, locals: { url: "#{root_path}scheduled" } %>
|
|
8
|
-
</div>
|
|
4
|
+
<%= erb :_paging, locals: { url: "#{root_path}scheduled" } %>
|
|
9
5
|
<% end %>
|
|
10
6
|
<%= filtering('scheduled') %>
|
|
11
|
-
</
|
|
7
|
+
</div>
|
|
12
8
|
|
|
13
9
|
<% if @scheduled.size > 0 %>
|
|
14
|
-
|
|
15
10
|
<form action="<%= root_path %>scheduled" method="post">
|
|
16
11
|
<%= csrf_tag %>
|
|
17
12
|
<div class="table_container">
|
|
18
|
-
<table class="table table-striped table-bordered table-
|
|
13
|
+
<table class="table table-striped table-bordered table-hover">
|
|
19
14
|
<thead>
|
|
20
15
|
<tr>
|
|
21
|
-
<th class="checkbox-column">
|
|
22
|
-
<
|
|
16
|
+
<th class="table-checkbox checkbox-column">
|
|
17
|
+
<label>
|
|
18
|
+
<input type="checkbox" class="check_all" />
|
|
19
|
+
</label>
|
|
23
20
|
</th>
|
|
24
21
|
<th><%= t('When') %></th>
|
|
25
22
|
<th><%= t('Queue') %></th>
|
|
@@ -29,8 +26,10 @@
|
|
|
29
26
|
</thead>
|
|
30
27
|
<% @scheduled.each do |entry| %>
|
|
31
28
|
<tr>
|
|
32
|
-
<td>
|
|
33
|
-
<
|
|
29
|
+
<td class="table-checkbox">
|
|
30
|
+
<label>
|
|
31
|
+
<input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
|
|
32
|
+
</label>
|
|
34
33
|
</td>
|
|
35
34
|
<td>
|
|
36
35
|
<a href="<%= root_path %>scheduled/<%= job_params(entry.item, entry.score) %>"><%= relative_time(entry.at) %></a>
|
|
@@ -38,7 +37,10 @@
|
|
|
38
37
|
<td>
|
|
39
38
|
<a href="<%= root_path %>queues/<%= entry.queue %>"><%= entry.queue %></a>
|
|
40
39
|
</td>
|
|
41
|
-
<td
|
|
40
|
+
<td>
|
|
41
|
+
<%= entry.display_class %>
|
|
42
|
+
<%= display_tags(entry, "scheduled") %>
|
|
43
|
+
</td>
|
|
42
44
|
<td>
|
|
43
45
|
<div class="args"><%= display_args(entry.display_args) %></div>
|
|
44
46
|
</td>
|
|
@@ -46,8 +48,8 @@
|
|
|
46
48
|
<% end %>
|
|
47
49
|
</table>
|
|
48
50
|
</div>
|
|
49
|
-
<input class="btn btn-danger pull-right" type="submit" name="delete" value="<%= t('Delete') %>" />
|
|
50
|
-
<input class="btn btn-danger pull-right" type="submit" name="add_to_queue" value="<%= t('AddToQueue') %>" />
|
|
51
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%= t('Delete') %>" />
|
|
52
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="add_to_queue" value="<%= t('AddToQueue') %>" />
|
|
51
53
|
</form>
|
|
52
54
|
<% else %>
|
|
53
55
|
<div class="alert alert-success"><%= t('NoScheduledFound') %></div>
|