good_job 2.12.2 → 2.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/engine/app/assets/style.css +5 -3
- data/engine/app/views/good_job/cron_entries/show.html.erb +4 -2
- data/engine/app/views/good_job/executions/_table.erb +2 -2
- data/engine/app/views/good_job/executions/index.html.erb +2 -6
- data/engine/app/views/good_job/jobs/_table.erb +2 -2
- data/engine/app/views/good_job/jobs/index.html.erb +2 -10
- data/engine/app/views/good_job/shared/_chart.erb +4 -2
- data/engine/app/views/good_job/shared/_filter.erb +58 -50
- data/engine/app/views/good_job/shared/_footer.erb +2 -4
- data/engine/app/views/good_job/shared/_navbar.erb +5 -5
- data/engine/app/views/layouts/good_job/application.html.erb +7 -5
- data/engine/config/locales/en.yml +3 -3
- data/engine/config/locales/es.yml +1 -1
- data/engine/config/locales/nl.yml +3 -3
- data/engine/config/locales/ru.yml +38 -14
- data/lib/good_job/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c154bb21bc4a390c8e7f488e3a110dace697b660585d67cf66fcc21a1ebbeeb
|
4
|
+
data.tar.gz: ba8d453f1eb4b9086534710a4bb7e5f29e2e497a1051e3be7aefa21b8c9a3164
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4344deb0fb76ad2ed78b1d0898aa7521fbab371c08ec6b59f2fd5dec4283723fc3cfe11d8af3acd891d7d6a44c586869c31e1f0106de6ca0ec09da1eee9e345
|
7
|
+
data.tar.gz: bfb185dc98b9cc33e4562b6b641f179a32d57dcedd92622ca2334e79566f4d6876d55771425a5760e9bb14f06bee6ddad37067f97df887659c12acb1f25d34fc
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v2.13.0](https://github.com/bensheldon/good_job/tree/v2.13.0) (2022-04-19)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.12.2...v2.13.0)
|
6
|
+
|
7
|
+
**Implemented enhancements:**
|
8
|
+
|
9
|
+
- Dashboard UI updates: sticky navbar, statuses as tabs [\#572](https://github.com/bensheldon/good_job/pull/572) ([bkeepers](https://github.com/bkeepers))
|
10
|
+
|
11
|
+
**Closed issues:**
|
12
|
+
|
13
|
+
- Internationalize/I18n the Dashboard Engine [\#408](https://github.com/bensheldon/good_job/issues/408)
|
14
|
+
|
15
|
+
**Merged pull requests:**
|
16
|
+
|
17
|
+
- Fix Russian translation linting [\#573](https://github.com/bensheldon/good_job/pull/573) ([bensheldon](https://github.com/bensheldon))
|
18
|
+
|
3
19
|
## [v2.12.2](https://github.com/bensheldon/good_job/tree/v2.12.2) (2022-04-18)
|
4
20
|
|
5
21
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.12.1...v2.12.2)
|
data/engine/app/assets/style.css
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
<% title = capture do %>
|
2
|
+
Cron Entry Key: <code><%= @cron_entry.id %></code>
|
3
|
+
<% end %>
|
2
4
|
|
3
|
-
<%= render 'good_job/shared/filter', filter: @jobs_filter %>
|
5
|
+
<%= render 'good_job/shared/filter', title: title, filter: @jobs_filter %>
|
4
6
|
<%= render 'good_job/jobs/table', jobs: @jobs_filter.records %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="my-3" data-gj-poll-replace id="executions-table">
|
2
2
|
<div class="table-responsive">
|
3
|
-
<table class="table
|
3
|
+
<table class="table table-hover table-sm mb-0" id="executions_index_table">
|
4
4
|
<thead>
|
5
5
|
<tr>
|
6
6
|
<th>ActiveJob ID</th>
|
@@ -1,9 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
</div>
|
4
|
-
|
5
|
-
<%= render 'good_job/shared/filter', filter: @filter %>
|
6
|
-
|
1
|
+
<%= render 'good_job/shared/filter', title: "Executions", filter: @filter %>
|
2
|
+
<%= render 'good_job/shared/chart', chart_data: GoodJob::ScheduledByQueueChart.new(@filter).data %>
|
7
3
|
<%= render 'good_job/executions/table', executions: @filter.records %>
|
8
4
|
|
9
5
|
<% if @filter.records.present? %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="my-3" data-gj-poll-replace id="jobs-table">
|
2
2
|
<div class="table-responsive">
|
3
|
-
<table class="table
|
3
|
+
<table class="table table-hover table-sm mb-0">
|
4
4
|
<thead>
|
5
5
|
<tr>
|
6
6
|
<th>ActiveJob ID</th>
|
@@ -1,13 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
</div>
|
4
|
-
|
5
|
-
<div class="card my-3 p-6" data-gj-poll-replace id="jobs-chart">
|
6
|
-
<%= render 'good_job/shared/chart', chart_data: GoodJob::ScheduledByQueueChart.new(@filter).data %>
|
7
|
-
</div>
|
8
|
-
|
9
|
-
<%= render 'good_job/shared/filter', filter: @filter %>
|
10
|
-
|
1
|
+
<%= render 'good_job/shared/filter', title: "Jobs", filter: @filter %>
|
2
|
+
<%= render 'good_job/shared/chart', chart_data: GoodJob::ScheduledByQueueChart.new(@filter).data %>
|
11
3
|
<%= render 'good_job/jobs/table', jobs: @filter.records %>
|
12
4
|
|
13
5
|
<% if @filter.records.present? %>
|
@@ -1,3 +1,5 @@
|
|
1
|
-
<div class="
|
2
|
-
<
|
1
|
+
<div class="py-4" data-gj-poll-replace id="chart">
|
2
|
+
<div class="chart-wrapper container-fluid">
|
3
|
+
<canvas class="chart" data-json="<%= chart_data.to_json %>"></canvas>
|
4
|
+
</div>
|
3
5
|
</div>
|
@@ -1,59 +1,67 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
<div class="me-2">
|
5
|
-
<label for="job_class_filter">Job class</label>
|
6
|
-
<select name="job_class" id="job_class_filter" class="form-select">
|
7
|
-
<option value="" <%= "selected='selected'" if params[:job_class].blank? %>>All jobs</option>
|
8
|
-
|
9
|
-
<% filter.job_classes.each do |name, count| %>
|
10
|
-
<option value="<%= name.to_param %>" <%= "selected='selected'" if params[:job_class] == name %>><%= name %> (<%= count %>)</option>
|
11
|
-
<% end %>
|
12
|
-
</select>
|
13
|
-
</div>
|
1
|
+
<div data-gj-poll-replace id="filter">
|
2
|
+
<div class="bg-light break-out">
|
3
|
+
<h2 class="container-fluid pt-3 pb-2"><%= title %></h2>
|
14
4
|
|
15
|
-
<
|
16
|
-
<
|
17
|
-
|
18
|
-
|
5
|
+
<ul class="nav nav-tabs bg-light px-3 mb-3">
|
6
|
+
<li class="nav-item">
|
7
|
+
<%= link_to "All", url_for(state: nil), class: "nav-link #{"active" unless params[:state]}" %>
|
8
|
+
</li>
|
19
9
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
10
|
+
<% filter.states.each do |name, count| %>
|
11
|
+
<li class="nav-item">
|
12
|
+
<%= link_to url_for({state: name}), class: "nav-link #{"active" if params[:state] == name}" do %>
|
13
|
+
<%= name.titleize %>
|
14
|
+
<span class="badge bg-primary rounded-pill <%= "bg-secondary" if count == 0 %>"><%= count %></span>
|
15
|
+
<% end %>
|
16
|
+
</li>
|
17
|
+
<% end %>
|
18
|
+
</ul>
|
19
|
+
</div>
|
25
20
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
21
|
+
<%= form_with(url: "", method: :get, local: true, id: "filter_form", class: "container-fluid") do |form| %>
|
22
|
+
<%= hidden_field_tag :poll, params[:poll] %>
|
23
|
+
<%= hidden_field_tag :state, params[:state] %>
|
24
|
+
<div class="d-flex flex-row w-100">
|
25
|
+
<div class="me-2">
|
26
|
+
<select name="job_class" id="job_class_filter" class="form-select form-select-sm">
|
27
|
+
<option value="" <%= "selected='selected'" if params[:job_class].blank? %>>All jobs</option>
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
<% filter.job_classes.each do |name, count| %>
|
30
|
+
<option value="<%= name.to_param %>" <%= "selected='selected'" if params[:job_class] == name %>><%= name %> (<%= count %>)</option>
|
31
|
+
<% end %>
|
32
|
+
</select>
|
33
|
+
</div>
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
</div>
|
35
|
+
<div class="me-2">
|
36
|
+
<select name="queue_name" id="job_queue_filter" class="form-select form-select-sm">
|
37
|
+
<option value="" <%= "selected='selected'" if params[:queue_name].blank? %>>All queues</option>
|
41
38
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
<% filter.queues.each do |name, count| %>
|
40
|
+
<option value="<%= name.to_param %>" <%= "selected='selected'" if params[:queue_name] == name %>><%= name %> (<%= count %>)</option>
|
41
|
+
<% end %>
|
42
|
+
</select>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
<div class="me-2 flex-fill">
|
46
|
+
<%= search_field_tag "query", params[:query], class: "form-control form-control-sm", placeholder: "Search by class, job id, job params, and error text." %>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<div class="d-flex flex-col align-items-end">
|
50
|
+
<div>
|
51
|
+
<%= form.submit "Search", name: nil, class: "btn btn-primary btn-sm" %>
|
52
|
+
<%= link_to "Clear all", filter.to_params(job_class: nil, state: nil, queue_name: nil, query: nil), class: "btn btn-secondary btn-sm" %>
|
53
|
+
</div>
|
46
54
|
</div>
|
47
55
|
</div>
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
})
|
56
|
+
<% end %>
|
57
|
+
|
58
|
+
<%= javascript_tag nonce: true do %>
|
59
|
+
document.addEventListener("DOMContentLoaded", () => {
|
60
|
+
document.querySelectorAll("#job_class_filter, #job_queue_filter").forEach((filter) => {
|
61
|
+
filter.addEventListener("change", () => {
|
62
|
+
document.querySelector("#filter_form").submit();
|
63
|
+
});
|
64
|
+
})
|
57
65
|
})
|
58
|
-
|
59
|
-
|
66
|
+
<% end %>
|
67
|
+
</div>
|
@@ -1,10 +1,8 @@
|
|
1
|
-
<footer class="footer mt-auto py-3 bg-light
|
1
|
+
<footer class="footer mt-auto py-3 bg-light border-top text-muted small" id="footer" data-gj-poll-replace>
|
2
2
|
<div class="container-fluid">
|
3
3
|
<div class="row">
|
4
4
|
<div class="col-6">
|
5
|
-
|
6
|
-
<%= t(".last_update_html", time: Time.current.utc.iso8601) %>
|
7
|
-
</span>
|
5
|
+
<%= t(".last_update_html", time: Time.current.utc.iso8601) %>
|
8
6
|
</div>
|
9
7
|
|
10
8
|
<div class="col-6 text-end">
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<nav class="navbar navbar-expand-lg navbar-light bg-
|
1
|
+
<nav class="navbar navbar-expand-lg navbar-light border-bottom bg-white sticky-top shadow-sm">
|
2
2
|
<div class="container-fluid">
|
3
3
|
<%= link_to t(".name"), root_path, class: "navbar-brand mb-0 h1" %>
|
4
4
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
@@ -8,16 +8,16 @@
|
|
8
8
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
9
9
|
<ul class="navbar-nav me-auto">
|
10
10
|
<li class="nav-item">
|
11
|
-
<%= link_to t(".executions"), root_path, class: ["nav-link", ("active" if
|
11
|
+
<%= link_to t(".executions"), root_path, class: ["nav-link", ("active" if controller_name == 'executions')] %>
|
12
12
|
</li>
|
13
13
|
<li class="nav-item">
|
14
|
-
<%= link_to t(".jobs"), jobs_path, class: ["nav-link", ("active" if
|
14
|
+
<%= link_to t(".jobs"), jobs_path, class: ["nav-link", ("active" if controller_name == 'jobs')] %>
|
15
15
|
</li>
|
16
16
|
<li class="nav-item">
|
17
|
-
<%= link_to t(".cron_schedules"), cron_entries_path, class: ["nav-link", ("active" if
|
17
|
+
<%= link_to t(".cron_schedules"), cron_entries_path, class: ["nav-link", ("active" if controller_name == 'cron_entries')] %>
|
18
18
|
</li>
|
19
19
|
<li class="nav-item">
|
20
|
-
<%= link_to t(".processes"), processes_path, class: ["nav-link", ("active" if
|
20
|
+
<%= link_to t(".processes"), processes_path, class: ["nav-link", ("active" if controller_name == 'processes')] %>
|
21
21
|
</li>
|
22
22
|
</ul>
|
23
23
|
<div class="nav-item pe-2">
|
@@ -18,14 +18,16 @@
|
|
18
18
|
<%= javascript_include_tag rails_ujs_url(format: :js, v: GoodJob::VERSION), nonce: true %>
|
19
19
|
</head>
|
20
20
|
<body>
|
21
|
-
|
21
|
+
<div class="d-flex flex-column min-vh-100">
|
22
|
+
<%= render "good_job/shared/navbar" %>
|
22
23
|
|
23
|
-
|
24
|
-
|
24
|
+
<div class="container-fluid flex-grow-1">
|
25
|
+
<%= render "good_job/shared/alert" %>
|
25
26
|
|
26
|
-
|
27
|
-
|
27
|
+
<%= yield %>
|
28
|
+
</div>
|
28
29
|
|
29
30
|
<%= render "good_job/shared/footer" %>
|
31
|
+
</div>
|
30
32
|
</body>
|
31
33
|
</html>
|
@@ -45,9 +45,9 @@ en:
|
|
45
45
|
last_update_html: Last updated <time id="page-updated-at" datetime="%{time}">%{time}</time>
|
46
46
|
wording: Remember, you're doing a Good Job too!
|
47
47
|
navbar:
|
48
|
-
cron_schedules: Cron
|
49
|
-
executions:
|
50
|
-
jobs:
|
48
|
+
cron_schedules: Cron
|
49
|
+
executions: Executions
|
50
|
+
jobs: Jobs
|
51
51
|
live_poll: Live Poll
|
52
52
|
name: "GoodJob 👍"
|
53
53
|
processes: Processes
|
@@ -45,7 +45,7 @@ es:
|
|
45
45
|
last_update_html: Última actualización <time id="page-updated-at" datetime="%{time}">%{time}</time>
|
46
46
|
wording: "¡Recuerda, también tú estás haciendo un buen trabajo!"
|
47
47
|
navbar:
|
48
|
-
cron_schedules:
|
48
|
+
cron_schedules: Cron
|
49
49
|
executions: Ejecuciones
|
50
50
|
jobs: Tareas
|
51
51
|
live_poll: En vivo
|
@@ -45,9 +45,9 @@ nl:
|
|
45
45
|
last_update_html: Laatst bijgewerkt <time id="page-updated-at" datetime="%{time}">%{time}</time>
|
46
46
|
wording: 'Onthoud: jij levert ook goed werk!'
|
47
47
|
navbar:
|
48
|
-
cron_schedules: Cron
|
49
|
-
executions:
|
50
|
-
jobs:
|
48
|
+
cron_schedules: Cron
|
49
|
+
executions: Uitvoeringen
|
50
|
+
jobs: Taken
|
51
51
|
live_poll: Live Poll
|
52
52
|
name: "GoodJob 👍"
|
53
53
|
processes: Processen
|
@@ -3,40 +3,64 @@ ru:
|
|
3
3
|
datetime:
|
4
4
|
distance_in_words:
|
5
5
|
about_x_hours:
|
6
|
+
few: около %{count} часов
|
7
|
+
many: около %{count} часов
|
6
8
|
one: около 1 часа
|
7
|
-
other: около %{count}
|
9
|
+
other: около %{count} часа
|
8
10
|
about_x_months:
|
11
|
+
few: около %{count} месяцев
|
12
|
+
many: около %{count} месяцев
|
9
13
|
one: около 1 месяца
|
10
|
-
other: около %{count}
|
14
|
+
other: около %{count} месяца
|
11
15
|
about_x_years:
|
16
|
+
few: около %{count} лет
|
17
|
+
many: около %{count} лет
|
12
18
|
one: около 1 года
|
13
19
|
other: около %{count} лет
|
14
20
|
almost_x_years:
|
21
|
+
few: почти %{count} года
|
22
|
+
many: почти %{count} лет
|
15
23
|
one: почти 1 год
|
16
|
-
other: почти %{count}
|
17
|
-
half_a_minute:
|
24
|
+
other: почти %{count} лет
|
25
|
+
half_a_minute: полминуты
|
18
26
|
less_than_x_minutes:
|
27
|
+
few: меньше %{count} минут
|
28
|
+
many: меньше %{count} минут
|
19
29
|
one: меньше 1 минуты
|
20
|
-
other: меньше %{count}
|
30
|
+
other: меньше %{count} минуты
|
21
31
|
less_than_x_seconds:
|
32
|
+
few: меньше %{count} секунд
|
33
|
+
many: меньше %{count} секунд
|
22
34
|
one: меньше 1 секунды
|
23
|
-
other: меньше %{count}
|
35
|
+
other: меньше %{count} секунды
|
24
36
|
over_x_years:
|
37
|
+
few: больше %{count} лет
|
38
|
+
many: больше %{count} лет
|
25
39
|
one: больше 1 года
|
26
40
|
other: больше %{count} лет
|
27
41
|
x_days:
|
42
|
+
few: "%{count} дня"
|
43
|
+
many: "%{count} дней"
|
28
44
|
one: 1 день
|
29
|
-
other: "%{count}
|
45
|
+
other: "%{count} дня"
|
30
46
|
x_minutes:
|
31
|
-
|
32
|
-
|
47
|
+
few: "%{count} минуты"
|
48
|
+
many: "%{count} минут"
|
49
|
+
one: 1 минуту
|
50
|
+
other: "%{count} минуты"
|
33
51
|
x_months:
|
52
|
+
few: "%{count} месяца"
|
53
|
+
many: "%{count} месяцев"
|
34
54
|
one: 1 месяц
|
35
55
|
other: "%{count} месяца"
|
36
56
|
x_seconds:
|
37
|
-
|
38
|
-
|
57
|
+
few: "%{count} секунды"
|
58
|
+
many: "%{count} секунд"
|
59
|
+
one: 1 секунду
|
60
|
+
other: "%{count} секунды"
|
39
61
|
x_years:
|
62
|
+
few: "%{count} года"
|
63
|
+
many: "%{count} лет"
|
40
64
|
one: 1 год
|
41
65
|
other: "%{count} года"
|
42
66
|
good_job:
|
@@ -45,9 +69,9 @@ ru:
|
|
45
69
|
last_update_html: Последнее обновление <time id="page-updated-at" datetime="%{time}">%{time}</time>
|
46
70
|
wording: Запомни, ты делаешь Good Job тоже!
|
47
71
|
navbar:
|
48
|
-
cron_schedules: Cron
|
49
|
-
executions:
|
50
|
-
jobs:
|
72
|
+
cron_schedules: Cron
|
73
|
+
executions: Исполнения
|
74
|
+
jobs: Задачи
|
51
75
|
live_poll: Живой Опрос
|
52
76
|
name: "GoodJob 👍"
|
53
77
|
processes: Процессы
|
data/lib/good_job/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: good_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Sheldon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-04-
|
11
|
+
date: 2022-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activejob
|