Skip to content

Commit e41dfb8

Browse files
authored
feat(bullmq): support ignored children (#682)
1 parent 7448d63 commit e41dfb8

File tree

8 files changed

+1809
-16
lines changed

8 files changed

+1809
-16
lines changed

example/bullmq_with_flows.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,26 @@ async function main() {
5757
queueName: parentQueueName,
5858
data: {},
5959
children: [
60-
{name: 'child', data: {idx: 0, foo: 'bar'}, queueName},
61-
{name: 'child', data: {idx: 1, foo: 'baz'}, queueName},
60+
{
61+
name: 'child',
62+
data: {idx: 0, foo: 'bar'},
63+
queueName,
64+
opts: {
65+
ignoreDependencyOnFailure: true,
66+
removeOnComplete: true,
67+
removeOnFail: true,
68+
},
69+
},
70+
{
71+
name: 'child',
72+
data: {idx: 1, foo: 'baz'},
73+
queueName,
74+
opts: {
75+
failParentOnFailure: true,
76+
removeOnComplete: true,
77+
removeOnFail: true,
78+
},
79+
},
6280
{name: 'child', data: {idx: 2, foo: 'qux'}, queueName},
6381
],
6482
});

example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"@fastify/express": "^2.3.0",
2121
"bee-queue": "^1.4.0",
2222
"bull": "^4.12.4",
23-
"bullmq": "^4.8.0",
23+
"bullmq": "^5.51.0",
2424
"express": "^4.17.1",
2525
"fastify": "^4.13.0"
2626
}

example/yarn.lock

Lines changed: 1733 additions & 0 deletions
Large diffs are not rendered by default.

public/dashboard.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,15 @@ $(document).ready(() => {
77

88
function formatToTreeView(flow, flowHost) {
99
const {job, children} = flow;
10+
if (!job) {
11+
return {};
12+
}
1013
const text = `${job.name} <a href="${basePath}/${encodeURIComponent(
1114
flowHost
1215
)}/${encodeURIComponent(job.queueName)}/${
1316
job.id
1417
}"><span class="label label-default">${job.id}</span></a>`;
1518

16-
const href = `${basePath}/${encodeURIComponent(
17-
flowHost
18-
)}/${encodeURIComponent(job.queueName)}/${job.id}`;
19-
2019
if (children && children.length > 0) {
2120
return {
2221
text,

src/server/views/dashboard/jobDetails.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,29 @@ async function handler(req, res) {
4949
job.parent = JobHelpers.getKeyProperties(job.parentKey);
5050
const processedCursor = parseInt(req.query.processedCursor, 10) || 0;
5151
const processedCount = parseInt(req.query.processedCount, 10) || 25;
52+
const ignoredCursor = parseInt(req.query.ignoredCursor, 10) || 0;
53+
const ignoredCount = parseInt(req.query.ignoredCount, 10) || 25;
5254
const unprocessedCursor = parseInt(req.query.unprocessedCursor, 10) || 0;
5355
const unprocessedCount = parseInt(req.query.unprocessedCount, 10) || 25;
5456
job.processedCount = processedCount;
5557
job.unprocessedCount = unprocessedCount;
56-
58+
job.ignoredCount = ignoredCount;
5759
const {
58-
processed,
59-
unprocessed,
60+
processed = {},
61+
ignored = {},
62+
unprocessed = [],
6063
nextProcessedCursor,
64+
nextIgnoredCursor,
6165
nextUnprocessedCursor,
6266
} = await job.getDependencies({
6367
processed: {
6468
cursor: processedCursor,
6569
count: processedCount,
6670
},
71+
ignored: {
72+
cursor: ignoredCursor,
73+
count: ignoredCount,
74+
},
6775
unprocessed: {
6876
cursor: unprocessedCursor,
6977
count: unprocessedCount,
@@ -73,16 +81,24 @@ async function handler(req, res) {
7381
job.countDependencies = count;
7482

7583
job.processedCursor = nextProcessedCursor;
84+
job.ignoredCursor = nextIgnoredCursor;
7685
job.unprocessedCursor = nextUnprocessedCursor;
7786
if (unprocessed && unprocessed.length) {
7887
job.unprocessedChildren = unprocessed.map((child) => {
7988
return JobHelpers.getKeyProperties(child);
8089
});
8190
}
8291

83-
if (processed) {
84-
const childrenKeys = Object.keys(processed);
85-
job.processedChildren = childrenKeys.map((child) => {
92+
const processedKeys = Object.keys(processed);
93+
if (processedKeys.length) {
94+
job.processedChildren = processedKeys.map((child) => {
95+
return JobHelpers.getKeyProperties(child);
96+
});
97+
}
98+
99+
const ignoredKeys = Object.keys(ignored);
100+
if (ignoredKeys.length) {
101+
job.ignoredChildren = ignoredKeys.map((child) => {
86102
return JobHelpers.getKeyProperties(child);
87103
});
88104
}

src/server/views/dashboard/templates/queueJobsByState.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<li {{#eq currentPage 1}} class="disabled">
1111
<span>&laquo;</span>
1212
{{else}}
13-
><a
13+
<a
1414
href="{{ basePath }}/{{ encodeURI queueHost }}/{{ encodeURI queueName }}/{{ state }}?page={{ subtract currentPage 1 }}&amp;pageSize={{ pageSize }}&amp;order={{ order }}"
1515
aria-label="Previous">
1616
<span aria-hidden="true">&laquo;</span>

src/server/views/helpers/flowHelpers.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
const Helpers = {
22
processFlow: function (flow) {
3+
if (!flow) return {};
34
const {job, children} = flow;
5+
const filteredChildren = children.filter((child) => child);
46
const queueName = job.queueName;
57

6-
if (children && children.length > 0) {
8+
if (filteredChildren && filteredChildren.length > 0) {
79
return {
810
job: {...job, queueName},
9-
children: children.map((child) => this.processFlow(child)),
11+
children: filteredChildren.map((child) => this.processFlow(child)),
1012
};
1113
} else {
1214
return {

src/server/views/partials/dashboard/jobDetails.hbs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,31 @@
227227
</div>
228228
</div>
229229
{{/if}}
230+
231+
{{#if this.ignoredChildren }}
232+
<div class="row">
233+
<div class="col-sm-12">
234+
<h5>Ignored Children <span class="count">{{ this.countDependencies.ignored}}</span></h5>
235+
236+
<nav aria-label="Ignored navigation">
237+
<ul class="pagination">
238+
<li><a
239+
href="{{ basePath }}/{{ encodeURI queueHost }}/{{ encodeURI queueName }}/{{ encodeURI this.id }}?ignoredCursor={{ this.ignoredCursor }}&amp;ignoredCount={{ this.ignoredCount }}"
240+
aria-label="Previous">
241+
<span aria-hidden="true">&raquo;</span>
242+
</a>
243+
</li>
244+
</ul>
245+
</nav>
246+
247+
{{#each this.ignoredChildren}}
248+
<a href="{{ ../basePath }}/{{ encodeURI ../queueHost }}/{{ encodeURI this.queueName }}/{{ encodeURI this.id }}">
249+
<span class="label label-warning">{{ this.id }}</span>
250+
</a>
251+
{{/each}}
252+
</div>
253+
</div>
254+
{{/if}}
230255
<br>
231256
{{/if}}
232257

0 commit comments

Comments
 (0)