good_job 4.4.1 → 4.4.2
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 +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +5 -5
- data/app/charts/good_job/performance_index_chart.rb +3 -0
- data/app/frontend/good_job/modules/charts.js +12 -0
- data/app/frontend/good_job/modules/html_legend_plugin.js +56 -0
- data/app/frontend/good_job/style.css +13 -0
- data/app/views/good_job/jobs/index.html.erb +1 -1
- data/app/views/good_job/performance/index.html.erb +1 -1
- data/app/views/good_job/performance/show.html.erb +1 -1
- data/app/views/good_job/shared/_chart.erb +2 -2
- data/app/views/good_job/shared/_chart_container.erb +21 -0
- data/lib/good_job/capsule_tracker.rb +1 -18
- data/lib/good_job/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f7a4560e3e97c78d26ea5045bbd6de6d378191a52873be4f213d886f80bdf29c
|
|
4
|
+
data.tar.gz: 98cc8a6958a69898966efe296339bfc22130c75d6700ad80934e60948f864861
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1e1479d596427c82a6ed2b683aa0e8e171e20ab52b3591b49e757efd54b9ad5651c6a10643a42e3838c1042c2d17d96070d30888ceabff19b809185009c93e88
|
|
7
|
+
data.tar.gz: '0784732d866e3954803d23758a320d68adcd6ad9da30413419c514ffa5ea68a40dd3652eabd3847b24563814b2a37a48e1b55f2d8358a940daacbc6353fe8171'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v4.4.2](https://github.com/bensheldon/good_job/tree/v4.4.2) (2024-10-18)
|
|
4
|
+
|
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v4.4.1...v4.4.2)
|
|
6
|
+
|
|
7
|
+
**Merged pull requests:**
|
|
8
|
+
|
|
9
|
+
- Bump rails from 7.1.4 to 7.1.4.1 [\#1524](https://github.com/bensheldon/good_job/pull/1524) ([Earlopain](https://github.com/Earlopain))
|
|
10
|
+
- Drop compatibility code for `ForkTracker` [\#1519](https://github.com/bensheldon/good_job/pull/1519) ([Earlopain](https://github.com/Earlopain))
|
|
11
|
+
- Add vertical legend to performance dashboard [\#1517](https://github.com/bensheldon/good_job/pull/1517) ([Wittiest](https://github.com/Wittiest))
|
|
12
|
+
- Bump the bundler-dependencies group across 1 directory with 10 updates [\#1515](https://github.com/bensheldon/good_job/pull/1515) ([dependabot[bot]](https://github.com/apps/dependabot))
|
|
13
|
+
- Manually bump tapioca / regenerate rbi [\#1514](https://github.com/bensheldon/good_job/pull/1514) ([Earlopain](https://github.com/Earlopain))
|
|
14
|
+
- Remove rack from the gemfile [\#1512](https://github.com/bensheldon/good_job/pull/1512) ([Earlopain](https://github.com/Earlopain))
|
|
15
|
+
- Add regression test for searchable numeric arguments [\#1510](https://github.com/bensheldon/good_job/pull/1510) ([bensheldon](https://github.com/bensheldon))
|
|
16
|
+
- Better parallelize CI jobs [\#1507](https://github.com/bensheldon/good_job/pull/1507) ([Earlopain](https://github.com/Earlopain))
|
|
17
|
+
- Bump webrick from 1.8.1 to 1.8.2 [\#1503](https://github.com/bensheldon/good_job/pull/1503) ([dependabot[bot]](https://github.com/apps/dependabot))
|
|
18
|
+
|
|
3
19
|
## [v4.4.1](https://github.com/bensheldon/good_job/tree/v4.4.1) (2024-10-10)
|
|
4
20
|
|
|
5
21
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v4.4.0...v4.4.1)
|
data/README.md
CHANGED
|
@@ -1715,14 +1715,14 @@ Environment variables that may help with debugging:
|
|
|
1715
1715
|
- `LOUD=1`: display all stdout/stderr output from all sources. This is helpful because GoodJob wraps some tests with `quiet { }` for cleaner test output, but it can hinder debugging.
|
|
1716
1716
|
- `SHOW_BROWSER=1`: Run system tests headfully with Chrome/Chromedriver. Use `binding.irb` in the system tests to pause.
|
|
1717
1717
|
|
|
1718
|
-
|
|
1718
|
+
The gemfiles in `gemfiles/` can be used to run tests against different rails versions:
|
|
1719
1719
|
|
|
1720
1720
|
```bash
|
|
1721
|
-
# Install
|
|
1722
|
-
|
|
1721
|
+
# Install dependencies
|
|
1722
|
+
BUNDLE_GEMFILE=gemfiles/rails_6.1.gemfile bundle install
|
|
1723
1723
|
|
|
1724
|
-
# Run tests
|
|
1725
|
-
|
|
1724
|
+
# Run the tests
|
|
1725
|
+
BUNDLE_GEMFILE=gemfiles/rails_6.1.gemfile bin/rspec
|
|
1726
1726
|
```
|
|
1727
1727
|
|
|
1728
1728
|
### Release
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import htmlLegendPlugin from "html_legend_plugin";
|
|
2
|
+
|
|
1
3
|
function renderCharts(animate) {
|
|
2
4
|
const charts = document.querySelectorAll('.chart');
|
|
3
5
|
|
|
@@ -5,6 +7,16 @@ function renderCharts(animate) {
|
|
|
5
7
|
const chartEl = charts[i];
|
|
6
8
|
const chartData = JSON.parse(chartEl.dataset.json);
|
|
7
9
|
chartData.options ||= {};
|
|
10
|
+
|
|
11
|
+
if (chartData.options.plugins?.legend?.vertical) {
|
|
12
|
+
chartData.plugins = [htmlLegendPlugin];
|
|
13
|
+
chartData.options.plugins = {
|
|
14
|
+
...chartData.options.plugins,
|
|
15
|
+
legend: {
|
|
16
|
+
display: false,
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
8
20
|
chartData.options.animation = animate;
|
|
9
21
|
chartData.options.responsive = true;
|
|
10
22
|
chartData.options.maintainAspectRatio = false;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const generateListItem = (item) => {
|
|
2
|
+
const li = document.createElement('li');
|
|
3
|
+
li.className = 'd-flex align-items-center text-nowrap mb-2';
|
|
4
|
+
|
|
5
|
+
const boxSpan = document.createElement('span');
|
|
6
|
+
boxSpan.className = 'legend-item-color-box';
|
|
7
|
+
boxSpan.style.background = item.fillStyle;
|
|
8
|
+
boxSpan.style.borderColor = item.strokeStyle;
|
|
9
|
+
boxSpan.style.borderWidth = item.lineWidth + 'px';
|
|
10
|
+
|
|
11
|
+
const textContainer = document.createElement('p');
|
|
12
|
+
textContainer.className = 'item-text m-0 small';
|
|
13
|
+
textContainer.style.color = item.fontColor;
|
|
14
|
+
textContainer.style.textDecoration = item.hidden ? 'line-through' : '';
|
|
15
|
+
|
|
16
|
+
const text = document.createTextNode(item.text);
|
|
17
|
+
textContainer.appendChild(text);
|
|
18
|
+
|
|
19
|
+
li.appendChild(boxSpan);
|
|
20
|
+
li.appendChild(textContainer);
|
|
21
|
+
|
|
22
|
+
return li;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const htmlLegendPlugin = {
|
|
26
|
+
id: 'htmlLegend',
|
|
27
|
+
afterUpdate(chart, _args, _options) {
|
|
28
|
+
const {type} = chart.config;
|
|
29
|
+
const ul = document.getElementById('chart-legend-ul');
|
|
30
|
+
|
|
31
|
+
// Remove old legend items
|
|
32
|
+
while (ul.firstChild) {
|
|
33
|
+
ul.firstChild.remove();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Reuse the built-in legendItems generator
|
|
37
|
+
const items = chart.options.plugins.legend.labels.generateLabels(chart);
|
|
38
|
+
|
|
39
|
+
items.forEach(item => {
|
|
40
|
+
const li = generateListItem(item);
|
|
41
|
+
ul.appendChild(li);
|
|
42
|
+
|
|
43
|
+
li.onclick = () => {
|
|
44
|
+
if (type === 'pie' || type === 'doughnut') {
|
|
45
|
+
// Pie and doughnut charts only have a single dataset and visibility is per item
|
|
46
|
+
chart.toggleDataVisibility(item.index);
|
|
47
|
+
} else {
|
|
48
|
+
chart.setDatasetVisibility(item.datasetIndex, !chart.isDatasetVisible(item.datasetIndex));
|
|
49
|
+
}
|
|
50
|
+
chart.update();
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export { htmlLegendPlugin as default };
|
|
@@ -24,6 +24,19 @@
|
|
|
24
24
|
height: 200px;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
.legend-item-color-box {
|
|
28
|
+
display: inline-block;
|
|
29
|
+
flex-shrink: 0;
|
|
30
|
+
height: 20px;
|
|
31
|
+
width: 20px;
|
|
32
|
+
border-style: solid;
|
|
33
|
+
margin-right: 3px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
#chart-legend-container {
|
|
37
|
+
height: 200px;
|
|
38
|
+
}
|
|
39
|
+
|
|
27
40
|
/* Break out of a container */
|
|
28
41
|
.break-out {
|
|
29
42
|
width:100vw;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<%= render 'good_job/shared/filter', title: t("good_job.shared.navbar.jobs"), filter: @filter %>
|
|
2
|
-
<%= render 'good_job/shared/
|
|
2
|
+
<%= render 'good_job/shared/chart_container', chart_data: GoodJob::ScheduledByQueueChart.new(@filter).data %>
|
|
3
3
|
|
|
4
4
|
<div data-live-poll-region="jobs-table">
|
|
5
5
|
<%= render 'good_job/jobs/table', jobs: @filter.records, filter: @filter %>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<h2 class="pt-3 pb-2"><%= t ".title" %></h2>
|
|
3
3
|
</div>
|
|
4
4
|
|
|
5
|
-
<%= render 'good_job/shared/
|
|
5
|
+
<%= render 'good_job/shared/chart_container', chart_data: GoodJob::PerformanceIndexChart.new.data %>
|
|
6
6
|
|
|
7
7
|
<div class="my-3 card">
|
|
8
8
|
<div class="list-group list-group-flush text-nowrap" role="table">
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
<h2 class="pt-3 pb-2"><%= t ".title" %> - <%= @job_class %></h2>
|
|
3
3
|
</div>
|
|
4
4
|
|
|
5
|
-
<%= render 'good_job/shared/
|
|
5
|
+
<%= render 'good_job/shared/chart_container', chart_data: GoodJob::PerformanceShowChart.new(@job_class).data %>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<% vertical_legend = chart_data.dig(:options, :plugins, :legend, :vertical) %>
|
|
2
|
+
|
|
3
|
+
<div class="container-fluid">
|
|
4
|
+
<div class="row d-flex">
|
|
5
|
+
<% if vertical_legend %>
|
|
6
|
+
<div class="row d-flex">
|
|
7
|
+
<div class="col-md-10">
|
|
8
|
+
<%= render 'good_job/shared/chart', chart_data: chart_data %>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="col-md-2 d-flex flex-column">
|
|
11
|
+
<div id="chart-legend-container" class="flex-fill overflow-auto">
|
|
12
|
+
<ul id="chart-legend-ul" class="list-unstyled p-0 mx-0 py-2">
|
|
13
|
+
</ul>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
<% else %>
|
|
18
|
+
<%= render 'good_job/shared/chart', chart_data: chart_data %>
|
|
19
|
+
<% end %>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
@@ -32,15 +32,7 @@ module GoodJob # :nodoc:
|
|
|
32
32
|
@record = nil
|
|
33
33
|
@refresh_task = nil
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
# Fall back to PID checking if ForkTracker is not available
|
|
37
|
-
if defined?(ActiveSupport::ForkTracker)
|
|
38
|
-
ActiveSupport::ForkTracker.after_fork { reset }
|
|
39
|
-
@forktracker = true
|
|
40
|
-
else
|
|
41
|
-
@ruby_pid = ::Process.pid
|
|
42
|
-
@forktracker = false
|
|
43
|
-
end
|
|
35
|
+
ActiveSupport::ForkTracker.after_fork { reset }
|
|
44
36
|
|
|
45
37
|
self.class.instances << self
|
|
46
38
|
end
|
|
@@ -53,7 +45,6 @@ module GoodJob # :nodoc:
|
|
|
53
45
|
synchronize do
|
|
54
46
|
next if @locks.zero?
|
|
55
47
|
|
|
56
|
-
reset_on_fork
|
|
57
48
|
if @record
|
|
58
49
|
@record.refresh_if_stale
|
|
59
50
|
else
|
|
@@ -204,14 +195,6 @@ module GoodJob # :nodoc:
|
|
|
204
195
|
synchronize { ns_reset }
|
|
205
196
|
end
|
|
206
197
|
|
|
207
|
-
def reset_on_fork
|
|
208
|
-
return if Concurrent.on_jruby?
|
|
209
|
-
return if @forktracker || ::Process.pid == @ruby_pid
|
|
210
|
-
|
|
211
|
-
@ruby_pid = ::Process.pid
|
|
212
|
-
ns_reset
|
|
213
|
-
end
|
|
214
|
-
|
|
215
198
|
def ns_reset
|
|
216
199
|
@record_id = SecureRandom.uuid
|
|
217
200
|
@record = nil
|
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: 4.4.
|
|
4
|
+
version: 4.4.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Sheldon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-10-
|
|
11
|
+
date: 2024-10-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activejob
|
|
@@ -269,6 +269,7 @@ files:
|
|
|
269
269
|
- app/frontend/good_job/modules/charts.js
|
|
270
270
|
- app/frontend/good_job/modules/checkbox_toggle.js
|
|
271
271
|
- app/frontend/good_job/modules/document_ready.js
|
|
272
|
+
- app/frontend/good_job/modules/html_legend_plugin.js
|
|
272
273
|
- app/frontend/good_job/modules/live_poll.js
|
|
273
274
|
- app/frontend/good_job/modules/popovers.js
|
|
274
275
|
- app/frontend/good_job/modules/theme_controller.js
|
|
@@ -315,6 +316,7 @@ files:
|
|
|
315
316
|
- app/views/good_job/processes/index.html.erb
|
|
316
317
|
- app/views/good_job/shared/_alert.erb
|
|
317
318
|
- app/views/good_job/shared/_chart.erb
|
|
319
|
+
- app/views/good_job/shared/_chart_container.erb
|
|
318
320
|
- app/views/good_job/shared/_filter.erb
|
|
319
321
|
- app/views/good_job/shared/_footer.erb
|
|
320
322
|
- app/views/good_job/shared/_navbar.erb
|