sidekiq 6.2.0 → 7.0.0
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.
- checksums.yaml +4 -4
- data/Changes.md +203 -5
- data/LICENSE.txt +9 -0
- data/README.md +20 -14
- data/bin/sidekiq +4 -9
- data/bin/sidekiqload +71 -76
- data/bin/sidekiqmon +1 -1
- data/lib/generators/sidekiq/job_generator.rb +57 -0
- data/lib/generators/sidekiq/templates/{worker.rb.erb → job.rb.erb} +2 -2
- data/lib/generators/sidekiq/templates/{worker_spec.rb.erb → job_spec.rb.erb} +1 -1
- data/lib/generators/sidekiq/templates/{worker_test.rb.erb → job_test.rb.erb} +1 -1
- data/lib/sidekiq/api.rb +334 -229
- data/lib/sidekiq/capsule.rb +110 -0
- data/lib/sidekiq/cli.rb +91 -79
- data/lib/sidekiq/client.rb +74 -85
- data/lib/sidekiq/{util.rb → component.rb} +13 -14
- data/lib/sidekiq/config.rb +271 -0
- data/lib/sidekiq/deploy.rb +62 -0
- data/lib/sidekiq/embedded.rb +61 -0
- data/lib/sidekiq/fetch.rb +26 -24
- data/lib/sidekiq/{worker.rb → job.rb} +162 -28
- data/lib/sidekiq/job_logger.rb +17 -29
- data/lib/sidekiq/job_retry.rb +79 -60
- data/lib/sidekiq/job_util.rb +71 -0
- data/lib/sidekiq/launcher.rb +96 -96
- data/lib/sidekiq/logger.rb +9 -44
- data/lib/sidekiq/manager.rb +40 -41
- data/lib/sidekiq/metrics/query.rb +153 -0
- data/lib/sidekiq/metrics/shared.rb +95 -0
- data/lib/sidekiq/metrics/tracking.rb +134 -0
- data/lib/sidekiq/middleware/chain.rb +89 -45
- data/lib/sidekiq/middleware/current_attributes.rb +58 -0
- data/lib/sidekiq/middleware/i18n.rb +6 -4
- data/lib/sidekiq/middleware/modules.rb +21 -0
- data/lib/sidekiq/monitor.rb +1 -1
- data/lib/sidekiq/paginator.rb +16 -8
- data/lib/sidekiq/processor.rb +56 -59
- data/lib/sidekiq/rails.rb +17 -5
- data/lib/sidekiq/redis_client_adapter.rb +118 -0
- data/lib/sidekiq/redis_connection.rb +17 -88
- data/lib/sidekiq/ring_buffer.rb +29 -0
- data/lib/sidekiq/scheduled.rb +102 -39
- data/lib/sidekiq/testing/inline.rb +4 -4
- data/lib/sidekiq/testing.rb +42 -71
- data/lib/sidekiq/transaction_aware_client.rb +44 -0
- data/lib/sidekiq/version.rb +2 -1
- data/lib/sidekiq/web/action.rb +3 -3
- data/lib/sidekiq/web/application.rb +33 -12
- data/lib/sidekiq/web/csrf_protection.rb +12 -9
- data/lib/sidekiq/web/helpers.rb +30 -40
- data/lib/sidekiq/web.rb +9 -19
- data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
- data/lib/sidekiq.rb +86 -201
- data/sidekiq.gemspec +30 -6
- data/web/assets/javascripts/application.js +113 -60
- 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 +166 -0
- data/web/assets/javascripts/dashboard.js +36 -273
- data/web/assets/javascripts/metrics.js +236 -0
- data/web/assets/stylesheets/application-dark.css +28 -45
- data/web/assets/stylesheets/application-rtl.css +2 -95
- data/web/assets/stylesheets/application.css +84 -529
- data/web/locales/ar.yml +71 -65
- data/web/locales/cs.yml +62 -62
- data/web/locales/da.yml +52 -52
- data/web/locales/de.yml +65 -65
- data/web/locales/el.yml +43 -24
- data/web/locales/en.yml +83 -67
- data/web/locales/es.yml +70 -54
- data/web/locales/fa.yml +65 -65
- data/web/locales/fr.yml +69 -62
- data/web/locales/he.yml +65 -64
- data/web/locales/hi.yml +59 -59
- data/web/locales/it.yml +53 -53
- data/web/locales/ja.yml +72 -66
- data/web/locales/ko.yml +52 -52
- data/web/locales/lt.yml +66 -66
- 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 +63 -55
- data/web/locales/pt.yml +51 -51
- data/web/locales/ru.yml +67 -66
- data/web/locales/sv.yml +53 -53
- data/web/locales/ta.yml +60 -60
- data/web/locales/uk.yml +62 -61
- data/web/locales/ur.yml +64 -64
- data/web/locales/vi.yml +67 -67
- data/web/locales/zh-cn.yml +37 -11
- data/web/locales/zh-tw.yml +42 -8
- data/web/views/_footer.erb +6 -3
- data/web/views/_job_info.erb +1 -1
- data/web/views/_nav.erb +1 -1
- data/web/views/_poll_link.erb +2 -5
- data/web/views/_summary.erb +7 -7
- data/web/views/busy.erb +17 -11
- data/web/views/dashboard.erb +58 -18
- data/web/views/dead.erb +1 -1
- data/web/views/layout.erb +1 -1
- data/web/views/metrics.erb +80 -0
- data/web/views/metrics_for_job.erb +69 -0
- data/web/views/morgue.erb +6 -6
- data/web/views/queue.erb +15 -11
- data/web/views/queues.erb +3 -3
- data/web/views/retries.erb +7 -7
- data/web/views/retry.erb +1 -1
- data/web/views/scheduled.erb +1 -1
- metadata +78 -28
- data/LICENSE +0 -9
- data/lib/generators/sidekiq/worker_generator.rb +0 -57
- data/lib/sidekiq/delay.rb +0 -41
- data/lib/sidekiq/exception_handler.rb +0 -27
- data/lib/sidekiq/extensions/action_mailer.rb +0 -48
- data/lib/sidekiq/extensions/active_record.rb +0 -43
- data/lib/sidekiq/extensions/class_methods.rb +0 -43
- data/lib/sidekiq/extensions/generic_proxy.rb +0 -31
data/web/views/dashboard.erb
CHANGED
@@ -1,73 +1,113 @@
|
|
1
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chart.min.js"></script>
|
2
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chartjs-plugin-annotation.min.js"></script>
|
3
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/base-charts.js"></script>
|
4
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/dashboard-charts.js"></script>
|
1
5
|
<script type="text/javascript" src="<%= root_path %>javascripts/dashboard.js"></script>
|
2
6
|
<div class= "dashboard clearfix">
|
3
7
|
<h3 >
|
4
8
|
<%= t('Dashboard') %>
|
5
|
-
<span class="beacon">
|
9
|
+
<span id="beacon" class="beacon">
|
6
10
|
<span class="ring"></span>
|
7
11
|
<span class="dot"></span>
|
8
12
|
</span>
|
9
13
|
</h3>
|
10
14
|
<div class="interval-slider ltr">
|
11
15
|
<span class="interval-slider-label"><%= t('PollingInterval') %>:</span>
|
12
|
-
<span class="current-interval">5 sec</span>
|
16
|
+
<span id="sldr-text" class="current-interval">5 sec</span>
|
13
17
|
<br/>
|
14
|
-
<input type="range" min="2000" max="20000" step="1000" value="5000"/>
|
18
|
+
<input id="sldr" type="range" min="2000" max="20000" step="1000" value="5000"/>
|
15
19
|
</div>
|
16
20
|
</div>
|
17
21
|
|
18
22
|
<div class="row chart">
|
19
|
-
<
|
20
|
-
<
|
23
|
+
<canvas id="realtime-chart"></canvas>
|
24
|
+
<script>
|
25
|
+
window.realtimeChart = new RealtimeChart(
|
26
|
+
document.getElementById("realtime-chart"),
|
27
|
+
<%= Sidekiq.dump_json({
|
28
|
+
processedLabel: t('Processed'),
|
29
|
+
failedLabel: t('Failed'),
|
30
|
+
labels: Array.new(50, ""),
|
31
|
+
processed: Array.new(50),
|
32
|
+
failed: Array.new(50),
|
33
|
+
updateUrl: "#{root_path}stats",
|
34
|
+
}) %>
|
35
|
+
)
|
36
|
+
</script>
|
37
|
+
|
38
|
+
<!-- start with a space in the legend so the height doesn't change when we add content dynamically -->
|
39
|
+
<div id="realtime-legend"> </div>
|
40
|
+
<script>
|
41
|
+
realtimeChart.registerLegend(document.getElementById("realtime-legend"))
|
42
|
+
</script>
|
21
43
|
</div>
|
22
44
|
|
23
|
-
<div class="row
|
24
|
-
|
25
|
-
|
45
|
+
<div class="row header">
|
46
|
+
<div class="col-sm-4 pull-left flip">
|
47
|
+
<h3><%= t('History') %></h3>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
<div class="row chart">
|
51
|
+
<div>
|
26
52
|
<a href="<%= root_path %>?days=7" class="history-graph <%= "active" if params[:days] == "7" %>"><%= t('OneWeek') %></a>
|
27
53
|
<a href="<%= root_path %>" class="history-graph <%= "active" if params[:days].nil? || params[:days] == "30" %>"><%= t('OneMonth') %></a>
|
28
54
|
<a href="<%= root_path %>?days=90" class="history-graph <%= "active" if params[:days] == "90" %>"><%= t('ThreeMonths') %></a>
|
29
55
|
<a href="<%= root_path %>?days=180" class="history-graph <%= "active" if params[:days] == "180" %>"><%= t('SixMonths') %></a>
|
30
|
-
</
|
56
|
+
</div>
|
31
57
|
|
32
|
-
<
|
33
|
-
<
|
58
|
+
<canvas id="history-chart"></canvas>
|
59
|
+
<script>
|
60
|
+
window.historyChart = new DashboardChart(
|
61
|
+
document.getElementById("history-chart"),
|
62
|
+
<%= Sidekiq.dump_json({
|
63
|
+
processedLabel: t('Processed'),
|
64
|
+
failedLabel: t('Failed'),
|
65
|
+
processed: @processed_history.to_a.reverse,
|
66
|
+
failed: @failed_history.to_a.reverse,
|
67
|
+
}) %>
|
68
|
+
)
|
69
|
+
</script>
|
34
70
|
</div>
|
35
71
|
|
36
72
|
<br/>
|
37
|
-
<
|
38
|
-
<div class="
|
73
|
+
<div class="row header">
|
74
|
+
<div class="col-sm-4 pull-left flip">
|
75
|
+
<h3>Redis</h3>
|
76
|
+
</div>
|
77
|
+
</div>
|
78
|
+
<div class="stats-wrapper">
|
39
79
|
<div class="stats-container">
|
40
80
|
<% if @redis_info.fetch("redis_version", nil) %>
|
41
81
|
<div class="stat">
|
42
|
-
<h3
|
82
|
+
<h3 id="redis_version"><%= @redis_info.fetch("redis_version") %></h3>
|
43
83
|
<p><%= t('Version') %></p>
|
44
84
|
</div>
|
45
85
|
<% end %>
|
46
86
|
|
47
87
|
<% if @redis_info.fetch("uptime_in_days", nil) %>
|
48
88
|
<div class="stat">
|
49
|
-
<h3
|
89
|
+
<h3 id="uptime_in_days"><%= @redis_info.fetch("uptime_in_days") %></h3>
|
50
90
|
<p><%= t('Uptime') %></p>
|
51
91
|
</div>
|
52
92
|
<% end %>
|
53
93
|
|
54
94
|
<% if @redis_info.fetch("connected_clients", nil) %>
|
55
95
|
<div class="stat">
|
56
|
-
<h3
|
96
|
+
<h3 id="connected_clients"><%= @redis_info.fetch("connected_clients") %></h3>
|
57
97
|
<p><%= t('Connections') %></p>
|
58
98
|
</div>
|
59
99
|
<% end %>
|
60
100
|
|
61
101
|
<% if @redis_info.fetch("used_memory_human", nil) %>
|
62
102
|
<div class="stat">
|
63
|
-
<h3
|
103
|
+
<h3 id="used_memory_human"><%= @redis_info.fetch("used_memory_human") %></h3>
|
64
104
|
<p><%= t('MemoryUsage') %></p>
|
65
105
|
</div>
|
66
106
|
<% end %>
|
67
107
|
|
68
108
|
<% if @redis_info.fetch("used_memory_peak_human", nil) %>
|
69
109
|
<div class="stat">
|
70
|
-
<h3
|
110
|
+
<h3 id="used_memory_peak_human"><%= @redis_info.fetch("used_memory_peak_human") %></h3>
|
71
111
|
<p><%= t('PeakMemoryUsage') %></p>
|
72
112
|
</div>
|
73
113
|
<% end %>
|
data/web/views/dead.erb
CHANGED
data/web/views/layout.erb
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
<meta name="google" content="notranslate" />
|
23
23
|
<%= display_custom_head %>
|
24
24
|
</head>
|
25
|
-
<body class="admin" data-
|
25
|
+
<body class="admin" data-locale="<%= locale %>">
|
26
26
|
<%= erb :_nav %>
|
27
27
|
<div id="page">
|
28
28
|
<div class="container">
|
@@ -0,0 +1,80 @@
|
|
1
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chart.min.js"></script>
|
2
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chartjs-plugin-annotation.min.js"></script>
|
3
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/base-charts.js"></script>
|
4
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/metrics.js"></script>
|
5
|
+
|
6
|
+
<div class="header-container">
|
7
|
+
<h1><%= t('Metrics') %></h1>
|
8
|
+
|
9
|
+
<div>
|
10
|
+
<a target="blank" href="https://github.com/mperham/sidekiq/wiki/Metrics"><span class="info-circle" title="Click to learn more about metrics">?</span></a>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<%
|
15
|
+
table_limit = 20
|
16
|
+
chart_limit = 5
|
17
|
+
job_results = @query_result.job_results.sort_by { |(kls, jr)| jr.totals["s"] }.reverse.first(table_limit)
|
18
|
+
visible_kls = job_results.first(chart_limit).map(&:first)
|
19
|
+
%>
|
20
|
+
|
21
|
+
<% if job_results.any? %>
|
22
|
+
<canvas id="job-metrics-overview-chart"></canvas>
|
23
|
+
|
24
|
+
<script>
|
25
|
+
window.jobMetricsChart = new JobMetricsOverviewChart(
|
26
|
+
document.getElementById("job-metrics-overview-chart"),
|
27
|
+
<%= Sidekiq.dump_json({
|
28
|
+
series: job_results.map { |(kls, jr)| [kls, jr.dig("series", "s")] }.to_h,
|
29
|
+
marks: @query_result.marks.map { |m| [m.bucket, m.label] },
|
30
|
+
labels: @query_result.buckets,
|
31
|
+
visibleKls: visible_kls,
|
32
|
+
yLabel: t('TotalExecutionTime'),
|
33
|
+
units: t('Seconds').downcase,
|
34
|
+
markLabel: t('Deploy'),
|
35
|
+
}) %>
|
36
|
+
)
|
37
|
+
</script>
|
38
|
+
<% end %>
|
39
|
+
|
40
|
+
<div class="table_container">
|
41
|
+
<table class="table table-bordered table-striped table-hover">
|
42
|
+
<tbody>
|
43
|
+
<tr>
|
44
|
+
<th><%= t('Name') %></th>
|
45
|
+
<th><%= t('Success') %></th>
|
46
|
+
<th><%= t('Failure') %></th>
|
47
|
+
<th><%= t('TotalExecutionTime') %></th>
|
48
|
+
<th><%= t('AvgExecutionTime') %></th>
|
49
|
+
</tr>
|
50
|
+
<% if job_results.any? %>
|
51
|
+
<% job_results.each_with_index do |(kls, jr), i| %>
|
52
|
+
<tr>
|
53
|
+
<td>
|
54
|
+
<div class="metrics-swatch-wrapper">
|
55
|
+
<% id = "metrics-swatch-#{kls}" %>
|
56
|
+
<input
|
57
|
+
type="checkbox"
|
58
|
+
id="<%= id %>"
|
59
|
+
class="metrics-swatch"
|
60
|
+
value="<%= kls %>"
|
61
|
+
<%= visible_kls.include?(kls) ? 'checked' : '' %>
|
62
|
+
/>
|
63
|
+
<code><a href="<%= root_path %>metrics/<%= kls %>"><%= kls %></a></code>
|
64
|
+
</div>
|
65
|
+
<script>jobMetricsChart.registerSwatch("<%= id %>")</script>
|
66
|
+
</td>
|
67
|
+
<td><%= jr.dig("totals", "p") - jr.dig("totals", "f") %></td>
|
68
|
+
<td><%= jr.dig("totals", "f") %></td>
|
69
|
+
<td><%= jr.dig("totals", "s").round(2) %> seconds</td>
|
70
|
+
<td><%= jr.total_avg("s").round(2) %> seconds</td>
|
71
|
+
</tr>
|
72
|
+
<% end %>
|
73
|
+
<% else %>
|
74
|
+
<tr><td colspan=5><%= t("NoDataFound") %></td></tr>
|
75
|
+
<% end %>
|
76
|
+
</tbody>
|
77
|
+
</table>
|
78
|
+
</div>
|
79
|
+
|
80
|
+
<p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %></small></p>
|
@@ -0,0 +1,69 @@
|
|
1
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chart.min.js"></script>
|
2
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/chartjs-plugin-annotation.min.js"></script>
|
3
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/base-charts.js"></script>
|
4
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/metrics.js"></script>
|
5
|
+
|
6
|
+
<%
|
7
|
+
job_result = @query_result.job_results[@name]
|
8
|
+
hist_totals = job_result.hist.values.first.zip(*job_result.hist.values[1..-1]).map(&:sum)
|
9
|
+
bucket_labels =Sidekiq::Metrics::Histogram::LABELS
|
10
|
+
bucket_intervals =Sidekiq::Metrics::Histogram::BUCKET_INTERVALS.reverse
|
11
|
+
|
12
|
+
# Replace INFINITY since it can't be represented as JSON
|
13
|
+
bucket_intervals[0] = bucket_intervals[1] * 2
|
14
|
+
%>
|
15
|
+
|
16
|
+
<% if job_result.totals["s"] > 0 %>
|
17
|
+
<div class="header-container">
|
18
|
+
<h1>
|
19
|
+
<a href="<%= root_path %>metrics"><%= t(:metrics).to_s.titleize %></a> /
|
20
|
+
<%= h @name %>
|
21
|
+
</h1>
|
22
|
+
|
23
|
+
<div>
|
24
|
+
<a target="blank" href="https://github.com/mperham/sidekiq/wiki/Metrics"><span class="info-circle" title="Click to learn more about metrics">?</span></a>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<canvas id="hist-totals-chart"></canvas>
|
29
|
+
|
30
|
+
<script>
|
31
|
+
window.histTotalsChart = new HistTotalsChart(
|
32
|
+
document.getElementById("hist-totals-chart"),
|
33
|
+
<%= Sidekiq.dump_json({
|
34
|
+
series: hist_totals,
|
35
|
+
labels: bucket_labels,
|
36
|
+
xLabel: t('ExecutionTime'),
|
37
|
+
yLabel: t('Jobs'),
|
38
|
+
units: t('Jobs').downcase,
|
39
|
+
}) %>
|
40
|
+
)
|
41
|
+
</script>
|
42
|
+
|
43
|
+
<canvas id="hist-bubble-chart"></canvas>
|
44
|
+
|
45
|
+
<script>
|
46
|
+
window.histBubbleChart = new HistBubbleChart(
|
47
|
+
document.getElementById("hist-bubble-chart"),
|
48
|
+
<%= Sidekiq.dump_json({
|
49
|
+
hist: job_result.hist,
|
50
|
+
marks: @query_result.marks.map { |m| [m.bucket, m.label] },
|
51
|
+
labels: @query_result.buckets,
|
52
|
+
histIntervals: bucket_intervals,
|
53
|
+
yLabel: t('ExecutionTime'),
|
54
|
+
markLabel: t('Deploy'),
|
55
|
+
yUnits: t('Seconds').downcase,
|
56
|
+
zUnits: t('Jobs').downcase,
|
57
|
+
}) %>
|
58
|
+
)
|
59
|
+
</script>
|
60
|
+
|
61
|
+
<p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %></small></p>
|
62
|
+
<% else %>
|
63
|
+
<h1>
|
64
|
+
<a href="<%= root_path %>/metrics"><%= t(:metrics).to_s.titleize %></a> /
|
65
|
+
<%= h @name %>
|
66
|
+
</h1>
|
67
|
+
|
68
|
+
<div class="alert alert-success"><%= t('NoJobMetricsFound') %></div>
|
69
|
+
<% end %>
|
data/web/views/morgue.erb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
<form action="<%= root_path %>morgue" method="post">
|
15
15
|
<%= csrf_tag %>
|
16
16
|
<div class="table_container">
|
17
|
-
<table class="table table-striped table-bordered">
|
17
|
+
<table class="table table-striped table-bordered table-hover">
|
18
18
|
<thead>
|
19
19
|
<tr>
|
20
20
|
<th class="table-checkbox checkbox-column">
|
@@ -44,7 +44,7 @@
|
|
44
44
|
</td>
|
45
45
|
<td>
|
46
46
|
<%= entry.display_class %>
|
47
|
-
<%= display_tags(entry, "
|
47
|
+
<%= display_tags(entry, "dead") %>
|
48
48
|
</td>
|
49
49
|
<td>
|
50
50
|
<div class="args"><%= display_args(entry.display_args) %></div>
|
@@ -58,18 +58,18 @@
|
|
58
58
|
<% end %>
|
59
59
|
</table>
|
60
60
|
</div>
|
61
|
-
<input class="btn btn-primary
|
62
|
-
<input class="btn btn-danger
|
61
|
+
<input class="btn btn-primary pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>" />
|
62
|
+
<input class="btn btn-danger pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>" />
|
63
63
|
</form>
|
64
64
|
|
65
65
|
<% unfiltered? do %>
|
66
66
|
<form action="<%= root_path %>morgue/all/delete" method="post">
|
67
67
|
<%= csrf_tag %>
|
68
|
-
<input class="btn btn-danger
|
68
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
69
69
|
</form>
|
70
70
|
<form action="<%= root_path %>morgue/all/retry" method="post">
|
71
71
|
<%= csrf_tag %>
|
72
|
-
<input class="btn btn-danger
|
72
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
73
73
|
</form>
|
74
74
|
<% end %>
|
75
75
|
|
data/web/views/queue.erb
CHANGED
@@ -18,33 +18,37 @@
|
|
18
18
|
<th><a href="<%= url %>?direction=<%= params[:direction] == 'asc' ? 'desc' : 'asc' %>"># <%= sort_direction_label %></a></th>
|
19
19
|
<th><%= t('Job') %></th>
|
20
20
|
<th><%= t('Arguments') %></th>
|
21
|
+
<th><%= t('Context') %></th>
|
21
22
|
<th></th>
|
22
23
|
</thead>
|
23
|
-
<% @
|
24
|
-
<tr>
|
24
|
+
<% @jobs.each_with_index do |job, index| %>
|
25
|
+
<tr title="<%= job.jid %>">
|
25
26
|
<% if params[:direction] == 'asc' %>
|
26
27
|
<td><%= @count * (@current_page - 1) + index + 1 %></td>
|
27
28
|
<% else %>
|
28
29
|
<td><%= @total_size - (@count * (@current_page - 1) + index) %></td>
|
29
30
|
<% end %>
|
30
31
|
<td>
|
31
|
-
<%= h(
|
32
|
-
<%= display_tags(
|
32
|
+
<%= h(job.display_class) %>
|
33
|
+
<%= display_tags(job, nil) %>
|
33
34
|
</td>
|
34
35
|
<td>
|
35
|
-
<% a =
|
36
|
+
<% a = job.display_args %>
|
36
37
|
<% if a.inspect.size > 100 %>
|
37
|
-
<span
|
38
|
-
<button data-toggle="
|
39
|
-
<div class="toggle
|
38
|
+
<span id="job_<%= index %>"><%= h(a.inspect[0..100]) + "... " %></span>
|
39
|
+
<button data-toggle="job_<%= index %>_full" class="btn btn-default btn-xs"><%= t('ShowAll') %></button>
|
40
|
+
<div class="toggle" id="job_<%= index %>_full"><%= display_args(a) %></div>
|
40
41
|
<% else %>
|
41
|
-
<%= display_args(
|
42
|
+
<%= display_args(job.display_args) %>
|
42
43
|
<% end %>
|
43
44
|
</td>
|
45
|
+
<td>
|
46
|
+
<%= h(job["cattr"].inspect) if job["cattr"]&.any? %>
|
47
|
+
</td>
|
44
48
|
<td>
|
45
49
|
<form action="<%= root_path %>queues/<%= CGI.escape(@name) %>/delete" method="post">
|
46
50
|
<%= csrf_tag %>
|
47
|
-
<input name="key_val" value="<%= h
|
51
|
+
<input name="key_val" value="<%= h job.value %>" type="hidden" />
|
48
52
|
<input class="btn btn-danger btn-xs" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSure') %>" />
|
49
53
|
</form>
|
50
54
|
</td>
|
@@ -52,4 +56,4 @@
|
|
52
56
|
<% end %>
|
53
57
|
</table>
|
54
58
|
</div>
|
55
|
-
<%= erb :_paging, locals: { url: "#{root_path}queues/#{@name}" } %>
|
59
|
+
<%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
|
data/web/views/queues.erb
CHANGED
@@ -21,13 +21,13 @@
|
|
21
21
|
<td class="delete-confirm">
|
22
22
|
<form action="<%=root_path %>queues/<%= CGI.escape(queue.name) %>" method="post">
|
23
23
|
<%= csrf_tag %>
|
24
|
-
<input class="btn btn-danger
|
24
|
+
<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)) %>" />
|
25
25
|
|
26
26
|
<% if Sidekiq.pro? %>
|
27
27
|
<% if queue.paused? %>
|
28
|
-
<input class="btn btn-danger
|
28
|
+
<input class="btn btn-danger" type="submit" name="unpause" value="<%= t('Unpause') %>" />
|
29
29
|
<% else %>
|
30
|
-
<input class="btn btn-danger
|
30
|
+
<input class="btn btn-danger" type="submit" name="pause" value="<%= t('Pause') %>" />
|
31
31
|
<% end %>
|
32
32
|
<% end %>
|
33
33
|
</form>
|
data/web/views/retries.erb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
<form action="<%= root_path %>retries" method="post">
|
15
15
|
<%= csrf_tag %>
|
16
16
|
<div class="table_container">
|
17
|
-
<table class="table table-striped table-bordered">
|
17
|
+
<table class="table table-striped table-bordered table-hover">
|
18
18
|
<thead>
|
19
19
|
<tr>
|
20
20
|
<th class="table-checkbox checkbox-column">
|
@@ -58,23 +58,23 @@
|
|
58
58
|
<% end %>
|
59
59
|
</table>
|
60
60
|
</div>
|
61
|
-
<input class="btn btn-primary
|
62
|
-
<input class="btn btn-danger
|
63
|
-
<input class="btn btn-danger
|
61
|
+
<input class="btn btn-primary pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>" />
|
62
|
+
<input class="btn btn-danger pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>" />
|
63
|
+
<input class="btn btn-danger pull-left flip" type="submit" name="kill" value="<%= t('Kill') %>" />
|
64
64
|
</form>
|
65
65
|
|
66
66
|
<% unfiltered? do %>
|
67
67
|
<form action="<%= root_path %>retries/all/delete" method="post">
|
68
68
|
<%= csrf_tag %>
|
69
|
-
<input class="btn btn-danger
|
69
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
70
70
|
</form>
|
71
71
|
<form action="<%= root_path %>retries/all/retry" method="post">
|
72
72
|
<%= csrf_tag %>
|
73
|
-
<input class="btn btn-danger
|
73
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
74
74
|
</form>
|
75
75
|
<form action="<%= root_path %>retries/all/kill" method="post">
|
76
76
|
<%= csrf_tag %>
|
77
|
-
<input class="btn btn-danger
|
77
|
+
<input class="btn btn-danger pull-right flip" type="submit" name="kill" value="<%= t('KillAll') %>" data-confirm="<%= t('AreYouSure') %>" />
|
78
78
|
</form>
|
79
79
|
<% end %>
|
80
80
|
|
data/web/views/retry.erb
CHANGED
data/web/views/scheduled.erb
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
<form action="<%= root_path %>scheduled" method="post">
|
16
16
|
<%= csrf_tag %>
|
17
17
|
<div class="table_container">
|
18
|
-
<table class="table table-striped table-bordered">
|
18
|
+
<table class="table table-striped table-bordered table-hover">
|
19
19
|
<thead>
|
20
20
|
<tr>
|
21
21
|
<th class="checkbox-column">
|