diff --git a/public/dashboard.js b/public/dashboard.js index 952456b0..4f208ec4 100644 --- a/public/dashboard.js +++ b/public/dashboard.js @@ -519,4 +519,31 @@ $(document).ready(() => { $(this).prop('disabled', false); } }); + + $('.js-remove-rate-limit-key').on('click', function (e) { + e.preventDefault(); + const queueName = $(this).data('queue-name'); + const queueHost = $(this).data('queue-host'); + + const response = window.confirm( + `Are you sure you want to remove the Rate Limit key for the queue "${queueHost}/${queueName}"?` + ); + if (response) { + $.ajax({ + method: 'DELETE', + url: `${basePath}/api/queue/${encodeURIComponent( + queueHost + )}/${encodeURIComponent(queueName)}/rate-limit-key`, + }) + .done(() => { + window.location.reload(); + }) + .fail((jqXHR) => { + window.alert(`Request failed, check console for error.`); + console.error(jqXHR.responseText); + }); + } else { + $(this).prop('disabled', false); + } + }); }); diff --git a/screenshots/screen1.png b/screenshots/screen1.png index 20ac5e72..f02b51a1 100644 Binary files a/screenshots/screen1.png and b/screenshots/screen1.png differ diff --git a/screenshots/screen1_sm.png b/screenshots/screen1_sm.png index b438017d..a1b51685 100644 Binary files a/screenshots/screen1_sm.png and b/screenshots/screen1_sm.png differ diff --git a/src/server/views/api/index.js b/src/server/views/api/index.js index d340ec21..f048ae9c 100644 --- a/src/server/views/api/index.js +++ b/src/server/views/api/index.js @@ -15,6 +15,7 @@ const bulkJobsRetry = require('./bulkJobsRetry'); const queuePause = require('./queuePause'); const queueResume = require('./queueResume'); const queueUpdateMeta = require('./queueUpdateMeta'); +const queueRemoveRateLimitKey = require('./queueRemoveRateLimitKey'); router.post('/queue/:queueHost/:queueName/job', jobAdd); router.post('/flow/:flowHost/:connectionName/flow', addFlow); @@ -34,5 +35,9 @@ router.put('/queue/:queueHost/:queueName/resume', queueResume); router.put('/queue/:queueHost/:queueName/update-meta', queueUpdateMeta); router.delete('/queue/:queueHost/:queueName/job/:id', jobRemove); router.delete('/queue/:queueHost/:queueName/jobs/bulk', bulkJobsClean); +router.delete( + '/queue/:queueHost/:queueName/rate-limit-key', + queueRemoveRateLimitKey +); module.exports = router; diff --git a/src/server/views/api/queueRemoveRateLimitKey.js b/src/server/views/api/queueRemoveRateLimitKey.js new file mode 100644 index 00000000..fdbd4c10 --- /dev/null +++ b/src/server/views/api/queueRemoveRateLimitKey.js @@ -0,0 +1,17 @@ +async function handler(req, res) { + const {queueName, queueHost} = req.params; + + const {Queues} = req.app.locals; + + const queue = await Queues.get(queueName, queueHost); + if (!queue) return res.status(404).json({error: 'queue not found'}); + + try { + await queue.removeRateLimitKey(); + } catch (err) { + return res.status(500).json({error: err.message}); + } + return res.sendStatus(200); +} + +module.exports = handler; diff --git a/src/server/views/dashboard/queueDetails.js b/src/server/views/dashboard/queueDetails.js index 410dbf29..1211e769 100644 --- a/src/server/views/dashboard/queueDetails.js +++ b/src/server/views/dashboard/queueDetails.js @@ -15,7 +15,7 @@ async function handler(req, res) { hasFlows: Flows.hasFlows(), }); - let jobCounts, isPaused, globalConfig; + let jobCounts, hasRateLimitTtl, isPaused, globalConfig; if (queue.IS_BEE) { jobCounts = await queue.checkHealth(); delete jobCounts.newestJob; @@ -31,6 +31,12 @@ async function handler(req, res) { } else { jobCounts = await queue.getJobCounts(); } + + if (queue.IS_BULLMQ) { + const rateLimitTtl = await queue.getRateLimitTtl(); + hasRateLimitTtl = rateLimitTtl > 0; + } + const stats = await QueueHelpers.getStats(queue); if (!queue.IS_BEE) { @@ -39,6 +45,7 @@ async function handler(req, res) { return res.render('dashboard/templates/queueDetails', { basePath, + hasRateLimitTtl, isPaused, queueName, queueHost, diff --git a/src/server/views/dashboard/templates/queueDetails.hbs b/src/server/views/dashboard/templates/queueDetails.hbs index 19b5c773..331d15e3 100644 --- a/src/server/views/dashboard/templates/queueDetails.hbs +++ b/src/server/views/dashboard/templates/queueDetails.hbs @@ -14,6 +14,15 @@ {{/if}} {{/unless}} +{{#if queueIsBullMQ}} +{{#if hasRateLimitTtl}} + +{{/if}} +{{/if}} +